繁体   English   中英

openSL ES Android:不规则的音频回调

[英]openSL ES Android: Irregular audio callback(s)

我在我的一个Android apps使用openSL ES。 当应用程序在前台时,回调非常规律。 麦克风回调大约每 10 毫秒调用一次,扬声器回调也是如此。 但是,如果我将我的应用程序置于后台并打开浏览器(或与此相关的另一个应用程序),我会看到在打开浏览器(或浏览)时触发了回调的“风暴”。 有没有办法解决这个问题? 为什么会发生? openSL 是否会补偿一段无法执行回调的时间? (就像它试图赶上)。

我的源代码是C ,我使用的是Jelly Bean 4.3.

我试图增加AudioTrackAudioRecorder的线程优先级,它似乎有帮助,但我不确定这是要走的路。

其他问题

所以你是说,即使增加了线程优先级,你也可能会收到一连串的回调,你应该丢弃那些?

这怎么是一个好的解决方案? 你会丢掉麦克风数据包(或耗尽扬声器数据包的来源),对吧? 如果你不丢弃mic数据包,mic数据包的接收者会将mic数据包的突发解释为过度抖动,对吗?

更重要的是:我手动增加了 AudioTrack 和 AudioRecorder 的线程优先级,并将 sched 策略更改为循环。 它需要 root 访问权限和安装 BusyBox(它带有用于更改线程优先级/调度策略的命令行实用程序)。 这是如何从 C 以编程方式完成的? 我想确保增加的是单个线程的优先级,而不仅仅是我的应用程序(进程)的优先级。

是的,这是设计使然。 试图把线程的优先级高的是解决合法的方式。 确保使用本机缓冲区大小和采样(请参阅Android 上的低延迟音频播放)以获得最佳效果。 您仍然应该准备好丢弃突发的回调,因为无法保证它们永远不会发生。 您还应该尝试减少应用程序在后台时的整体 CPU 消耗和 RAM 脚印。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM