wjavaCV系列文章:
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更快的攝像頭讀取速度和效率,方便讀取後的影像處理)
一、前言
前面十章,我們已經可以獲取攝像機、桌面/視窗螢幕、視訊檔案、流媒體等視訊畫面,以及錄製檔案,推流到流媒體服務等等方式,根據之前的文章也可以實現截圖。
上一章我們主要生成“gif”動態圖片,本章主要針對圖片的另一個png的擴充套件動態圖片型別”apng“做特殊處理。
非常重要:
收回下面這句話,FFmpegFrameRecorder可以支援apng動態圖片錄製,不需要定製的FrameRecorder的程式碼請參考後面的優化後程式碼。
由於javaCV的FrameRecorder實現不支援apng動態圖片錄製,所以我們對FFmpegFrameRecorder進行擴充套件實現出支援apng的錄製器。本章的ApngFrameRecorder是在上一章GifFrameRecorder實現程式碼的基礎上進行擴充套件實行,參考上一章文章最後。擴充套件兩個部分:
1、設定apng格式
在上一章327行,if (imageWidth > 0 && imageHeight > 0) 後面新增一個apng格式設定
else if("apng".equals(format_name)) {
oformat.video_codec(AV_CODEC_ID_APNG);
}2、設定畫素格式
在上一章430行,video_c.pix_fmt(AV_PIX_FMT_RGB4_BYTE);後面再新增一個畫素格式設定
else if(video_c.codec_id() == AV_CODEC_ID_APNG) {
//support apng codec
video_c.pix_fmt(AV_PIX_FMT_RGBA);//png is argb pixel format,i guess apng is same
}
完整檢視本章:https://blog.csdn.net/eguid_1/article/details/106660093