Android音频系统的Standby模式问题
背景
- Platform: RK3399
- OS: Android7.1.2
- Kernel: v4.4.103
问题:
当使用MediaPlayer停止本地播放后,如果切换我们自定义的音频通道(线路输入,只有模拟通道,数字通道没有工作),开始正常但隔几秒钟后就会没声音输出
原因分析
Android系统默认播放停止后3秒(默认)会进入Standby模式来降低功耗。
这个主要是通过AudioFlinger控制的,当AudioFlinger检测到没有AudioTrack处于活动状态,且达到standbyTime的延时时间就会进入Standby模式,系统系统会进入待机,关闭所有的输出设备,Standby模式后具体的一些操作可在tinyalsa HAL层standby调用接口里找到
解决
1. 禁止Standby
tinyalsa HAL层有standby调用接口(out->stream.common.standby = out_standby
),开始打算直接屏蔽掉,但发现里面有route_pcm_close
等其他操作,而且有很多地方有调用,可能会引起系统其他问题,所以就采用了下面的方法
2. 延长Standby的时间
改成一天或者更长,我是通过property来设置的
在system.prop
文件中添加或者修改属性ro.audio.flinger_standbytime_ms=86400000
也可以通过property_set
函数动态修改
参考
评论