在此线程中,VLC 开发人员表示 VLC 无法播放部分下载的 mp4 文件,因为信息存储在文件末尾。但最近当我测试相同的东西时,在 Chrome 中添加一个 mp4 任务并将部分 .crdownload 传递给 VLC,它起作用了。VLC 播放 mp4 时没有出现故障。我没有让下载完成并在中间停止播放器以节省带宽,但我相信它会在 Chrome 仍在下载时播放整个媒体。我还能够通过视频进行搜索,这是一些未完成的视频格式所不允许的。这是怎么回事?我正在做一个媒体流媒体作为一个宠物项目,我真的很想知道我是否可以启动下载并在下载一定数量的字节后通过命令行将媒体传递给 vlc。
MP4 文件可以在开头或结尾包含元数据块。它通常在新编码文件的末尾,因为编码器可能不知道要写入什么值,直到完成对整个视频的编码(尤其是搜索所需的部分)。
但是,在为在线流式传输准备 MP4 文件时,通常会将元数据移至开头,例如,如本博文所述。(换句话说,您不是第一个想要这样做的人——这是网络浏览器的日常业务。)
注意:尽管该帖子显示正在完成完整的重新编码,但我不确定是否真的需要这样做——只需重新混合
-codec copy -movflags faststart
并避免质量损失就足够了。您可以使用一些工具来查看给定 MP4 文件的实际结构,例如:
这里
mdat
包含实际的音频/视频数据(在这种情况下只是一个音频流)和moov
元数据(例如moov.udta.meta.ilst.©nam
曲目标题)。