错题集
更新时间: 2024/09/18 16:26:13
本文汇总了集成 Android SDK 的云信开发者在各个场景实践过程中的易错问题以及对应的解题思路,帮助您避开别人踩过的坑,为您的开发提效加速。
- 通用
- 音频相关
- 视频相关
通用
我将角色从观众切换至连麦者时,为什么会听到主播声音的回声?
问题描述:
用户将角色从观众切换至连麦者时,听到主播的声音两次重复播放。
问题原因:
在您切换角色至连麦者时,实际上是从通过播放器拉流切换至加入 RTC 房间订阅主播的媒体流。听到回声的原因是您在连麦成功后,未释放播放器播放实例相关资源,而直接加入了音视频房间并订阅主播音视频流,致使主播媒体流同时从播放器以及在音视频房间中播放。
解决方案:
网易云信建议您在互动直播中,按如下标准步骤实现连麦者上麦。
-
连麦成功。
-
退出播放,调用 release 方法释放播放器实例和资源。
-
初始化音视频通话 SDK 并进入音视频房间。
-
订阅远端音视频流。
为什么我的 Android 9 设备上应用锁屏或切后台后,SDK 采集不到本端的音视频流?
问题描述:
Android 9 设备锁屏一段时间后,采集音量变为 0,或看不到视频。
问题原因:
这是由于 Android 系统强行限制的原因,原文如下。
后台对传感器的访问受限
Android 9 限制后台应用访问用户输入和传感器数据的能力。 如果您的应用在运行 Android 9 设备的后台运行,系统将对您的应用采取以下限制:
您的应用不能访问麦克风或摄像头。
使用连续报告模式的传感器(例如加速度计和陀螺仪)不会接收事件。
使用变化或一次性报告模式的传感器不会接收事件。
如果您的应用需要在运行 Android 9 的设备上检测传感器事件,请使用前台服务。
详情请见行为变更。
解决方案: 在锁屏或将应用退至后台前,您可以先开启前台服务,从而让应用正常工作。但请在退出锁屏或返回前台前终止前台服务。
我从 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 房间。
音频相关
为什么我开启伴音效果后,对方听不清我的人声?
问题描述:
A 和 B 在语聊房内,A 通过伴音播放背景音乐,B 听到 A 的人声变小。若停止播放伴音,则 B 听到 A 的声音恢复正常。
问题原因:
一般是因为设置的伴音音量和人声音量不合理,导致接收端的音频效果较差。
解决方案:
网易云信建议您调用 adjustRecordingSignalVolume 方法设置采集音量为 100,即不对信号做缩放;且调用 setAudioMixingPlaybackVolume 方法设置的混音播放音量不超过 25,否则伴音过程中语音沟通的体验会受到影响。
不推荐设置采集音量超过100,否则会出现音质变差或噪音等问题。
为什么远端关闭本地音频采集后,本地没有收到远端用户停用音频的回调?
问题描述:
远端 B 用户调用 enableLocalAudio(false)
方法停止发送音频流,本地没有收到 onUserAudioStop
事件的回调。
问题原因:
enableLocalAudio(false)
方法只会触发 NERtcCallbackEx
类的 onUserAudioStop
回调,不会触发 NERtcCallback
类的该回调。
解决方案:
若您希望通过调用 enableLocalAudio
方法触发 onUserAudioStop
等回调,建议监听 NERtcCallbackEx
类下的回调事件通知,不再建议使用 NERtcCallback
类下的回调。
为什么我接电话的时候听不到声音?
问题描述:
在贴耳接听电话期间,部分使用华为鸿蒙手机系统的用户,会出现听不见声音的情况。
问题原因:
打电话期间,如果没有进行屏幕操作,一段时间后手机会进入熄屏状态,从而导致设备进入低功耗模式,这个时候系统会断开网络,所以用户听不见声音。
解决方案:
-
在进行 1 对 1 通话期间,开启前台服务,防止应用退到后台而被限制网络。
-
通过
android:keepScreenOn="true"
标签保持屏幕常亮,防止手机无操作情况下进入熄屏状态而被限制网络。
为什么我开启伴音后,人声会变小?
问题描述:
在语聊房场景中,多人连麦进行诗歌朗诵,开启伴音之后发现连麦者听到的人声会变小、变沉闷,但各方都是开麦状态。
问题原因:
针对 KTV、语聊房等特殊伴音场景,未通过 setParameters
接口设置对应的音频配置参数。
解决方案:
调用 setParameters
方法设置音频下发配置参数。示例代码如下:
NERtcParameters.Key audioMixtKey = NERtcParameters.Key.createSpecializedKey("key_audio_external_audio_mix");
rtcParameters.set(audioMixtKey, true);
NERtcEx.getInstance().setParameters(mRtcParameters);
视频相关
为什么我关闭摄像头后重新打开,原来设置的后置摄像头变成了前置?
问题描述:
设置使用后置摄像头后关闭摄像头,再重新打开,又切换成了使用前置摄像头,原先的设置无法保留。
问题原因:
您调用 enableLocalVideo 方法开关本地视频采集时,本身不会改变原有的摄像头配置。而设置视频发送配置时,即调用 setLocalVideoConfig 方法时,由于此接口为全量参数配置接口,若传入的 NERtcVideoConfig 参数中没有配置 frontCamera(摄像头位置是否为前置摄像头),摄像头位置会被重新默认制定为前置摄像头。
解决方案:
在您每次调用 setLocalVideoConfig 方法进行配置时,需要设置所有需要的参数,否则未设置的参数将取默认值。
为什么使用客户端开启云端录制后,主讲人的画面会切换?
问题描述:
本来占据主视窗的用户暂停推流后再重新推流,会导致主视窗被其他用户占据。
问题原因:
客户端开启云端录制时,没有通过 NERtcParameters.KEY_SERVER_RECORD_SPEAKER
参数设置本次视频通话中云端录制的主讲人 uid(主讲人默认会在布局中占据主视窗区域),导致云端录制布局中主视窗的位置不会和对应 uid 绑定,因此会出现主视窗的用户被替换的情况。
解决方案:
在您加入房间前通过 NERtc.getInstance().setParameters(mRtcParameters);
方法配置录制参数时,需要设置 NERtcParameters.KEY_SERVER_RECORD_SPEAKER
参数以规定本端用户是否为主讲人。
为什么拉流端显示的流分辨率和推流布局中设置的分辨率不一致?
问题描述:
推流布局中设置的推流分辨率为 720P,但拉流端接收到的流分辨率只有 480P。
问题原因:
原因一般是您在旁路推流的布局中设置了 singleVideoPassThrough
参数为 true,表示开启视频透传。透传开启后,若房间中只有一路输入的视频流,则不对视频流进行转码,且不遵循转码布局。因此当您在音视频房间中指定上行的流分辨率是 480P,服务器会直接把分辨率为 480P 的音视频流透传给 CDN 节点,那么拉流端拉到的流分辨率就是 480P。
解决方案:
若您希望拉流端显示的流分辨率与推流布局设置的分辨率一致,请在调用 addLiveStreamTask
方法时,配置 config
属性的 singleVideoPassThrough
参数为 false 关闭视频透传。
为什么互动直播的用户关闭视频采集后,画面像是卡住了?
问题描述:
某用户关闭了视频采集,画面停在了最后一帧,其他用户不会收到任何提示,因此以为该用户画面出现了卡顿。
问题原因:
画布推流画面的清理逻辑是需要您去实现的,否则在用户调用 enableLocalVideo
方法关闭视频采集后,NERTC SDK 会处理成画布显示该用户的最后一帧画面。
解决方案:
对于对端用户关闭视频采集的场景,建议您在本端画布添加一个占位显示的图片(具体请参考旁路推流-占位图片),并提示本端用户当前对端已离开(关闭了视频采集)。