重命名前确保关闭mp4文件:#416
This commit is contained in:
parent
c507e8a772
commit
bdb28c53de
|
|
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
//获取文件大小
|
//获取文件大小
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue