7

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

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

什么是“正确”的方法?

4

3 回答 3

3

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

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

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

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

于 2008-09-15T11:10:31.430 回答
2

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

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

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

于 2008-09-19T12:30:18.670 回答
0

你可以做两件事:

1) 使用 lighttpd,它是 mp4 流媒体插件,可以即时生成所需的流媒体容器

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

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

于 2008-12-15T16:51:32.267 回答