现象
在iOS平台的硬解的实践中,我们可能会遇到如下图的这种情况(上面一部分有画面,下面部分是绿屏):
原因
有的推流端出于编码性能的考虑,会选择通过切片的方式来编码,这样一个frame的数据就可能被切片分散于多个nalu中(哥伦布编码),但是videotoolbox解码又必须是整个frame合并到一个nalu中解码,暂时不知道合并算法,但是通过ffmpeg打开得到的流是合并过的(据说的熵编码)。
例子
下面是一个切片的裸流数据(PES包后的裸数据)
00 00 00 01 67 64...
00 00 00 01 68 ea...
00 00 01 06 05 ff...
00 00 01 65 88 84...
00 00 01 65 00 60...
00 00 01 65 00 30...
00 00 01 65 00 12...
00 00 00 01 41 9a 3b 1b ff 00 00 03 00 02 92
00 00 01 41 00 60 26 8e c6 ff 00 00 03 00 02
00 00 01 41 00 30 09 a3 b1 bf 00 00 03 00 02
00 00 01 41 00 12 02 68 ec 6f 00 00 03 00 02
00 00 00 01 41 9a 46 0d ff 00 00 03 00 02 93
00 00 01 41 00 60 26 91 83 7f 00 00 03 00 02
00 00 01 41 00 30 09 a4 60 df 00 00 03 00 02
00 00 01 41 00 12 02 69 18 37 ff 00 00 03 00 02