這可能是全網(wǎng)關于Camera慢動作錄像(SlowMotion)介紹最全的文章了

這是一篇關于慢動作錄像(slowmotion)的文章,看完后相信你對慢動作錄像不會再感到陌生了~
這篇文章針對下面幾點來展開: 1)寫這篇文章的原由? 2)什么是慢動作錄像(SlowMotionRecord)? 3)Android上如何實現(xiàn)慢動作錄像? 4)調(diào)試demo下載地址? 5)調(diào)試遇到的問題及解決?
一、寫這篇文章的原由?
2月份的時候,在一個音視頻開發(fā)的學習交流群里,有位網(wǎng)友問到**"Android相機有啥設置可以做到slow motion?"**,我認真的想了下,然后又簡單看了下高通的曉龍相機源碼,大概知道是怎么實現(xiàn)后,給了下思路。
后面我還一直在想這個事情,覺的自己給的思路太簡單了,有時間還是得再研究研究,自己得敲下代碼跑通下才好,于是就有了這篇文章。

二、什么是慢動作錄像(SlowMotionRecord)?
通常我們?nèi)搜勰軌蚪邮艿淖詈玫囊曨l幀速率是24幀/每秒左右。那如果我們用120幀/秒拍攝一個動作,再用24幀每秒來播放的話,視頻就放慢了5倍,這個就是慢動作錄像了。
慢動作錄像,又叫高幀率錄像(HFR),也就是以高fps(運行速率)捕獲、編碼并保存為30 fps(目標速率),這種情況運行速率大于目標速率。
(還有一種模式叫做高速錄制(HSR) : 即以高fps(運行速率)捕獲、編碼并保存為高 fps(目標速率),運行速率等于目標速率。)
這篇文章只介紹慢動作錄像。(調(diào)試環(huán)境基于高通曉龍865芯片 ?Android9.0)
三、Android上如何實現(xiàn)視頻慢動作?
有了上面關于慢動作的概念后,那在Android上如何用代碼來實現(xiàn)呢?說到錄像,那我們應該要想到MediaRecorder了。慢動作,也就是高幀率錄像,那肯定得調(diào)用mediaRecorder設置高幀率了。
好了,我們還得再有一個概念,數(shù)據(jù)是從攝像頭sensor出來的,那我們需要120fps,總得攝像頭支持才行吧。所以呢,就有一個先決條件了,硬件得支持才行,下面會講如何查詢當前硬件是否支持。
假設硬件支持的情況下,我們來看下軟件上應用的調(diào)用情況。1、新類CameraConstrainedHighSpeedCaptureSession查看Android的開發(fā)文檔,我們可以看到,從Android 6.0開始,Camera相關的,添加了一個新的類CameraConstrainedHighSpeedCaptureSession,從描述上看,我們就可以知道,這個是專門為高速、高幀率錄像準備的。換一句話說,也就是Android 6.0以上,Android本身才支持這個高速、高幀率錄像。(我在自己早年用的nubiya手機上看了下,Android 5.1的系統(tǒng),系統(tǒng)相機也帶了慢動作功能,不過它這個慢動作應該是廠家自己定制開發(fā)的,那會Android還沒提供相關接口)

2、查詢當前硬件是否支持高幀率錄像通過CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS來獲取available size。如果存在available,則判斷為支持。
3、獲取支持的高幀率錄像videoSize從map.getHighSpeedVideoSizes()中獲取支持的videoSize,然后選擇個合適的size,注意這里的previewSize需要和videoSize保持一致。
?
4、CONTROL_AE_TARGET_FPS_RANGE設置為高幀率范圍(120,120)
?
5、創(chuàng)建session采用createConstrainedHighSpeedCaptureSession高幀率錄像創(chuàng)建session,使用專門提供的api接口。
6、采用setRepeatingBurstsession configure成功后,調(diào)用setRepeatingBurst不停的request,這個和正常模式有點區(qū)別,正常模式是調(diào)用的setRepeatingRequest。
?
7、MediaRecorder相關參數(shù)設置為對應的高幀率參數(shù)相對應的,mediaRecorder的一些參數(shù)也需要設置為高幀率參數(shù)。
? ?
四、調(diào)試Demo 下載地址
本來想著上傳到github的,奈何github不給力,訪問不了。先上傳到百度網(wǎng)盤先,需要的可以自行下載參考。(關注"小馳筆記",回復"慢動作錄像"即可獲取代碼下載地址)

五、調(diào)試遇到的問題及解決方法
》》》》問題1:
[分析]

》》》》問題2: Fps rang[30,30] in the request is not a supported hight speed fps range...
[分析]

*本人從事Android Camera相關開發(fā)已有5年,
*目前在深圳上班,
*歡迎關注我的微信公眾號"小馳筆記"
*希望和更多的小伙伴一起交流 ~
-------- ?2021.03.25 深圳 ?00:53·
