我用自己的 MP4 (h264+AAC) 编码文件尝试了 qt-faststart,并且总是收到“文件中的最后一个原子不是 moov 原子”错误消息(并且没有输出文件)。然后我假设我的文件没问题并搜索了其他问题。经过数小时的测试,我的假设被证明是错误的——事实上,我的文件似乎根本没有 moov-atom ,无论是开头还是结尾都没有!
为了成功解决这个问题,我首先使用 ffmpeg 来“重新生成”文件——也就是说,将原始 h264+AAC 轨道重新混合到一个新的 MP4 文件中,而不重新编码它:
ffmpeg -i souce_file.mp4 -acodec copy -vcodec copy target_file_1.mp4
在此之后,新文件的末尾应该有其正确的 moov-atom。因此,现在您可以使用 qt-faststart 将其移至开头,正如 Kit 在他的回答中解释的那样:
qt-faststart target_file_1.mp4 target_file_2.mp4
之后,当文件开始下载时,mediaelement 会在单击播放按钮后立即播放我所有的视频!:)
如果您的问题是您已经在类似 youtube 的站点中拥有所有文件,您的主机是基于 Linux 的,ffmpeg 不存在并且您无法自行编译它,您会发现获取 ffmpeg 的静态构建很有用。你可以在这里找到:
http://ffmpeg.gusari.org/static/(32位)或此处:
http ://dl.dropbox.com/u/24633983/ffmpeg/index.html (64 位)
不幸的是,在我使用的 32 位版本中,没有 qt-faststart,既不是二进制也不是源代码。在这种情况下,您可以从 ffmpeg SVN 下载它并直接使用 gcc 编译它。我在我的超便宜共享主机中成功地做到了。它似乎没有任何构建依赖项。或者您甚至可以尝试我自己的 qt-faststart 二进制构建,看看它是否适合您。
编辑:我刚刚发现在较新的版本中根本不需要 qt-faststart。您可以使用以下选项直接使用 ffmpeg 进行编码:
-movflags +faststart