3

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

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

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

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

4

5 回答 5

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);
    }
}
于 2012-03-27T09:47:45.710 回答
2

您可以使用 Flash IDE 将 flv 导入 swf 文件——我以前做过。您可以像声音一样将它放到 MovieClip 的时间轴上,然后将该movieclip 放到舞台上播放。在 Flash CS3 中执行 File>Import>Import Video 并选择 flv。选择视频,然后在向导的下一站选择“嵌入.....”,这是Adob​​e 开发人员中心关于将 flvs 嵌入 swfs 的文章的链接。

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

仅供参考:看起来这是一个被推迟的错误。Adobe 目前似乎不允许使用 Embed 元标记进行嵌入。这是有关该问题的论坛帖子和错误跟踪器的链接。

于 2008-10-13T21:41:29.493 回答
1

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

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

“嵌入视频的最大限制是电影的最大帧数为 16,000 帧,并且音频同步无法保持超过大约两分钟。”

这些引文来自这篇文章。它有点旧,但据我所知,那里关于嵌入视频的说法仍然适用。

于 2008-10-14T15:45:05.733 回答
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 播放嵌入的视频并不是我现阶段无法以一种或另一种方式回答的问题......

于 2010-03-25T20:39:45.397 回答
0

刚刚遇到同样的问题并寻找更“灵活”的解决方案。似乎这些 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)祝您有美好的一天!

于 2018-05-31T04:45:43.033 回答