Commit 928f642a by xiongziliang

完善注册rtmp机制,防止及时拉流不出画面的bug

parent adfc084d
...@@ -86,9 +86,6 @@ public: ...@@ -86,9 +86,6 @@ public:
virtual void onGetMetaData(const AMFValue &metadata) { virtual void onGetMetaData(const AMFValue &metadata) {
lock_guard<recursive_mutex> lock(_mtxMap); lock_guard<recursive_mutex> lock(_mtxMap);
_metadata = metadata; _metadata = metadata;
if(_pRing){
regist();
}
} }
void onWrite(const RtmpPacket::Ptr &pkt,bool isKey = true) override { void onWrite(const RtmpPacket::Ptr &pkt,bool isKey = true) override {
...@@ -99,7 +96,6 @@ public: ...@@ -99,7 +96,6 @@ public:
} }
_mapStamp[pkt->typeId] = pkt->timeStamp; _mapStamp[pkt->typeId] = pkt->timeStamp;
if(!_pRing){ if(!_pRing){
weak_ptr<RtmpMediaSource> weakSelf = dynamic_pointer_cast<RtmpMediaSource>(shared_from_this()); weak_ptr<RtmpMediaSource> weakSelf = dynamic_pointer_cast<RtmpMediaSource>(shared_from_this());
_pRing = std::make_shared<RingType>(_ringSize,[weakSelf](const EventPoller::Ptr &,int size,bool){ _pRing = std::make_shared<RingType>(_ringSize,[weakSelf](const EventPoller::Ptr &,int size,bool){
...@@ -110,12 +106,16 @@ public: ...@@ -110,12 +106,16 @@ public:
strongSelf->onReaderChanged(size); strongSelf->onReaderChanged(size);
}); });
onReaderChanged(0); 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 { uint32_t getTimeStamp(TrackType trackType) override {
...@@ -149,6 +149,17 @@ private: ...@@ -149,6 +149,17 @@ private:
onNoneReader(); onNoneReader();
} }
} }
int getTrackSize(){
int ret = 0;
if(_metadata["videocodecid"]){
++ret;
}
if(_metadata["audiocodecid"]){
++ret;
}
return ret;
}
protected: protected:
AMFValue _metadata; AMFValue _metadata;
unordered_map<int, RtmpPacket::Ptr> _mapCfgFrame; unordered_map<int, RtmpPacket::Ptr> _mapCfgFrame;
...@@ -158,6 +169,7 @@ protected: ...@@ -158,6 +169,7 @@ protected:
int _ringSize; int _ringSize;
Ticker _readerTicker; Ticker _readerTicker;
bool _asyncEmitNoneReader = false; bool _asyncEmitNoneReader = false;
bool _registed = false;
}; };
} /* namespace mediakit */ } /* namespace mediakit */
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论