From b3dd440151abaf5d6e2ec9dca1b7110f5274331a Mon Sep 17 00:00:00 2001 From: ziyue <1213642868@qq.com> Date: Wed, 15 Dec 2021 20:51:26 +0800 Subject: [PATCH] =?UTF-8?q?MP4Demuxer:=20MP4=E8=A7=A3=E5=A4=8D=E5=99=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=8E=B7=E5=8F=96track=E5=B9=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0frame=E8=BE=93=E5=87=BA=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Record/MP4Demuxer.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Record/MP4Demuxer.cpp b/src/Record/MP4Demuxer.cpp index 08d59f6c..90cbbc58 100644 --- a/src/Record/MP4Demuxer.cpp +++ b/src/Record/MP4Demuxer.cpp @@ -215,6 +215,7 @@ Frame::Ptr MP4Demuxer::makeFrame(uint32_t track_id, const Buffer::Ptr &buf, int6 auto bytes = buf->size() - DATA_OFFSET; auto data = buf->data() + DATA_OFFSET; auto codec = it->second->getCodecId(); + Frame::Ptr ret; switch (codec) { case CodecH264 : case CodecH265 : { @@ -230,9 +231,11 @@ Frame::Ptr MP4Demuxer::makeFrame(uint32_t track_id, const Buffer::Ptr &buf, int6 offset += (frame_len + 4); } if (codec == CodecH264) { - return std::make_shared >(buf, (uint32_t)dts, (uint32_t)pts, 4, DATA_OFFSET); + ret = std::make_shared >(buf, (uint32_t)dts, (uint32_t)pts, 4, DATA_OFFSET); + break; } - return std::make_shared >(buf, (uint32_t)dts, (uint32_t)pts, 4, DATA_OFFSET); + ret = std::make_shared >(buf, (uint32_t)dts, (uint32_t)pts, 4, DATA_OFFSET); + break; } case CodecAAC: { @@ -240,17 +243,23 @@ Frame::Ptr MP4Demuxer::makeFrame(uint32_t track_id, const Buffer::Ptr &buf, int6 assert(track); //加上adts头 dumpAacConfig(track->getAacCfg(), buf->size() - DATA_OFFSET, (uint8_t *) buf->data() + (DATA_OFFSET - ADTS_HEADER_LEN), ADTS_HEADER_LEN); - return std::make_shared >(buf, (uint32_t)dts, (uint32_t)pts, ADTS_HEADER_LEN, DATA_OFFSET - ADTS_HEADER_LEN, codec); + ret = std::make_shared >(buf, (uint32_t)dts, (uint32_t)pts, ADTS_HEADER_LEN, DATA_OFFSET - ADTS_HEADER_LEN, codec); + break; } case CodecOpus: case CodecG711A: case CodecG711U: { - return std::make_shared >(buf, (uint32_t)dts, (uint32_t)pts, 0, DATA_OFFSET, codec); + ret = std::make_shared >(buf, (uint32_t)dts, (uint32_t)pts, 0, DATA_OFFSET, codec); + break; } default: return nullptr; } + if (ret) { + it->second->inputFrame(ret); + } + return ret; } vector MP4Demuxer::getTracks(bool trackReady) const {