android - 在 Android 中同时流式传输多个 OGG

标签 android opensl

我需要能够同时播放两个或更多(比方说最多 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/

相关文章:

android - 我如何设计新地方 AutocompleteSupportFragment

android - 适用于 PC(非 Android)的 OpenSL 教程 ES

android - 在 Android 上链接更新的库

android - Android 中支持的 OpenSL ES 功能

android - java.lang.IllegalArgumentException : Receiver not registered

android - 为什么我们应该将 urimatcher 定义保留在内容提供程序的静态花括号中?

java - 短信接收器仅在打开某个 Activity 时才起作用

android - 一行内表格布局中的图像问题

android - 在 Android 上使用 OpenSL 从内存中播放 PCM WAVE 声音

android - Nexus 9 主采样率