You need to enable JavaScript to run this app.
导航

通话打断和恢复

最近更新时间2024.02.02 17:46:16

首次发布时间2022.05.06 14:47:11

用户在进行实时音视频通话的过程中,可能会被系统电话,第三方应用,或其他系统行为打断,RTC 将通过系统回调,在打断结束时,恢复音视频通话。
在音视频通话被打断时,RTC 的预期表现如下表。

打断类型AndroidiOSWindows/macOS

系统电话

音频:暂停,通话结束后自动恢复
视频:正常

音频:暂停,通话结束后自动恢复
视频:正常

不适用

第三方应用
(占用音视频采集设备)

音视频:被打断,无法自动恢复,将回调设备采集状态

音视频:暂停,占用结束后自动恢复

由操作系统决定,例如设备被抢占导致 RTC 采集不到数据,将回调相应状态

锁屏/ PC 合盖
(系统未休眠)

音频:正常
视频:暂停,解锁唤醒后自动恢复

音频:正常
视频:暂停,解锁唤醒后自动恢复

音频:正常
视频:暂停,解锁唤醒后自动恢复

应用处于侧拉、分屏或者画中画模式不适用视频:被打断,将回调设备采集状态,打断结束后自动恢复不适用
系统性能不足(如设备过热)不适用视频:被打断,将回调设备采集状态,打断结束后自动恢复不适用
应用切换到后台不适用视频:被打断,将回调设备采集状态,打断结束后自动恢复不适用

除了 RTC 无法自动恢复的音视频采集外,你还需要关注打断和恢复时远端音视频播放状态,实现以下的订阅相关设置。
你可以通过监听 onAudioDeviceStateChangedonVideoDeviceStateChanged 回调,了解采集设备被打断和自动恢复的情况。

自 3.38.1 开始,RTC SDK 新增以下枚举值,反映当前打断状态。

  • InterruptionBegan: 被打断

  • InterruptionEnded: 已恢复

  1. 在 RTC 通话被打断时,调用 pauseAllSubscribedStream 暂停接收所有远端用户。 按照上方表格,指定暂停接收的媒体流类型为音频或视频。

  2. 在 RTC 通话从打断中恢复时,调用 resumeAllSubscribedStream 恢复订阅所有远端用户。监听以下回调,了解音视频的采集状态。

    • onAudioDeviceStateChangedonVideoDeviceStateChanged

      • state: RuntimeError

      • error: DeviceNoCallback

    • onAudioDeviceWarningonVideoDeviceWarning

      • warning: CaptureSilence

当从以上回调监听到采集异常时,你可以尝试通过再次调用 startVideoCapturestartAudioCapture 来进行恢复。

注意事项

  • 默认情况下,SDK 会监听 Android 系统电话事件,在系统通话期间关闭音频模块。确保 app 中没有包含拦截系统电话事件(CALL_STATE_IDLECALL_STATE_OFFHOOK)的业务逻辑,否则 RTC 将无法感知系统电话,可能造成用户通话时仍继续发送音视频流。

  • 由于 Android 9 以上版本的系统限制,音视频通话将在锁屏后采集失败,但使用前台服务可以让应用正常工作。如果你希望锁屏后仍能采集音频或视频的,建议在锁屏或退至后台前起一个 Service,并在退出锁屏或返回前台前终止 Service。

API 参考