MediaUtils
A demo of record audio and video about Android
一個在 Android 上實現錄像和錄音功能的小例子。
GitHub 地址:https://github.com/Werb/MediaUtils
也可直接點擊下載體驗 https://fir.im/cbas
- Android 的 MediaRecorder 相信用過的同學一定踩過很多坑
- 之前寫的代碼很亂,現在重構了一下,可以直接放到自己的項目中用
- 本例子將 MediaRecorder 進行了重構,通過 MediaUtils 對外暴露幾個必需的方法來實現錄像和錄音功能
- 錄制視頻界面參考新版微信小視頻,還原了微信的動畫效果
- 支持 Android 7.0
- 通過線程及 Exception 等手段避免了常見的 start failed , stop failed 等問題
- 重繪了錄制視頻和錄音時的兩個自定義view,可在原本基礎上進行二次開發
- 提供了視頻截圖方法,支持雙擊放大,支持自動對焦
- 視頻錄制暫時使用 SurfaceView + Camera , 后續會升級為 TextureView + Camera2
效果圖
video
audio
核心類
MediaUtils
- 重構后對外暴露只有8行代碼,可結合實際情況使用
// 初始化
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()
// 結束錄制 save or unSave
mediaUtils.stopRecordUnSave();
mediaUtils.stopRecordSave();
CameraHelper
- 在 Android 中錄制視頻時顯示的 Size 和實際拍照的 Size 是由 Camera 所決定的,最好的方法是計算出可支持的 PreviewSize 和 VideoSize 計算出一個合適的size,同時根據自己視頻的用途,選擇合理的 Size
- CameraHelper 參考自 GoogleCameraSample 幫助你計算出合適的 Size
CamcorderProfile
這是一個困擾我好久的地方,一直在想錄制視頻的時候,如何保存清晰度的情況下,還能控制文件的大小,終于找到了一種可行的辦法
- 分辨率越大視頻大小越大,比特率越大視頻越清晰
- 清晰度由比特率決定,視頻尺寸和像素量由分辨率決定
- 比特率越高越清晰(前提是分辨率保持不變),分辨率越大視頻尺寸越大
- CamcorderProfile 是 Android 提供的一個內置的視頻參數配置類
- videoFrameWidth 錄制視頻分辨率的寬
- videoFrameHeight 錄制視頻分辨率的高
- videoBitRate 這個就是比特率,決定了視頻的清晰度
- 將分辨率和比特率結合自己的需求,進行有效的控制,可以的到自己想要的效果
- 本 demo 中,錄制1080P的視頻,大小在5M左右,還可以再小
- 最后 videoFrameRate 幀率,這個一般是攝像頭會自動調節,所以設置了恒定的有的也不起作用
自定義View
- 仿造新版微信拍攝視頻的界面,通過 Paint,RectF,Canvas 繪制,很簡單直接看代碼就好了
- 突然喜歡上了在 Android 畫動效,開啟 dribbble 抄動效模式
好了,知識雖小但五臟俱全
歡迎使用我自己開源的一個 Android 圖片選擇器
- 【PickPhotoView】 Github 地址:https://github.com/Werb/PickPhotoSample
項目中關于 Android M的權限檢查用到了,我的另外一個庫
- 【PermissionsChecker】Github 地址 :https://github.com/Werb/PermissionsCheckerSample
很高興你看到這里
有時候啊 你總是在追趕前面的人
總是抱怨自己為什么不能再努力一點
累了你可以停下來 看看原來的自己
其實你已經很了不起了。
我是 wanbo 。