H.264定义了两个零字节的序列应该通过在两个零字节之后添加“3”字节来进行转义(“仿真预防”)。
此转义规则是否也适用于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个字节(表示其大小)时,它将“0 0 3”字节理解为模拟防止字节,并且所有解析因此而无序。
那么,这是ffmpeg的错误行为(不应该将其理解为仿真预防)吗?或者文件包含错误,字节应该被转义?
答案 0 :(得分:3)
此转义规则是否也适用于mp4文件格式?
MP4中的H264内容已启用转义,但只应为MP4容器内的H264部分启用。因此,只要traf框是MP4容器格式的一部分,而不是任何H264 NAL单元,它不应该是未转义的。我用FFmpeg提交bug。