錄制小視頻和語音的封裝

MediaUtils

1: Android 的 MediaRecorder 相信用過的同學(xué)一定踩過很多坑
2: 之前寫的代碼很亂,現(xiàn)在重構(gòu)了一下,可以直接放到自己的項目中用
3:本例子將 MediaRecorder 進(jìn)行了重構(gòu),通過 MediaUtils 對外暴露幾個必需的方法來實現(xiàn)錄像和錄音功能
4:錄制視頻界面參考新版微信小視頻,還原了微信的動畫效果
5:支持 Android 7.0
6:通過線程及 Exception 等手段避免了常見的 start failed , stop failed 等問題
7:重繪了錄制視頻和錄音時的兩個自定義view,可在原本基礎(chǔ)上進(jìn)行二次開發(fā)
8:提供了視頻截圖方法,支持雙擊放大,支持自動對焦
9:視頻錄制暫時使用 SurfaceView + Camera , 后續(xù)會升級為 TextureView + Camera2

效果圖

638069-787db3e8ff6746a0 (1).gif
638069-4b9c1a6aead2891f.gif

核心類

MediaUtils

重構(gòu)后對外暴露只有8行代碼,可結(jié)合實際情況使用

// 初始化
      MediaUtils mediaUtils = new MediaUtils(this);
      mediaUtils.setRecorderType(MediaUtils.MEDIA_VIDEO);
      mediaUtils.setTargetDir(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES));
      mediaUtils.setTargetName(UUID.randomUUID() + ".mp4");
      mediaUtils.setSurfaceView(surfaceView);
      // 開始錄制
      mediaUtils.record()
      // 結(jié)束錄制 save or unSave
      mediaUtils.stopRecordUnSave();
      mediaUtils.stopRecordSave();

CameraHelper

在 Android 中錄制視頻時顯示的 Size 和實際拍照的 Size 是由 Camera 所決定的,最好的方法是計算出可支持的 PreviewSize 和 VideoSize 計算出一個合適的size,同時根據(jù)自己視頻的用途,選擇合理的 Size

CameraHelper 參考自 GoogleCameraSample 幫助你計算出合適的 Size

CamcorderProfile

這是一個困擾我好久的地方,一直在想錄制視頻的時候,如何保存清晰度的情況下,還能控制文件的大小,終于找到了一種可行的辦法

分辨率越大視頻大小越大,比特率越大視頻越清晰
清晰度由比特率決定,視頻尺寸和像素量由分辨率決定
比特率越高越清晰(前提是分辨率保持不變),分辨率越大視頻尺寸越大
CamcorderProfile 是 Android 提供的一個內(nèi)置的視頻參數(shù)配置類
videoFrameWidth 錄制視頻分辨率的寬
videoFrameHeight 錄制視頻分辨率的高
videoBitRate 這個就是比特率,決定了視頻的清晰度
將分辨率和比特率結(jié)合自己的需求,進(jìn)行有效的控制,可以的到自己想要的效果
本 demo 中,錄制1080P的視頻,大小在5M左右,還可以再小
最后 videoFrameRate 幀率,這個一般是攝像頭會自動調(diào)節(jié),所以設(shè)置了恒定的有的也不起作用

自定義View

仿造新版微信拍攝視頻的界面,通過 Paint,RectF,Canvas 繪制,很簡單直接看代碼就好了
突然喜歡上了在 Android 畫動效,開啟 dribbble 抄動效模式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容