webrtc 不开启audio unit的输入(麦克风)

static const AudioUnitElement kInputBus = 1;

在voice_processing_audio_unit.mm文件里边,只要跟这个参数有关的,全部都注释掉就行了。经测试,确实是不会启用麦克风了,下一步要根据变量来动态处理。

方案1:

voice_processing_audio_unit的头文件跟实现文件 定义一个全局变量并且赋值

extern int myGloal999;
int myGloal999 = 1;

之后通过RTCConfiguration,自定义个变量my9999,把这个变量传过去,之后将myGlobal999 变成 0

这里需要注意的是,RTCConfiguration实际是实现层,所以在接口层 PeerConnectionInterface 同样也要增加my9999变量

bool my9999 = true; //这个是在PeerConnectionInterface.h,m文件不需要,我们只是定义,目的就是RTCConfiguration实现层可以用到
if (_my9999){
    webrtc::myGloal999 = 1;
}else{
    webrtc::myGloal999 = 0;
}

这样就可以动态控制myGlobal999来达到启用不启用麦


王max512测试情况

对方打过来

  • 直接在外边打,2次,不正常。直接黄点消失,‘中断结束’也没要cb

  • 在微信里边打,1次不接,直接挂掉;3次接,对方挂掉。都是正常!

  • 在微信里边打,接,自己挂掉,3次正常,0次不正常。

  • 在微信里边打,黄点不小时,接,正常。

主动打给对方

  • 黄点消失的状态下,对方不接,自己挂掉,没有‘中断结束’cb的情况次。   

  • 黄点不消失,对方不接,自己挂掉,正常。

  • 黄点不消失,对方接,黄点消失,对方挂,正常

  • 黄点没了(正常),对方接,通过15s左右,微信突然被中断,结束通话了,demo继续开启;之后大概2min左右,peer变成fail,但实际是在房间,wss也正常。

  • 对方不接,黄点不消失,等拨打电话界面消失,正常

  • 黄点不消失,对方接听,黄点消失,对方挂,正常

  • 黄点不消失,对方接听,黄点消失,自己挂,正常

  • 黄点消失下,对方接听,接通后,微信被中断,demo继续正常。

  • 黄点消失下,对方接听,接通后,微信被中断,demo继续正常。

do {
    try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .spokenAudio, options: .mixWithOthers);
    try AVAudioSession.sharedInstance().setActive(true)
} catch  {
            
}

在进入后台、前台的时候注释掉这2个

以及在activeActiveIO方法设置category、mode、option


主动打给对方

  • 黄点消失,对方接听,有收到‘中断结束’cb(注意,此时还没有挂掉),对方挂掉,没有’中断结束'cb

  • 黄点消失,对方接听,自己挂掉,没有’中断结束‘cb

  • 黄点消失,对方接听,对方挂掉,没有’中断结束‘cb



测试了这么多,最关键的一个问题是会出现没有‘中断结束’的cb,这个才是关键点。没有这个,就不能在去new peer。

下一步看看直接在‘中断开始’的时候,这个时候就把webrtc里边的audio unit给去掉麦,看看这个行不行。


12月21日

在测试机无论在外边还是里边,已经都可以了。然后顺便也解决了断网重连的问题。得出的结论peer不能重复使用,必须要新的peer,而且必须在新的peer启动完成后才可以去关闭旧的peer。如果先关掉旧的peer,在去启动新的peer,这个时候是不能起麦的了,因为麦已经关了,此时起麦就是在后台起麦,就会失败。


在源码里边,当收到‘中断结束‘后,就把myGlobal999 =  0,意思就是禁用掉麦。

在测试机跟吖达,无论是里边还是外边,一切都正常。

王的Max512在外边是连‘中断结束’都没有cb过来,在里边每次都正常。

测试机系统16.1、达:18、王18、王max512-16.1

出现了这种情况,18系统的,就算我在源码里边把麦禁用了,但实际上还是启动后有黄点。

王max512:中断结束都没有收到

测试机:外边里边都正常,成功禁麦

达跟王:都正常,但是可以继续启用麦。





sender.track!.isEnabled = !sender.track!.isEnabled
这个是可以起到禁麦的作用,对方听不到你说的,但实际上黄点还是在的,所以暂且把它理解为启不启用发送数据源给对方




25年1月10号

在16.4/17.4.1/18.0.1/18.1 手机上,按照以下方案处理

不在中断结束后处理,也是在监听peer的状态为fail或者disconnect的时候,在去new一个新的,这种方案无论是在微信外边带电话进来,还是在微信里边打电话进来,都可以做到麦重新启用。如果讲话太久的话,最终也是会经理fail的状态,所以这个时候只需要重新new即可。

但是现在唯一的问题是:当在微信外边打电话进来,此时通知栏一出现,那么’中断开始‘了,如果在这个时候速度够快点击通知栏,那么就会进入到微信里边,此时微信里边如果有弹出挂断跟接听,这个时候速度又足够快,直接点击接听,那么这种情况就大概率会出现问题了。这种情况就有点类似于‘通知栏’有一个‘中断开始’,进入到微信后,点击接听,又有一个‘中断开始’。

时间流程

此时在微信外边,打微信语音过来,此时是第1s,微信通知栏出现,中断开始收到,在第5s的时候,微信通知栏消失,接收到‘中断结束’。如果这个时候在第3s的时候点击通知栏进去到微信,切微信也出现了接听跟拒绝的按钮,这个时候速度很快

Powered By Z-BlogPHP 1.7.3

Copyright 粤ICP备2024347557号 Rights Reserved.