「交融通信常见问题」月刊将在每月末与大家见面,该月刊次要包含错题集、常识加油站、技术加餐三大板块,会集实际过程中的易错问题和解题思路,分享交融通信畛域的前沿资讯和技术干货,为您的开发提效减速,为您的进阶之路添砖加瓦。
本期内容概览
看这里!他人踩过的坑快绕开!
Mac 端应用 Type-C 耳机谈话他人听不到;
声音从蓝牙耳机播放切换到外放;
退到后盾一段时间后再谈话,对方听不到声音;
iOS 端呼叫组件初始化时 APP 卡死;
小程序谈话,Native 听不到;
发送信息失败;
因加密模式问题无奈上架到 Google 商店;
App 启动时,利用应用不晦涩
……
这些知识点你晓得吗:
直播场景与通信场景有什么区别?
SDK 反对的 QoS 策略是什么意思?
如何解决无声问题?
如何解决回声问题?
这些干货也不容错过!
网易会议组件正式开源
网易会议开源之挪动端篇、桌面端篇
RTC 音频品质评估和保障
Gitlab-ci 代替 webhook 触发 Jenkins job
SQLite 简介
20 万字《网易智企技术合辑》重磅公布
一、错题集
音视频通话
疑难问题 1:
Mac 端插入 Type-C 耳机之后谈话,其余端听不到。
易错等级:⭐⭐⭐⭐
错题起因:
Mac 对于 Type-C 耳机的适配有问题,Mac 端在插入 Type-C 耳机后,谈话时零碎声音面板中的输出电平很低或者简直没有,而且在该状况下,市面上其余的通话软件成果均统一。因而判断无奈失常应用 Type-C 的耳机是 Mac 对于 Type-C 耳机的适配不好导致。
解题思路:
倡议能够更换其余耳机或者应用零碎麦克风通话。
疑难问题 2:
音视频发送音频流,接收端听到的声音异样,从蓝牙耳机播放切换到外放。
接收端一开始听到的声音是通过蓝牙耳机播放的,在调用 enableLocalAudio 设置成 true 之后,声音异样变为外放,再次调用 enableLocalAudio 设置成 false 之后,声音复原通过蓝牙耳机播放。
易错等级:⭐⭐⭐
错题起因:
iOS 的音频是通过 AVAudioSession 治理的,是单例类,不止 SDK 能够调用,客户业务层也能够批改 AVAudioSession 的 option,这个问题景象看跟调用 SDK 的办法无关,实际上是在调用 SDK 办法的时候,客户业务层有调用批改 AVAudioSession 的 option,批改成了外放类型 AVAudioSessionCategoryOptionDefaultToSpeaker。
解题思路:
业务层有应用到 AVAudioSession 的时候,留神治理好业务层的调用。在通过 SDK 进行音频输入的时候防止批改 AVAudioSession。
疑难问题 3:
Android 端发送音视频 / 纯音频,退到后盾一段时间后再谈话,对方听不到声音。
易错等级:⭐⭐⭐
错题起因:
音视频采集退后台后被零碎限度。长时间退后台,采集是个高危动作,极有可能被零碎限度,取决于用户对 APP 的设置及系统对这种行为的限度要求,零碎限度详情请见行为变更(https://developer.android.com/about/versions/pie/android-9.0-changes-all);
解题思路:
在锁屏或将利用退至后台前,倡议用户能够先开启前台服务,从而让利用失常工作(持续采集声音和视频画面),在退出锁屏或返回前台前终止前台服务;不过须要有个预期:因为高版本 Android 零碎对于退后台持续采集这种敏感操作十分严格,前台服务的保活也是有危险的,须要思考好异常情况的解决形式。
疑难问题 4:
iOS 端呼叫组件初始化时,偶现 APP 卡死状况
易错等级:⭐⭐⭐
错题起因:
呼叫组件外部初始化 IM 和老版本 RTC SDK 互锁导致卡死。
解题思路:
依照官网文档在 pod 导入 NERtcCallKit 的时候,指定 NERtcSDK 版本为 4.2.120。
示例如下:
pod ‘NERtcCallKit’, ‘1.5.0’
pod ‘NERtcSDK’, ‘4.2.120’
4.2.120 版本是呼叫组件适配的稳固版本,pod 不指定版本拉到的 NERtcSDK 不是稳固版本。
疑难问题 5:
小程序和 Native 通话时,小程序谈话,Native 听不到
易错等级:⭐⭐⭐
错题起因:
小程序调用 publish 时参数传递谬误。小程序端 publish 时,须要传入要公布的媒体类型,而在传参时谬误的认为传入 video 示意音视频都公布。
解题思路:
- 公布音视频流时 publish 中 mediaType 应设置为 ”(空字符串);
- 公布纯视频流时 mediaType 应设置为 video;
- 公布纯音频流时 mediaType 应设置为 audio。
IM 即时通讯
疑难问题 6:
以下两种场景时,发送失败,报错参数谬误:
1. 再次 sendMessage 发送曾经发送过的图片和文件类音讯;
2. 间接 forwardMessage 发送新创建的音讯。
易错等级:⭐⭐⭐
错题起因:
1. 文件类音讯创立的时候能够抉择相册门路和 data 两种模式创立,创立的时候会赋值给文件 NIMMessageObject 的公有属性 sourceImage,sourceFilepath 和 s ourceData。发送完音讯的时候,这些公有属性会置空。如果再次调用 sendmessage 办法的话,会因为找不到这些参数报错参数谬误;
2.forwardMessage 发送音讯,SDK 会解析 messageObject 的 encodeContent 属性,拿到 messageObject 的对象数据进行转发,如果是新创建的音讯调用转发办法发送会因为找不到 messageObject 的 encodeContent 报错参数谬误。
解题思路:
1. 这种场景如果是转发的场景就须要调用转发的接口 forwardMessage,或者先调用 makeForwardMessageFromMessage 结构转发的 message,再 sendMessage 发送。
如果是本人想屡次发送同一个内容的音讯,就按创立音讯的流程,创立一个 message 对象发送一次,防止发送完不从新创立就再次 sendMessage 同一个 message 对象。
2. 新创建的音讯间接应用 sendMessage 发送,防止调用转发接口 forwardMessage 发送。
疑难问题 7:
客户须要上架到 Google 商店的时候,会被检测到有一处应用了不平安的加密模式的问题,导致无奈上架。
易错等级:⭐⭐⭐
错题起因:
Google 不反对 AES/ECB/PKCS5Padding 的加密模式。
解题思路:
在 IM SDK 8.11.5 之后的版本去除了该加密模式,能够降级解决。
疑难问题 8:
App 启动的时候,利用会呈现应用不晦涩的状况。看 logcat 日志显示 IM 相干日志频繁打印。
易错等级:⭐⭐⭐
错题起因:
有可能是频繁调用阻塞查问本地数据的接口,这类接口会查问本地数据库,如果在 UI 线程中循环调用会呈现性能问题,导致 UI 卡顿。能够通过在 logcat 日志中过滤 TransExec: execute Transaction 关键字,确认是否有 IM 接口频繁调用的状况,尤其须要留神“xxxBlock();”这类同步办法。
解题思路:
- 确认是否为业务层实现有问题,通过调整业务层逻辑,防止接口频繁调用。
- 查看 api 确认是否有批量查问的办法,防止循环调用。例如 TeamService.queryTeamBlock 能够改为 TeamService.queryTeamListBlock。
- 改为异步调用办法,或者放在子线程中调用,避免 UI 卡顿。
二、常识加油站
直播场景与通信场景有什么区别?
NERTC SDK 通过 setChannelProfile 办法设置实时音视频通话的场景,您能够通过该办法将房间设置为通信场景或直播场景,默认为通信场景。网易云信会针对不同实时音视频场景设置不同的优化策略,例如用户角色、默认视频编码码率等。
通信场景设置举荐用于一对一或多人音视频通话场景,直播场景设置举荐用于语音聊天室、小班课、主播 PK 等互动直播场景。
用户角色
为了便于管理用户权限,在直播场景中实现更细节的权限管制,音视频通话 2.0 反对在直播场景中设置用户角色。用户角色可设置为主播(broadcastor)或观众(audience)。
- 直播场景中,用户默认角色为主播,能够发送音视频流、配置推流工作等。通过办法 setClientRole 可切换用户角色,切换为观众后,只能接管音视频流。
- 通话场景中,用户默认角色为主播。不反对切换用户角色为观众。
QoS 策略
直播场景和通信场景下的默认 QoS 策略不同,次要体现在以下方面。
- 直播场景。在直播场景下,NERTC SDK 的 QoS 策略管制侧重于保障画质清晰度。因而在默认状况下,如果分辨率和帧率雷同,直播场景的码率相较于通信场景更高。在弱网环境下会有肯定延时。
- 通信场景。在通信场景下,NERTC SDK 的 QoS 策略管制侧重于保障音视频通话的实时性,最大水平上保障低时延。在弱网环境下会升高音质、画质来保障音视频通话晦涩。
SDK 反对的 QoS 策略是什么意思?
QoS: Quality of Service,服务质量。
当参加音视频通话的用户网络较差时,SDK 会启动 QoS 策略,主动调整收发数据的分辨率、码率、帧率。多人音视频通话:A、B、C、D 通话。
- 对于视频数据如果 A 上行发送网络较差,或者 B、C、D 上行接管网络较差,服务器都会回调给 A 并触发 QoS,调整 A 发送的数据。
- 对于音频数据如果 A 上行发送网络较差,则服务器回调给 A 并触发 QoS,调整 A 发送的数据;如果 B、C、D 上行接管网络较差,则服务器依据 B、C、D 的网络状况从新编码音频数据发送给 B、C、D。
如何解决无声问题?
无声问题定义:通话过程中或通话全程,双方或多方听不到声音。
问题解决思路:如下图所示,发送端与接收端之间有多个音频解决与传输过程,倡议通过采集、编码、网络传输、解码、播放等各模块对问题进行定位。
- 查看采集及播放设施的应用权限。
- 查看音视频房间的连贯状态。
- 查看公布 / 订阅接口调用。
- 查看扬声器 / 麦克风关上状态。
- 查看静音接口调用。
- 查看外接设备状态,如蓝牙耳机、音箱,如 Windows 设施需查看驱动程序或应用零碎自带的设施自检。
如以上内容均未存在问题,请分割网易云信共事,云信技术支持会及时提供技术服务帮忙问题定位及解决。
如何解决回声问题?
回声问题定义:本端在音频传入时,扬声器播放本人传入的音频。
问题解决思路:如下图所示,发送端听到本端的声音,个别为接收端回声打消解决呈现不牢靠的状况导致,如在多人的场景下,需先定位明确的异样接收端。
- 隔离通话单方设施的物理间隔。
- 顺次静音房间内的用户,判断呈现回声的异样源。
- 异样源佩戴耳机的状况下可去除回声。
- 提供异样源的设施具体信息蕴含 SDK 客户端日志。
请将收集的异样源信息提供给云信技术支持,云信技术支持会及时反馈异样解决进度及后果,该过程个别无需进行 SDK 替换。
三、技术加餐
网易智企公布“易 +”开源打算,网易会议组件正式开源
内容概述:网易智企公布”易 +”开源打算,旗下交融通信云服务专家网易云信打响头炮,正式开源网易会议组件,并将在第二季度开源低延时直播技术。
“易 +”开源 | 网易会议开源之挪动端篇
内容概述:网易会议组件源代码曾经上传至 GitHub,该我的项目由网易云信团队自研,联合网易云信零碎相干通信性能、实时音视频、即时消息、白板、直播等性能构建了一套会议零碎,本文次要介绍了网易会议组件在网易会议挪动端的实际落地。
“易 +”开源 | 网易会议开源之桌面端篇
内容概述:线上会议越来越广泛,很多企业心愿可能开发出一套本人的会议零碎,不便工作和交换;网易云信在通信畛域深耕多年,基于本身能力打造了一款成熟的会议零碎并将其开源,本文将介绍网易会议桌面端的相干内容。
技术干货 | RTC 音频品质评估和保障
内容概述:会议、连麦、音视频通话、在线教育、近程医疗等实时互动场景对 RTC 音频的品质提出了越来越高的要求,如何对 RTC 音频的成果发展测试,通过构建主观、规范、可反复的评估体系来保障好的音频传输品质,也成为目前比拟紧急和重要的课题。
技术干货 | Gitlab-ci 代替 webhook 触发 Jenkins job
内容概述:网易云信的 gitlab 服务器搭建在外网,Jenkins 服务器搭建在内网,因而 gitlab 没方法间接把 webhook 发送给 Jenkins,而 pipeline 的搭建采纳第三方 relay 转发的形式,然而这个 relay 常常“罢工”。本文依据网易云信的落地实际,具体介绍了如何借助 Gitlab-ci 代替 webhook 触发 Jenkins job。
技术干货 | SQLite 简介
内容概述:SQLite 是世界上应用最宽泛的数据库引擎。SQLite 内置于所有手机和大多数计算机中,并捆绑在人们每天应用的有数其余应用程序中。本文次要介绍了 SQLite 的相干个性。
2 周年福利 | 20 万字《网易智企技术合辑》重磅公布!
内容概述:「网易智企技术 +」行将迎来 2 周岁生日,网易智企精心筛选 51 篇技术文章,集结成这份 20 万字的《网易智企技术合辑》,送给每一位开发者!