我需要构建一些东西,在文件中途开始向 Flash 播放器提供 H.264 编码视频(以支持跳到视频中尚未缓冲的点)。

目前,视频采用 FLV 容器格式,但可以选择转码。我设法重写给定字节偏移量的文件头和元数据信息。这适用于较旧的视频,但不适用于 H.264 编码的文件。我怀疑这是因为文件内的视频标签也必须更改,这是不可行的(这会占用太多的处理能力)。

“正确”的做法是什么?

有帮助吗?

解决方案

Flash 播放器只有在下载了 MOOV Atom 后才能开始播放 H.264 视频。现有的伪流媒体提供程序只是为您提供一个 FLV 标头(文件的前 13 个字节或硬编码的标头),然后从给定的偏移量提供文件。如果您想制作 H.264 伪流媒体,则需要让它输出 FLV 标头,然后是 MOOV 原子,然后从给定偏移量提供文件的其余部分。如果您不使用 FLV 容器,则不需要 FLV 标头,但仍然需要 MOOV 原子。

不幸的是,我认为您无法使用磁盘上文件中的 MOOV 原子;它包含的信息不适合您提供的文件片段。因此,您必须解析现有原子并生成您自己的原子之一,该原子适合文件的服务部分。

如果 H.264 文件中存在复杂的结构,则伪流可能会更加复杂。如果解析文件不可行,恐怕您可能无法伪流媒体。

其他提示

@yoavf - 我认为 OP 对 FLV 文件内的 h.264 点播流的服务器端方面感兴趣。我认为重用现有球员对他来说是件好事。或者也许这是我自己的需求出来的?<:S

从 yoavf 的第二个链接,还有另一个链接到 Tinic Uro 的 网络视频到底发生了什么? . 。相关引用:

是否可以将 H.264 流放入传统的 FLV 文件结构中?会的,但我们强烈鼓励每个人都接受新的标准文件格式。在传输 H.264 时,FLV 结构存在功能限制,如果不重新设计文件格式,我们就无法克服这些限制。这是我们放弃传统 FLV 文件结构的原因之一。对于 FLV 流来说,专门处理序列头和序列尾是很棘手的。

因此,似乎人们可以修改 ffmpeg 编码(如果这就是您获取 FLV 的方式,就像我一样),或者可以采用新格式。嗯嗯....

你可以做两件事:

1)使用lighttpd及其mp4流媒体插件,它将动态生成所需的流媒体容器

2) 创建关键帧 FLV 并使用伪流脚本(如 XMOOV)来流式传输您的文件。

如果您需要 mp4/aac,您可以将它们放入 FLV 容器中,这让 adobe 很懊恼,但它确实有效。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top