我需要知道如何从MPEG传输流(TS)中获取高度和宽度以及任何其他描述性数据。
在这个答案出现之前:我清楚地知道视频序列头(00 00 B3)。这是MPEG 程序流(即MPEG文件)规范的一部分,而不是MPEG传输流。
如果我将一个传输流保存到一个.ts文件中,我可以从ffmpeg获得这个信息,但是我需要能够在一个没有ffmpeg可用的环境中独立于ffmpeg。因此,我需要手动解析文件中的这些数据,除了来自MPEG-TS的时间戳(片启动)之外,我似乎找不到任何相关的元数据。
谢谢!
发布于 2011-07-20 19:29:11
恐怕您必须检查ISO 13818-1 (也称为H.222),并阅读一些关于传输流包、PID过滤和PES数据包的内容。
流被划分为分组。每个包(通常)有188字节长。包头包含PID (数据包ID),它允许您只过滤您感兴趣的数据包。
分组组成PES分组,其中包含MPEG-2数据+元数据(如定时数据)。在找出视频的宽度和高度之前,您需要构建并解析PES数据包。
你怎么知道你对哪个PID感兴趣?为此,你将不得不阅读有关帕特和PMT的文章。PAT告诉您如何获取PMT,PMT告诉您哪些PID包含MPEG-2信息。
所有这些都(详细地)在上面的文档中描述了。但是网上有很多教程和解释。例如,这里,但是还有很多其他的。维基百科文章是一个很好的起点。
发布于 2011-11-27 11:27:29
视频大小不是传输流的属性。这是基本视频流本身的一个属性。传输流或PES数据包不包含任何报头。
为了提取分辨率(宽度x高度),您必须识别PES开始(使用PUSI)数据包,然后开始解析es头。你需要提取ISO/IEC 13818的序列头部分-第2部分(视频)将给你答案。检查此维基以获得快速参考。
发布于 2011-08-12 04:53:46
实际上,视频序列头(0001 B3)是ISO/IEC 13818-2规范的一部分,它描述了基本的视频流.因此传输流也将包含此标头。
这里的问题是提取这个标题内容。您不能只找到这个开始代码并使用后面的字节。这可能是一个相当复杂的任务,因为: 1.头内容可以分成两个PES或传输流数据包2。如果传输流不仅包含视频流,这种字节序列可以在一些音频或二进制数据中找到。
https://stackoverflow.com/questions/6764652
复制相似问题