iOS App内自己控制AVAudioSession,如何消除视频通话过程中本机播放的其他声音(VideoCall + AVPlayer)

如题,我们希望App在视频通话的过程中,同时也可以观看其他视频,并且声音默认从扬声器输出。
使用setAudioSessionOperationRestriction(.all),并且自己完全控制AVAudioSession。

但是遇到一个问题:
在视频通话过程中,对方彼此都会听到:人声 + AVPlayer的视频声。
这是我们不希望看到的,请问如何才能在视频通话时,有效过滤掉设备上播放的其他声音?
谢谢!

走扬声器的话,声波发出后总还是会被麦克风获取到。你可以适当降低观看的视频的音量来削减波的强度来过滤,或者佩戴耳机

通过设置AVAudioSession.Mode = .videoChat解决了通话时的视频声问题。
但是,视频声会在播放一段时间之后,【切换app至后台,再切到前台之后】变得非常小,听筒和扬声器同时出声,调到最大也很难听见。

以下是相关配置:
callKit.setAudioSessionOperationRestriction(.all)

joinChannel之前:
callKit.setParameters("{“che.audio.keep.audiosession”: true}")
callKit.setAudioProfile(.musicHighQualityStereo, scenario: .default)

joinChannel之后(更新AVAudioSession):
audioSession.setCategory(.playAndRecord, mode: .videoChat, policy: .default, options: [.allowBluetooth, .allowAirPlay, .defaultToSpeaker,.duckOthers, .mixWithOthers])

请问哪里配置的有问题吗?

视频通话 + 播放视频 场景下,【App切换至后台,再切到前台之后】变得非常小,听筒和扬声器同时出声,调到最大也很难听见。

以下是相关配置:
// App完全控制AudioSession
callKit.setAudioSessionOperationRestriction(.all)

joinChannel之前:
callKit.setParameters("{“che.audio.keep.audiosession”: true}")
callKit.setAudioProfile(.musicHighQualityStereo, scenario: .default)

joinChannel之后(更新AVAudioSession):
audioSession.setCategory(.playAndRecord, mode: .videoChat, policy: .default, options: [.allowBluetooth, .allowAirPlay, .defaultToSpeaker,.duckOthers, .mixWithOthers])

请问哪里配置的有问题吗?

配置没问题,这个场景有点难支持。 AudioSession里的其他组合试过了吗? 这块儿是苹果音频管理的问题,只能尝试把各种option来组合下。 感觉是退后台后 切回来默认走通信音量了。 和SDK关系不大。

好像只有VideoChat和VoiceChat正常点。。。
音量调不到0,应该都是通话音量,但是听起来音量差别很明显。
另外,AVPlayer调用seek方法之后,也会这样,routeChangeNotification也没有收到,这个比较奇怪。不确定是否和RTC的内部逻辑有冲突。

我尝试使用RTC完全控制AudioSession,似乎也存在同样的问题。
能否在这种场景下正常工作?或者是我没有正确使用RTC的方法或配置?

这种同时起两种视频模式的场景有冲突挺正常的,而且目前也没实现的案例,没有什么其他参考。

你这里只能自己摸索

好的,谢谢!

你好 楼主。
我这边现在也有和你一样的需求,请问你找到解决办法了吗?