MP4和MPEG-TS有什么区别?

26

最近我有一个任务,需要将文件格式转换为 mp4 并进行流式传输。我使用 ffmpeg 作为转码工具。使用 php cgi wrapper 协议时,MP4 文件无法通过 http 协议进行流式传输,但是当输出格式更改为 mpegts 时,流媒体传输就可以正常运行。在网络上快速搜索 http://wiki.videolan.org/MPEG ,了解到建议使用 mpegts 格式来流式传输 mp4 文件。我需要更多关于这两种格式的深入了解,它们的优点和区别。

谢谢, 彼得

3个回答

55

MPEG-TS旨在通过DVB、UDP组播以及HTTP进行事件的实时流式传输。它将流分割成基本流,并将其分段成小块。系统信息定期发送,以便接收器随时可以开始播放流。

MPEG-TS不适合用于流式传输文件,因为它不提供有关电影或歌曲持续时间以及您可以寻找的点的信息。

目前有一些新协议可以使用MPEG-TS通过HTTP进行流媒体传输,这些协议在文件中添加了附加元数据并解决了我之前提到的缺点。这些协议是HTTP Live Streaming和DASH(动态自适应流式传输)。

另一方面,MP4的流部分包含该信息,称为moov原子。问题是moov必须在媒体内容之前放置并首先从服务器下载。这样视频播放器就知道持续时间并且可以在不下载整个文件的情况下寻找任何点(称为HTTP伪流式传输)。

遗憾的是,ffmpeg将moov放在文件末尾。您可以使用像Xmoov-PHP这样的软件来解决这个问题。

在这里,您可以找到有关伪流媒体的更多信息。


这个可以用于IPTV目的吗:创建一个连续的MP4流,并在每个单独的HTTP请求中,在其开头提供带有持续时间设置为非常高的moov? - Ivo
3
文件末尾的moov原子只会影响简单的播放器。像mplayer这样的现代软件可以轻松检测到moov原子在结尾,并使用几十年前的Range: HTTP标头来获取它。 - Mutant Bob
1
Ivo,你所要求的类似于MPEG DASH。DASH使用分段MP4,其中使用'traf'和'sidx'盒子来包装短(2-10秒)的视频块。这些可以在单个增长的MP4文件中连接起来:'moov''sidx''traf''sidx''traf'...你的播放器只需要支持HTTP和ISO 14496规范的相关部分即可。 - Mutant Bob
1- 文件末尾放置moov是什么问题?! 2- 什么是MPEG-TS扩展名? - Dr.jacky
4
Moov原子是存储所有元数据的地方。它告诉您播放音频所需的持续时间, 跳转点等信息。如果它在文件末尾,那么这意味着您必须下载完整的文件才能播放它。将其移到开头可以让您在完全下载文件之前开始播放(即流式传输音频)。FFmpeg确实允许您将Moov原子存储在前面,但默认情况是将其放置在结尾。这只是一些需要使用命令行完成的操作。 - chubbsondubs

13
你可以使用以下FFMPEG命令重新排序MP4文件,将moov部分放在文件开头:

ffmpeg -i your.mp4 -vcodec copy -acodec copy -movflags +faststart reordered.mp4


9
这似乎没有回答提问者的问题。 - Reinstate Monica

0

.mp4是文件的扩展名,而mpeg ts用于传输流。MPEG TS是数字视频广播中用于发送MPEG视频和MPEG音频的标准。基本上有两种类型的TS:SPTS和MPTS。SPTS仅包含单个节目,而MPTS则包含多个节目。

TS阅读器和VLC媒体播放器用于播放MPEG TS。如果您想了解更多信息,请访问以下链接:MPEG TS或传输流MPTS SPTS

传输流文件的扩展名为.ts。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接