2012-12-07 15 views
8

Quindi, sto sviluppando un lettore video personalizzato per Android, ma ho bisogno di giocare più dei file video supportati da Android (mp4, 3gp ...), come wmv, avi, flv.Riproduzione di un video con JavaCV e FFmpeg

In questo momento faccio già convertire qualsiasi tipo di video in .mp4 e sono in grado di riprodurli dopo la ricodifica, ma non ho idea di come riprodurre quei file wmv, avi senza ricodificarli in mp4.

C'è un modo per riprodurre qualsiasi video su Android senza ricodificarli? La libreria JavaCV + FFmpeg funziona già, ma non so come fare.

A proposito, ecco il codice che sto usando per ricodificare i video:

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

Ho cercato per un po 'di tempo e ancora nessuna risposta. Chiunque? – Wamasa

risposta

0

prima si crea il tela-telaio quindi usare "canvas.showImage (captured_frame);" invece di "recorder.record (captured_frame);"

Ecco il codice:

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

Che cos'è l'audio? – Moonlit

+1

Ha chiesto di Android, penso che tu abbia risposto all'app per desktop abput –

0

C'è un modo posso giocare qualsiasi video su Android senza ricodifica?

Perché stai registrando il video ?? Non è necessario registrare il video. JavaCv.

Questo è un codice di esempio per darvi un'idea, come raggiungerla.

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(); 
Problemi correlati