mp4和mpegts有什么区别?

vin*_*rma 17 mp4 mpeg2-ts

最近我有一个任务将文件格式转换为mp4并流式传输.我使用ffmpeg作为转码工具.MP4文件没有通过http协议流式传输[已使用php cgi包装],但随后输出格式更改为mpegts流式传输并正常工作.在网上快速搜索http://wiki.videolan.org/MPEG, 并建议使用mpegts进行流式传输mp4文件.我需要更深入地了解这两种格式,它们的优点和不同之处.

谢谢,彼得

小智 40

MPEG-TS设计用于通过DVB,UDP多播以及HTTP进行的实时事件流传输.它在基本流中划分流,这些流以小块分段.系统信息定期发送,因此接收器可以随时开始播放流.

MPEG-TS不适合流媒体文件,因为它不提供有关电影或歌曲持续时间的信息,以及您可以寻求的点数.

有一些新协议可以使用MPEG-TS通过HTTP进行流式传输,将额外的元数据放入文件中并修复我之前谈到的缺点.这些是HTTP Live Streaming和DASH(通过HTTP进行动态自适应流传输).

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

可悲的是,ffmpeg将moov放在文件的末尾.您可以使用Xmoov-PHP等软件解决这个问题.

在这里您可以找到有关pseudostreaming的更多信息.

  • 文件末尾的 moov atom 只是原始玩家的问题。像 mplayer 这样的现代软件可以很容易地检测到 moov 原子在末尾,并使用几十年前的 Range: HTTP 标头获取它。 (3认同)
  • @Mr.Hyde - moov atom 是存储所有元数据的地方。它会告诉您播放音频所需的持续时间、寻找跳跃点等。如果它在文件的后面,则意味着您必须先下载完整文件才能播放。将它移到前面可以让您在下载完整文件之前开始播放(即流式传输音频)。ffmpeg 确实允许您将 moov 原子存储在前面,但默认情况下将其放在最后。这只是您必须使用的一些命令行。 (2认同)

小智 8

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

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

  • 这似乎没有回答OP的问题. (6认同)