【问题标题】:Play FLV from ByteArray in Flash Player在 Flash Player 中从 ByteArray 播放 FLV
【发布时间】:2010-12-05 22:19:39
【问题描述】:

我有一个存储在 ByteArray 对象中的 Flash 视频文件 (FLV),我想播放这个视频。有没有办法实现它?也许使用炼金术?

谢谢!

【问题讨论】:

    标签: apache-flex flash actionscript-3 video flv


    【解决方案1】:

    我不会问为什么是ByteArray?您的问题的答案是肯定的,但最终结果会很慢 - 当视频更大且编解码器复杂时会更慢。您必须读取帧并将它们作为 BitmapData 放入 Bitmap 并编写自己的播放器。最好的方法是使用 Alchemy - 然后它运行得更快但也很慢 :) 你也可以使用 Haxe。

    以非常相似的方式发出声音。最好的起点是 adobe labs。 最后 - 请记住 flv 是使用硬件解码的 - 您的代码将仅使用处理器。现在问问自己是否真的需要这个功能?

    【讨论】:

      【解决方案2】:

      Loader+MovieClip 技巧可能是唯一可行的方法,see this

      对于限制:2 分钟的限制对于 rtmfp2p 来说很好,因为分发更大的字节数组无论如何都是不可行的。

      假设播放指标(播放头/当前帧)可用,平滑过渡应该不是问题 - 开始播放第二个 swf 并设置 mute/visible=false 直到时间线同步,然后翻转视频和声音 - 这非常有效非常适合 netstream/play(),但对于普通的 swf 还不太确定。

      另一个问题是弄清楚 flv 数据导入 swf 的确切方式以及如何在运行时在 as3 中构造正确的 swf。到目前为止,mxmlc/swfmill 无法为我直接嵌入 FLV(已经有一段时间了,事情可能已经改变),只有普通的 flash AS3 能够创建带有视频的 bytearray-loadable swf。不过应该是可以的。

      在相关的说明中 - 一个问题是,这一切是否值得麻烦 - 如果要建立一个成功的网站,其中包含像这样的 p2p VOD,Adobe 还不如切线(破解类似没有 swf 电影剪辑的东西要从字节数组加载的嵌入视频...)。

      【讨论】:

        【解决方案3】:

        我认为“为什么是 ByteArray”实际上是个问题……它是如何到达那里的? :)

        有很多方法......康拉德给出了一种......但正如他所说,它会很慢......事实上,我认为它会比你想象的要慢得多......所以在这里另一个:

        将 ByteArray 传递到服务器并从那里加载 flv ... 有几个选项:

        • 远程服务器:将其加载到远程服务器(可能是分发您的 swf 的服务器)...仍然留下一个问题,为什么您不首先从那里分发 flv...
        • 本地服务器:
          1. 已安装:只需安装一个小型本地应用程序即可为您完成此操作,也就是说,您可以将字节数组推送到那里,然后通过合适的协议(HTTP、RTMP)检索它...
          2. browser-embedded: 与安装相同,但您可以简单地创建一个 Java Applet 来完成这项工作...signed java applet 允许绑定端口(是的,这是用户的额外点击,但它是尽可能舒适)这是您必须要做的,其余的与已安装的服务器完全相同...

        在这两种情况下,您都可能遇到跨域策略问题(可能仅在发送时,因为我认为您可以跨域加载视频),您需要正确响应 FlashPlayer 的策略文件请求(您可以找到大量的东西)...您可以通过创建 LocalConnection 桥来绕过发送限制,如 C# 的 this one ...

        那么祝你好运... ;)


        编辑: 啊好吧,现在我明白了...实际上,已经有一个very similar question ...我记得在宣布p2p功能后不久,我对某个土坯家伙进行了简短采访... adobe 对此很害羞... 实际上,在 flash player 10 正式发布后,我花了数周时间才找到 p2p(之前真的没有时间打扰)...

        实际上,我认为这是故意的……在采访中,已经明确表示,adobe 并没有试图推开视频流媒体网站……最重要的两个可能是 youtube 和 google video .. . youtube 是 Fl​​ash 播放器一开始如此受欢迎的主要原因之一......它归谷歌所有,因为谷歌视频......允许轻松创建 p2p 媒体平台会让谷歌很生气...... . 你不需要很多服务器......“只是”好的软件,但这是负担得起的......我认为,adobe 不想惹恼谷歌......一些原因:

        • 他们是搜索引擎
        • 他们需要谷歌来允许索引基于 Flash 的网站
        • google 大了 n 倍
        • 谷歌真的想在 RIA 市场上占有一席之地……他们有GWT、chrome、V8native client……

        所以我想 adobe 并没有那么大的兴趣这样做......这有点像谷歌宣布他们的支付系统(是 GPay 还是这样?),这是 PayPal 的直接并发... eBay 是谷歌最重要的收入来源之一...实际上我再也没有听说过它...

        许多决定都是政治性的,当涉及到大公司时......我认为,不让 Flash Player 的 p2p 过于强大的决定就是其中之一......


        【讨论】:

        • 感谢您的回答。我担心这些是我唯一的选择,而您刚刚确认了这一点(我希望我忽略了其他一些方法)。回答 WHY 问题 :) - 我正在使用 Flash Player 10 中提供的新功能处理 p2p 媒体流,并且我在客户端的 ByteArray 中有视频,但无法显示它 :) 干杯再次感谢您的回答。
        【解决方案4】:

        现在有一种更好的方法可以使用NetStream.appendBytes() 播放您存储在ByteArray 中的视频。

        这是一个使用示例:http://www.bytearray.org/?p=1689

        【讨论】:

        • 有没有办法解决 appendBytes() ?闪光灯
        【解决方案5】:

        我不确定这是否可行,因为我不知道 Flash 如何编码嵌入 SWF 的视频,但也许您可以将该 flv 字节数组转换为将 flv 嵌入时间轴的 swf 并使用该字节数组来显示它与 Loader.loadBytes...

        【讨论】:

        • +1 ...好主意...但我不知道视频是如何嵌入到 SWF 中的...我一直有这样的印象,它们以某种方式被转换,这需要解码...
        • 这是个好主意。音频(mp3)已经完成了,所以视频可能是可能的...flexiblefactory.co.uk/flexible/?p=46
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-11
        • 1970-01-01
        相关资源
        最近更新 更多