我需要知道如何从MPEG传输流(TS)中获取高度和宽度以及任何其他描述性数据。
在此答案显示之前:我很清楚视频序列标题(00 00 00 B3)。这是MPEG 节目流(即MPEG文件)规范的一部分,不是 MPEG传输流。
如果我将传输流保存到.ts文件,我可以从ffmpeg获取此信息,但我需要能够在ffmpeg不可用的环境中独立于ffmpeg执行此操作。因此,我需要手动解析文件中的这些数据,除了MPEG-TS的时间戳(切片启动)之外,我似乎无法找到任何相关元数据。
谢谢!
答案 0 :(得分:2)
我担心您必须检查ISO 13818-1(也称为H.222)并阅读有关传输流数据包,PID过滤和PES数据包的信息。
流被分成数据包。每个数据包(通常)为188字节长。数据包标头包含PID(数据包ID),允许您仅过滤您感兴趣的数据包。
数据包组成PES数据包,其中包含MPEG-2数据+元数据(如定时数据)。在找出视频的宽度和高度之前,您需要构建然后解析PES数据包。
您如何知道您感兴趣的PID?为此你必须阅读PAT和PMT。 PAT告诉您如何获取PMT,PMT告诉您哪些PID包含MPEG-2信息。
上述文件中(详细描述)所有这些内容。但是在线有很多教程和解释。例如here,但还有很多其他的。 Wikipedia article是一个很好的起点。
答案 1 :(得分:1)
实际上,视频序列标题(00 00 01 B3)是ISO / IEC 13818-2规范的一部分,其描述了基本视频比特流。因此传输流也将包含此标头。
这里的问题是提取此标题内容。您不能只找到此启动代码并使用其后的字节。这可能是一项非常复杂的任务,因为: 1.标头内容可以分为两个PES或传输流包 2.如果传输流不仅包含视频流,则可以在某些音频或二进制数据中找到此字节序列。
答案 2 :(得分:1)
视频大小不是传输流的属性。这是基本视频流本身的属性。传输流或PES数据包不包含任何标头。
为了提取分辨率(宽度x高度),您必须识别PES start(带有PUSI)数据包,然后开始解析es头。您需要提取序列标题部分ISO / IEC 13818 - 第2部分(视频)将给您答案。请查看此wiki以获取快速参考。