2012-12-07 28 views
8

Android için özel bir video oynatıcısı geliştiriyorum, ancak wmv, avi, flv gibi android destekli video dosyalarından (mp4, 3gp ...) daha fazla oynamalıyım.JavaCV ve FFmpeg ile video oynatma

Şu anda herhangi bir video türünü .mp4'e dönüştürüyorum ve bunları yeniden kaydettikten sonra oynayabiliyorum, ancak bu wmv, avi dosyalarını mp4'e kaydetmeden nasıl çalabilirim bilmiyorum.

Android'de herhangi bir videoyu, onları kaydetmeden kullanabileceğim bir yol var mı? JavaCV + FFmpeg kütüphanesi zaten çalışıyor, nasıl yapılacağını bilmiyorum. Bu arada

heres ben videoları yeniden kodlanmasına kullanıyorum kodu:

ilk
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

Uzun bir süredir araştırıyorum ve hala yanıt yok. Kimse? – Wamasa

cevap

0

Eğer CanvasFrame sonra kullanmak oluşturmak "canvas.showImage (captured_frame);" "recorder.record (captured_frame)" yerine;

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

Ses hakkında ne var? – Moonlit

+1

Android hakkında soru sordu, bence abput masaüstü uygulamasını yanıtladı –

0

Onları Recoding olmadan Android'de herhangi bir video oynatabilir herhangi bir yolu var mı: İşte

kodudur?

Videoyu neden kaydediyorsunuz ?? Video kaydetmeye gerek yoktur. JavaCv.

Size bu fikri nasıl sağlayabileceğinizi anlatan örnek kod.

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(); 
İlgili konular