常见问题

更新时间: 2024/02/26 13:45:26

接收邀请后没有收到 onInvited 回调

问题原因:

  • 实现 NERtcCallKitDelegate的方法不正确。
  • onInvited 回调被加在某个页面,当页面生命周期结束时,删除了 NERtcCallKitDelegate 协议。
  • 主叫端的 SDK 版本太低,例如主叫端是 V1.3.x 版本的 Web 端。
  • 群组呼叫导致收不到 onInvited 回调。

排查思路:

  1. 确认主叫的呼叫方法中,传入的 accid 是否正确。
  2. 确认被叫是否有收到呼叫信令。
  3. 确认主叫和被叫的 SDK 版本。
  4. 确认 iOS 端在实现 NERtcCallKitDelegate 时,按正确的方法添加了 onInvited 回调。

解决方案:

  • 实现 NERtcCallKitDelegate 时,请先添加 [NERtcCallKit.sharedInstance addDelegate:self],再添加 onInvited 回调。
  • 请将实现 NERtcCallKitDelegate 写在全局单例类里面,场景上也是任何时候都可以收到邀请回调。
  • 升级 SDK 的版本,Web 端的 NERtcCallKit SDK 版本请升级至 V1.4.2 及以上版本。
  • 如果是群组呼叫导致收不到 onInvited 回调,请升级 iOS 端的 NERtcCallKit SDK 版本至 V1.5.1 及以上版本,Web 端的 NERtcCallKit SDK 版本请升级至 V1.4.2 及以上版本。

音视频通话过程中播放 IM 的音频消息,播放完成之后,音视频通话的麦克风和音频播放失效

问题原因:

IM 在播放音频消息和录音时,会修改 audioSession 的配置,影响了音视频通话中的相关功能。

解决方案:

在初始化 IM SDK之前,增加如下单例类配置,禁止 IM 在播放音频消息和录音时修改 audioSession 的配置。

/**
 *  禁止在IM 录制、播放音频时设置AVAudioSession, 防止影响其他音视频效果
 *  @param disabled YES则禁止重置
 */
- (void)disableResetAudioSession:(BOOL)disabled;

如何实现呼叫页面和呼叫铃声的 UI 界面

请参考即时通讯示例项目源码中, NECallViewController 页面的实现方法。

即时通讯 Demo 使用 NIMKit + NERtcCallKit 的组合。其中包含了呼叫的 UI 界面,包括呼叫状态管理、远端视图、本地视图、呼叫铃声等逻辑。

如何自定义 AVAudioSession 设置

问题描述:

在呼叫、接收呼叫、响铃提醒、播放铃声播放等场景中,App 想要自己管理 AVAudioSession 中的设置,例如修改为听筒模式或扬声器模式,并且在加入房间之后,需要延续对 AVAudioSession 的设置,该如何实现?

解决方案:

在默认情况下,NERtcCallKit SDK 和 App 对 AVAudioSession 都有控制权。

您可以在加入房间之前, 调用如下方法限制 NERtcCallKit SDK 对 AVAudioSession 的操作权限,而使用其他应用或第三方组件对 AVAudioSession 进行操控。

[[NERtcEngine sharedEngine] setAudioSessionOperationRestriction:kNERtcAudioSessionOperationRestrictionAll];

一旦调用该方法限制了 NERtcCallKit SDK 对 AVAudioSession 的控制权限, NERtcCallKit SDK 将无法对 AVAudioSession 进行相关设置,需要 App 或第三方组件来维护相关的设置。

为什么对端挂断后,本端不会自动挂断?

问题描述

在一对一通话中,对端挂断后,本端没有挂断。

问题原因

iOS 端的呼叫组件暂时不提供 UI 界面,因此 NERtcCallKit 在收到对端挂断的通知之后不会自动处理挂断操作。

解决方案

建议在收到对端挂断的回调之后,您在业务层可以主动调用 hangup 方法进行挂断操作,并且隐藏掉通话页面。

