「融合通信常见问题」月刊将在每月末与大家见面,该月刊主要包括错题集、知识加油站、技术加餐三大板块,汇集实践过程中的易错问题和解题思路,分享融合通信领域的前沿资讯和技术干货,为您的开发提效加速,为您的进阶之路添砖加瓦。
本期内容概览
看这里!别人踩过的坑快绕开!
边听音乐边沟通的过程中人声变小。
调用离开房间接口后,摄像头仍处于使用状态。
观众切换至连麦者时,听到主播的声音两次重复播放。
Web 端旁路推流之后,拉流端拉不到流。
关闭摄像头后重新打开,摄像头被切换无法保持。
使用 Web 端纯音频通话场景时,听不到声音。
这些知识点你知道吗?
为什么打开摄像头失败?
如何处理视频模糊问题?
为什么视频会出现卡顿?
一、错题集
语聊房
疑难问题1: 语聊房伴音场景,边听音乐边沟通的过程中人声变小。
易错等级: ⭐⭐⭐⭐
错题原因:
伴音音量和人声音量设置不合理,导致接收端的音频效果较差。
解题思路:
(1)setAudioMixingPlaybackVolume 的音量建议设置不超过 25,超过之后可能伴音过程中语音沟通的体验会受到影响;
(2)adjustRecordingSignalVolume 该接口默认音量为 100,建议不要调整。
疑难问题2: 调用离开房间接口后,摄像头仍处于使用状态。
易错等级: ⭐⭐⭐
错题原因:
使用 nertc-web-sdk 时,部分接口出现重复调用。Stream.init(初始化音视频流对象)被重复两次调用的情况下,本地被创建了两条不同的视频流,同时使用摄像头设备。在 Client.leave(离开音视频房间)时,只有一条流的设备使用被结束,致使摄像头仍在被使用状态。
解题思路:
业务中,需管理 Stream.init 调用次数及 Stream 对象的生命周期,每个 Stream 只需初始化一次,以确保音视频正常使用。
互动直播
疑难问题3: 观众切换至连麦者时,听到主播的声音两次重复播放。
易错等级: ⭐⭐⭐
错题原因:
互动直播应用中,观众及连麦者的切换,涉及播放器从 CDN 拉流切换至加入 RTC 房间订阅主播音视频。在观众连麦成功后,未停止播放器播放而直接加入音视频房间并订阅主播音视频,致使主播音频同时从播放器以及音视频房间中重复播放。
解题思路:
互动直播中,连麦者上麦的标准实现流程:
(1)连麦成功
(2)退出播放,释放播放器实例和资源 mLivePlayer.release();
(3)初始化音视频并进入音视频房间
(4)订阅远端音视频
疑难问题4: Web 端旁路推流之后,偶现拉流端拉不到流。
易错等级: ⭐⭐⭐
错题原因:
推旁路流(addTasks 或者 updateTasks)和推 RTC 房间流(publish)的时序错误,导致互动直播混流时缺少数据源
解题思路:
推旁路流之前确保对应的流已在 RTC 房间发布成功,所以需要再 publish 成功之后再去调用 addTasks;
如果旁路布局中还包含其他用户的流,那得收到对应用户的 stream-added/stream-subscribed 流回调之后再去调用 addTasks 或者 updateTasks。
通用问题
疑难问题5: 使用音视频时,关闭摄像头后重新打开,摄像头被切换无法保持。
易错等级: ⭐⭐⭐
错题原因:
开关视频使用 NERtc#enableLocalVideo() 接口,此时打开前置或者后置摄像头是由上一次调用 setLocalVideoConfig 中传入的 frontCamera 参数决定的,如果在调用 enableLocalVideo 之后重新设置了 setLocalVideoConfig 接口中的 frontCamera 参数,那就以这个参数为准去打开对应的摄像头。
解题思路:
setLocalVideoConfig 为全量参数配置接口,重复调用此接口时,SDK 会刷新此前的所有参数配置,以最新的传参为准。所以每次修改配置时都需要设置所有参数,未设置的参数将取默认值。
音频通话
疑难问题6:
使用 Web 端纯音频通话场景时,在接收到到订阅的远端视频流之后,听不到声音。
易错等级: ⭐
错题原因:
Web 端接收到订阅的远端音频之后需要调用 play 方法播放。
解题思路:
在 stream-subscribed 回调(表示订阅远端的音/视频流成功)里面,调用 play 去播放远端的音视频流,此时 audio 和 video 推荐均设置为 true。
二、知识加油站
为什么打开摄像头失败?
摄像头打开失败有多种原因,您可以参考如下步骤进行排查:
- 确认摄像头权限有没有打开。Android、iOS/macOS 系统都有权限管理,请在系统设置中检查。同时 Android 上有些安全软件也管理权限。
- 检查是否有其他应用占据了摄像头。关闭其他应用,重启手机再试。
- 摄像头硬件问题。打开系统自带的拍摄视频程序看是否可以录像。
如何处理视频模糊问题?
视频模糊一般是由视频码率或分辨率过低导致。
- 确认 SDK 中分辨率的设置,您可以通过 setLocalVideoConfig 方法方法来设置视频相关的属性。
- 尝试 4G/5G 连接,或者其他 WiFi 信号排除网络问题。
- 接收端接受的是大流还是小流,是小流的话可以调用接口申请大流关闭小流。
- 如果有视频前处理,请先关闭前处理进行测试,排除前处理的问题。
为什么视频会出现卡顿?
视频卡顿问题一般由网络、设备性能等原因造成。
- 判断是持续性的还是一次性的卡顿。一次性的卡顿是由网络和设备的随机性导致,属于正常现象。
- 检查网络状态,判断连接是否正常,是否能够上网。
- 如果网络连接正常但依然卡顿,请尝试更换网络连接,检查在网络状态良好的条件下是否依然卡顿。
- 如果网络良好且条件允许,请尝试更换设备。
- 如果有视频前处理,例如美颜等,请先关闭前处理,检查卡顿是否由于前处理导致。
三、技术加餐
内容概述:WebRTC M97 目前在 Chrome 的稳定版中可用,包含 10 多个错误修复、增强和稳定性/性能改进。
技术干货 | C++ 四大特性之三:concept 特性详解
内容概述:模板的演进是 C++ 发展史中一条十分重要的线,笔者认为 concept 是这条线中最大的一个特性,本文将详细解读 C++ 的 concept 特性,以期对 C++ 有更深入的了解。
内容概述:本文主要基于 WebRTC release-72 源码及云信音视频团队积累的相关经验而成,主要分析以下问题: ADM(Audio Device Manager)的架构如何?ADM(Audio Device Manager)的启动流程如何?ADM(Audio Device Manager)的数据流向如何?本文主要是分析相关的核心流程,以便于大家有需求时,能快速地定位到相关的模块。