2011-04-03 160 views
4

输入数据是一个表示h.264帧的字节数组。该帧由一个切片(不是多层帧)组成。h.264字节流解析

所以,据我了解,我可以像切片一样处理这个帧。切片具有头部和切片数据 - 宏块,每个宏块具有其自己的头部。

所以我要解析的字节数组提取帧数,帧的类型,量化系数(我的理解每个宏块都有自己的系数?还是我错了?)

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

(其实我读过的标准,但它是不是很具体,我迷路了。)

感谢

+0

输入数据是代表h.264帧的字节数组。该帧由一个切片(不是多层帧)组成。 (这些是我的问题的限制) – stemm 2011-04-03 09:28:43

+0

尝试查看ISO/IEC 14496-15 – VitalyVal 2011-04-03 10:00:23

+0

什么是h.264m?我的意思是 - h.264m是H.264的一些扩展? – anatolyg 2011-04-03 11:05:00

回答

15

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

  • 阅读附录B;确保您的输入与起始码开始
  • 阅读9.1节:你会需要它下面所有的
  • 条首部的部分中描述7.3.3
  • “帧数”并没有明确的编码片头; frame_num接近你可能想要的。
  • “框架式”大概相当于的slice_type(在切片报头中的第二个值,所以最容易解析,你一定要与这一个开始)
  • “量化系数” - 你的意思是“量化参数“?如果是,准备编写一个完整的H.264解析器(或重用现有的解析器)。查看第9.3节,了解H.264分析器的复杂性。
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软件(有试用版),它可以给你一些额外的(视觉)视角。

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

+0

感谢伟大的指点! – stemm 2012-08-12 08:04:52

+0

不客气! – t0k3n1z3r 2012-08-12 09:32:29