webrtc直播音频无法静音

2016年6月19日

现在直播越来越火,然而好的直播框架代码是很重要的,webrtc是谷歌开源的一个直播框架,集成简单功能较全,是一个较好的选择。

然而在直播开发过程中发现一个问题,就是webrtc直播的声音无法静音。在调节音量的的时候就能注意到,音量调节的图标并不是音乐媒体,而是通话的音频标志,通过看源码也发现,webrtc框架选用的就是通话的音频通道STREAM_VOICE_CALL;而因为通话音频通道的特殊性,是不允许将通话音频置为静音的(就是说音量值为0的时候仍然有声音输出),这也符合一般的使用思维(通话的时候静音意义不大)。

那么这时候该怎么解决这个问题呢?用户在看直播的时候希望静音这个需求是合理的,我选用的解决策略是:

1、设置音量调节监听,监听通话音量调节动作获取当前音量;

2、检测到一次或多次调音至0则直接暂停webrtc框架中的音频资源,调至0以上时再开启音频资源。


关键代码(其中mRoom和currentRemoteStream分别是webrtc框架中自带的ConferenceClient和RemoteStream类的实例化对象):

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //TODO   
  2. private MyVolumeReceiver mVolumeReceiver = null;  
  3.   
  4. /** 
  5.  * 注册当音量发生变化时接收的广播 
  6.  */  
  7. private void myRegisterReceiver() {  
  8.     mVolumeReceiver = new MyVolumeReceiver();  
  9.     IntentFilter filter = new IntentFilter();  
  10.     filter.addAction("android.media.VOLUME_CHANGED_ACTION");  
  11.     registerReceiver(mVolumeReceiver, filter);  
  12. }  
  13.   
  14. /** 
  15.  * 监听音量变化 
  16.  */  
  17. private class MyVolumeReceiver extends BroadcastReceiver {  
  18.     @Override  
  19.     public void onReceive(Context context, Intent intent) {  
  20.         // 检测是否调到最小音量,是的话直接暂停音频流  
  21.         if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) {  
  22.             AudioManager audioManager = ((AudioManager) getSystemService(AUDIO_SERVICE));  
  23.             int vol = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);  
  24.             if (vol==0) {  
  25.                 mRoom.pauseAudio(currentRemoteStream, null);  
  26.             }else {  
  27.                 mRoom.playAudio(currentRemoteStream, null);  
  28.             }  
  29.         }  
  30.     }  
  31. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值