Playing a video with JavaCV and FFmpeg

前端 未结 2 1292
自闭症患者
自闭症患者 2021-01-02 16:09

So, I\'m developing a custom video player for Android but I need to play more than the android supported video files (mp4, 3gp...), like wmv, avi, flv.

2条回答
  •  耶瑟儿~
    2021-01-02 16:26

    first you create the CanvasFrame then use "canvas.showImage(captured_frame);" instead of "recorder.record(captured_frame);"

    Here is the code:

    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();
    }
    }
    

提交回复
热议问题