我正在开发一个在线电视服务。其中一个目标是视频可以在没有任何浏览器插件的情况下播放(除了Flash)。
我决定使用MP4,因为它受到大多数HTML5浏览器和Flash(备选方案)的支持。视频是由服务器上的FFMpeg从ASF转码而来。
然而,我发现MP4不能进行实时流传输,因为它具有用于指定长度的元数据moov原子。 FFMpeg无法直接将mp4流式传输给stdout,因为它将moov放置在文件末尾。(Live transcoding and streaming of MP4 works in Android but fails in Flash player with NetStream.Play.FileStructureInvalid error)
当然,MPEG-TS存在,但HTML5<video>不支持它。
我的想法是实时转码流至MP4,并在每次对其进行新的HTTP请求时,先发送一个指定视频长度非常长的moov,然后开始发送MP4文件的其余部分。
能否以这种方式使用MP4进行流传输?经过一些研究和av501的回答,我理解必须知道帧的大小才能使其正常工作。
MP4文件是否可以分段为较小的部分以进行流传输?当然,切换到另一个容器/格式是一种选择,但唯一与Flash和HTML5兼容的格式是mp4 / h264,因此如果我必须支持两者,则必须进行两次转码。