From bdb28c53de0f01666b688d1c24e76dd847b28003 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Thu, 16 Jul 2020 10:40:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=E5=89=8D=E7=A1=AE?= =?UTF-8?q?=E4=BF=9D=E5=85=B3=E9=97=ADmp4=E6=96=87=E4=BB=B6:#416?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Record/MP4.cpp | 1 + src/Record/MP4Muxer.h | 8 +++++++- src/Record/MP4Recorder.cpp | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Record/MP4.cpp b/src/Record/MP4.cpp index a0152ef1..0dd1756a 100644 --- a/src/Record/MP4.cpp +++ b/src/Record/MP4.cpp @@ -93,6 +93,7 @@ void MP4File::openFile(const char *file,const char *mode) { //创建智能指针 _file.reset(fp,[file_buf](FILE *fp) { + fflush(fp); fclose(fp); }); } diff --git a/src/Record/MP4Muxer.h b/src/Record/MP4Muxer.h index eef8def9..f2e3fbd2 100644 --- a/src/Record/MP4Muxer.h +++ b/src/Record/MP4Muxer.h @@ -25,6 +25,8 @@ namespace mediakit{ class MP4Muxer : public MediaSinkInterface, public MP4File{ public: + typedef std::shared_ptr Ptr; + MP4Muxer(const char *file); ~MP4Muxer() override; @@ -42,9 +44,13 @@ public: */ void resetTracks() override ; + /** + * 手动关闭文件(对象析构时会自动关闭) + */ + void closeMP4(); + private: void openMP4(); - void closeMP4(); void stampSync(); private: diff --git a/src/Record/MP4Recorder.cpp b/src/Record/MP4Recorder.cpp index bf0966a9..1f247354 100644 --- a/src/Record/MP4Recorder.cpp +++ b/src/Record/MP4Recorder.cpp @@ -75,7 +75,7 @@ void MP4Recorder::asyncClose() { //获取文件录制时间,放在关闭mp4之前是为了忽略关闭mp4执行时间 const_cast(info).ui64TimeLen = ::time(NULL) - info.ui64StartedTime; //关闭mp4非常耗时,所以要放在后台线程执行 - const_cast(muxer).reset(); + muxer->closeMP4(); //临时文件名改成正式文件名,防止mp4未完成时被访问 rename(strFileTmp.data(),strFile.data()); //获取文件大小