mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-07-06 19:58:10 +08:00
整理媒体事件相关代码,删除无须重载时的多余代码逻辑
This commit is contained in:
@@ -229,14 +229,6 @@ string RtpProcess::getIdentifier() const {
|
||||
return _media_info._streamid;
|
||||
}
|
||||
|
||||
int RtpProcess::getTotalReaderCount() {
|
||||
return _muxer ? _muxer->totalReaderCount() : 0;
|
||||
}
|
||||
|
||||
void RtpProcess::setListener(const std::weak_ptr<MediaSourceEvent> &listener) {
|
||||
setDelegate(listener);
|
||||
}
|
||||
|
||||
void RtpProcess::emitOnPublish() {
|
||||
weak_ptr<RtpProcess> weak_self = shared_from_this();
|
||||
Broadcast::PublishAuthInvoker invoker = [weak_self](const string &err, const ProtocolOption &option) {
|
||||
|
||||
@@ -64,11 +64,8 @@ public:
|
||||
uint16_t get_peer_port() override;
|
||||
std::string getIdentifier() const override;
|
||||
|
||||
int getTotalReaderCount();
|
||||
void setListener(const std::weak_ptr<MediaSourceEvent> &listener);
|
||||
|
||||
void setHelper(const std::weak_ptr<RtcpContext> help);
|
||||
int getLossRate(MediaSource &sender, TrackType type) override;
|
||||
|
||||
protected:
|
||||
bool inputFrame(const Frame::Ptr &frame) override;
|
||||
bool addTrack(const Track::Ptr & track) override;
|
||||
@@ -80,6 +77,7 @@ protected:
|
||||
std::string getOriginUrl(MediaSource &sender) const override;
|
||||
std::shared_ptr<SockInfo> getOriginSock(MediaSource &sender) const override;
|
||||
toolkit::EventPoller::Ptr getOwnerPoller(MediaSource &sender) override;
|
||||
int getLossRate(MediaSource &sender, TrackType type) override;
|
||||
|
||||
private:
|
||||
void emitOnPublish();
|
||||
|
||||
@@ -131,12 +131,12 @@ RtpProcessHelper::~RtpProcessHelper() {
|
||||
|
||||
void RtpProcessHelper::attachEvent() {
|
||||
//主要目的是close回调触发时能把对象从RtpSelector中删除
|
||||
_process->setListener(shared_from_this());
|
||||
_process->setDelegate(shared_from_this());
|
||||
}
|
||||
|
||||
bool RtpProcessHelper::close(MediaSource &sender, bool force) {
|
||||
//此回调在其他线程触发
|
||||
if (!_process || (!force && _process->getTotalReaderCount())) {
|
||||
if (!_process || (!force && _process->totalReaderCount(sender))) {
|
||||
return false;
|
||||
}
|
||||
auto parent = _parent.lock();
|
||||
@@ -148,14 +148,6 @@ bool RtpProcessHelper::close(MediaSource &sender, bool force) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int RtpProcessHelper::totalReaderCount(MediaSource &sender) {
|
||||
return _process ? _process->getTotalReaderCount() : sender.totalReaderCount();
|
||||
}
|
||||
|
||||
toolkit::EventPoller::Ptr RtpProcessHelper::getOwnerPoller(MediaSource &sender) {
|
||||
return toolkit::EventPollerPool::Instance().getPoller();
|
||||
}
|
||||
|
||||
RtpProcess::Ptr &RtpProcessHelper::getProcess() {
|
||||
return _process;
|
||||
}
|
||||
|
||||
@@ -32,15 +32,11 @@ public:
|
||||
protected:
|
||||
// 通知其停止推流
|
||||
bool close(MediaSource &sender,bool force) override;
|
||||
// 观看总人数
|
||||
int totalReaderCount(MediaSource &sender) override;
|
||||
// 获取所属线程
|
||||
toolkit::EventPoller::Ptr getOwnerPoller(MediaSource &sender) override;
|
||||
|
||||
private:
|
||||
std::weak_ptr<RtpSelector > _parent;
|
||||
RtpProcess::Ptr _process;
|
||||
std::string _stream_id;
|
||||
RtpProcess::Ptr _process;
|
||||
std::weak_ptr<RtpSelector > _parent;
|
||||
};
|
||||
|
||||
class RtpSelector : public std::enable_shared_from_this<RtpSelector>{
|
||||
|
||||
@@ -101,7 +101,7 @@ void RtpSession::onRtpPacket(const char *data, size_t len) {
|
||||
}
|
||||
//tcp情况下,一个tcp链接只可能是一路流,不需要通过多个ssrc来区分,所以不需要频繁getProcess
|
||||
_process = RtpSelector::Instance().getProcess(_stream_id, true);
|
||||
_process->setListener(dynamic_pointer_cast<RtpSession>(shared_from_this()));
|
||||
_process->setDelegate(dynamic_pointer_cast<RtpSession>(shared_from_this()));
|
||||
}
|
||||
try {
|
||||
uint32_t rtp_ssrc = 0;
|
||||
@@ -126,7 +126,7 @@ void RtpSession::onRtpPacket(const char *data, size_t len) {
|
||||
|
||||
bool RtpSession::close(MediaSource &sender, bool force) {
|
||||
//此回调在其他线程触发
|
||||
if(!_process || (!force && _process->getTotalReaderCount())){
|
||||
if(!_process || (!force && static_pointer_cast<MediaSourceEvent>(_process)->totalReaderCount(sender))){
|
||||
return false;
|
||||
}
|
||||
string err = StrPrinter << "close media:" << sender.getSchema() << "/" << sender.getVhost() << "/" << sender.getApp() << "/" << sender.getId() << " " << force;
|
||||
@@ -134,15 +134,6 @@ bool RtpSession::close(MediaSource &sender, bool force) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int RtpSession::totalReaderCount(MediaSource &sender) {
|
||||
//此回调在其他线程触发
|
||||
return _process ? _process->getTotalReaderCount() : sender.totalReaderCount();
|
||||
}
|
||||
|
||||
toolkit::EventPoller::Ptr RtpSession::getOwnerPoller(MediaSource &sender) {
|
||||
return getPoller();
|
||||
}
|
||||
|
||||
static const char *findSSRC(const char *data, ssize_t len, uint32_t ssrc) {
|
||||
//rtp前面必须预留两个字节的长度字段
|
||||
for (ssize_t i = 2; i <= len - 4; ++i) {
|
||||
|
||||
@@ -36,13 +36,9 @@ public:
|
||||
protected:
|
||||
// 通知其停止推流
|
||||
bool close(MediaSource &sender,bool force) override;
|
||||
// 观看总人数
|
||||
int totalReaderCount(MediaSource &sender) override;
|
||||
// 获取所属线程
|
||||
toolkit::EventPoller::Ptr getOwnerPoller(MediaSource &sender) override;
|
||||
// 收到rtp回调
|
||||
void onRtpPacket(const char *data, size_t len) override;
|
||||
|
||||
// RtpSplitter override
|
||||
const char *onSearchPacketTail(const char *data, size_t len) override;
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user