2009-12-29 89 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>