Android 媒體編解碼器

媒體編解碼器

MediaCodec類是用來爲低級別的媒體編碼和解碼的媒體編解碼器提供訪問。您可以實例化一個MediaCodec類通過調用createEncoderByType()方法來進行對媒體文件進行編碼或者調用createDecoderByType()來對媒體文件進行解碼。每一個方法都要採取一個MIME類型爲你想要編碼或者解碼的媒體文件類型,例如“video/3gpp”或者“audio/vorbis”。

在MediaCodec實例創建之後,你可以調用configure()方法來指定例如媒體格式或者是否對內容加密的屬性。

無論你是對你的媒體文件進行編碼還是解碼,在你創建MediaCodec實例後的其餘進程都是一樣的。首先通過getInputBuffers()的方法獲得輸入ByteBuffer對象的一個數組然後再通過getOutputBuffers()方法來獲得一個輸出的ByteBuffer的對象數組。

當你準備好進行編碼或者解碼的時候,調用dequeueInputBuffer()方法來獲得這個用來作爲媒體文件源碼的ByteBuffer(從輸入的buffers的數組中)的索引位置。在你使用帶有媒體文件源碼的ByteBuffer之後,通過調用queueInputBuffer()方法來釋放緩存區的所有權。

對輸出緩存區也是一樣的,調用dequeueOutputBuffer()方法來獲得你接收到結果的ByteBuffer的索引位置。在你從ByteBuffer讀出輸出之後,通過調用releaseOutputBuffer()方法來釋放所有權。

你可以結合MediaCrypto APIs,而不是正常的queueInputBuffer()方法,通過調用queueSecureInputBuffer()的方法來處理媒體媒體編解碼器的加密數據。

想要了解更多關於如何使用編解碼器的信息,參見MediaCodec文檔。

自定義錄音

新方法startRecording()允許你可以在MediaSyncEvent的定義提示下的基礎上開始錄音。這個MediaSyncEvent指定一個當完成時就能自發觸動錄音機開始錄音的音頻對話(例如一個被MediaPlayer所定義的對話)。例如,您可以使用這個功能播放提示音來表示一段錄音會話的開始,然後這個錄音就自動開始,所以你沒不必手動同步提示音和錄音開始的操作。

定時文本軌道

MediaPlayer這個類現在可以處理帶內和帶外的文本軌道。帶內文本軌道就是一個MP4或3GPP的媒體源的文本軌道。帶外文本軌道可以通過addTimedTextSource()這個方法來本當作一個外部的文本進行添加。在所有的外部文本軌道添加之後,調用getTrackInfo()方法來對數據源中所有的可用的軌跡的列表進行刷新。

如果要用MediaPlayer這個類來設置軌道,你必須調用selectTrack()這個方法選擇你想要設置的軌道的索引位置。

當得知到這個文本軌道準備開始時,實現MediaPlayer.OnTimedTextListener這個接口並且把它傳到setOnTimedTextListener()方法中去。

音頻效果

AudioEffect這個類現在支持當捕獲到音頻時額外的的音頻預處理類型:

作爲聲學回聲消除器(AEC)的AcousticEchoCanceler這個類消除了從遠程捕捉到音頻信號上的信號的作用。

作爲自動增益控制(AGC)的AutomaticGainControl這個類自動恢復正常捕獲的信號輸出。

作爲噪聲抑制器的(NS)的NoiseSuppressor這個類可以消除被捕獲信號的背景噪音。

您可以應用這些利用AudioEffect一個子類的AudioRecord類上的音頻捕獲預處理效果。

注意:並不能保證所有的設備都能支持這些效果的,所以你應該首先調用在對應音頻效果類上的isAvailable()的方法來檢測它的可用性。

無縫播放

現在您可以在兩個完全獨立的MediaPlayer類上執行無縫播放。在您第一個MediaPlayer類執行結束前的任何時間調用setNextMediaPlayer()這個方法,然後Android系統將會在您第一個停止的時候緊接着播放第二個文件。

媒體路由器。這個新的APIs MediaRouter,MediaRouteActionProvider和MediaRouteButton爲您在播放文件的地方提供標準的機制和界面供您選擇

發佈了22 篇原創文章 · 獲贊 22 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章