3

最近我的任务是使用 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
4

1 回答 1

2

文档中所述-movflags

mov/mp4/ismv 多路复用器支持分片。qt-faststart通常,MOV/MP4 文件将所有数据包的所有元数据存储在一个位置(写在文件末尾,可以使用该工具将其移至开头以便更好地播放)。分片文件由许多片段组成,其中数据包和有关这些数据包的元数据存储在一起。写入碎片文件的优点是即使写入中断,文件也可解码(而普通的 MOV/MP4 如果没有正确完成,则无法解码),并且在写入非常长的文件时需要更少的内存(因为写入普通的 MOV /MP4 文件将有关每个数据包的信息存储在内存中,直到文件关闭)。 缺点是它与其他应用程序的兼容性较差。

要么切换到可以处理碎片 MP4 文件的 Flash 播放器,要么使用更好地支持流式传输的不同容器格式。

此外,-re它是一个仅输入选项,因此在输入之前而不是在输出之前指定它会更有意义。

于 2012-07-23T19:26:56.937 回答