From f5a80e379942df9d2ae9dc53534cb0b776707056 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Fri, 31 May 2019 15:40:55 +0800 Subject: [PATCH] =?UTF-8?q?onNoneReader=E4=BA=8B=E4=BB=B6=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E9=87=8D=E5=A4=8D=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MediaFile/MediaReader.cpp | 2 +- src/Player/PlayerProxy.cpp | 2 +- src/Rtmp/RtmpSession.cpp | 18 ++++++++++++++++++ src/Rtmp/RtmpSession.h | 10 ++-------- src/Rtsp/RtspSession.cpp | 12 +++++++++++- src/Rtsp/RtspSession.h | 4 +++- 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/MediaFile/MediaReader.cpp b/src/MediaFile/MediaReader.cpp index 2f9641c3..ebbfb9f6 100644 --- a/src/MediaFile/MediaReader.cpp +++ b/src/MediaFile/MediaReader.cpp @@ -181,7 +181,7 @@ bool MediaReader::close(MediaSource &sender,bool force){ } void MediaReader::onNoneReader(MediaSource &sender) { - if(_mediaMuxer->readerCount() != 0){ + if(!_mediaMuxer || _mediaMuxer->readerCount() != 0){ return; } MediaSourceEvent::onNoneReader(sender); diff --git a/src/Player/PlayerProxy.cpp b/src/Player/PlayerProxy.cpp index c83abfc5..6dbd10d3 100644 --- a/src/Player/PlayerProxy.cpp +++ b/src/Player/PlayerProxy.cpp @@ -167,7 +167,7 @@ bool PlayerProxy::close(MediaSource &sender,bool force) { } void PlayerProxy::onNoneReader(MediaSource &sender) { - if(_mediaMuxer->readerCount() != 0){ + if(!_mediaMuxer || _mediaMuxer->readerCount() != 0){ return; } MediaSourceEvent::onNoneReader(sender); diff --git a/src/Rtmp/RtmpSession.cpp b/src/Rtmp/RtmpSession.cpp index 4c1022d6..10f76773 100644 --- a/src/Rtmp/RtmpSession.cpp +++ b/src/Rtmp/RtmpSession.cpp @@ -490,4 +490,22 @@ void RtmpSession::onSendMedia(const RtmpPacket::Ptr &pkt) { } +bool RtmpSession::close(MediaSource &sender,bool force) { + //此回调在其他线程触发 + if(!_pPublisherSrc || (!force && _pPublisherSrc->readerCount() != 0)){ + return false; + } + string err = StrPrinter << "close media:" << sender.getSchema() << "/" << sender.getVhost() << "/" << sender.getApp() << "/" << sender.getId() << " " << force; + safeShutdown(SockException(Err_shutdown,err)); + return true; +} + +void RtmpSession::onNoneReader(MediaSource &sender) { + //此回调在其他线程触发 + if(!_pPublisherSrc || _pPublisherSrc->readerCount() != 0){ + return; + } + MediaSourceEvent::onNoneReader(sender); +} + } /* namespace mediakit */ diff --git a/src/Rtmp/RtmpSession.h b/src/Rtmp/RtmpSession.h index 58490c1c..c6f1d858 100644 --- a/src/Rtmp/RtmpSession.h +++ b/src/Rtmp/RtmpSession.h @@ -81,14 +81,8 @@ private: sendResponse(MSG_CMD, invoke.data()); } - bool close(MediaSource &sender,bool force) override { - if(!force && _pPublisherSrc->readerCount() != 0){ - return false; - } - string err = StrPrinter << "close media:" << sender.getSchema() << "/" << sender.getVhost() << "/" << sender.getApp() << "/" << sender.getId() << " " << force; - safeShutdown(SockException(Err_shutdown,err)); - return true; - } + bool close(MediaSource &sender,bool force) override ; + void onNoneReader(MediaSource &sender) override; private: std::string _strTcUrl; MediaInfo _mediaInfo; diff --git a/src/Rtsp/RtspSession.cpp b/src/Rtsp/RtspSession.cpp index f1b96ac1..214659cb 100644 --- a/src/Rtsp/RtspSession.cpp +++ b/src/Rtsp/RtspSession.cpp @@ -1089,7 +1089,8 @@ inline int RtspSession::getTrackIndexByInterleaved(int interleaved){ } bool RtspSession::close(MediaSource &sender,bool force) { - if(!force && _pushSrc->readerCount() != 0){ + //此回调在其他线程触发 + if(!_pushSrc || (!force && _pushSrc->readerCount() != 0)){ return false; } string err = StrPrinter << "close media:" << sender.getSchema() << "/" << sender.getVhost() << "/" << sender.getApp() << "/" << sender.getId() << " " << force; @@ -1098,6 +1099,15 @@ bool RtspSession::close(MediaSource &sender,bool force) { } +void RtspSession::onNoneReader(MediaSource &sender){ + //此回调在其他线程触发 + if(!_pushSrc || _pushSrc->readerCount() != 0){ + return; + } + MediaSourceEvent::onNoneReader(sender); +} + + inline void RtspSession::sendRtpPacket(const RtpPacket::Ptr & pkt) { //InfoP(this) <<(int)pkt.Interleaved; switch (_rtpType) { diff --git a/src/Rtsp/RtspSession.h b/src/Rtsp/RtspSession.h index be114166..30f42cfd 100644 --- a/src/Rtsp/RtspSession.h +++ b/src/Rtsp/RtspSession.h @@ -106,8 +106,10 @@ protected: void onRtpSorted(const RtpPacket::Ptr &rtppt, int trackidx) override; //MediaSourceEvent override bool close(MediaSource &sender,bool force) override ; + void onNoneReader(MediaSource &sender) override; - //TcpSession override + + //TcpSession override int send(const Buffer::Ptr &pkt) override;