VLC 可以播放未完成的 MP4 文件吗?

Vip*_*mar 7 vlc-media-player mp4 streaming

线程中,VLC 开发人员表示 VLC 无法播放部分下载的 mp4 文件,因为信息存储在文件末尾。但最近当我测试相同的,在 Chrome 中添加一个 mp4 任务并将部分 .crdownload 传递给 VLC 时,它起作用了。VLC 播放 mp4 没有任何故障。我没有让下载完成并在中间停止播放器以节省带宽,但我相信它会在 Chrome 仍在下载时播放整个媒体。我还能够通过视频进行搜索,这是一些未完成的视频格式所不允许的。怎么办?我正在做一个媒体流媒体作为一个宠物项目,真的想知道我是否可以启动下载并在下载一定数量的字节后通过命令行将媒体传递给 vlc。

use*_*686 9

MP4 文件可以在开头结尾包含元数据块。它通常在新编码文件的末尾,因为编码器可能不知道要写入什么值,直到完成对整个视频的编码(尤其是查找所需的部分)。

但是在为在线流媒体准备 MP4 文件时,通常会将元数据移到开头,例如本博客文章中所述。(换句话说,您不是第一个想要这样做的——这是 Web 浏览器的日常业务。)

注意:虽然这篇文章显示了一个完整的重新编码正在完成,但我不确定这是否真的需要 - 只需重新混合-codec copy -movflags faststart并避免质量损失就足够了。


您可以使用一些工具来查看给定 MP4 文件的实际结构,例如:

$ AtomicParsley test.m4a -T
原子 ftyp @ 0 大小:24,结束 @ 24
无原子 @ 24 大小:8,结束 @ 32
Atom mdat @ 32 大小:4038152,结束 @ 4038184
Atom moov @ 4038184 大小:58035,结束 @ 4096219
     Atom mvhd @ 4038192 大小:108,结束 @ 4038300
     Atom trak @ 4038300 大小:57386,结束 @ 4095686
         Atom tkhd @ 4038308 大小:92,结束 @ 4038400
         ...
     Atom udta @ 4095686 大小:533,结束 @ 4096219
         原子元 @ 4095694 大小:525,结束 @ 4096219
             Atom hdlr @ 4095706 大小:33,结束 @ 4095739
             Atom ilst @ 4095739 大小:279,结束 @ 4096018
                 Atom ©nam @ 4095747 大小:31,结束 @ 4095778
                 ...
分段错误(核心转储)

这里mdat包含实际的音频/视频数据(在这种情况下只是一个音频流)并moov包含元数据(例如moov.udta.meta.ilst.©nam是轨道标题)。