解碼器的主要功能 音頻解碼器是干什么用的


一,MediaCodec工作原理 MediaCodec類Android提供的用于訪問低層多媒體編/解碼器接口,它是Android低層多媒體架構的一部分,通常與MediaExtractor、MediaMuxer、AudioTrack結合使用,能夠編解碼諸如H.264、H.265、AAC、3gp等常見的音視頻格式 。
廣義而言,MediaCodec的工作原理就是處理輸入數據以產生輸出數據 。具體來說,MediaCodec在編解碼的過程中使用了一組輸入/輸出緩存區來同步或異步處理數據:首先,客戶端向獲取到的編解碼器輸入緩存區寫入要編解碼的數據并將其提交給編解碼器,待編解碼器處理完畢后將其轉存到編碼器的輸出緩存區,同時收回客戶端對輸入緩存區的所有權;然后,客戶端從獲取到編解碼輸出緩存區讀取編碼好的數據進行處理,待處理完畢后編解碼器收回客戶端對輸出緩存區的所有權 。不斷重復整個過程,直至編碼器停止工作或者異常退出 。
mediacodec的作用是處理輸入的數據生成輸出數據 。首先生成一個輸入數據緩沖區,將數據填入緩沖區提供給codec,codec會采用異步的方式處理這些輸入的數據,然后將填滿輸出緩沖區提供給消費者,消費者消費完后將緩沖區返還給codec 。
二,MediaCodec編碼過程 在整個編解碼過程中,MediaCodec的使用會經歷配置、啟動、數據處理、停止、釋放幾個過程,相應的狀態可歸納為停止(Stopped),執行(Executing)以及釋放(Released)三個狀態,而Stopped狀態又可細分為未初始化(Uninitialized)、配置(Configured)、異常( Error),Executing狀態也可細分為讀寫數據(Flushed)、運行(Running)和流結束(End-of-Stream) 。
MediaCodec整個狀態結構圖如下:
從上圖可知,當MediaCodec被創建后會進入未初始化狀態,待設置好配置信息并調用start()啟動后,MediaCodec會進入運行狀態,并且可進行數據讀寫操作 。如果在這個過程中出現了錯誤,MediaCodec會進入Stopped狀態,我們就是要使用reset方法來重置編解碼器,否則MediaCodec所持有的資源最終會被釋放 。當然,如果MediaCodec正常使用完畢,我們也可以向編解碼器發送EOS指令,同時調用stop和release方法終止編解碼器的使用 。
三,MediaCodec API 說明 MediaCodec可以處理具體的視頻流,主要有這幾個方法:

    getInputBuffers:獲取需要編碼數據的輸入流隊列,返回的是一個ByteBuffer數組queueInputBuffer:輸入流入隊列dequeueInputBuffer:從輸入流隊列中取數據進行編碼操作getOutputBuffers:獲取編解碼之后的數據輸出流隊列,返回的是一個ByteBuffer數組dequeueOutputBuffer:從輸出隊列中取出編碼操作之后的數據releaseOutputBuffer:處理完成,釋放ByteBuffer數據
四,MediaCodec基本使用 所有的同步模式的 MediaCodec API都遵循一個模式:
創建并配置一個 MediaCodec 對象

猜你喜歡