javaCV開發詳解之收流器實現
本章基于javaCV實現收流器功能和錄制功能
補充:基于本功能可以實現遠程流媒體服務器實時視頻錄制到本地
一、開發所依賴的包javacv.jar,javacpp.jar,ffmpeg.jar,ffmpeg-系統平臺.jar,opencv.jar,opencv-系統平臺.jar。 其中ffmpeg-系統平臺.jar,opencv-系統平臺.jar中的系統平臺根據開發環境或者測試部署環境自行更改為對應的jar包,比如windows7 64位系統替換為ffmpeg-x86-x64.jar
本章使用windows環境開發,基于javaCV的基礎支撐包以及ffmpeg-3.1.2-1.2.jar、ffmpeg-3.1.2-1.2-windows-x86.jar、ffmpeg-3.1.2-1.2-windows-x86_64.jar;
二、代碼實現本功能采用按幀實現收流器錄制功能
/** * 按幀錄制視頻 * @param inputFile-該地址可以是網絡直播/錄播地址,也可以是遠程/本地文件路徑 * @param outputFile * 該地址只能是文件地址,如果使用該方法推送流媒體服務器會報錯,原因是沒有設置編碼格式 * @throws FrameGrabber.Exception * @throws FrameRecorder.Exception * @throws org.bytedeco.javacv.FrameRecorder.Exception */public static void frameRecord(String inputFile, String outputFile, int audioChannel)throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {boolean isStart=true;//該變量建議設置為全局控制變量,用于控制錄制結束// 獲取視頻源FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);// 流媒體輸出地址,分辨率(長,高),是否錄制音頻(0:不錄制/1:錄制)FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 1280, 720, audioChannel);// 開始取視頻源recordByFrame(grabber, recorder, isStart);}
private static void recordByFrame(FFmpegFrameGrabber grabber, FFmpegFrameRecorder recorder, Boolean status)throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {try {//建議在線程中使用該方法grabber.start();recorder.start();Frame frame = null;while (status&& (frame = grabber.grabFrame()) != null) {recorder.record(frame);}recorder.stop();grabber.stop();} finally {if (grabber != null) {grabber.stop();}}}3、測試收流器錄制功能
inputFile設置為服務器播放地址,outputFile設置為本地地址,這里演示.mp4,也可以是flv等其他后綴名
public static void main(String[] args)throws FrameRecorder.Exception, FrameGrabber.Exception, InterruptedException { String inputFile = 'rtsp://admin:[email protected]:37779/cam/realmonitor?channel=1&subtype=0'; // Decodes-encodes String outputFile = 'recorde.mp4'; frameRecord(inputFile, outputFile,1);}
以上就是javaCV開發詳解之收流器實現的詳細內容,更多關于javaCV收流器的資料請關注好吧啦網其它相關文章!
相關文章:
