是否可以在编译时使用嵌入在swf中的数据播放视频(使用[Embed]
metatag)?
Flash CS3等提供的“导入视频 - >嵌入”功能是不可接受的,因为它有许多严重的限制(包括声音同步问题,最大帧数和其他警告)
我有兴趣将swv视频数据捆绑在swf(以及其他资源)中,这些数据将由AIR应用程序播放。
我不认为可以做到。有人不同意吗?
答案 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)
祝你有美好的一天!