重命名前确保关闭mp4文件:#416

This commit is contained in:
xiongziliang 2020-07-16 10:40:30 +08:00
parent c507e8a772
commit bdb28c53de
3 changed files with 9 additions and 2 deletions

View File

@ -93,6 +93,7 @@ void MP4File::openFile(const char *file,const char *mode) {
//创建智能指针 //创建智能指针
_file.reset(fp,[file_buf](FILE *fp) { _file.reset(fp,[file_buf](FILE *fp) {
fflush(fp);
fclose(fp); fclose(fp);
}); });
} }

View File

@ -25,6 +25,8 @@ namespace mediakit{
class MP4Muxer : public MediaSinkInterface, public MP4File{ class MP4Muxer : public MediaSinkInterface, public MP4File{
public: public:
typedef std::shared_ptr<MP4Muxer> Ptr;
MP4Muxer(const char *file); MP4Muxer(const char *file);
~MP4Muxer() override; ~MP4Muxer() override;
@ -42,9 +44,13 @@ public:
*/ */
void resetTracks() override ; void resetTracks() override ;
/**
* ()
*/
void closeMP4();
private: private:
void openMP4(); void openMP4();
void closeMP4();
void stampSync(); void stampSync();
private: private:

View File

@ -75,7 +75,7 @@ void MP4Recorder::asyncClose() {
//获取文件录制时间放在关闭mp4之前是为了忽略关闭mp4执行时间 //获取文件录制时间放在关闭mp4之前是为了忽略关闭mp4执行时间
const_cast<MP4Info&>(info).ui64TimeLen = ::time(NULL) - info.ui64StartedTime; const_cast<MP4Info&>(info).ui64TimeLen = ::time(NULL) - info.ui64StartedTime;
//关闭mp4非常耗时所以要放在后台线程执行 //关闭mp4非常耗时所以要放在后台线程执行
const_cast<MP4Muxer::Ptr &>(muxer).reset(); muxer->closeMP4();
//临时文件名改成正式文件名防止mp4未完成时被访问 //临时文件名改成正式文件名防止mp4未完成时被访问
rename(strFileTmp.data(),strFile.data()); rename(strFileTmp.data(),strFile.data());
//获取文件大小 //获取文件大小