最近我有一个任务将文件格式转换为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的更多信息.
小智 8
您可以重新排序MP4文件,使用以下FFMPEG命令将moov部分放在它的开头:
ffmpeg -i your.mp4 -vcodec copy -acodec copy -movflags + faststart reordered.mp4