2012-12-14 56 views
0

我試圖在我的應用程序中重現一個不支持android的視頻(如.wmv視頻),實際上我可以抓住每一幀並創建一個位圖的。因此,現在,我試圖在視頻視圖(或任何其他視圖)中顯示那些位圖,像視頻一樣。按順序顯示位圖,「像一個視頻」

一些代碼:

while (true) { 
       frame = frameGrabber.grab(); 
       if (frame == null) 
        break; 
       frame2 = 
         IplImage.create(frame.width(), frame.height(), 
           opencv_core.IPL_DEPTH_8U, 4); 
       opencv_imgproc.cvCvtColor(frame, frame2, 
         opencv_imgproc.CV_BGR2RGBA); 

       bm = 
         Bitmap.createBitmap(frame2.width(), 
           frame2.height(), Bitmap.Config.ARGB_8888); 
       bm.copyPixelsFromBuffer(frame2.getByteBuffer()); 
       canvas = new Canvas(bm); 
       mVideoView.draw(canvas); 
       canvas.save(); 

它看起來像我能搶(使用ffmpeg)來對視頻的每一幀,但我只是不知道如何顯示它們。順便說一下,我已經嘗試將此視頻編碼爲.mp4文件並在VideoView上播放它,但處理整個視頻需要花費很多時間(1小時),所以現在我是試圖顯示它馬上,沒有編碼它做.mp4(或任何其他Android支持的視頻)

任何建議?

回答

0

我不確定你的問題是什麼。

既然您的畫布被填充(假設它已被正確填充),您可以通過調用其繪製(畫布)方法在SurfaceView上繪製它。

雖然我很好奇結果,因爲如果花費你太多的時間來編碼完整的視頻,這可能意味着你的編碼很長,所以你可能會有嚴重的幀速率問題(或者視頻是極端的長?)。

2

您可以使用AnimationDrawable。它會工作。

1

您可以使用FFplay現場回放您的圖像序列。您無需首先將其編碼爲視頻文件。

說你的文件被命名爲image1.bmp,圖1.bmp,image3.bmp ......等等,你想打回以每秒30幀的嘗試:

ffplay -framerate 30 -i image%d.bmp