【问题标题】:Embedding binary video data in a swf file在 swf 文件中嵌入二进制视频数据
【发布时间】:2008-10-13 21:19:02
【问题描述】:

是否可以从编译时嵌入 swf 的数据中播放视频(使用 [Embed] 元标记)?

Flash CS3 等提供的“导入视频->嵌入”功能是不可接受的,因为它有许多严重的限制(包括声音同步问题、最大帧数和其他警告)

我对能够将 flv 视频数据捆绑到 swf(以及其他资产)中感兴趣,这将由 AIR 应用程序播放。

我认为这是不可能的。有人不同意吗?

【问题讨论】:

    标签: flash actionscript-3 air flv embedding


    【解决方案1】:

    只要你的视频是FLV,那么答案是肯定的——你可以使用NetStream.appendBytes()来播放嵌入的ByteArray

    public class Main extends MovieClip
    {
        [Embed(source="sample.flv", mimeType="application/octet-stream")]
        private var SampleVideo:Class;
    
        public function Main():void 
        {
            var video:Video = new Video(320, 240);
            addChild(video);
    
            var netConnection:NetConnection = new NetConnection();
            netConnection.connect(null);
            var netStream:NetStream = new NetStream(netConnection);
            netStream.client = {};
            video.attachNetStream(netStream);
    
            var byteArray:ByteArray = new SampleVideo();
            netStream.play(null);
            netStream.appendBytes(byteArray);
        }
    }
    

    【讨论】:

    • 哇!从 FP 10.1 开始!我怎么错过了?!干杯!
    【解决方案2】:

    您可以使用 Flash IDE 将 flv 导入 swf 文件 - 我以前做过。您可以像声音一样将它放到 MovieClip 的时间轴上,然后将该movieclip 放到舞台上播放。在 Flash CS3 中执行 File>Import>Import Video 并选择 flv。选择视频,然后在向导的下一站选择“嵌入.....”,这是一个指向Adobe Developer center article on embedding flvs into swfs 的链接。

    我自己没有这样做,但我看不出有什么理由可以从加载的 swf 的库中访问 flv。

    仅供参考:看起来这是一个被推迟的错误。 Adobe 目前似乎不允许使用 Embed 元标记进行嵌入。这是关于该问题的 forum post 和指向 bug tracker 的链接。

    【讨论】:

    • 不幸的是,这种方法有很多我无法忍受的警告。最大的一个是声音同步问题,但也有帧数限制和其他杂项限制。我已经更新了这个问题。感谢您的回答!
    • 感谢 James 提供的这些链接,尤其是 kirupa.com 线程。让我感觉不那么疯狂了。
    【解决方案3】:

    可以使用 Flash IDE 将视频嵌入到 SWF 中,但这不是一个很好的选择:

    “播放仅限于简单的播放和停止命令,而视频 帧率必须与主机匹配 电影,一个重要的考虑因素 将需要创作 最小公分母下载 速度。”

    "嵌入式的最大限制 视频是具有最多 16,000 帧和音频同步无法 保持超过大约两分钟。”

    这些报价来自this article。它有点老了,但据我所知,那里关于嵌入视频的说法仍然适用。

    【讨论】:

    • 这是一个很好的观点。我知道 Flash CS3 的“导入视频->嵌入”功能,但由于这些原因,它不是一个可接受的解决方案。我正在寻找嵌入视频的另一种方式。我在想像实例化 [Embed]ed 类并将其传递给视频播放器这样的事情。
    【解决方案4】:

    哦,是的,显然您可以使用Embed 元标记将二进制数据嵌入到 swf 中。

    [Embed(
        source="local_data_file.flv",
        mimeType="application/octet-stream") ]
    private static var __FlvClass123:Class;
    protected static var flvData:ByteArray = new __FlvClass123();
    

    是否可以从 ByteArray 播放嵌入视频不是我现阶段无法回答的问题...

    【讨论】:

      【解决方案5】:

      刚刚遇到同样的问题,并寻找更“灵活”的解决方案。 似乎这些 Days 动态嵌入非常简单:

      public function loadSWF(){
      
       var _assetLdr:Loader;
      _assetLdr = new Loader();
      _assetLdr.load(new URLRequest("1.swf"));
      _assetLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, this.handleComplete);
      addChild(_assetLdr); 
      }
      
      
      public function handleComplete(event:Event):void {
      
          trace("complete");
          var loaderInfo:LoaderInfo=event.target as LoaderInfo;
          var content:MovieClip = loaderInfo.loader.content as MovieClip;
          addChild(content);
      
      }
      

      注意:检查library.swf 内的屏幕偏移量。就我而言,他们搞砸了,所以它只是显示在屏幕外。 (感谢GodForCoffee) 祝你有美好的一天!

      【讨论】:

      • 哇。你说“这些天”? Flash 仍然......就像......存在?你让我大吃一惊!
      • 另外,我的问题实际上规定了嵌入,而这个解决方案是电影文件的运行时下载,除非我遗漏了什么。
      猜你喜欢
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2013-06-18
      • 2014-07-17
      • 1970-01-01
      相关资源
      最近更新 更多