一款視頻錄像機,支持AudioRecord錄音、MediaCodec輸出AAC、MediaMuxer合成音頻視頻並輸出mp4,支持自動對焦、屏幕亮度調節、錄製視頻時長監聽、手勢縮放調整焦距等git
目前包含基本的音頻、視頻錄製與合成操做,功能以下:github
未實現:ide
手動點擊屏幕聚焦縮放預覽畫面測試
橫屏預覽、錄製時上下滑動屏幕左半部分調節屏幕亮度、右半部分調節音頻音量編碼
預覽濾鏡貼紙、美顏等其它濾鏡功能code
音頻錄製時回聲消除、靜音降噪cdn
未實現緣由 : 該部份內容須要對OpenGL ES繪製原理、音頻數據存儲、手勢滑動處理、Camera相機聚焦等須要有深刻理解視頻
先後攝像頭切換 目前測試的華爲P8max上由後置切換爲前置時,始終報setParameters failed,通過逐行代碼驗證,是因爲設置parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO) 自動對焦致使,部分華爲、三星手機前置攝像頭不容許聚焦(目前自有測試機如此,若是有華爲、三星手機測試可行歡迎提供型號)blog
自動對焦失效問題 目前項目中自動對焦採用的是 : parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);遇到的問題就是移動屏幕時對焦會屏幕閃爍, 包括Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO;因手動點擊聚焦未實現,此處未深刻研究適配全部機型,歡迎測試其它機型並給出有效方案!圖片
設置Camera預覽大小、圖片大小致使setParameters failed 目前項目CameraManager管理類中,經過獲取手機設備支持的預覽大小、圖片大小,取最適合當前預覽的尺寸,解決上述問題;通常報setParameters failed須要檢查 對Camera.Parameters設置的參數仔細檢查
MediaCodec.queueInputBuffer參數中的時間戳問題 以前對該處時間戳計算公式理解有誤,致使錄製的視頻始終沒法播放,一幀音頻幀大小 int size = 採樣率 x 位寬 x 採樣時間 x 通道數,此處時間戳單位時微秒, pcm錄製的原始單位是bit,雙聲道16bit,採用byte[]、short[]裝載數據須要進行換算,1 byte = 8 bit,項目中有詳細註釋,歡迎查證!
目前該項目直接是以單個Activity承載預覽、錄製、閃光燈、切換鏡頭、黑白濾鏡、手勢縮放、SeekBar顯示縮放進度等功能,library提供的是aop權限申請庫
初始預覽 :
閃光燈 :
濾鏡:
錄製中 :
後置切換前置 :
播放水印視頻 :
歡迎加入星球一塊兒討論項目、研究新技術,共同成長!