如何做 Flash 伪流?

Posted

技术标签:

【中文标题】如何做 Flash 伪流?【英文标题】:How to do Flash pseudo-streaming? 【发布时间】:2010-09-08 21:22:04 【问题描述】:

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

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

什么是“正确”的做法?

【问题讨论】:

有趣的问题...我将在接下来的几周内自己做这个。您能否详细说明您在使用 FLV 方法时遇到的问题?我原以为它会正常工作... 【参考方案1】:

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

在 yoavf 的第二个链接中,还有另一个指向 Tinic Uro 的What just happened to video on the web? 的链接。相关引述:

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

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

【讨论】:

就像我说的,转码/重新混合是一种选择。但是我不能只是切碎一个文件并期望它能够工作,afaik。我想知道最好的方法是什么。 我切掉非 264 FLV 就好了! :) 准备 FLV 标头,它工作得很好。 是的,非 264 我开始工作了 - 这很容易。但是 264 没有运气。你是对的 - 我说的是服务器端(我们已经在使用 JW ;)) 如果你弄明白了,请告诉我:D 我很快就会这样做......【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

你可以做两件事:

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

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

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

【讨论】:

以上是关于如何做 Flash 伪流?的主要内容,如果未能解决你的问题,请参考以下文章

flash按钮的阴影效果如何做

使用 Nginx 的分布式和缓存 MP4 伪流(搜索)

flash网站加载太慢,如何加进度条

Flash如何与dll文件通信

flash cs5.5中如何实现边缘模糊遮罩

flash里面,位图动态缩小,如何消除锯齿?