From 224a35dbd5c495896c5ac60dbc5df80a4479ab67 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Fri, 24 Jan 2020 21:09:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=8D=95=E9=9F=B3=E9=A2=91?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=BD=95=E5=88=B6mp4=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Record/MP4Muxer.cpp | 19 +++++++++++++------ src/Record/MP4Muxer.h | 3 ++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Record/MP4Muxer.cpp b/src/Record/MP4Muxer.cpp index 51f5e440..785fedbd 100644 --- a/src/Record/MP4Muxer.cpp +++ b/src/Record/MP4Muxer.cpp @@ -70,6 +70,7 @@ void MP4MuxerBase::init(int flags) { void MP4Muxer::resetTracks() { _codec_to_trackid.clear(); _started = false; + _have_video = false; } void MP4Muxer::inputFrame(const Frame::Ptr &frame) { @@ -79,14 +80,18 @@ void MP4Muxer::inputFrame(const Frame::Ptr &frame) { return; } - if(!_started){ + if (!_started) { //还没开始 - if(frame->getTrackType() != TrackVideo || !frame->keyFrame()){ - //如果首帧是音频或者是视频但是不是i帧,那么不能开始写文件 - return; + if (!_have_video) { + _started = true; + } else { + if (frame->getTrackType() != TrackVideo || !frame->keyFrame()) { + //如果首帧是音频或者是视频但是不是i帧,那么不能开始写文件 + return; + } + //开始写文件 + _started = true; } - //开始写文件 - _started = true; } //mp4文件时间戳需要从0开始 @@ -211,6 +216,7 @@ void MP4Muxer::addTrack(const Track::Ptr &track) { return; } _codec_to_trackid[track->getCodecId()].track_id = track_id; + _have_video = true; } break; case CodecH265: { @@ -248,6 +254,7 @@ void MP4Muxer::addTrack(const Track::Ptr &track) { return; } _codec_to_trackid[track->getCodecId()].track_id = track_id; + _have_video = true; } break; default: diff --git a/src/Record/MP4Muxer.h b/src/Record/MP4Muxer.h index 1edac519..3285107e 100644 --- a/src/Record/MP4Muxer.h +++ b/src/Record/MP4Muxer.h @@ -81,8 +81,9 @@ private: Stamp stamp; }; unordered_map _codec_to_trackid; - bool _started = false; List _frameCached; + bool _started = false; + bool _have_video = false; };