3

我正在尝试使用 Adob​​e Flex 和 libh264streaming 构建视频播放器应用程序。在小盒子里,我的小播放器工作得很好。

但是,如果视频更大,大约 200-300MB,我会看到很多问题:

  1. 浏览器崩溃。
  2. 它永远不会停止缓冲,一直下载直到获得整个视频(300M)。
  3. CPU使用率随着浏览器内存消耗而上升。

我猜 1. 和 1. 是造成 2. 因为播放器需要越来越多的内存来存储视频。

我想以某种方式限制缓冲区大小,并在达到上限后立即停止下载视频。我认为 YouTube 视频播放器就是这样工作的(查看播放器底部的播放器控件)。

任何想法如何在 Flex 中实现它?

4

4 回答 4

1

“libh264streaming”到底是什么?在谷歌上搜索它只会找到这个带有确切文本的线程。根据您的描述,听起来它根本没有流式传输视频,而只是提供渐进式下载。

渐进式下载有时被错误地称为流式传输。它只是一个普通的 HTTP 文件下载,只要视频头在文件的开头,Flash 就会开始播放文件,只要它有头加上一定的最小视频数据量(4 个关键帧我相信)。渐进式下载传统上不提供带宽限制或流式传输的其他优势,但最近一些提供了慢速下载的实现,这更接近于流式传输,并且可以在文件中间开始渐进式下载(动态重写标题)以允许人们跳转到中间没有下载整个东西。

Flash Player 仅支持 RTMP 流式传输。这是 Flash Media Server 和 Red5、rubyizumi 等几个开源选项支持的专有协议。Adobe 就在两天前宣布将发布 RTMP 并提供开放许可,因此您应该会在不久的将来看到更多支持 RTMP 的产品。流式传输提供与客户端和服务器的双向通信,因此服务器发送请求数量的帧作为缓冲区,客户端请求帧以根据需要填充缓冲区。服务器发送的内容不超过请求的内容,服务器可以搜索到各个点,只需要刷新缓冲区,而不是整个视频。

如果你想提供大文件,你可能需要一个真正的流媒体服务器。一种替代方法是将文件分解成块,根据需要下载它们并一个接一个地播放。这也会很复杂,但可行。

高温下,

山姆


我们正在招聘!华盛顿特区(或希望搬迁)的开发人员和 QA 应将简历发送至 careers@blinemedical.com。


于 2009-01-22T06:51:18.803 回答
1

我能够在 2 个 VideoDisplay 对象的基础上创建一个组件,这些对象以块的形式加载 mp4 文件(比如每个有 1 分钟的缓冲区)。一旦主显示器达到某个点(在我的情况下为缓冲区大小的 50%),辅助 VideoDisplay 就会开始加载视频。主视频完成后,组件立即切换到辅助显示。

这种方法使用 mod_h264_streaming 效果很好。搜索操作几乎可以立即工作。

于 2009-01-29T15:56:21.057 回答
0

我猜这个问题还没有人回答的部分原因是因为没有很好的答案。我当然不是 Flash 流媒体奥秘方面的专家,但我猜是为了至少发布一些东西来回应你,我猜,从阅读文档并亲自尝试一些事情,你正在尝试不能用 VideoDisplay 对象完全在 Flex 环境中完成;它可能需要在服务器上处理,或者至少在服务器和客户端之间处理,以便流得到正确传递和终止,并且 VideoDisplay 对象正常运行。

对不起,我希望我有一个更好的答案给你;如果还有其他人这样做,请随时加入。

于 2009-01-21T14:52:00.363 回答
0

很难确定,但看起来你提到的 lib 提供了一些控制机制来告诉服务器你想玩哪个块(我从他们网页上的声明中得到这个:......“你真的长视频剪辑,您不想将它们重新编码成更小的部分?我们还支持“虚拟视频剪辑”,因此您可以指定只播放视频的一部分或创建视频特定部分的下载链接。 "

对我来说,您似乎只需要添加一个控制结构,允许您(告诉服务器)以块的形式获取视频。

如果由于某种原因无法做到这一点,并且您只能访问原始数据流:

我需要知道您在 flex 中使用哪些接口来加载视频,但一般来说,您会添加一个接收 ProgressEvent 的侦听器并检查加载的字节(对于通用加载器对象)

您的另一个选择是使用读取和写入方法创建自己的套接字,当数据进入时,您可以使用它来检查字节计数器。您可以将读取的字节放入字节数组中,然后当您有一个可用的块时,您会需要将该字节数组转换为适合播放器对象的格式...

看看 flash.net.Socket

http://livedocs.adobe.com/flex/2/langref/flash/net/Socket.html

于 2009-01-22T00:57:41.093 回答