From 928f642a27f7daae64b23807ec12cf16b0bc9e38 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Mon, 23 Sep 2019 18:56:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=B3=A8=E5=86=8Crtmp?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=EF=BC=8C=E9=98=B2=E6=AD=A2=E5=8F=8A=E6=97=B6?= =?UTF-8?q?=E6=8B=89=E6=B5=81=E4=B8=8D=E5=87=BA=E7=94=BB=E9=9D=A2=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Rtmp/RtmpMediaSource.h | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/Rtmp/RtmpMediaSource.h b/src/Rtmp/RtmpMediaSource.h index 24ece80a..5e13faae 100644 --- a/src/Rtmp/RtmpMediaSource.h +++ b/src/Rtmp/RtmpMediaSource.h @@ -86,9 +86,6 @@ public: virtual void onGetMetaData(const AMFValue &metadata) { lock_guard lock(_mtxMap); _metadata = metadata; - if(_pRing){ - regist(); - } } void onWrite(const RtmpPacket::Ptr &pkt,bool isKey = true) override { @@ -99,7 +96,6 @@ public: } _mapStamp[pkt->typeId] = pkt->timeStamp; - if(!_pRing){ weak_ptr weakSelf = dynamic_pointer_cast(shared_from_this()); _pRing = std::make_shared(_ringSize,[weakSelf](const EventPoller::Ptr &,int size,bool){ @@ -110,12 +106,16 @@ public: strongSelf->onReaderChanged(size); }); onReaderChanged(0); - if(_metadata){ - regist(); - } } - _pRing->write(pkt,pkt->isVideoKeyFrame()); - checkNoneReader(); + + if(!_registed && _metadata && _mapCfgFrame.size() >= getTrackSize()){ + //在未注册的情况下,需要获取到metadata并且获取到全部的config帧才可以注册 + _registed = true; + regist(); + } + + _pRing->write(pkt,pkt->isVideoKeyFrame()); + checkNoneReader(); } uint32_t getTimeStamp(TrackType trackType) override { @@ -149,6 +149,17 @@ private: onNoneReader(); } } + + int getTrackSize(){ + int ret = 0; + if(_metadata["videocodecid"]){ + ++ret; + } + if(_metadata["audiocodecid"]){ + ++ret; + } + return ret; + } protected: AMFValue _metadata; unordered_map _mapCfgFrame; @@ -158,6 +169,7 @@ protected: int _ringSize; Ticker _readerTicker; bool _asyncEmitNoneReader = false; + bool _registed = false; }; } /* namespace mediakit */