mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-07-07 04:08:13 +08:00
解决rtmp过早注册的问题
This commit is contained in:
@@ -72,7 +72,6 @@ public:
|
||||
const string &stream_id,
|
||||
int ring_size = 0) :
|
||||
MediaSource(RTMP_SCHEMA, vhost, app, stream_id), _ring_size(ring_size) {
|
||||
_metadata = TitleMeta().getMetadata();
|
||||
}
|
||||
|
||||
virtual ~RtmpMediaSource() {}
|
||||
@@ -117,6 +116,9 @@ public:
|
||||
virtual void setMetaData(const AMFValue &metadata) {
|
||||
lock_guard<recursive_mutex> lock(_mtx);
|
||||
_metadata = metadata;
|
||||
if(_ring){
|
||||
regist();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -143,10 +145,9 @@ public:
|
||||
_ring = std::make_shared<RingType>(_ring_size, std::move(lam));
|
||||
onReaderChanged(0);
|
||||
|
||||
//如果输入了非config帧,
|
||||
//那么说明不再可能获取config帧以及metadata,
|
||||
//所以我们强制其为已注册
|
||||
regist();
|
||||
if(_metadata){
|
||||
regist();
|
||||
}
|
||||
}
|
||||
_track_stamps_map[pkt->typeId] = pkt->timeStamp;
|
||||
_ring->write(pkt, pkt->isVideoKeyFrame());
|
||||
|
||||
@@ -66,6 +66,7 @@ private:
|
||||
_pRtmpMediaSrc = dynamic_pointer_cast<RtmpMediaSource>(_pMediaSrc);
|
||||
if(_pRtmpMediaSrc){
|
||||
_pRtmpMediaSrc->setMetaData(val);
|
||||
_set_meta_data = true;
|
||||
}
|
||||
_delegate.reset(new RtmpDemuxer);
|
||||
_delegate->loadMetaData(val);
|
||||
@@ -73,6 +74,10 @@ private:
|
||||
}
|
||||
void onMediaData(const RtmpPacket::Ptr &chunkData) override {
|
||||
if(_pRtmpMediaSrc){
|
||||
if(!_set_meta_data && !chunkData->isCfgFrame()){
|
||||
_set_meta_data = true;
|
||||
_pRtmpMediaSrc->setMetaData(TitleMeta().getMetadata());
|
||||
}
|
||||
_pRtmpMediaSrc->onWrite(chunkData);
|
||||
}
|
||||
if(!_delegate){
|
||||
@@ -83,6 +88,7 @@ private:
|
||||
}
|
||||
private:
|
||||
RtmpMediaSource::Ptr _pRtmpMediaSrc;
|
||||
bool _set_meta_data = false;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -434,6 +434,7 @@ void RtmpSession::setMetaData(AMFDecoder &dec) {
|
||||
auto metadata = dec.load<AMFValue>();
|
||||
// dumpMetadata(metadata);
|
||||
_pPublisherSrc->setMetaData(metadata);
|
||||
_set_meta_data = true;
|
||||
}
|
||||
|
||||
void RtmpSession::onProcessCmd(AMFDecoder &dec) {
|
||||
@@ -491,6 +492,11 @@ void RtmpSession::onRtmpChunk(RtmpPacket &chunkData) {
|
||||
_stamp[chunkData.typeId % 2].revise(chunkData.timeStamp, chunkData.timeStamp, dts_out, dts_out, true);
|
||||
chunkData.timeStamp = dts_out;
|
||||
}
|
||||
|
||||
if(!_set_meta_data && !chunkData.isCfgFrame()){
|
||||
_set_meta_data = true;
|
||||
_pPublisherSrc->setMetaData(TitleMeta().getMetadata());
|
||||
}
|
||||
_pPublisherSrc->onWrite(std::make_shared<RtmpPacket>(std::move(chunkData)));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -95,6 +95,7 @@ private:
|
||||
std::string _strTcUrl;
|
||||
MediaInfo _mediaInfo;
|
||||
double _dNowReqID = 0;
|
||||
bool _set_meta_data = false;
|
||||
Ticker _ticker;//数据接收时间
|
||||
RingBuffer<RtmpPacket::Ptr>::RingReader::Ptr _pRingReader;
|
||||
std::shared_ptr<RtmpMediaSourceImp> _pPublisherSrc;
|
||||
|
||||
Reference in New Issue
Block a user