Actionscript 3 它';它太慢,无法在Flash播放器中以视频形式显示图像序列

Actionscript 3 它';它太慢,无法在Flash播放器中以视频形式显示图像序列,actionscript-3,flash,apache-flex,loader,Actionscript 3,Flash,Apache Flex,Loader,起初我是一个新的Flex程序员。我的需求与@Michael Pliskin相同,但我需要通过Flash Player在浏览器中显示图像序列以制作视频动画。在@Michael的帖子中,Cookieoffort给了我们一个建议: 可以使用图像控件作为电影帧,然后加载BitmapData对象的缓冲区。输入图像时,用图像填充BitmapData对象,然后调用图像加载函数加载缓冲区中的下一个图像 正如Cookieoff的建议,完整的代码是什么 在阅读了Adobe AS3.0在线文档和《Essential

起初我是一个新的Flex程序员。我的需求与@Michael Pliskin相同,但我需要通过Flash Player在浏览器中显示图像序列以制作视频动画。在@Michael的帖子中,Cookieoffort给了我们一个建议:

可以使用图像控件作为电影帧,然后加载BitmapData对象的缓冲区。输入图像时,用图像填充BitmapData对象,然后调用图像加载函数加载缓冲区中的下一个图像

正如Cookieoff的建议,完整的代码是什么

在阅读了Adobe AS3.0在线文档和《Essential ActionScript3.0》一书之后,我写了如下代码:

1.使用Java语言的TCP服务器发送所有jgp文件(总共6697个文件,约2分钟),每个文件具有两个字节的文件长度数据前缀

2.flex AS3.0类DisplayAssetLoader扩展了Sprite,在Sprite中连接TCP服务器以接收所有二进制字节

3.DisplayAssertLoader类中间隔为50毫秒(20帧/秒)的计时器,用于呈现从TCP服务器获取的字节

一切正常,但在IE10中jpg图像的播放速度非常慢。我的密码有什么问题吗?或者,还有其他方法可以将jpg序列作为电影播放吗?如果有人给出完整的代码,我非常感激

所有代码都在这里:

1.Java代码片段:TCP服务器用二进制文件发送jpg文件

//
//---…接受套接字连接(阻塞,直到
//联系
//(已制作)
socket=server.accept();
//---创建输出流
ps=新的BufferedOutputStream(socket.getOutputStream());
对于(int i=1;i<6697;i++){
String fileName=“D:/Program Files/Adobe/Adobe Flash Builder 4.7/workspace/JPGFilerServer/bin/jpg/image“+i+”.jpg”;
//将文件读入我们的字节数组
读取文件(文件名);
//---写入字节并关闭连接
ps.write(字节);
System.out.println(“==写入文件:image”+i+”,确定,bytes=“+bytes.length”);
}
2.Flex作为脚本作为图像播放客户端:

包{
导入flash.display.Loader;
导入flash.display.Sprite;
导入flash.events.Event;
导入flash.events.IOErrorEvent;
导入flash.events.ProgressEvent;
导入flash.events.TimerEvent;
导入flash.net.Socket;
导入flash.system.Security;
导入flash.text.TextField;
导入flash.utils.ByteArray;
导入flash.utils.Timer;
导入flash.utils.getTimer;
公共类DisplayAssetLoader扩展了Sprite{
[source=“spritesheets/browncollector.png”]
公共var BrownCollector:类;
//表示“传输结束”ASCII字符的常数
公共静态常数EOT:int=4;
//用于显示状态消息的屏幕文本字段
私有变量statusField:TextField;
//将在其上进行通信的套接字对象
私有var套接字:socket;
//一种字节缓冲区,用于在加载时存储资产的二进制数据
私有变量缓冲区:ByteArray=newbytearray();
//用于从中生成资源的加载程序对象
//加载的二进制数据
私有变量加载器:加载器;
专用变量定时器:定时器;
//类构造函数
公共函数DisplayAssetLoader(){
跟踪(“沙盒类型:“+Security.sandboxType”);
//现在,创建将生成
//从加载的字节中删除资源
加载器=新加载器();
loader.contentLoaderInfo.addEventListener(Event.INIT,
资产监管者);
定时器=新定时器(50,0);
timer.addEventListener(TimerEvent.timer,TimerEvent);
//创建状态文本字段
statusField=新文本字段();
statusField.border=true;
statusField.background=true;
statusField.width=statusField.height=350;
statusField.x=300;
statusField.y=0;
addChild(statusField);
//创建套接字对象
套接字=新套接字();
//注册套接字事件
socket.addEventListener(Event.CONNECT,connectListener);
socket.addEventListener(Event.CLOSE,closeListener);
socket.addEventListener(ProgressEvent.socket_数据,
socketDataListener);
socket.addEventListener(IOErrorEvent.IO_ERROR,ioErrorListener);
//告诉用户我们将尝试连接到套接字
输出(“正在尝试连接…”);
timer.start();
//尝试连接到套接字
试一试{
socket.connect(“localhost”,7777);
}捕获(e:错误){
输出(“连接问题!\n”);
输出(e.message);
}
}
受保护函数timerEvent(事件:timerEvent):无效
{

如果(buffer.lengthFirst,
计时器
永远无法满足您的需要。请将其替换为
ENTER\u FRAME
事件,并使用
flash.utils.getTimer()管理更新间隔
。其次,对性能影响最大的可能是Flash将位图渲染到屏幕的阶段。您可以预缓冲屏幕外的位图()。也就是说,因为它们不仅仅是几个图像,而是一个相当长的帧串,所以实现一个工作线程(),用于解压/光栅化。谢谢@Atriace,我尝试过输入帧事件,但没有更好的改进。正如您所说,性能问题在于渲染,所以我将尝试预缓冲,谢谢。您是否获得过适用于图像序列方法的解决方案,或者您是否切换到视频?@Atriace是的,使用图像序列方法解决了问题中国。