最近我有一个任务,使用 ffmpeg 作为转码和流媒体工具。任务是将文件从给定格式转换为 MP4,并通过从标准输出捕获它立即流式传输。到目前为止,一切都很好。流媒体与 Android 选项卡的本机播放器以及 VLC 播放器配合良好。问题出在 Flash 播放器上。它给出以下错误:
NetStream.Play.FileStructureInvalid :Adobe Flash 无法导入具有无效文件结构的文件。
使用的 ffmpeg 标志是
$ ffmpeg -loglevel quiet -i somefile.avi -vbsf h264_mp4toannexb -vcodec libx264 \
-acodec aac -f MP4 -movflags frag_keyframe+empty_moov -re - 2>&1
如前所述在文档中-movflags
mov/mp4/ismv 复用器支持分段。通常,MOV/MP4 文件将所有数据包的所有元数据存储在一个位置(写在文件末尾,可以使用以下命令将其移动到开头以便更好地播放)qt-faststart
工具)。分片文件由许多片段组成,其中数据包和有关这些数据包的元数据存储在一起。写入分段文件的优点是,即使写入中断,文件也可解码(而普通 MOV/MP4 如果未正确完成则无法解码),并且在写入很长的文件时需要较少的内存(因为写入普通 MOV /MP4 文件将有关内存中每个数据包的信息存储到文件关闭为止)。缺点是与其他应用程序的兼容性较差。
要么切换到可以处理碎片 MP4 文件的 Flash 播放器,要么使用更好支持流媒体的不同容器格式。
Also, -re
is an input-only option, so it would make more sense to specify it before the input, instead of before the output.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)