javaCV系列文章:java
javacv開發詳解之1:調用本機攝像頭視頻windows
javaCV開發詳解之2:推流器實現,推本地攝像頭視頻到流媒體服務器以及攝像頭錄製視頻功能實現(基於javaCV-FFMPEG、javaCV-openCV)服務器
javaCV開發詳解之3:收流器實現,錄製流媒體服務器的rtsp/rtmp視頻文件(基於javaCV-FFMPEG)網絡
javaCV開發詳解之4:轉流器實現(也可做爲本地收流器、推流器,新增添加圖片及文字水印,視頻圖像幀保存),實現rtsp/rtmp/本地文件轉發到rtmp流媒體服務器(基於javaCV-FFMPEG)測試
ui
javaCV開發詳解之6:本地音頻(話筒設備)和視頻(攝像頭)抓取、混合並推送(錄製)到服務器(本地)編碼
javaCV開發詳解之7:讓音頻轉換更加簡單,實現通用音頻編碼格式轉換、重採樣等音頻參數的轉換功能(以pcm16le編碼的wav轉mp3爲例)spa
補充篇:
.net
音視頻編解碼問題:javaCV如何快速進行音頻預處理和解複用編解碼(基於javaCV-FFMPEG)線程
音視頻編解碼問題:16/24/32位位音頻byte[]轉換爲小端序short[],int[],以byte[]轉short[]爲例
本章使用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 start=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(); } } }
public static void main(String[] args) throws FrameRecorder.Exception, FrameGrabber.Exception, InterruptedException { String inputFile = "rtsp://admin:admin@192.168.2.236:37779/cam/realmonitor?channel=1&subtype=0"; // Decodes-encodes String outputFile = "recorde.mp4"; frameRecord(inputFile, outputFile,1); }到這裏咱們已經實現了直播功能的所有基本操做:推流,錄製,簡單的直播系統和多人視頻等已經能夠實現了;