我需要能够同时播放两个或更多(例如,最多5个)简短的ogg文件。同时,我的意思是完全同步。我可以将它们加载到SoundPool并进行播放,但这有时会在播放开始时间上产生明显的差异,我想摆脱它。

据我了解,如果将PCM混合到一个缓冲区中并进行播放,可以避免这种情况。但是OGG不是PCM,需要在播放之前以某种方式有效地进行解码,并且延迟必须非常低,最好是在用户按下按钮后立即延迟。所以我想我需要一种将OGG流式传输到PCM的方法,当我接收缓冲区时,我将它们混合并馈送到AudioTrack。我的要求是Android 2.3.3+,因此我不能使用Jelly Bean中提供的任何新编解码器。

同样,尽管OGG本身很小,但数量很多。因此,将它们全部解码后保存在内存中(SoundPool或某些预解码)也可能会遇到问题。

有人可以给我提示在哪里挖吗? OpenSL ES可以为我做到吗?还是我应该考虑集成ffmpeg?甚至可以以低延迟流式传输同时文件吗?

谢谢

最佳答案

您可以使用AssetPlayers播放声音,但这有时会在播放开始时间上产生明显差异,是的。

因此,我建议使用Ogg Vorbis(如here)解码ogg,然后将此PCM缓冲区用于BufferPlayer。

顺便说一句,检查此OpenSL ES包装器

https://github.com/Suvitruf/Android-ndk/tree/master/OpenSLES

关于android - 在Android中同时流式传输多个OGG,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17062096/

10-12 04:35