呼叫组件挂断后,会自动销毁NERTC实例吗?

默认不销毁 NERTC 实例。您可以在初始化呼叫组件时,通过 globalInit 参数设置 NERTC 是否随呼叫组件进行初始化和销毁,默认为 YES。

globalInit 参数设置为 NO ,呼叫组件发起呼叫或被叫收到来电时,会自动初始化NERTC 实例,呼叫组件挂断时,销毁NERTC 实例。具体配置如下:

如果是 V2.0 及之后版本,请通过 initRtcMode 参数设置 NERTC 是否随呼叫组件进行初始化和销毁。

  • 示例代码(V2.0 API)
  NECallEngine *engine = [NECallEngine sharedInstance];
  NESetupConfig *config = [[NESetupConfig alloc] initWithAppkey:@"your app key"];
  ...
  config.initRtcMode = InitRtcInNeed;
  ...
  [engine setup:config];
  • 示例代码(V1.0 API)
  NERtcCallOptions *option = [NERtcCallOptions new];
  ...
  option.globalInit = YES;
  ...
  NERtcCallKit *callkit = [NERtcCallKit sharedInstance];
  [callkit setupAppKey:@"your appkey" options:option];

V2版本呼叫组件 NEHangupReasonCode 说明

通过调用音视频通话的服务端 API 删除呼叫组件音视频房间或者踢出某个房间里面的用户时,被踢的用户组件层面会触发 onCallEnd 的回调,回调返回的通话终止的错误码是 10,SELF_RTC_DISCONNECTED。被踢的另一端可能收到的错误码是 19,也有可能是10。这是因为被踢的人触发 onCallEnd:10的同时,会通过信令发送给对方被踢了的事件,对方收到了就会回调错误码10,但是对端的用户 RTC SDK也会回调 onUserLeave 的回调,这个时候对端就会回调 onCallEnd:19 的错误码。所以 RTC 回调更快,另一端回调是19。如果是信令回调更快,则对端回调10,建议是两个错误都做对应的提示处理。

例如,用户A和用户B通话,用户A被服务端API接口踢出了通话,那么用户A会触发 onCallEnd,错误码为10,用户B会也触发 onCallEnd,错误码可能是10或者19。

IM层面被踢的情况下,回调的错误码是 8,KICKED

  • V1版本的被踢,直接通过 onDisconnect 回调监听,建议升级到V2的呼叫组件版本。
  • V1版本自己挂断不会触发 onCallEnd 接口,V2版本自己挂断会触发 onCallEnd,在 onCallEnd 的错误码里面说明具体挂断的原因。

初始化呼叫组件时,偶现应用卡死

问题描述

初始化 NERtcCallKit 的时候,应用偶现卡死。

问题原因:

呼叫组件初始化时,未在 Podfile 中指定 NERtc SDK 的版本号,IM SDK 和旧版本的 NERtc SDK 互锁,导致应用卡死。

解决方案:

请在 Podfile 中指定呼叫组件适配的 NERtcSDK 版本,命令如下:

pod 'NERtcCallKit', '~> 1.5.1'
pod 'NERtcSDK', '4.2.120'

呼叫组件中 IM 和 RTC 适配的版本请参见呼叫组件更新日志

此文档是否对你有帮助?
有帮助
去反馈
  • 接收邀请后没有收到 onInvited 回调
  • 音视频通话过程中播放 IM 的音频消息,播放完成之后,音视频通话的麦克风和音频播放失效
  • 如何实现呼叫页面和呼叫铃声的 UI 界面
  • 如何自定义 AVAudioSession 设置
  • 为什么对端挂断后,本端不会自动挂断?
  • 呼叫组件挂断后,会自动销毁NERTC实例吗?
  • V2版本呼叫组件 NEHangupReasonCode 说明
  • 初始化呼叫组件时,偶现应用卡死