From f100ea583e2a14155decf8d056d032e45fe68557 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Sat, 9 Dec 2023 20:58:45 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=B2=E6=AD=A2=E5=A4=9A=E4=B8=AAtrack?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E9=A9=B1=E5=8A=A8=E9=9D=99=E9=9F=B3=E7=94=9F?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Common/MediaSink.cpp | 25 +++++++++++++++---------- src/Common/MediaSink.h | 1 + 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/Common/MediaSink.cpp b/src/Common/MediaSink.cpp index 6d9f8fbc..5dcc841d 100644 --- a/src/Common/MediaSink.cpp +++ b/src/Common/MediaSink.cpp @@ -82,7 +82,7 @@ bool MediaSink::inputFrame(const Frame::Ptr &frame) { it->second.second = true; auto ret = it->second.first->inputFrame(frame); if (_mute_audio_maker && frame->getTrackType() == TrackVideo) { - //视频驱动产生静音音频 + // 视频驱动产生静音音频 _mute_audio_maker->inputFrame(frame); } checkTrackIfReady(); @@ -230,15 +230,20 @@ static uint8_t s_mute_adts[] = {0xff, 0xf1, 0x6c, 0x40, 0x2d, 0x3f, 0xfc, 0x00, static uint8_t ADTS_CONFIG[2] = { 0x15, 0x88 }; bool MuteAudioMaker::inputFrame(const Frame::Ptr &frame) { - if (frame->getTrackType() == TrackVideo) { - auto audio_idx = frame->dts() / MUTE_ADTS_DATA_MS; - if (_audio_idx != audio_idx) { - _audio_idx = audio_idx; - auto aacFrame = std::make_shared>(CodecAAC, (char *) MUTE_ADTS_DATA, sizeof(s_mute_adts), - _audio_idx * MUTE_ADTS_DATA_MS, 0, 7); - aacFrame->setIndex(MUTE_AUDIO_INDEX); - return FrameDispatcher::inputFrame(aacFrame); - } + if (_track_index == -1) { + // 锁定track + _track_index = frame->getIndex(); + } + if (frame->getIndex() != _track_index) { + // 不是锁定的track + return false; + } + auto audio_idx = frame->dts() / MUTE_ADTS_DATA_MS; + if (_audio_idx != audio_idx) { + _audio_idx = audio_idx; + auto aacFrame = std::make_shared>(CodecAAC, (char *)MUTE_ADTS_DATA, sizeof(s_mute_adts), _audio_idx * MUTE_ADTS_DATA_MS, 0, 7); + aacFrame->setIndex(MUTE_AUDIO_INDEX); + return FrameDispatcher::inputFrame(aacFrame); } return false; } diff --git a/src/Common/MediaSink.h b/src/Common/MediaSink.h index f1f6db11..3ca86a14 100644 --- a/src/Common/MediaSink.h +++ b/src/Common/MediaSink.h @@ -55,6 +55,7 @@ public: bool inputFrame(const Frame::Ptr &frame) override; private: + int _track_index = -1; uint64_t _audio_idx = 0; };