From d2fec801c98c71c73170d664e565cd93cb154a80 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Thu, 1 Apr 2021 21:56:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E4=B8=8D=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E7=9A=84rtmp=E6=8E=A8=E6=B5=81=E5=99=A8=EF=BC=9A#764?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Rtmp/RtmpSession.cpp | 15 +++++---------- src/Rtmp/RtmpSession.h | 2 +- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/Rtmp/RtmpSession.cpp b/src/Rtmp/RtmpSession.cpp index 61c844a1..7187226d 100644 --- a/src/Rtmp/RtmpSession.cpp +++ b/src/Rtmp/RtmpSession.cpp @@ -415,17 +415,11 @@ void RtmpSession::onCmd_pause(AMFDecoder &dec) { } void RtmpSession::setMetaData(AMFDecoder &dec) { - if (!_publisher_src) { - throw std::runtime_error("not a publisher"); - } std::string type = dec.load(); if (type != "onMetaData") { throw std::runtime_error("can only set metadata"); } - auto metadata = dec.load(); -// dumpMetadata(metadata); - _publisher_src->setMetaData(metadata); - _set_meta_data = true; + _publisher_metadata = dec.load(); } void RtmpSession::onProcessCmd(AMFDecoder &dec) { @@ -478,7 +472,8 @@ void RtmpSession::onRtmpChunk(RtmpPacket::Ptr packet) { case MSG_AUDIO: case MSG_VIDEO: { if (!_publisher_src) { - throw std::runtime_error("Not a rtmp publisher!"); + WarnL << "Not a rtmp publisher!"; + return; } GET_CONFIG(bool, rtmp_modify_stamp, Rtmp::kModifyStamp); if (rtmp_modify_stamp) { @@ -487,9 +482,9 @@ void RtmpSession::onRtmpChunk(RtmpPacket::Ptr packet) { chunk_data.time_stamp = (uint32_t)dts_out; } - if (!_set_meta_data && !chunk_data.isCfgFrame()) { + if (!_set_meta_data) { _set_meta_data = true; - _publisher_src->setMetaData(TitleMeta().getMetadata()); + _publisher_src->setMetaData(_publisher_metadata ? _publisher_metadata : TitleMeta().getMetadata()); } _publisher_src->onWrite(std::move(packet)); break; diff --git a/src/Rtmp/RtmpSession.h b/src/Rtmp/RtmpSession.h index 0939ee80..02f2d623 100644 --- a/src/Rtmp/RtmpSession.h +++ b/src/Rtmp/RtmpSession.h @@ -98,8 +98,8 @@ private: //数据接收超时计时器 Ticker _ticker; MediaInfo _media_info; - std::weak_ptr _player_src; + AMFValue _publisher_metadata; std::shared_ptr _publisher_src; RtmpMediaSource::RingType::RingReader::Ptr _ring_reader; };