如何在没有长启动时间的情况下通过HTTP传输非常长的H.264视频? (或:MOOV原子太大)

时间:2012-10-04 20:32:47

标签: ffmpeg streaming h.264 mp4 video-encoding

我想要播放通常为10小时的公开会议视频。用户通常会在视频中间的某个位置开始并经常跳转。

MP4容器中的H.264似乎是当前编码流媒体视频的最佳选择(对吧?)。但这些是大文件 - 一个文件约为1.3GB - 文件开头的元数据(MOOV atom)本身大约为40MB。如果我理解正确,客户端需要先下载完整的元数据,然后才能在文件的其余部分内进行搜索。显然,在开始流式传输之前必须下载40MB是不可接受的。

(我的流量测试是使用VLC和Chrome中的HTML5标记。)

我正在使用avconv对文件进行编码,除了告诉它使用哪个编码器(x264和libfaac)之外,我目前不提供其他设置。然后,我使用qt-faststart将元数据移动到文件的开头。

有没有办法让MOOV原子更小?

如果没有,是否还有其他策略可供使用(例如将长视频分成若干文件,经常这样做?对于寻求一整天视频的用户而言,这似乎真的很痛苦?)

或者我应该使用不同的编解码器还是容器?

谢谢!

以下是AtomicParsley的文件头结构细分:

Atom ftyp @ 0 of size: 32, ends @ 32
Atom moov @ 32 of size: 40157673, ends @ 40157705
     Atom mvhd @ 40 of size: 108, ends @ 148
     Atom iods @ 148 of size: 24, ends @ 172
     Atom trak @ 172 of size: 20156304, ends @ 20156476
         Atom tkhd @ 180 of size: 92, ends @ 272
         Atom edts @ 272 of size: 36, ends @ 308
             Atom elst @ 280 of size: 28, ends @ 308
         Atom mdia @ 308 of size: 20156168, ends @ 20156476
             Atom mdhd @ 316 of size: 32, ends @ 348
             Atom hdlr @ 348 of size: 45, ends @ 393
             Atom minf @ 393 of size: 20156083, ends @ 20156476
                 Atom vmhd @ 401 of size: 20, ends @ 421
                 Atom dinf @ 421 of size: 36, ends @ 457
                     Atom dref @ 429 of size: 28, ends @ 457
                 Atom stbl @ 457 of size: 20156019, ends @ 20156476
                     Atom stsd @ 465 of size: 147, ends @ 612
                         Atom avc1 @ 481 of size: 131, ends @ 612
                             Atom avcC @ 567 of size: 45, ends @ 612
                     Atom stts @ 612 of size: 6115608, ends @ 6116220
                     Atom stss @ 6116220 of size: 16960, ends @ 6133180
                     Atom ctts @ 6133180 of size: 5683824, ends @ 11817004
                     Atom stsc @ 11817004 of size: 28, ends @ 11817032
                     Atom stsz @ 11817032 of size: 4169724, ends @ 15986756
                     Atom stco @ 15986756 of size: 4169720, ends @ 20156476
     Atom trak @ 20156476 of size: 20001133, ends @ 40157609
         Atom tkhd @ 20156484 of size: 92, ends @ 20156576
         Atom mdia @ 20156576 of size: 20001033, ends @ 40157609
             Atom mdhd @ 20156584 of size: 32, ends @ 20156616
             Atom hdlr @ 20156616 of size: 45, ends @ 20156661
             Atom minf @ 20156661 of size: 20000948, ends @ 40157609
                 Atom smhd @ 20156669 of size: 16, ends @ 20156685
                 Atom dinf @ 20156685 of size: 36, ends @ 20156721
                     Atom dref @ 20156693 of size: 28, ends @ 20156721
                 Atom stbl @ 20156721 of size: 20000888, ends @ 40157609
                     Atom stsd @ 20156729 of size: 96, ends @ 20156825
                         Atom mp4a @ 20156745 of size: 80, ends @ 20156825
                             Atom esds @ 20156781 of size: 44, ends @ 20156825
                     Atom stts @ 20156825 of size: 9348168, ends @ 29504993
                     Atom stsc @ 29504993 of size: 28, ends @ 29505021
                     Atom stsz @ 29505021 of size: 5326296, ends @ 34831317
                     Atom stco @ 34831317 of size: 5326292, ends @ 40157609
     Atom udta @ 40157609 of size: 96, ends @ 40157705
         Atom meta @ 40157617 of size: 88, ends @ 40157705
             Atom hdlr @ 40157629 of size: 33, ends @ 40157662
             Atom ilst @ 40157662 of size: 43, ends @ 40157705
                 Atom ©too @ 40157670 of size: 35, ends @ 40157705
                     Atom data @ 40157678 of size: 27, ends @ 40157705
Atom free @ 40157705 of size: 8, ends @ 40157713
Atom mdat @ 40157713 of size: 1320096566, ends @ 1360254279

2 个答案:

答案 0 :(得分:2)

如果您有能力使用像jwplayer这样的flash播放器,请尝试使用flv格式。您仍然可以在其中使用H.264 / AAC组合。但是您的文件将立即开始流式传输。您不必重新编码。 Just remux

ffmpeg -i input.mp4 -acodec copy -vcodec copy -bsf h264_mp4toannexb out.flv

如果你必须使用mp4文件,那么你应该使用碎片mp4文件来实现它。类似于流畅的流媒体[虽然这也是出于不同的目的]。

答案 1 :(得分:0)

如何呈现录制内容与预先录制的内容有很大关系。您是否使用播放列表格式最终链接到内容? VideoLan客户端是否比事实上的电影播放器​​做出更好或更差的反应。

HTML5是一个选项,以便您可以通过简单的JavaScript立即提供搜索选项吗?对于大多数值得注意的HTML5,浏览器可以很好地保持可观的缓冲区长度。

http://en.wikipedia.org/wiki/HTML5_video

从长远来看,我建议您获取适当的YouTube或Vimeo帐户并在其中发布内容,以充分利用其基础架构并大幅减少自己的带宽需求。