MediaRecord初解

山有木xi發表於2020-12-20

在音訊處理方面,Android提供了AudioRecord和MediaRecorder兩種都可以錄製音訊,MediaRecorder的優勢是已實現大量的封裝,操作起來更加簡單,而AudioRecord的優勢是使用起來更加靈活,能實現更多的功能。

MediaRecorder是android中面向應用層的封裝,用於提供便捷的音影片編碼封裝操作,在使用的過程中要嚴格按照官方指定的生命週期呼叫順序,同時它的優點是

  • 封裝度很高,操作簡單

缺點是

  • 無法實現實時處理音訊,輸出的音訊格式少。

AudioRecord是基於位元組流錄音,其優點是

  • 可以實現語音的實時處理,進行邊錄邊播,對音訊的實時處理。

缺點是

  • 輸出是PCM的語言資料,如果儲存成音訊檔案是不能被播放器播放的。要用到AudioTrack進行處理。

所以,MediaRecorder是一個更為方便和可用性高的選項

在MediaRecorder的生命週期如下

  • initial:在MediaRecorder被建立或者呼叫reset()方法後,處於的狀態
  • initialized : 當呼叫setAudioSource()或者setVideoSource()後,處於該狀態。這兩個方法主要用於設定音影片的源配置,通常音訊是麥克風,影片是攝像頭。該狀態可以透過呼叫reset()方法回到initial狀態
  • DataSourceConfigured : 當呼叫setOutputFormat()方法後,會處於該狀態。該方法主要用於設定輸出的檔案格式,可以是音影片如MP4,也可以是單獨的音訊如mp3。當處於該狀態之後,可以進一步設定音訊和影片的配置引數,例如音訊封裝格式,取樣率,影片位元速率,幀率等等該狀態可以透過呼叫reset()方法回到initial狀態
  • Prepared :在執行完上面的操作之後,可以透過呼叫prepare()方法進入該狀態,必須先處於該狀態,才能呼叫start()
  • Recording :透過呼叫start()方法進入該狀態,該狀態就是真正開始進行影片錄製編碼的階段,透過呼叫stop()或者reset()可以回到initial狀態
  • error狀態 :當錄製過程中發生次錯誤時,會進入該狀態,呼叫reset()方法回到initial狀態。
  • release : 只有在initial狀態才可以透過呼叫release()方法進入該狀態,釋放所佔用的系統資源
在使用過程中需要注意的是,必須先處理相關資訊,在prepare,然後start,在結束以後stop然後選擇reset或者release,其中任何一個步驟不對就會報異常


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2743793/,如需轉載,請註明出處,否則將追究法律責任。

相關文章