从播放h.264(mp4)视频的视频显示中捕获bitmapData

时间:2013-01-24 23:46:17

标签: actionscript-3 air

我有一个视频文件,我在Android Air应用程序中播放。我正在尝试使用bitmapData.Draw(video)捕获一个帧,但它仅适用于.flv视频。

视频在本地播放 - 没有互联网或服务器。

一旦我将视频更改为.mp4,它就会在舞台上播放,但在调用绘制函数后会有一个空白的bitmapData。我没有说任何错误。

如何从播放的.mp4视频中捕获帧?

注意 - 这是一个视频组件,而不是StageVideo,因为我知道StageVideo是不可能的。

网络流初始化。我还添加了checkPolicyFile = true - 它没有帮助。

my_nc.connect(null);
my_nc.client = this;

_ns = new NetStream(my_nc);
_ns.client = this;
_ns.useHardwareDecoder = true;
_ns.checkPolicyFile = true;

3 个答案:

答案 0 :(得分:4)

UPD: 似乎无法通过ActionScript在Android设备上的位图中绘制h.264视频。 我在移动FlashPlayer 11.1的mp4容器和具有相同功能的AIR 3.5应用程序中使用demo h.264编码的视频文件(它是sources)对此thisorigin)进行了测试代码,他们都失败了。我在所有渲染模式中都有黑色矩形(直接,cpu和gpu)。

可能的解决方法是编写本机扩展程序制作屏幕截图(我发现this一个,但报告可能会导致应用程序崩溃,但来源可能会有所帮助)并按已知矩形裁剪视频。这不是一个漂亮的解决方案,但我现在还没有看到其他变种。

答案 1 :(得分:0)

我曾经遇到类似的事情。 你有没有尝试将Video comp放在一个空精灵中并从中绘制。 即来自视频的父母,而不是直接。

答案 2 :(得分:0)

尝试this link显示的概念。

它建议如何绘制视频像素的容器( graphicsData 对象)。

myBitmap.bitmapData = GraphicsBitmapFill(vidContainer.graphics.readGraphicsData()[0]).bitmapData;