传输流和mpeg文件格式

6 c++ video video-streaming

我想将TS文件转换为mpeg文件.有没有描述这种过程的文件?我知道TS架构,但我不知道mpeg的文件架构.有关此主题的任何信息将受到高度赞赏.

谢谢.

Jas*_*n B 15

您可能想要做的是从MPEG-TS(传输流)转换为MPEG-PS(节目流).MPEG-PS是标准.mpg文件的格式以及DVD视频使用的格式.

您可能应该遵守ISO/IEC 13818-1标准.该标准包含所有MPEG-TS和MPEG-PS容器细节(它不包括ISO/IEC 13818-2中涵盖的编码视频).

幸运的是,这种转换相当简单,因为大多数MPEG-PS结构都包含在MPEG-TS格式中.传输流包含一系列188字节的数据包,每个数据包都有一个标头.PES(节目基本流)分组包含在分组有效载荷内.PES包包含实际的视频或音频有效载荷.PES包可以是任何长度,并且大多数时间它们跨越多个TS包.从传输流中解复用PES数据包实际上只需要删除TS报头并正确连接有效负载数据以形成PES数据包.

一旦有了PES数据包流,您就会将它们多路复用为标准中规定的节目流格式.所以基本上,你不需要解析PES数据包或它们的内容,你可以从一种格式中提取它们并将它们插入到另一种格式中.

即使转换相当简单,它仍然需要相当多的工作,因为您需要熟悉容器标准,并仔细解析比特流以使事情正确.因此,尽管我说转换很简单,但这只是因为与其他格式转换相比,它很简单,您可能需要进一步深入研究视频数据.


Dip*_*hta 10

我想添加一些可能有用的好资源.

以下是一些文档,用于解释传输和程序流以及相关的打包结构的详细信息.

  1. 这解释了传输流和节目流之间的差异.http://www.vbrick.com/docs/VB_WhitePaper_TransportStreamVSProgramStream_rd2.pdf

  2. 这解释了MPEG的过度视图并且还包括分组化. http://www.img.lx.it.pt/~fp/cav/Additional_material/MPEG2_overview.pdf

  3. 这解释了使用表格等选择程序的传输流的其他方面http://www.bitrouter.com/pdf/tutorial-psip.pdf

基本上,您需要将传输流解包并分解为PES数据包(以及时间戳),然后应用程序流打包过程.

关键是你如何保持PS流中的数据包的相对差距和时间.因此,您必须在PES数据包中保留PTS/DTS时间戳.

我在这里列出了一些工具 - 这是你工作的一个很好的例子 - 而且他们更熟悉符合MPEG2系统标准.

  1. tstools(http://tstools.berlios.de/)
  2. mplex(来自mjpegtools)
  3. dvb-mplex(libdvb的一部分,http://www.metzlerbros.org/dvb/)
  4. DVB-replax(也是libdvb的一部分,http : //freshmeat.net/projects/dvb-replex/ 或http://www.metzlerbros.org/dvb/)
  5. Avidemux的.http://avidemux.sourceforge.net/

如果您想快速了解更广泛的流程,那么开始学习的另一个好方法是使用Gstreamer插件框架.