我正在尝试使用Adobe Flex和libh264streaming构建视频播放器应用程序。在小盒子里我的小球员工作得很好。
但是,如果视频大约200-300MB,我会看到一堆问题:
我猜1.和1.是由于播放器需要越来越多的内存来存储视频。
我希望以某种方式限制缓冲区大小,并在达到上限后立即停止下载视频。我认为YouTube视频播放器就是这样(看着播放器底部的播放器控件)。
有关如何在Flex中实现它的任何想法?
到底是什么“libh264streaming”?在Google上搜索它只显示具有该确切文本的此主题。从你的描述听起来它根本不是流媒体视频,而只是提供渐进式下载。
渐进式下载有时被错误地称为流式传输。它只是文件的正常HTTP下载,只要视频标题位于文件的开头,Flash就会在标题加上一定的最小视频数据后立即开始播放文件(4个关键帧我相信)。渐进式下载传统上不提供带宽限制或流式传输的其他优势,但最近有些提供了下载缓慢的实现,这种实现更接近流式传输并且可以在文件中间开始渐进式下载(动态重写头部)以允许人们跳转到中间没有下载整个东西。
Flash Player仅支持RTMP进行流式传输。这是Flash Media Server支持的专有协议和一些开源选项,如Red5,rubyizumi。 Adobe仅在两天前宣布它将发布并提供RTMP的开放许可,因此您应该会在不久的将来看到更多支持RTMP的产品。 Streaming提供与客户端和服务器的双向通信,因此服务器发送请求数量的帧作为缓冲区,客户端请求帧以根据需要填充缓冲区。服务器发送的数量不超过请求数,服务器只需要刷新缓冲区而不是整个视频就可以查找各个点。
如果要提供大型文件,则可能需要真正的流式服务器。另一种方法是将文件分解成块,根据需要下载并一个接一个地播放。那也很复杂,但可行。
HTH,
他自己
我们正在招聘!华盛顿特区(或寻求搬迁)的开发人员和QA应将简历发送至[email protected]。
我能够在2个VideoDisplay对象的基础上创建一个组件,以块的形式加载mp4文件(比如每个缓冲区1分钟)。只要主显示器达到某个点(在我的情况下为缓冲区大小的50%),辅助VideoDisplay就开始加载视频。主视频完成后,组件将立即翻转到辅助显示屏。
使用mod_h264_streaming,这种方法非常有效。寻求操作几乎立即工作。
我猜的部分原因是没有人回答这个问题,因为没有一个很好的答案。我当然不是Flash流媒体的专家,但是为了发布至少一些回复你的东西,我猜测,通过阅读文档并亲自尝试一些事情,你正在尝试使用VideoDisplay对象并且完全在Flex环境中无法完成;它可能需要在服务器上处理,或者至少在服务器和客户端之间处理,以便流正确地传递和终止,VideoDisplay对象只是正常运行。
对不起,我希望我有更好的答案;如果有其他人在那里,请随意加入。
很难说出来,但看起来你提到的lib提供了一些控制机制来告诉服务器你想要播放哪个块(我从他们网页上的声明中得到这个:......你真的长视频剪辑并且您不想将它们重新编码为较小的部分?我们还支持“虚拟视频剪辑”,因此您可以指定仅播放视频的一部分或创建到视频特定部分的下载链接。 “
对我来说,似乎你只需要添加一个控制结构,允许你(告诉服务器)以块的形式获取视频。
如果由于某种原因无法实现,您只需访问原始数据流:
我需要知道你在flex中使用哪些接口加载视频,但一般情况下,你会添加一个接收ProgressEvent的监听器并检查加载的字节(对于一个通用的加载器对象)
你的另一个选择是使用读写方法创建自己的套接字,你可以用它来检查数据进来时的字节计数器。你可以将字节读取到bytearray中,然后当你有一个可用的块时,你会需要将该字节数组转换为适合播放器对象的格式...
看看flash.net.Socket
(Qazxswpoi)