1. 程式人生 > >javacv實現實時視訊截圖和錄影服務easyCV

javacv實現實時視訊截圖和錄影服務easyCV

1、介紹

本專案基於javaCV1.4.x。

其中實現了

(1)實時視訊截圖服務(支援rtsp/rtmp/http-flv/hls/file等視訊源),圖片儲存格式支援png/jpeg/jpg/gif等等,支援base64和圖片儲存兩種方式,同時支援兩種同時儲存/返回。

(2)視訊錄影服務支援rtsp/rtmp/http-flv/hls/file等實時視訊或檔案錄影,支援手動暫停和恢復錄製,支援手動開始和結束錄製,支援儲存mp4/flv/mkv/avi等等錄影視訊,配合http/ftp服務可以實現線上點播。

(3)web服務使用springboot,僅作為demo使用,並沒有實現持久化;截圖的base64資料和歷史記錄儲存在Map中,圖片檔案儲存在指定路徑;錄影歷史記錄儲存在map中,檔案儲存在硬碟。

截圖wbe服務使用8081埠,錄影預設使用8082埠。

通過訪問ip:port/test測試截圖和錄影,通過ip:post/檢視截圖錄像歷史列表(可檢視截圖,點播錄影視訊,需要配置http點播服務)

2、實現原理

(1)截圖服務直接使用了javacpp-ffmpeg方式,解決了javaCV的FFmpegGrabber在檢索實時視訊資訊時導致的阻塞問題,同時優化了ByteOutputStream和Base64的轉換效能。

(2)錄影服務直接使用了javaCV方式,通過實現的固定大小的執行緒池來提升資源複用率,轉封裝情況下解決了FFmpegRecorder下推流至rtmp的pts為空的bug。

執行緒池實現:通過錄制器繫結執行緒方式,在manager層實現了錄製器物件池來實現執行緒複用,錄製器作為執行緒控制器來控制工作執行緒的開始、暫停、恢復,結束錄影的操作。

管理器--->固定大小物件池--->錄製器--->工作執行緒