如何在 H.264 MPEG-2 TS 中找到分辨率和帧率值?

Vel*_*cro 2 frame-rate resolution h.264 mpeg2-ts

我正在处理包含 H.264 流的 MPEG-2 TS 视频,我正在通过扫描 PAT、PMT、PES 等来查找存储在流中的视频属性。

我能够读取 PAT、PMT 和基本流类型和 PID。在这里我想找到分辨率和帧率(fps)。它们位于 PES 标头中还是其他地方?他们不在 PAT 或 PMT 中。

下面,传输流数据包编辑器能够找到两种不同的信息,一种是本身,另一种来自 Haali Media Decoder 辅助编解码器。第一个获得方法:

在此处输入图片说明

欢迎使用伪代码。

pra*_*esh 5

我不确定 MPEG2TS 标头中的高度宽度信息是否可用。因为 TS 文件可以有多个程序。但是,如果您仅针对由 H.264 基本流构成的 TS 文件,那么您可以从 H.264 基本流的 SPS 中获取这些信息。

每个 H.264 帧都以四或三个字节的序列头0x00 0x00 0x010x00 0x00 0x00 0x01 开始。如果对起始标头后的下一个字节等于 0x07 进行 AND 运算,则该帧是 SPS 帧。

例如 SPS 帧 0x00 0x00 0x00 0x01 0x67 ... 进行与运算 (0x67 & 0x1F) = 0x07

解析 SPS 标头也不是一件容易的事,但您可以在 ffmpeg 源代码中找到详细信息。

希望这可以帮助。


use*_*774 5

不,它们不存在于 PES 标头中。要从 MPEG2-TS 中的 H.264 视频中找到分辨率和帧速率,您需要从 H.264 流中解析 SPS(序列参数集)。

这些是解析 H.264 NAL(网络适配层)单元的步骤:

  1. 解析 NAL 单元前缀(NAL 单元前缀为 3(0x00,0x00,0x01)或 4(0x00,0x00,0x00,0x01)字节码)然后是 Header(前缀码后的下一个字节)

  2. 从头字节检查 NAL 单元的类型(最后 5 位)。

  3. 如果 NAL 单元是类型 7 意味着,这个 NAL 单元是 SPS NAL 单元然后解析代码

此 ITU 链接提供了有关 h.264 标准的文档

参见第7.3.2.1.1节:序列参数集数据语法给出了在 SPS 中查找参数的语法。