【问题标题】:Flex VideoDisplay stop bufferingFlex VideoDisplay 停止缓冲
【发布时间】:2010-10-02 12:06:29
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: flash video apache-flex h.264


    【解决方案1】:

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

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

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

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

    HTH,

    山姆


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


    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

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

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

        看看 flash.net.Socket

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-20
          • 2011-05-14
          • 2012-01-15
          • 2015-10-29
          • 1970-01-01
          • 2015-05-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多