调试由VLC打开但不是由ffplay打开的MP4

时间:2015-05-12 07:35:21

标签: video ffmpeg mp4 vlc

我正在编写一个创建MP4文件的代码。为了检查它,我创建了一个MP4文件。

文件由VLC和Firefox正确播放,但不是由ffplay或Chrome播放。我想该文件包含VLC可以处理的错误,但更具侵略性的MP4读卡器不能。

我考虑过修复文件并检查修复代码的区别。但是我尝试了一些修复MP4文件的程序,直到现在都没有成功。

有人可以推荐另一种调试问题的方法,或修复MP4文件的好工具吗?该文件是一个碎片MP4,包含init部分(ftyp,moov框)和一个片段部分(moof和空sidx)。

这是视频文件:

https://www.dropbox.com/s/rojxzvkfxfj31u8/400k00001-3_serialized.mp4?dl=0

编辑:当在本例中使用Media Source Extensions时,它在Firefox中也不起作用: http://people.mozilla.org/~jyavenard/tests/mse_mp4/paper.html

(不要忘记在Firefox上启用MSE,如下所述: http://www.linuxveda.com/2015/04/02/enable-mse-native-html5-support-firefox-linux/

EDIT2:在chrome:// media-internals中,我在上面的示例中看到以下错误: 附加:流解析失败。数据大小= 131072 append_window_start = 0 append_window_end = inf

(将URL更改为文件并将编解码器更改为'avc1.4d401f'而不是'avc1.64000d,mp4a.40.2'。)

1 个答案:

答案 0 :(得分:1)

最后通过修复文件中的一些错误来解决问题。 如果遇到类似的问题,以下是修复:

  • MVHD框中的持续时间应为零。
  • MEHD框应包含在MVEX框中。 MEHD框包含fragment_duration字段。
  • sample_flags(在TREX框中)应该有6个保留的MSBits应该是'1'而不是'0'。
  • TKHD框中的音量字段应为0而不是1(1表示音频)。
  • 尺寸错误,包括TKHD和STSD盒子。
  • avcC框中的编解码器参数错误。与https://stackoverflow.com/a/11869227/2463642中的第三条评论完全相同的错误。请参阅此答案以获取正确的解析:html5 video tag codecs attribute
  • MFHD包含sequence_number为零。应该从1开始。
  • TFDT盒子丢失了。应该包含在TRAF框中并指出每个片段的base_media_decode_time。
  • TRUN缺少data_offset字段。它导致FFMPEG认为数据从MOOF框的开头开始。
  • TRUN框中的sample_flags错误。所有样本都标记为“差异框架”,没有关键帧开始......以下是对这些标志的解释:https://msdn.microsoft.com/en-us/library/ff469599.aspx