2009-12-29 50 views
2

我需要编写一个小型Flash应用程序,它需要从正在播放的视频中提取视频帧。它不需要保存到用户的硬盘。我只需要获取图像数据并将其显示在Flash电影中。提取的框架将由用户选择,这就是为什么我想纯粹在客户端完成此操作(尽管我知道我可以从服务器端完成)。以编程方式从Flash中的视频中提取帧

我试过寻找解决方案,但没有得到任何有用的结果。作为一名Flash新手,我还没有看到任何代码,因为我不知道从哪里开始。

所以闪存大师,有没有办法做到这一点?

回答

4

如果您使用BitmapData's draw() method在Flash中对DisplayObject进行“屏幕抓取”。

如果你有什么某处显示FLV有点向右,或向下,你可以试试:

var cloneData:BitmapData = new BitmapData(video.width,video.height,false,0x000000); 
cloneData.draw(video); 
//test 
addChild(new Bitmap(cloneData)); 

古德勒克!

+0

完美,非常感谢 - 已张贴了我的概念证明全为他人,但是这是导致分辨率的答案:) – 2009-12-29 02:17:55

3

在阅读乔治的答案后,这就是我想出的概念证明。在这里发布,所以它不污染原来的问题。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="video.load()"> 
<mx:VideoDisplay id="video" x="0" y="0" source="/content/content.flv" /> 
<mx:Button x="10" y="10" label="Grab" click="grabClick()"/> 
<mx:Button x="71" y="10" label="Play" click="video.play()"/> 
<mx:Button x="130" y="10" label="Pause" click="video.pause()"/> 
<mx:Script> 
    <![CDATA[ 
    import mx.controls.*; 
    import flash.display.BitmapData; 

    private function grabClick():void { 
    var bitdata:BitmapData = new BitmapData(video.width, video.height, false, 0x0); 
    bitdata.draw(video); 
    var grabResult:Image = new Image(); 
    grabResult.x = 0; 
    grabResult.y = video.height; 
    grabResult.source = new Bitmap(bitdata); 
    addChild(grabResult); 
    } 
    ]]> 
</mx:Script> 
</mx:Application>