我正在嘗試使用Android的MediaCodec套件編寫音頻重採樣器。如何處理Android MediaCodec解碼器的第一個輸出ByteBuffers?
我目前正在將一個MP3立體聲音頻文件送入MediaExtractor,然後由MediaCodec解碼。源音頻的採樣速率爲48000
我不明白的是我從解碼器接收到前四個輸出緩衝器:
- 大小爲0,時間0
- 大小爲0,時間24000
- 大小4312,時間48000
- 大小4608,時間72000
- 大小4608,時間96000
- 等
從this answer,this answer和this article,我相信前兩個緩衝區只是傳播「編碼器延遲」,並可能只是扔出去。但是,我列出的第三個緩衝區會引發一個循環。
對於緩衝#4(及以後),數學作品出來:
((4608 bytes)/(2 bytes/sample)/(2 channels))
/((48,000 samples/sec)/(1,000,000 us/sec))
= 24,000 us (i.e. the change in time between buffers)
這是怎麼回事與緩衝區#3,但?一個簡單的數據表明,音頻開始播放時間48000 us,然後在72000us標記之前暫時停頓,此時它開始連續播放,沒有中斷。
似乎更有可能在緩衝區#3的數據之前有296個隱藏的0,但是這個偏移量似乎沒有被我的代碼中的任何變量指示。任何人都可以爲我闡明這一點嗎?