1. 程式人生 > >javacv + rtsp +ffmpge 設定編碼格式 幀率

javacv + rtsp +ffmpge 設定編碼格式 幀率

private boolean isStart = true;

public void frameRecord(String inputFile, String outputFile, int audioChannel)             throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {                           // 獲取視訊源                  FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);                  grabber.setOption("rtsp_transport","tcp");                  grabber.setFrameRate(30);                  grabber.setVideoBitrate(3000000);                  // 流媒體輸出地址,解析度(長,高),是否錄製音訊(0:不錄製/1:錄製)                 FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 1280, 720,audioChannel);                  recorder.setFrameRate(30);                 recorder.setVideoBitrate(3000000);                 recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); //avcodec.AV_CODEC_ID_H264  //AV_CODEC_ID_MPEG4                 recordByFrame(grabber, recorder);                               }

    private void recordByFrame(FFmpegFrameGrabber grabber, FFmpegFrameRecorder recorder)             throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {         try {// 建議線上程中使用該方法                          grabber.start();             recorder.start();             //CanvasFrame canvas = new CanvasFrame("攝像頭");//新建一個視窗         //    canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);             //canvas.setAlwaysOnTop(true);

            long t1 = System.currentTimeMillis();                          Frame frame = null;             

            while (isStart && (frame = grabber.grabFrame()) != null) {                 long t2 = System.currentTimeMillis();                   if(t2-t1 > 2*60*60*1000){                         break;                     }else{                         recorder.record(frame);                         //TODO your work                     }                 //canvas.showImage(grabber.grab());//獲取攝像頭影象並放到視窗上顯示, 這裡的Frame frame=grabber.grab(); frame是一幀視訊影象             }             recorder.stop();             grabber.stop();                      } finally {             if (grabber != null) {                 grabber.stop();             }         }     }