2015-05-14 28 views
0

H.264規定,通過在兩個零字節後添加'3'字節(「仿真預防」),應該轉義兩個零字節的序列。MP4中的仿真預防字節

這是逃避規則正確的MP4文件格式?

問題後面跟着調試ffmpeg的結果。我試圖打開下列文件:

https://www.dropbox.com/s/vrdy8z96pohh7ah/live_video_fragment_1.mp4?dl=0

VLC播放,但不ffmpeg的。 ffmpeg的顯示了很多的錯誤,第一個是(與日誌級別調試):

AVC: Consumed only 41 bytes instead of 796 

調試到FFmpeg的表明,它試圖將H.264解碼中解析MOOF盒上卻失敗https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/h264.c#L312

解析traf框之前的4個字節(表示其大小)時,它將「003」字節理解爲仿真阻止字節,並且因此導致所有解析無序。

那麼,這是ffmpeg的錯誤行爲(它不應該把它理解爲仿真預防)?或者該文件包含錯誤,並且該字節應該被轉義?

回答

3

這是逃避規則正確的MP4文件格式?

爲MP4中的H264內容啓用了轉義,但只能爲MP4容器內的H264部分啓用轉義。因此,考慮到交通工具箱是MP4容器格式的一部分,而不是任何H264 NAL設備,它不應該不轉義。我會用FFmpeg提交一個bug

+0

謝謝。我仍然不確定這是一個ffmpeg錯誤,也許該文件包含錯誤。出於某種原因,ffmpeg認爲樣本數據從MOOF框的開始處開始,我猜測該文件只是缺少片段數據起始偏移量的值。仍然檢查它。如果你可以告訴我哪個盒子應該包含這個開始偏移量,它將非常有幫助。謝謝! – MaMazav

+0

其實我覺得我發現了錯誤。 TRUN框缺少一個data_offset值,因此data_offset從MOOF框的開始被認爲是零。 – MaMazav