簡體   English   中英

如何使用MediaExtractor和MediaCodec設置流式音頻?

[英]How to set up Streaming audio with MediaExtractor and MediaCodec?

我正在嘗試流式傳輸AMR_NB。 我不能直接使用MediaPlayer,因為它需要一個可搜索的文件。 我想使用MediaCodec,但要使用MediaCodec我需要(我想......請糾正我!)MediaExtractor給我像presentationTime這樣的東西。 真的嗎? 我可以在沒有MediaExtractor的情況下使用MediaCodec嗎?

MediaExtractor似乎需要可搜索的文件。 該文檔僅針對其中一個setDataSource操作明確說明,但是當我嘗試使用其他任何操作時,由於嘗試失敗而失敗。

那么,我該怎樣做才能讓我的傳入AMR流播放? 我知道一種方案,您可以將傳入的數據保存到文件中,並定期將該文件的副本提供給MediaPlayer但我真的更願意找到真正誠實的流式傳輸解決方案。

是否可以在不使用MediaExtractor的情況下使用MediaCodec? 如果是這樣,我如何找到演示時間和傳遞給MediaCodec.createDecoderByType的字符串? 文檔SAYS“audio / 3gpp”是我想要的,但當我嘗試使用它時,我收到以下錯誤:

codec = MediaCodec.createDecoderByType("audio/3gpp");

01-02 03:59:36.980: E/OMXMaster(21605): A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.

所以我不確定如何獲得MediaCodec。

“我不能直接使用MediaPlayer,因為它需要一個可搜索的文件”這通常不正確。 我希望您在自己的流上嘗試一下,並准確報告發生了什么。

“我可以在沒有MediaExtractor的情況下使用MediaCodec嗎?” 我對此表示懷疑:我相信它們的設計是為了一起使用。

我已經使用這些組件來播放流。 但是,MediaExtractor具有未記錄的限制(據我所知)。 因此,使用一個小代理服務器來提供它可以消化的東西。 我有一個線程來運行MediaExtractor,另一個線程從MediaCodec獲取輸出。 然后我必須避免死鎖並應對同步。 但是如果你只是想要向前發揮它並沒有那么糟糕。 那么你只有如何停止的問題!

我建議你先試用MediaPlayer。 否則,如果您足夠熱衷於嘗試使用MediaExtractor,我們可以分享我們關於它將會消化和不消化的發現。 不要把任何事情視為理所當然。 例如,它似乎會播放我的MP3文件,但無法發現它們的持續時間,或尋求它們!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM