h.264字节流解析

时间:2011-04-03 09:27:07

标签: c++ c video video-streaming h.264

输入数据是一个字节数组,表示h.264帧。该帧由单个切片(不是多切片帧)组成。

所以,据我所知,我可以像切片一样处理这个帧。切片具有标题和切片数据 - 宏块,每个宏块都有自己的标题。

所以我必须解析那个字节数组来提取帧数,帧类型,量化系数(据我所知,每个宏块都有自己的系数?或者我错了?)

你能告诉我,我可以在哪里获得有关解析h.264帧字节的更多详细信息。

(事实上我已经阅读了标准,但它并不是非常具体,而且我迷路了。)

由于

3 个答案:

答案 0 :(得分:15)

H.264标准有点难以阅读,所以这里有一些提示。

  • 阅读附件B;确保您的输入以开始代码
  • 开头
  • 阅读第9.1节:您将需要以下所有
  • 切片标题在7.3.3节中描述
  • “帧号”未在切片标头中明确编码; frame_num 接近您可能想要的内容。
  • “帧类型”可能对应于 slice_type (切片标题中的第二个值,因此最容易解析;你一定要从这个开始)
  • “量化系数” - 你的意思是“量化参数”?如果是,请准备编写完整的H.264解析器(或重用现有的解析器)。请参阅第9.3节,了解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)。这是一项非常棘手的任务。解复用过程(在解压缩视频数据之后)也很复杂。您需要完全理解每个模块。 祝你好运。