JavaCV入門指南系列:
JavaCV入門指南:調用FFmpeg原生API和JavaCV是如何封裝了FFmpeg的音視頻操作
JavaCV入門指南:調用opencv原生API和JavaCV是如何封裝了opencv的圖像處理操作
JavaCV入門指南:幀抓取器(FrameGrabber)的原理與應用
JavaCV入門指南:幀錄制器/推流器(FrameRecorder)的原理與應用
JavaCV入門指南:幀過濾器(FrameFilter)的原理與應用
JavaCV入門指南:FrameConverter轉換工具類及CanvasFrame圖像預覽工具類(完結篇)
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開發詳解之13:使用FFmpeg Filter過濾器處理音視頻
javaCV開發詳解之16:使用一張圖片推流和一張圖片錄制成視頻文件
javaCV開發詳解之17:GIF和APNG動態圖片推流和錄制成視頻文件(以gif轉mp4為例)
補充篇:
javaCV開發詳解補充篇:基於avfoundation的蘋果Mac和ios獲取屏幕畫面及錄屏/截屏以及攝像頭畫面和音頻采樣獲取實現
javaCV開發詳解之GIF動態圖片錄制補充篇:windows桌面屏幕畫面錄制成gif動態圖片,支持桌面任意取域生成gif,可擴展支持MacOS/安卓/linux等平台,可擴展支持apng動態圖片
音視頻編解碼問題:javaCV如何快速進行音頻預處理和解復用編解碼(基於javaCV-FFMPEG)
音視頻編解碼問題:16/24/32位位音頻byte[]轉換為小端序short[],int[],以byte[]轉short[]為例
實現給圖片增加圖片水印或者文字水印(也支持視頻圖像幀添加水印)
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%以上)
前言
從2016年6月開始寫《javacv開發詳解》系列,到而今的《javacv入門指南》,雖然僅隔了兩年多時間,卻也改變了很多東西。
比如我們的流媒體技術群從剛開始的兩三個人發展到現在的三個500人群。又比如博主剛開始也想放棄,期間自行腦洞內心掙扎的場面也就不詳說了,結果是現在還在堅持更新博客。當然這期間離不開群里小伙伴們一直以來的陪伴和支持,感謝大家一起默默為java流媒體技術踩坑,踩的多了也就真的成了路(也可能踩成深坑 )。另外感謝雷霄驊博士的ffmpeg博客,給予博主很大幫助,2016年剛開始接觸ffmpeg就忽聞博士去世,甚為感慨,大家且行且珍惜吧。
以前從來不覺得java可以做流媒體、音視頻編解碼這些,直到現在,頂多說java做流媒體是非主流。業界廣泛應用的librtmp、live555、ffmpeg也都是c/c++的庫,剛開始也確實嘗試過使用jni方式調ffmpeg,發現做起來吃力不討好,后來在github發現了新大陸:javaCV。
有,總比沒有強。雖然連個API文檔都沒有,通過github項目描述的那可憐的幾個字勉勉強強知道它對ffmpeg、opencv等等等十幾個庫做了封裝,用javacpp方式為fmpeg、opencv等庫編譯了各個系統環境的包方便跨平台調用。
一些題外話
踩坑到今天,可能還會有許多人躊躇疑惑javacv除了可以在音視頻和圖像處理這塊稍微可以施展手腳外,還可以做什么?除了這些,在應對各種紛繁復雜的流媒體協議(rtp/rtsp/rtmp/flv/hls等等)也不在話下,當然一些小眾和國產協議(比如sip/gb28181/jtt178等)可能需要依賴netty/mina等網絡庫來實現,編解碼上結合javaCV,性能上也已經沒有什么顧慮。另外在深度學習領域,deeplearning4j借助javaCV的東風令java在深度學習領域也同樣引領風騷。
本系列將結合《javacv開發詳解》系列作為實戰教程,結合實例,力求簡單易懂,快速上手。
一、老生常談
javaCV能做什么,既然是"CV"大法,那自然是計算機視覺領域的庫,諸如音視頻、流媒體、圖像處理、深度學習、機器學習、人工智能等等等(現在流行后面這三個,寫上去應該能唬住不少人,deeplearning曉得不,里面一堆的javaCV庫沒發現嗎)。
二、入門基礎
以上全是些空話,我們無非就是要用javaCV采集視頻和音頻,給這些音視頻編解碼,然后是用什么封裝格式封裝這些音視頻數據,以及用什么協議傳輸,可能還要對視頻里的圖像進一步進行處理(這個屬於圖像處理范疇),流程大致如此(音頻方面了解不多,大家見諒):
完整閱讀本章:https://blog.csdn.net/eguid_1/article/details/82875343