2012-12-07 2 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);"대신 "

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

내가 그들을 재 코딩없이 안드로이드에있는 모든 비디오를 재생할 수있는 방법이 있나요 : 여기

코드인가?

왜 비디오를 녹화하고 있습니까 ?? 비디오를 녹화 할 필요가 없습니다. 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();