javacv實現實時視頻截圖和錄像服務easyCV,支持png,jpg截圖以及gif,apng動態圖片錄製

本項目維護於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開發詳解之1:調用本機攝像頭視頻

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[]爲例

實現給圖片增加圖片水印或者文字水印(也支持視頻圖像幀添加水印)

java原生實現屏幕設備遍歷和屏幕採集(捕獲)等功能

javacv文字識別系列:

javaCV文字識別之1:基於google的tesserac ocr識別圖片中的文字,跨平臺支持英文中文簡體繁體等各種字符識別

javaCV文字識別之2:視頻文字識別和視頻提取字幕文字字符

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更快的攝像頭讀取速度和效率,方便讀取後的圖像處理)

四、javacv圖像處理系列:國內車輛牌照檢測識別系統(萬份測試準確率99.7%以上)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章