Performance 什么';在as3中,访问视频像素的最快方式是什么?

Performance 什么';在as3中,访问视频像素的最快方式是什么?,performance,actionscript-3,flash,video,bitmapdata,Performance,Actionscript 3,Flash,Video,Bitmapdata,我希望将1080p视频中的像素从一个位置高效地复制到另一个位置,同时尽可能少地影响CPU 到目前为止,我的实现相当简单: 使用BitmapData的draw()方法从视频中获取像素 使用BitmapData的copyPixels()将像素左右移动 理想情况下,这将有尽可能少的CPU影响,但我已经没有选择,可以真正使用一些经验丰富的actionscript 3开发人员的提示 我已经用Scout分析了我的代码,注意到CPU使用率大部分在70%左右,但有相当一部分超过了100%。我已经研究过,但其

我希望将1080p视频中的像素从一个位置高效地复制到另一个位置,同时尽可能少地影响CPU

到目前为止,我的实现相当简单:

  • 使用BitmapData的draw()方法从视频中获取像素
  • 使用BitmapData的copyPixels()将像素左右移动
理想情况下,这将有尽可能少的CPU影响,但我已经没有选择,可以真正使用一些经验丰富的actionscript 3开发人员的提示

我已经用Scout分析了我的代码,注意到CPU使用率大部分在70%左右,但有相当一部分超过了100%。我已经研究过,但其中一个主要限制是:

无法将视频数据复制到BitmapData对象中 (BitmapData.draw)

有没有一种更直接的方式来访问视频像素,而不是光栅化显示对象

我是否可以直接以字节数组的形式访问每个视频帧,并将其插入BitmapData对象中? (我发现了,但它似乎与我在设置中需要的正好相反)

在actionscript 3中,操作h264 1080p视频中的像素最方便CPU的方法是什么?


另外,除了使用Flash Player的copyPixels()外,还有没有更快的方法来移动像素?另外,我看到Scout指出视频不是硬件加速的(
.rend.video.hwrender:false
)。h264视频不应该根据硬件加速(即使没有舞台视频)吗(或者这仅适用于全屏模式)?

最新的AIR beta视频作为纹理支持,您可以使用它在GPU上操作视频(这样做比使用位图数据更快)。但请记住,它目前仅在Windows上可用,还有一些其他限制。

我想说,使用多个抽象层处理这一大数据集的速度不应该比现有的更快,是的,
copyPixels()
是最快的方法之一,使用
getPixels()
getVector()
,您可能会更快一点,这取决于您实际需要对它们做什么。感谢您清除有关copyPixels()的信息。你知道直接从视频中获取像素的方法吗(不必使用BitmapData'draw())?不必费心抓取字节。在从压缩解码之前,不会有任何像素(即:编写自己的自定义h.264解码器)。如果您使用appendBytes作为解码快捷方式,那么是的,字节会变成像素,但是猜猜看是什么
BitmapData.draw()
已被Adobe阻止!!在播放文件可能会绘制的地方,通过byteArray提供的完全相同或任何自定义视频数据都会引发策略文件错误(wtf?尽管我可以理解他们为什么这样做)。您可以尝试将h.264转换为h.263(在FLV容器中)并嵌入SWF,然后可以加载该文件并逐帧绘制/效果。不要实时进行,而是将至少几秒钟的位图数据缓冲到某个byteArray中,然后附加.@VC.One感谢您的黑客嵌入想法,但我需要使用动态内容。自定义解码器选项听起来很有趣,也许可以用alchemy/CrossBridge做一些事情,并将大部分内容保留在GPU上,但感觉有点过头了谢谢你的建议(+1),我不知道。但是,我需要使用Flash Player运行时,而不是AIR,并支持尽可能多的桌面系统。你知道Flash Player的类似方法吗?不知道,恐怕没有其他方法可以在不使用BitmapData的情况下高效地将帧上传到GPU。但我很肯定未来Flash播放器会支持VideoTexture,所以在此之前,您应该坚持使用BitmapData方法。