错题集
更新时间: 2024/09/18 16:26:13
本文汇总了集成 iOS SDK 的云信开发者在各个场景实践过程中的易错问题以及对应的解题思路,帮助您避开别人踩过的坑,为您的开发提效加速。
-
通用
-
音频相关
-
视频相关
通用
我将角色从观众切换至连麦者时,为什么会听到主播声音的回声?
问题描述:
用户将角色从观众切换至连麦者时,听到主播的声音两次重复播放。
问题原因:
在您切换角色至连麦者时,实际上是从通过播放器拉流切换至加入 RTC 房间订阅主播的媒体流。听到回声的原因是您在连麦成功后,未释放播放器播放实例相关资源,而直接加入了音视频房间并订阅主播音视频流,致使主播媒体流同时从播放器以及在音视频房间中播放。
解决方案:
网易云信建议您在互动直播中,按如下标准步骤实现连麦者上麦。
-
连麦成功。
-
退出播放,调用 release 方法释放播放器实例和资源。
-
初始化音视频通话 SDK 并进入音视频房间。
-
订阅远端音视频流。
我从 PK 直播房间退出回到本来的直播房间时,为什么会报错 30103?
问题描述:
A 主播在自己的频道直播,调用 joinChannel 加入 PK 直播房间时,报错 30103; 或者退出 PK 直播房间后再次调用 joinChannel 加入原先的直播频道,报错 30103。
问题原因:
若您获取 token 的方式和房间名称绑定,您需要在退出原先的直播频道后再获取新的 token,否则会导致在加入新的直播房间时出错。PK 直播结束后,您需要再次获取新的 token 才能成功进入原先的直播频道,不可以用原先的 token。
解决方案:
网易云信建议您在单人直播和 PK 直播切换的过程中,按如下标准步骤实现平滑切换。
-
用 token 1 进入主播直播间开播。
-
删除原先的推流任务,退出单人直播房间。
-
获取 PK 直播房间的 token 2。
-
根据 token 2 进入 PK 直播房间。
-
结束 PK 直播后,获取原直播间的 token 3,再根据 token 3 重新进入原直播间。
为什么主播开启了直播,用户获取到的直播状态仍然是空闲?
问题描述:
主播 A 在自己的 RTC 频道设置了推流任务开启直播,用户 B 拉流观看时显示直播状态为空闲。
问题原因:
主播在互动直播过程中,重复初始化 RTC 房间,并且在每次加入房间的同时都设置了推流任务,而每次设置的推流任务的 taskId 是不一致的,导致推流失败,直播状态显示异常。
解决方案:
建议避免在互动直播过程中多次初始化 RTC 房间。
升级Xcode 15之后,集成NERTC SDK 5.X 版本上架报错
问题描述:
某用户在升级到 Xcode 15 后,集成 NERTC SDK 5.X 版本,App 上架 App Store 报错,报错信息如下:
"This bundle is invalid. The value for key CFBundleVersion [XXXX] int the info.plist file must be a period-separated list of at most three non-negative integers."
问题原因:
自 Xcode 15(于 2023 年 9 月 19 日正式发布)起,苹果对 framework 包中 info.plist
文件中的 CFBundleVersion
字段进行了严格限制。如果该字段包含字母和数字的组合,上传至 App Store 时会报错。
解决方案:
-
方案一:
使用 Xcode 14 或更早的版本上传 App,上传时勾选 Manager Version and Build Number 选项。
-
方案二:
该问题将在新的 NERTC 版本中解决,请集成 NERTC SDK V5.5.2 、V5.4.12 及以后的版本。
音频相关
为什么我开启伴音效果后,对方听不清我的人声?
问题描述:
A 和 B 在语聊房内,A 通过伴音播放背景音乐,B 听到 A 的人声变小。若停止播放伴音,则 B 听到 A 的声音恢复正常。
问题原因:
一般是因为设置的伴音音量和人声音量不合理,导致接收端的音频效果较差。
解决方案:
网易云信建议您调用 adjustRecordingSignalVolume 方法设置采集音量为 100,即不对信号做缩放;且调用 setAudioMixingPlaybackVolume 方法设置的混音播放音量不超过 25,否则伴音过程中语音沟通的体验会受到影响。
不推荐设置采集音量超过100,否则会出现音质变差或噪音等问题。
为什么我连接了蓝牙耳机,开启本地音频采集后,远端声音变成了外放?
问题描述:
接收端一开始听到的声音是通过蓝牙耳机播放的,在调用 enableLocalAudio 方法并将参数设置成 true 之后,声音异常变为外放。再次调用 enableLocalAudio 方法并将参数设置成 false 之后,声音重新通过蓝牙耳机播放。
问题原因:
iOS 设备的音频是通过 AVAudioSession 管理的,是单例类。因此除了 SDK,您的业务层也可以修改 AVAudioSession 的 option。这个问题是由于您在调用 SDK 接口的时候,在业务层也有调用修改 AVAudioSession 的 option,修改成了外放类型 AVAudioSessionCategoryOptionDefaultToSpeaker。
解决方案:
请管理好业务层关于 AVAudioSession 的调用。在您调用 SDK 接口发布音频流时,尽量避免修改 AVAudioSession。
听不到远端声音
问题描述:
iOS端加入房间听不到远端声音,自己说话远端也听不到。
问题原因:
在加入房间后调用了audioSession setActive:NO
。
解决方案:
建议在音视频通话过程中,不要对 audioSession
做相关操作(如果做了需要及时恢复之前的状态),避免影响音频的正常体验。
视频相关
为什么我关闭摄像头后重新打开,原来设置的后置摄像头变成了前置?
问题描述:
设置使用后置摄像头后关闭摄像头,再重新打开,又切换成了使用前置摄像头,原先的设置无法保留。
问题原因:
您调用 enableLocalVideo 方法开关本地视频采集时,本身不会改变原有的摄像头配置。而设置视频发送配置时,即调用 setLocalVideoConfig 方法时,由于此接口为全量参数配置接口,若传入的 NERtcVideoConfig 参数中没有配置 frontCamera(摄像头位置是否为前置摄像头),摄像头位置会被重新默认制定为前置摄像头。
解决方案:
在您每次调用 setLocalVideoConfig 方法进行配置时,需要设置所有需要的参数,否则未设置的参数将取默认值。
为什么使用客户端开启云端录制后,主讲人的画面会切换?
问题描述:
本来占据主视窗的用户暂停推流后再重新推流,会导致主视窗被其他用户占据。
问题原因:
客户端开启云端录制时,没有通过 kNERtcKeyRecordHostEnabled
参数设置本次视频通话中云端录制的主讲人 uid(主讲人默认会在布局中占据主视窗区域),导致云端录制布局中主视窗的位置不会和对应 uid 绑定,因此会出现主视窗的用户被替换的情况。
解决方案:
在您加入房间前通过 - (int)setParameters:(NSDictionary *)parameters
方法配置录制参数时,需要设置 kNERtcKeyRecordHostEnabled
参数以规定本端用户是否为主讲人。
为什么拉流端显示的流分辨率和推流布局中设置的分辨率不一致?
问题描述:
推流布局中设置的推流分辨率为 720P,但拉流端接收到的流分辨率只有 480P。
问题原因:
原因一般是您在旁路推流的布局中设置了 singleVideoPassThrough
参数为 true,表示开启视频透传。透传开启后,若房间中只有一路输入的视频流,则不对视频流进行转码,且不遵循转码布局。因此当您在音视频房间中指定上行的流分辨率是 480P,服务器会直接把分辨率为 480P 的音视频流透传给 CDN 节点,那么拉流端拉到的流分辨率就是 480P。
解决方案:
若您希望拉流端显示的流分辨率与推流布局设置的分辨率一致,请在调用 addLiveStreamTask
方法时,配置 config
属性的 singleVideoPassThrough
参数为 false 关闭视频透传。
为什么设置本地视频采集画面的旋转方向无效?
问题描述:
在横屏显示的应用中,无法通过 orientationMode 参数设置本端画面的旋转方向。
问题原因:
在 V4.6.0 之前的 NERTC SDK 版本中,orientationMode 参数设置的是本地视频编码的旋转方向模式,使接收端的视频画面展示为指定的方向效果,因此仅远端用户看到的视频画面,不影响本地视频画面的显示方向。
解决方案:
NERTC SDK 自 V4.6.0 版本起,支持通过 orientationMode 参数设置旋转方向后,同时改变本端用户的预览画面和远端用户看到的视频画面。若您需要兼容该场景,可以按需集成指定版本的 SDK。
若您集成的是 V4.6.0 之前版本的 SDK,可以通过调用 setVideoRotationMode
方法设置本地视频画面在本地和远端设备上的旋转模式,可以指定本地画面和系统设备的横屏或竖屏模式一致、或者和 App UI的横屏或竖屏模式一致。
为什么互动直播的用户关闭视频采集后,画面显示为空白?
问题描述:
某用户关闭了视频采集,画面显示为空白,其他用户不会收到任何提示。
问题原因:
画布推流画面的清理逻辑是需要您去实现的,否则在用户调用 enableLocalVideo
方法关闭视频采集后,NERTC SDK 会处理成画布显示为空白。
解决方案:
对于对端用户关闭视频采集的场景,建议您在本端画布添加一个占位显示的图片(具体请参考旁路推流-占位图片),并提示本端用户当前对端已离开(关闭了视频采集)。