Flash伪流该怎么办?
我需要构建一些东西,以便在文件中途开始向Flash播放器提供H.264编码的视频(以支持跳至尚未缓冲的视频点)。
目前,视频采用FLV容器格式,但可以选择转码。我设法针对给定的字节偏移重写了文件头和元数据信息。这适用于较早的视频,但不适用于H.264编码的文件。我怀疑这是因为文件中的视频标签也必须更改,这是不可行的(这会占用过多的处理能力)。
什么是"正确"的方法?
解决方案
回答
@yoavf我认为OP对FLV文件内按需点播h.264的服务器端方面很感兴趣。我认为,重用现有球员对他会很好。也许那是我自己的需求出来的? <:S
从yoavf的第二个链接开始,还有另一个指向Tinic Uro的链接。网络上的视频刚刚发生了什么? 。相关报价:
Will it be possible to place H.264 streams into the traditional FLV file structure? It will, but we strongly encourage everyone to embrace the new standard file format. There are functional limits with the FLV structure when streaming H.264 which we could not overcome without a redesign of the file format. This is one reason we are moving away from the traditional FLV file structure. Specifically dealing with sequence headers and enders is tricky with FLV streams.
因此,似乎可以修改ffmpeg编码(如果像我一样,这就是我们获取FLV的方式),或者可以采用新格式。嗯...
回答
一旦下载了MOOV原子,Flash Player就只能开始播放H.264视频。现有的伪流提供程序只是为我们提供FLV头文件,即文件的前13个字节或者硬编码的FLV头,然后从给定的偏移量开始提供文件。如果要制作H.264伪流媒体,则需要让它输出FLV标头,然后输出MOOV原子,然后根据给定的偏移量提供文件的其余部分。如果我们不使用FLV容器,则不需要FLV标头,但仍然需要MOOV原子。
不幸的是,我认为我们将无法使用磁盘上文件中的MOOV原子;它包含的信息不适用于我们所服务的文件片段。因此,我们必须解析现有原子,并生成适合于文件的服务部分的我们自己的原子。
如果H.264文件中包含复杂的结构,则伪流可能会更加复杂。如果解析文件不可行,恐怕我们可能无法对媒体进行伪流传输。
回答
我们可以做两件事:
1)使用lighttpd和它的mp4流插件,可以动态生成所需的流容器
2)创建关键帧FLV,并使用伪流脚本(如XMOOV)流文件。
如果我们需要mp4 / aac,则可以将它们放入FLV容器中,这对Adobe来说很让人恼火,但这确实可行。