运输流& mpeg文件格式

时间:2010-11-10 14:38:36

标签: c++ video video-streaming

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

谢谢。

3 个答案:

答案 0 :(得分: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数据包或它们的内容,你可以从一种格式中提取它们并将它们插入到另一种格式中。

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

答案 1 :(得分: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

  4. 基本上,您需要将传输流解包并分解为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/
    6. 开始学习的另一个好方法是使用Gstreamer插件框架,如果你想快速了解更广泛的流程。

答案 2 :(得分:2)

FFMPEG可用于将TS转换为MPEG。更多信息here