关于写fragmented的mp4在windows下播放的问题

来源:2-2 FFmpeg音视频处理流程讲解

斯蒂夫二狗

2022-11-14

老师您好!
我有一个个人实践的问题请教下,我写了一个程序支持将裸码流录制成mp4文件。视频编码是mpeg,音频是aac,工作在windows下。但是遇到了一个问题,当录制被进程异常退出(崩溃,杀进程),录制的文件在win media player上不能正常播放。我尝试将录制movflags加上了faststart参数将moov box前置,也不能解决问题。我尝试加上 frag_keyframe参数,异常退出后录制后的视频可以正常播放,但是进度条无法拖动,除了win media player其他播放器正常。查看mp4info,发现视频的totalsize和duration都不对。
我查看了ffmpeg的源码,发现frag模式的属性与faststart是冲突的。
我的问题是,有没有什么方法可以让fragmented方式的mp4能够在异常退出的时候保持moovbox中的信息更新,从而在media player上可以正常拖动和播放?或者有没有其他解决方案?跟我的编码方式(改成h264)是否有关?
不知道我有没有表达清楚,非常期望老师能帮助解答下?
感谢🙏
写回答

1回答

李超

2022-11-14

首先,我觉得你应该重点解决的问题是不让你的录制程序发生crash, 提高程序自身的健壮性;第二, 找到 win media player不能seek 的真正原因,是都是由于duration ,total_size 值不对引起的?我从来不用win media player,所以没有可供参考的经验值;第三,如果是由于diration等参数的原因,你可以在录制程序中,每个一分钟记录一下时常,当发生crash时,自己将这些值修正过来;第四,如果不仅是这几个字段,还有其他mp4box 信息没写入引起的,那就没办法了,还是回到第一步,把你程序的健壮性搞上来,这才是关键!

0
1
斯蒂夫二狗
非常感谢!
2023-03-04
共1条回复

经典再升级-FFmpeg5.0核心技术精讲,打造音视频播放器

学好FFmpeg核心技术,做高效,高薪,有竞争力的音视频工程师

2726 学习 · 814 问题

查看课程