我有这部长达1分钟的电影要编译成AS3项目。电影以MOV格式开始,因此我使用FFMpeg将其转换为FLV,然后再使用FFMpeg将其从FLV转换为SWF。
我正在使用Embed
元数据将此电影嵌入到AS3二进制文件中:
[Embed(source="1.swf")] private var _Vid:Class;
我有一个容器Sprite,可以添加这部电影。在添加之前,我将嵌入的电影转换为MovieClip:
var vid:Object = new _Vid(); return vid as MovieClip;
当我将生成的影片剪辑添加到舞台时,它立即开始播放并且似乎播放正常。但是,当我检查影片剪辑的totalFrames属性时,它返回0.并且影片剪辑似乎不响应对stop
或gotoAndStop
的调用。
我通过在Flash IDE中将电影嵌入到SWF中然后以相同的方式嵌入结果来获得相同的行为,所以看起来某些事情与我将它添加到舞台的方式完全没有关系。有什么想法吗?
编辑:作为产品的要求,as3电影无法从外部文件加载视频。它必须被编译,因此执行播放的结果.swf可以完全独立运行,而不必依赖其他外部文件。
编辑2:进一步检查后,由以下内容产生的MovieClip实例
[Embed(source="1.swf")] private var _Vid:Class;
var vid:Object = new _Vid(); return vid as MovieClip;
有一个子对象属于Loader类,该子对象没有子对象。我尝试将孩子直接作为MovieClip投射,但无济于事。
编辑3:从我正在阅读的here和here开始,NetStream对象的10.1 api公开了一个名为appendBytes的方法。我仍然需要进一步研究这个问题,但我可以将.flv文件作为八位字节流嵌入,并将字节手动输入到Net Stream对象以播放视频。我会将测试结果发布在几个......
答案 0 :(得分:3)
我最终将视频嵌入为二进制数据:
[Embed(source="1004.flv", mimeType="application/octet-stream")]
然后使用NetStream.appendBytes()
将视频提供给连接到Video
对象的NetStream。这非常有效,NetStream可以暂停和重放。
答案 1 :(得分:1)
查看这些教程
http://gotoandlearn.com/play.php?id=46
http://gotoandlearn.com/play.php?id=129
我认为,如果将视频嵌入到MovieClip中,那么您可以期待的唯一行为就是您现在所获得的内容。它会播放但你无法控制它。
为什么你坚持要嵌入它?它会使你的文件变大,直到swf完全加载后视频才会播放。这是一个简短的视频,但它仍然需要比通过渐进式下载访问它更长的时间。
不可否认,第二个教程没有太多相关性,但为什么不添加它,它为您提供了更多关于如何处理Flash中媒体的范围。 OSMF是一个新的框架,我认为了解它是有意义的。