输入数据是一个字节数组,表示h.264帧。该帧由单个切片(不是多切片帧)组成。
所以,据我所知,我可以像切片一样处理这个帧。切片具有标题和切片数据 - 宏块,每个宏块都有自己的标题。
所以我必须解析那个字节数组来提取帧数,帧类型,量化系数(据我所知,每个宏块都有自己的系数?或者我错了?)
你能告诉我,我可以在哪里获得有关解析h.264帧字节的更多详细信息。
(事实上我已经阅读了标准,但它并不是非常具体,而且我迷路了。)
由于
答案 0 :(得分:15)
H.264标准有点难以阅读,所以这里有一些提示。
答案 1 :(得分:6)
标准很难阅读。您可以尝试使用它的C(C99)库分析现有H.264视频流解码软件的源代码,例如ffmpeg。例如,avcodec_decode_video2函数记录为here。您可以获得完整的工作C(打开文件,获取H.264流,迭代帧,转储信息,获取色彩空间,将帧保存为原始PPM图像等)here。或者,有一本很棒的"The H.264 Advanced Video Compression Standard"书,它解释了“人类语言”中的标准。另一个选择是尝试Elecard StreamEye Pro软件(有试用版),它可以为您提供一些额外的(视觉)视角。
答案 2 :(得分:4)
实际上阅读H.264视频编码文档要好得多,也更容易(仅我的意见)。 ffmpeg是非常好的库,但它包含很多优化的代码。最好看一下H.264编解码器和官方文档的参考实现。 http://iphome.hhi.de/suehring/tml/download/ - 这是JM编解码器实现的链接。 尝试分离解码过程的级别,例如包含NAL单元的传输层(SPS,PPS,SEI,IDR,SLICE等)。比你需要实现VLC引擎(主要是0范围的exp-Golomb代码)。比非常困难和强大的编解码器称为CABAC(Context Adaptive Arithmetic Binary Codec)。这是一项非常棘手的任务。解复用过程(在解压缩视频数据之后)也很复杂。您需要完全理解每个模块。 祝你好运。