2012-12-07 77 views
8

Android用のカスタム動画プレーヤーを開発していますが、wmv、avi、flvなどのAndroid対応動画ファイル(mp4、3gp ...)以上のものを再生する必要があります。JavaCVとFFmpegで動画を再生

私はすでにビデオタイプを.mp4に変換していますが、私はそれらを再コーディングして再生することができますが、mp4にレコーディングせずにこれらのwmv、aviファイルをどのように再生することはできません。

Androidで動画を再生する方法はありますか? JavaCV + FFmpegライブラリは既に動作していますが、それを行う方法はわかりません。ところで

、HERESに私はビデオを再コーディングするために使用しているコード:

最初
public static void convert(File file) { 

    FFmpegFrameGrabber frameGrabber = 
      new FFmpegFrameGrabber(file.getAbsolutePath()); 

    IplImage captured_frame = null; 

    FrameRecorder recorder = null; 
    recorder = new FFmpegFrameRecorder("/mnt/sdcard/external_sd/videosteste/primeiroteste.mp4", 300, 300); 
    recorder.setVideoCodec(13); 
    recorder.setFrameRate(30); 
    recorder.setFormat("mp4"); 
    try { 
     recorder.start(); 
     frameGrabber.start(); 
     while (true) { 
      try { 
       captured_frame = frameGrabber.grab(); 

       if (captured_frame == null) { 
        System.out.println("!!! Failed cvQueryFrame"); 
        break; 
       } 
       recorder.record(captured_frame); 
      } catch (Exception e) { 
      } 
     } 
     recorder.stop(); 
     recorder.release(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+1

私はかなりの時間を探していますが、答えはまだありません。誰でも? – Wamasa

答えて

0

あなたはCanvasFrameが、その後使用作成 "canvas.showImage(captured_frameを);" "recorder.record(captured_frame);"の代わりに "recorder.recordここで

はコードです:

public class GrabberShow implements Runnable 
{ 
    final static int INTERVAL=40;///you may use interval 
    IplImage image; 
    static CanvasFrame canvas = new CanvasFrame("JavaCV player"); 


    public GrabberShow() 
    { 
     canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); 
    } 


    public static void convert(File file) 
    { 

    FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(file.getAbsolutePath()); 

    IplImage captured_frame = null; 

    FrameRecorder recorder = null; 
    //recorder = new FFmpegFrameRecorder("/mnt/sdcard/external_sd/videosteste/primeiroteste.mp4", 300, 300); 
    recorder = new FFmpegFrameRecorder("D://temp.mp4", 300, 300); 
    recorder.setVideoCodec(13); 
    recorder.setFrameRate(30); 
    recorder.setFormat("mp4"); 
    try { 
     recorder.start(); 
     frameGrabber.start(); 
     while (true) { 
      try { 
       captured_frame = frameGrabber.grab(); 

       if (captured_frame == null) { 
        System.out.println("!!! Failed cvQueryFrame"); 
        break; 
       } 
       //recorder.record(captured_frame); 
       canvas.showImage(captured_frame); 
       Thread.sleep(INTERVAL); 
      } catch (Exception e) { 
      } 
     } 
     recorder.stop(); 
     recorder.release(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
@Override 
public void run() 
{ 
    convert(new File("D://aes.mp4")); 
} 

public static void main(String[] args) { 
    GrabberShow gs = new GrabberShow(); 
    Thread th = new Thread(gs); 
    th.start(); 
} 
} 
+0

オーディオについて – Moonlit

+1

彼はアンドロイドについて尋ねました、私はあなたがデスクトップアプリ –

0

私はそれらを再コーディングすることなく、Android上の任意のビデオを再生することができます方法はありますか?

なぜビデオを録画していますか?ビデオを録画する必要はありません。 JavaCv。

これは、どのように達成できるか、あなたにアイデアを提供するためのサンプルコードです。

FrameGrabber grabber = new FrameGrabber(videoFile); 
grabber.start(); 
BufferedImage image= null; 
while((image=grabber.grab())!=null){ 
    // TODO set the image on the canvas or panel where ever you want. 
} 
grabber.stop(); 
関連する問題