H.264字节流解析

4
输入数据是表示一个h.264帧的字节数组。该帧由单个切片组成(不是多切片帧)。
因此,我可以像处理切片一样处理这个帧。切片有头部和切片数据 - 宏块,每个宏块都有自己的头部。
所以我需要解析字节数组以提取帧号、帧类型、量化系数(我理解每个宏块都有自己的系数?还是我错了?)
您能否建议我在哪里获取有关解析h.264帧字节的更详细信息。
(实际上,我已经阅读了标准,但它并不是非常具体,我迷失了方向。)
谢谢

输入数据是表示H.264帧的字节数组。该帧由单个切片组成(不是多切片帧)。 (这些是我的问题限制) - stemm
尝试查看ISO/IEC 14496-15。 - VitalyVal
h.264m是什么?我的意思是,h.264m是H.264的某个扩展吗? - anatolyg
哦...我犯了一个错误)我是指h.264。 - stemm
3个回答

15

因为H.264标准有些难读,所以这里提供一些提示。

  • 阅读附录B; 确保你的输入以起始码开始
  • 阅读9.1节:你需要它来进行以下所有操作
  • 切片头在第7.3.3节中描述
  • “帧编号”没有在切片头中明确编码;frame_num与你想要的内容相近。
  • “帧类型”可能对应于slice_type(切片头中的第二个值,最容易解析;你一定要从这个入手)
  • “量化系数” - 你是指“量化参数”吗?如果是,那么准备编写一个完整的H.264解析器(或重用现有的解析器)。查看第9.3节可以了解H.264解析器的复杂性。

7

标准非常难以理解。您可以尝试分析现有H.264视频流解码软件(例如ffmpeg)的源代码,其中包含C(C99)库。例如,这里有一个文档化的avcodec_decode_video2函数,文档在此处。您可以在此处获取完整的C代码(打开文件,获取H.264流,迭代帧,转储信息,获取色彩空间,将帧保存为原始PPM图像等)。另外还有一本极好的《H.264高级视频压缩标准》一书,用“人类语言”解释了标准。另一个选择是尝试Elecard StreamEye Pro软件(有试用版),这可以为您提供一些额外的(视觉)视角。


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(上下文自适应算术二进制编解码器)。这是一个相当棘手的任务。解复用过程(在视频数据解包之后进行)也很复杂。您需要完全理解这些模块中的每一个。祝你好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接