2009-01-20 67 views
3

我正尝试使用Adobe Flex和libh264streaming构建视频播放器应用程序。小小的球员工作得很好。Flex VideoDisplay停止缓存

但是如果视频是更大的约200-300MB我看到的问题一大堆: 一)浏览器中得到crashy 二)它从未停止缓冲,继续下载,直到它得到整个视频(300M) C)CPU使用量增加,因此浏览器内存消耗

我猜a)和c)是由于b)因为玩家需要越来越多的内存来存储视频。

因此,我想以某种方式限制缓冲区大小,并尽快停止下载视频。我认为youtube视频播放器就是这样工作的(查看播放器底部的播放器控件)。

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

谢谢

回答

1

究竟是什么 “libh264streaming”?在Google上搜索它只会以这个确切的文字打开这个线索。从你的描述来看,它听起来好像根本不会流式传输视频,只是提供渐进式下载。

渐进式下载有时被错误地称为流式传输。它只是一个文件的正常HTTP下载,只要视频标题位于文件的开头,Flash就会在文件头带有一定数量的视频数据后立即开始播放文件(4个关键帧I相信)。渐进式下载传统上不提供带宽限制或流式传输的其他优点,但最近一些提供的实现可以慢慢下载,这更接近于流媒体,并且可以在文件中间启动渐进式下载(动态重写标题),以便人们跳转到中间没有下载整个事情。

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

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

HTH,

山姆


我们正在招聘!华盛顿特区地区的开发人员和QA(或正在寻找搬迁)应将简历发送至[email protected]


+0

对不起,我输入它完全错误。我的意思是mod_h264_streaming http://h264.code-shop.com/trac。 – user43685 2009-01-22 18:53:36

0

我猜的没有一个人回答了这一个又是因为有它没有很大的答案的部分原因。我当然不是Flash流媒体专家,但为了发布至少一些对你的回应,我猜测,从阅读文档和实际尝试一些自己的东西,你试图要做的事情不能完全用VideoDisplay对象完成,而完全在Flex环境中完成;这可能是需要在服务器上或至少在服务器和客户端之间进行处理的情况,以便正确传送和终止流,并且VideoDisplay对象正常运行。

对不起,我希望我对雅有更好的答案;如果有其他人在那里,请随时登录。

0

很难说清楚,但它看起来像你提到的库提供了一些控制机制来告诉服务器你想玩的块(我是从他们网页上的声明中获得:“你有很长的视频剪辑,你不想将它们重新编码成更小的部分?我们也支持'虚拟视频剪辑',所以你可以只指定回放视频的一部分或创建下载链接到视频的特定部分。“

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

如果那不是po因为什么原因,你只需要访问原始数据流:

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

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

看看flash.net.Socket

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

1

我能够创建2的VideoDisplay对象的加载在块MP4文件在基座上的组件(含有各1个分钟缓冲器说)。当主显示器达到特定点时(即我的情况下为缓冲区大小的50%),辅助VideoDisplay会立即开始加载视频。主视频结束后,组件即会翻转到辅助显示。

这种方法使用mod_h264_streaming很好。寻求行动几乎立即开展。