Commit 653667ba by xiongziliang

提高对无Metadata的rtmp流的兼容性

parent 928f642a
......@@ -108,6 +108,7 @@ void RtmpPlayer::play(const string &strUrl) {
return false;
},getPoller()));
_metadata_got = false;
startConnect(strHost, iPort , playTimeOutSec);
}
void RtmpPlayer::onErr(const SockException &ex){
......@@ -319,8 +320,9 @@ void RtmpPlayer::onCmd_onMetaData(AMFDecoder &dec) {
//TraceL;
auto val = dec.load<AMFValue>();
if(!onCheckMeta(val)){
throw std::runtime_error("onCheckMeta faied");
throw std::runtime_error("onCheckMeta failed");
}
_metadata_got = true;
}
void RtmpPlayer::onStreamDry(uint32_t ui32StreamId) {
......@@ -372,6 +374,12 @@ void RtmpPlayer::onRtmpChunk(RtmpPacket &chunkData) {
//计算播放进度时间轴用
_aiNowStamp[idx] = chunkData.timeStamp;
}
if(!_metadata_got){
_metadata_got = true;
if(!onCheckMeta(TitleMeta().getMetadata())){
throw std::runtime_error("onCheckMeta failed");
}
}
onMediaData_l(std::make_shared<RtmpPacket>(std::move(chunkData)));
}
break;
......
......@@ -55,7 +55,7 @@ public:
void pause(bool bPause) override;
void teardown() override;
protected:
virtual bool onCheckMeta(AMFValue &val) =0;
virtual bool onCheckMeta(const AMFValue &val) =0;
virtual void onMediaData(const RtmpPacket::Ptr &chunkData) =0;
uint32_t getProgressMilliSecond() const;
void seekToMilliSecond(uint32_t ms);
......@@ -119,6 +119,7 @@ private:
uint32_t _aiFistStamp[2] = { 0, 0 };
uint32_t _aiNowStamp[2] = { 0, 0 };
Ticker _aNowStampTicker[2];
bool _metadata_got = false;
};
} /* namespace mediakit */
......
......@@ -62,7 +62,7 @@ public:
}
private:
//派生类回调函数
bool onCheckMeta(AMFValue &val) override {
bool onCheckMeta(const AMFValue &val) override {
_pRtmpMediaSrc = dynamic_pointer_cast<RtmpMediaSource>(_pMediaSrc);
if(_pRtmpMediaSrc){
_pRtmpMediaSrc->onGetMetaData(val);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论