在as3中访问视频像素的最快方法是什么?

时间:2014-10-09 10:15:33

标签: performance actionscript-3 flash video bitmapdata

我想将1080p视频中的像素从一个位置有效地复制到另一个位置/尽可能减少对CPU的影响。

到目前为止,我的实施非常简单:

  • 使用BitmapData的draw()方法从视频中抓取像素
  • 使用BitmapData的copyPixels()来混洗像素

理想情况下,这会产生尽可能少的CPU影响,但我的选项已经用完了,并且可以使用经验丰富的actionscript 3开发人员提供的一些技巧。

我用Scout描述了我的代码并注意到CPU使用率大多在70%左右,但是相当于100%。我已查看StageVideo但其中一个主要限制是:

  

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

是否有更直接的方式来访问视频像素,而不是栅格化DisplayObject?

我可以直接将每个视频帧作为ByteArray访问并将其插入BitmapData对象吗? (我发现appendBytes但它似乎与我在设置中需要的相反。

在动作脚本3中操作h264 1080p视频像素的CPU最友好的方法是什么?

此外,是否有更快的方法使用Flash Player移动像素而不是copyPixels()?另外,我看到Scout指出视频不是硬件加速的(.rend.video.hwrender: false) 。根据{{​​3}},不应该对h264视频进行硬件加速(即使没有舞台视频)(或仅适用于全屏模式)?

1 个答案:

答案 0 :(得分:2)

最新的AIR beta introduced视频作为纹理支持,您可以使用它来操纵GPU上的视频(并且比使用BitmapData更快)。但请记住,它目前只适用于Windows上的AIR,还有一些其他限制。