将二进制视频数据嵌入swf文件中

时间:2008-10-13 21:19:02

标签: flash actionscript-3 air flv embedding

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

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

我有兴趣将swv视频数据捆绑在swf(以及其他资源)中,这些数据将由AIR应用程序播放。

我不认为可以做到。有人不同意吗?

5 个答案:

答案 0 :(得分:7)

只要您的视频是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);
    }
}

答案 1 :(得分:2)

您可以使用Flash IDE将flv导入swf文件 - 之前我已经完成了。您可以将它放在MovieClip的时间轴上,就像声音一样,然后将该动画片段放到舞台上以供播放。在Flash CS3中执行文件>导入>导入视频并选择flv。选择视频,然后在向导的下一站选择“嵌入.....”,这是指向Adobe Developer center article on embedding flvs into swfs的链接。

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

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

答案 2 :(得分:1)

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

  

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

     

“嵌入式的最大限制   视频是最多的电影   16,000帧和音频同步不能   维持了大约两分钟。“

这些引用来自this article。这有点旧,但据我所知,关于嵌入视频的说法仍然适用。

答案 3 :(得分:0)

哦,是的,显然你可以使用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播放嵌入式视频不是我现在无法以这种或那种方式回答...

答案 4 :(得分:0)

遇到了同样的问题,并寻找了一个更好的" flex" ible解决方案。 似乎这些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中的屏幕偏移。在我的情况下,他们搞砸了,所以它只是在屏幕外显示。 (ThankGodForCoffee) 祝你有美好的一天!