【Android】像微信一樣錄制視頻和音頻

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 圖片選擇器

項目中關于 Android M的權限檢查用到了,我的另外一個庫

很高興你看到這里

有時候啊 你總是在追趕前面的人

總是抱怨自己為什么不能再努力一點

累了你可以停下來 看看原來的自己

其實你已經很了不起了。

我是 wanbo 。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容