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

MediaUtils

A demo of record audio and video about Android

一個(gè)在 Android 上實(shí)現(xiàn)錄像和錄音功能的小例子。

GitHub 地址:https://github.com/Werb/MediaUtils
也可直接點(diǎn)擊下載體驗(yàn) https://fir.im/cbas

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

效果圖

video
audio

核心類(lèi)

MediaUtils

  • 重構(gòu)后對(duì)外暴露只有8行代碼路星,可結(jié)合實(shí)際情況使用
      // 初始化
      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);
      // 開(kāi)始錄制
      mediaUtils.record()
      // 結(jié)束錄制 save or unSave
      mediaUtils.stopRecordUnSave();
      mediaUtils.stopRecordSave();

CameraHelper

  • 在 Android 中錄制視頻時(shí)顯示的 Size 和實(shí)際拍照的 Size 是由 Camera 所決定的溯街,最好的方法是計(jì)算出可支持的 PreviewSize 和 VideoSize 計(jì)算出一個(gè)合適的size,同時(shí)根據(jù)自己視頻的用途,選擇合理的 Size
  • CameraHelper 參考自 GoogleCameraSample 幫助你計(jì)算出合適的 Size

CamcorderProfile

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

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

自定義View

  • 仿造新版微信拍攝視頻的界面缰冤,通過(guò) Paint犬缨,RectF,Canvas 繪制棉浸,很簡(jiǎn)單直接看代碼就好了
  • 突然喜歡上了在 Android 畫(huà)動(dòng)效怀薛,開(kāi)啟 dribbble 抄動(dòng)效模式

好了,知識(shí)雖小但五臟俱全

歡迎使用我自己開(kāi)源的一個(gè) Android 圖片選擇器

項(xiàng)目中關(guān)于 Android M的權(quán)限檢查用到了迷郑,我的另外一個(gè)庫(kù)

很高興你看到這里

有時(shí)候啊 你總是在追趕前面的人

總是抱怨自己為什么不能再努力一點(diǎn)

累了你可以停下來(lái) 看看原來(lái)的自己

其實(shí)你已經(jīng)很了不起了枝恋。

我是 wanbo 。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嗡害,一起剝皮案震驚了整個(gè)濱河市焚碌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霸妹,老刑警劉巖十电,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異叹螟,居然都是意外死亡鹃骂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)罢绽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)畏线,“玉大人,你說(shuō)我怎么就攤上這事良价∏夼梗” “怎么了蒿叠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)杯矩。 經(jīng)常有香客問(wèn)我栈虚,道長(zhǎng),這世上最難降的妖魔是什么史隆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任魂务,我火速辦了婚禮,結(jié)果婚禮上泌射,老公的妹妹穿的比我還像新娘粘姜。我一直安慰自己,他們只是感情好熔酷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布孤紧。 她就那樣靜靜地躺著,像睡著了一般拒秘。 火紅的嫁衣襯著肌膚如雪号显。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天躺酒,我揣著相機(jī)與錄音押蚤,去河邊找鬼。 笑死羹应,一個(gè)胖子當(dāng)著我的面吹牛揽碘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播园匹,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼雳刺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了裸违?” 一聲冷哼從身側(cè)響起掖桦,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎供汛,沒(méi)想到半個(gè)月后滞详,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡紊馏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒲犬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朱监。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖原叮,靈堂內(nèi)的尸體忽然破棺而出赫编,到底是詐尸還是另有隱情巡蘸,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布擂送,位于F島的核電站悦荒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嘹吨。R本人自食惡果不足惜搬味,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟀拷。 院中可真熱鬧碰纬,春花似錦、人聲如沸问芬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)此衅。三九已至强戴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挡鞍,已是汗流浹背骑歹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匕累,地道東北人陵刹。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像欢嘿,于是被迫代替她去往敵國(guó)和親衰琐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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