本項目維護於github:https://github.com/eguid/easyCV
更新日誌
2019年4月更新:
1、新增兩個springboot+postgre的演示demo
2、去除了corelib錄像API中不合理的持久層接口
1、介紹
本項目的截圖庫基於ffmpeg,錄像庫基於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層實現了錄製器對象池來實現線程複用,錄製器作爲線程控制器來控制工作線程的開始、暫停、恢復,結束錄像的操作。
管理器--->固定大小對象池--->錄製器--->工作線程
javaCV系列文章:
javaCV開發詳解之2:推流器實現,推本地攝像頭視頻到流媒體服務器以及攝像頭錄製視頻功能實現(基於javaCV-FFMPEG、javaCV-openCV)
javaCV開發詳解之3:收流器實現,錄製流媒體服務器的rtsp/rtmp視頻文件(基於javaCV-FFMPEG)
javaCV開發詳解之4:轉流器實現(也可作爲本地收流器、推流器,新增添加圖片及文字水印,視頻圖像幀保存),實現rtsp/rtmp/本地文件轉發到rtmp流媒體服務器(基於javaCV-FFMPEG)
javaCV開發詳解之5:錄製音頻(錄製麥克風)到本地文件/流媒體服務器(基於javax.sound、javaCV-FFMPEG)
javaCV開發詳解之6:本地音頻(話筒設備)和視頻(攝像頭)抓取、混合並推送(錄製)到服務器(本地)
javaCV開發詳解之7:讓音頻轉換更加簡單,實現通用音頻編碼格式轉換、重採樣等音頻參數的轉換功能(以pcm16le編碼的wav轉mp3爲例)
javaCV開發詳解之8:轉封裝在rtsp轉rtmp流中的應用(無須轉碼,更低的資源消耗,更好的性能,更低延遲)
javaCV開發詳解之9:基於gdigrab的windows屏幕畫面抓取/採集(基於javacv的屏幕截屏、錄屏功能)
javaCV開發詳解之10:基於dshow調用windows攝像頭視頻和音頻,想要獲取屏幕畫面首選gdigrab
javaCV開發詳解之11:視頻轉gif動態圖片實現,也支持攝像機、桌面屏幕、流媒體等視頻源轉gif
javaCV開發詳解之12:視頻轉apng動態圖片實現,支持透明通道,支持攝像機、桌面屏幕、流媒體等視頻源轉apng動態圖
補充篇:
javaCV開發詳解補充篇:基於avfoundation的蘋果Mac和ios獲取屏幕畫面及錄屏/截屏以及攝像頭畫面和音頻採樣獲取實現
音視頻編解碼問題:javaCV如何快速進行音頻預處理和解複用編解碼(基於javaCV-FFMPEG)
音視頻編解碼問題:16/24/32位位音頻byte[]轉換爲小端序short[],int[],以byte[]轉short[]爲例
javacv文字識別系列:
javaCV文字識別之1:基於google的tesserac ocr識別圖片中的文字,跨平臺支持英文中文簡體繁體等各種字符識別
javacpp-ffmpeg系列:
javacpp-FFmpeg系列之1:視頻拉流解碼成YUVJ420P,並保存爲jpg圖片
javacpp-FFmpeg系列之2:通用拉流解碼器,支持視頻拉流解碼並轉換爲YUV、BGR24或RGB24等圖像像素數據
javacpp-FFmpeg系列之3: 圖像數據轉換(BGR與BufferdImage互轉,RGB與BufferdImage互轉)
javacpp-FFmpeg系列補充:FFmpeg解決avformat_find_stream_info檢索時間過長問題
javacpp-opencv系列:
一、javaCV圖像處理之1:實時視頻添加文字水印並截取視頻圖像保存成圖片,實現文字水印的字體、位置、大小、粗度、翻轉、平滑等操作
二、javaCV圖像處理之2:實時視頻添加圖片水印,實現不同大小圖片疊加,圖像透明度控制
三、javacv圖像處理3:使用opencv原生方法遍歷攝像頭設備及調用(方便多攝像頭遍歷及調用,相比javacv更快的攝像頭讀取速度和效率,方便讀取後的圖像處理)