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;