我希望能够高效地从一个位置复制1080p视频的像素到另一个位置,并且尽可能减少CPU的影响。目前我的实现相当简单:
- 使用BitmapData的draw()方法来获取视频中的像素 - 使用BitmapData的copyPixels()方法来移动像素
理想情况下,这应该尽可能减少CPU的影响,但是我已经没有更多的选择了,真的需要一些来自有经验的ActionScript 3开发者的技巧。
我使用Scout对我的代码进行了分析,发现CPU使用率大约在70%左右,但是经常超过100%。我研究了StageVideo,但主要限制之一是:
视频数据无法复制到BitmapData对象中(BitmapData.draw)。
是否有更直接的方法来访问视频像素,而不是将DisplayObject转换为位图? 我可以直接将每个视频帧作为ByteArray访问并插入到BitmapData对象中吗? (我发现appendBytes,但它似乎与我在设置中需要的相反)。 在ActionScript 3中,处理来自h264 1080p视频的像素最省CPU的方法是什么?此外,是否有一种更快的方法来移动像素而不是使用Flash Player的copyPixels()?另外,我看到Scout指出视频没有进行硬件加速(
- 使用BitmapData的draw()方法来获取视频中的像素 - 使用BitmapData的copyPixels()方法来移动像素
理想情况下,这应该尽可能减少CPU的影响,但是我已经没有更多的选择了,真的需要一些来自有经验的ActionScript 3开发者的技巧。
我使用Scout对我的代码进行了分析,发现CPU使用率大约在70%左右,但是经常超过100%。我研究了StageVideo,但主要限制之一是:
视频数据无法复制到BitmapData对象中(BitmapData.draw)。
是否有更直接的方法来访问视频像素,而不是将DisplayObject转换为位图? 我可以直接将每个视频帧作为ByteArray访问并插入到BitmapData对象中吗? (我发现appendBytes,但它似乎与我在设置中需要的相反)。 在ActionScript 3中,处理来自h264 1080p视频的像素最省CPU的方法是什么?
.rend.video.hwrender:false
)。根据this article,h264视频不应该进行硬件加速(即使没有stage video)吗?(或者这只适用于全屏模式)?
copyPixels()
是其中最快的方法之一,也许你可以通过getPixels()
或getVector()
获得稍微更快的速度,具体取决于你实际需要做什么。 - VesperBitmapData.draw()
被Adobe阻止了!!在播放文件时可以绘制,通过byteArray提供的完全相同或任何自定义视频数据都会引发策略文件错误(什么鬼?尽管我能理解他们这样做的原因)。 - VC.One