繁体   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