通过本文,开发者完成RTC 2.5 升级到 RTC 3.0。
一、背景介绍
AliRTC 3.0版本是基于钉钉音视频能力开发的新一代RTC,沉淀了钉钉音视频服务海量用户的技术经验。自2024年4月10日起,所有新建的应用都要求是AliRTC 3.0版本,不再提供AliRTC2.x版本的应用新建。新建的3.0应用必须使用配套RTC 3.0版本的集成客户端SDK和API目录。
目前有很多老客户线上运行的是AliRTC 2.5.7版本,因此需要尽快完成升级。升级过程,有几点需要重点注意:
AliRTC 2.x 与 AliRTC 3.x 不能互通。
集成AliRTC 3.x 需要重新注册新的AppId。
客户端和服务端(若调用了RTC OpenAPI)都需要集成新的SDK。
Native客户端(Android/iOS/Mac/Windows)SDK API变化较小。
Web端 SDK API变化较大。
二、AliRTC 3.0优势
体验与钉钉会议对齐
超大容量:2000 人同时参会
高清画质:1080P 高清视频
高清语音:300+ 噪音智能降噪
全球部署:2800+ 全球加速节点
超低延时:150ms 保障流畅交流
稳定运行:70% 抗丢包、抗抖动
计划支持鸿蒙平台
计划25年推出
计划支持会议白板
支持虚拟背景
新老RTC对比
AliRTC 2.0(老) | AliRTC 3.0(新) | ||
包大小 | Android(arm64) | 8M | 15.8M(算法优化带来包大小增加) |
iOS(arm64) | 5.4M | 10.6M(算法优化带来包大小增加) | |
大方会 | 50方 | 2000方 | |
信令可靠性 | 需重入会 | 完善的failover机制 | |
多层分辨率 | 2层 | 3层 | |
延时 | 300ms左右 | 150ms左右 | |
稳定性 | QA测试保障 | QA测试保障 + 钉钉线上打磨 |
三、计费变更说明
音视频通话计费
老的计费方式视频按照单路流进行计费,而新的计费方式按照集合分辨率进行计费。
老的计费方式
通信类型 | 订阅分辨率 | 价格 (元/千份钟) |
语音通话 | 纯音频 | 6 |
视频通话 480P及一下 | 不高于640 × 480(含) | 12 |
视频通话 720P及以下 | 640 × 480 ~ 1280 × 720(含) | 24 |
视频通话 1080P及以下 | 高于1280 × 720 | 90 |
新的计费方式
通信类型 | 订阅分辨率 | 价格 (元/千份钟) |
语音通话 | 纯音频 | 6 |
视频通话 480P及以下 | 集合分辨率 ≤ 307,200(640 × 480) | 12 |
视频通话 720P及以下 | 307,200(640×480)< 集合分辨率 ≤ 921,600(1280 × 720) | 24 |
视频通话 1080P及以下 | 921,600(1280 × 720)< 集合分辨率 ≤ 2,073,600(1920 × 1080) | 60 |
视频通话 2K及以下 | 2,073,600(1920 × 1080)< 集合分辨率 ≤ 3,686,400 (2560 × 1440) | 108 |
视频通话 4K及以下 | 3,686,400 (2560 × 1440)< 集合分辨率 ≤ 8,847,360 (4096 × 2160) | 252 |
价格对比
假设一个客户端订阅3路480P的视频流,按照老的计费方式计算:
现在按照新的计费方式计算:
旁路转推计费
老的计费方式视频按照输入流的数量以及输出流的分辨率进行计费,而新的计费方式按照输入流的集合分辨率进行计费。
老的计费方式
规格 | 480P及以下 (元/千分钟) | 720P及以下 (元/千分钟) | 1080P及以下 (元/千分钟) |
16IN | 50 | 145 | 270 |
12IN | 42 | 119 | 220 |
9IN | 36 | 98 | 177 |
4IN | 25 | 65 | 110 |
2IN | 20 | 52 | 84 |
1IN | 18 | 45 | 71 |
纯音频 | 5 |
新的计费方式
通信类型 | 规格 | 价格 (元/千分钟) |
音频 | 纯音频 | 9 |
视频通话 480P及以下 | 集合分辨率 ≤ 307,200(640 × 480) | 36 |
视频通话 720P及以下 | 307,200(640×480)< 集合分辨率 ≤ 921,600(1280 × 720) | 48 |
视频通话 1080P及以下 | 921,600(1280 × 720)< 集合分辨率 ≤ 2,073,600(1920 × 1080) | 108 |
价格对比
旁路转推以TaskProfile:2IN_720P为例,按照老的计费方式单价为: 52元/千分钟。
按照新的计费规则:
集合面积 = 480P视频面积 x 2 = 614400
因此,按照新的计费方式单价为: 48元/千分钟。
四、升级步骤
1. 参考方案(一)
对于端侧版本可控的业务,即全体用户会按照业务推荐统一使用某一版本,建议采用此方案。如果无法确保所有用户都是用某一版本,若采用此方案,则对于老版本,访问到相关功能时,需要提示进行升级,否则相关功能不可用。
优点:实施周期短,同正常发版周期。
缺点:没有回退机制和很好的灰度机制,对版本的稳定性要求比较高,发版前需要充分测试。
第一阶段:预埋升级提醒
在现有版本中,预埋升级提醒,当SDK版本升级之后,老版本app访问相关功能时提醒用户进行升级。
第二阶段:升级新RTC SDK的版本上线
阿里云RTC:提供新版本RTC SDK。
业务方:升级新版本RTC SDK,对接新版本RTC的OpenAPI,同时限制老RTC客户端不会参与新版本的会议。
阿里云RTC:支持业务方完成集成,功能和体验对齐老版本。
第三阶段:采取各种手段推动用户进行版本升级
2. 参考方案(二)
对于端侧版本不可控的业务,即用户是否会升级到新版本app无法有效控制,建议采用此方案。
优点:有较好回退机制和灰度机制;
缺点:实施周期长,按照用户版本自然升级规律,预计3个月以上。
第一阶段:集成新RTC SDK的版本上线
阿里云RTC:提供新版本RTC SDK。
业务方:集成新版本RTC SDK,对接新版本RTC的OpenAPI,同时开发新老RTC的灰度机制。
阿里云RTC:支持业务方完成集成,功能和体验对齐老版本。
第二阶段:等待新版本升级百分比达到期望值
业务方:推进新版本的升级,根据情况决定是否强制升级。
第三阶段:按照会议进行灰度
业务方: 按照1%,2%,5%,10%,20% ......逐步切量灰度。
第四阶段:完成整体切量。
第五阶段:剔除老版本RTC SDK
业务方:剔除老版本RTC SDK。
五、API升级补充说明
1. 大小流API 升级说明
老版RTC,只支持两层视频流(大流和小流);在新版RTC中,支持三层视频流,接口调用形式也做了较大改变。
1)推流端:原publishLocalDualStream 在新版本中已经废弃,相应的老版本的onDualStreamPublishStateChanged回调接口也已经废弃。新版本中不需要调用任何API,SDK实现了按需推流,根据订阅需求自主决定是否分层推流。根据最大分辨率的规格,最大可支持3档同时推流(Full HD/HD, SD, LD)。
2)订阅端:新版本保留了setRemoteVideoStreamType接口,但是streamType参数类型发生了变化。新的参数枚举类型为DingRtcVideoStreamType,根据需要可以选择订阅DingRtcVideoStreamTypeLD(流畅)、DingRtcVideoStreamTypeSD(标清 360P左右)、DingRtcVideoStreamTypeHD(高清 720P)、DingRtcVideoStreamTypeFHD(超高清 1080P)。
2. 音视频缺省订阅API升级说明
老版本RTC的setDefaultSubscribeAllRemoteAudioStreams 和 setDefaultSubscribeAllRemoteVideoStreams 已经废弃,全部由subscribeAllRemoteAudioStreams 和 subscribeAllRemoteVideoStreams 来替代。
3. 单个音频订阅API 升级说明
老版本RTC的subscribeRemoteAudioStream接口已经废弃。新版本对音频订阅做了较大的改造,不再支持对单个用户音频的订阅,取而代之的是音频分组。
我们可以把频道理解为大厅,分组理解为小房间。一旦用户加入到小房间,就能订阅到小房间的音频;离开小房间回到大厅,则只能订阅到大厅的音频。如果一个用户仅需要订阅个别用户的音频,那么这几个用户需要单独加入音频组,并进行订阅。
1)加入音频组
/**
* @since 3.4
* @brief 加入音频分组。如果分组当前不存在,则自动创建一个。
* @param groupId 指定加入的音频分组。不可以是大厅、DingRtcEngine::HALL_ID,也不可以为空。
* @param usrData 可以额外提供一个字符串,业务层自行解释。长度不超过64字节。
* @return int 如果返回0,结果将会通过DingRtcEngineEventListener#onAudioGroupJoinResult通知app。如果返回<0,则调用失败,不会有通知消息onAudioGroupJoinResult。
* @note usrData暂时未支持。
*/
public abstract int joinGroup(String groupId, String usrData);
2)离开音频组
/**
* @since 3.4
* @brief 离开音频分组。
* @param groupId 要离开的音频分组。不可以是大厅{@link com::ding::rtc::DingRtcEngine::HALL_ID},也不可以为空。
* @return int 如果返回0,结果将会通过{@link com::ding::rtc::DingRtcEngineEventListener#onAudioGroupLeaveResult}通知app。如果返回<0,则调用失败,不会有通知消息onAudioGroupLeaveResult。
* @note 如果离开了分组,那么没有权限再订阅该分组的音频,也没有权限向该分组mix音频流。
*/
public abstract int leaveGroup(String groupId);
3)解散音频组
/**
* @since 3.4
* @brief 解散音频分组,所有成员被迫离开该音频分组。
* @param groupId 要解散的音频分组。不可以是大厅{@link com::ding::rtc::DingRtcEngine::HALL_ID},也不可以为空。
* @return int 如果返回0,结果将会通过{@link com::ding::rtc::DingRtcEngineEventListener#onAudioGroupDismissResult}通知app。如果返回<0,则调用失败,不会有通知消息OnAudioGroupDismissResult。
*/
public abstract int dismissGroup(String groupId);
4)本地音频合并进音频组或者大厅
/**
* @since 3.4
* @brief 本地音频合并进分组音频或者大厅音频中。
* @param mix true表示合并,false表示不合并。
* @param groupId 目标分组。如果是DingRtcEngine::HALL_ID,则表示目标为大厅的音频。不可以为空。
* @return int 如果返回0,结果将会通过DingRtcEngineEventListener#onAudioGroupMixResult通知app。如果返回<0,则调用失败,不会有通知消息OnAudioGroupMixResult。
* @note 前提条件:1,已经做了音频的publish; 2,权限要求:用户需要在目标分组或者大厅中。
*/
public abstract int mixAudioToGroup(boolean mix, String groupId);
5)切换订阅指定分组或大厅的音频。
/**
* @since 3.4
* @brief 切换订阅的音频流到指定的分组或者大厅音频。
* @param groupId 指定的音频分组。如果是DingRtcEngine::HALL_ID,则表示目标为大厅的音频。不可以为空。
* @return int 如果返回0,结果将会通过DingRtcEngineEventListener#onAudioSubscribeStateChanged通知app。如果返回<0,则调用失败,不会有通知消息OnAudioSubscribeStateChanged。
* @note 业务层监听OnAudioSubscribeStateChanged通知,如果uid为"",检查newState == DingRtcStatsSubscribed,再查询当前订阅成功的音频类型(通过DingRtcEngineEventListener#getCurrentSubscribedAudio),可判断是否切换成功。
* @note 切换过程会有多次OnAudioSubscribeStateChanged通知。
*/
public abstract int switchSubscriptionToGroup(String groupId);
6)查询当前订阅音频的分组。
/**
* @since 3.4
* @brief 查询当前订阅的音频的类型,可能是大厅音频,也可能是某个分组的音频。
* @return groupId 如果空,表示无订阅,如果是{@link com::ding::rtc::DingRtcEngine::HALL_ID},表示大厅音频,否则,返回分组音频对应的分组ID。
*/
public abstract String getCurrentSubscribedAudio();
7)通知当前频道内所有的分组列表。
/**
* @since 3.4
* @brief 返回当前频道内所有的分组列表。
* @param groups 分组列表。
* @note 该回调发生在加入频道的时候。App通过该回调可以获得当前频道内所有的分组。后续分组变化,通过回调{@link onAudioGroupListUpdate}获得。
*/
public void onListAllAudioGroups(List<String> groups) {}
8)加入音频分组回调。
/**
* @since 3.4
* @brief 当调用{@link joinGroup}加入某个group,触发此回调。注意:如果JoinGroup返回非0值,那么不会产生回调。
* @param result 0表示成功,其他值表示失败。
* @param errMsg 如果result不为0,补充说明错误原因。
* @param group 加入的group。
* @param members 该group的成员用户列表。
*/
public void onAudioGroupJoinResult(int result, String errMsg, String group, List<DingRtcEngine.DingRtcAudioGroupMember> members) {}
9)离开音频分组回调。
/**
* @since 3.4
* @brief 当调用{@link leaveGroup}离开某个group,触发此回调。注意:如果LeaveGroup返回非0值,那么不会产生回调。
* @param result 0表示成功,其他值表示失败。
* @param errMsg 如果result不为0,补充说明错误原因。
* @param group 离开的group。
*/
public void onAudioGroupLeaveResult(int result, String errMsg, String group) {}
10)解散音频分组回调。
/**
* @since 3.4
* @brief 当调用{@link dismissGroup}解散某个group,触发此回调。注意:如果DismissGroup返回非0值,那么不会产生回调。
* @param result 0表示成功,其他值表示失败。
* @param errMsg 如果result不为0,补充说明错误原因。
* @param group 解散的group。
*/
public void onAudioGroupDismissResult(int result, String errMsg, String group) {}
11)本地音频合并进音频组或者大厅回调。
/**
* @since 3.4
* @brief 当调用{@link mixAudioToGroup}向分组或者大厅混流,触发此回调。注意:如果mixAudioToGroup返回非0值,那么不会产生回调。
* @param groupId 目标分组。如果是{@link HALL_ID},则表示目标为大厅的音频,否则是普通分组的ID。非空。
* @param mix true表示将本地音频流混进指定的channel audio或者分组音频中; false表示取消。
* @param result 0表示成功,其他值表示失败。
* @param reason 如果result不为0,用该字符串解释失败的原因。
*/
public void onAudioGroupMixResult(String group, boolean mix, int result, String reason) {}
12)音频分组成员变化回调。
/**
* @since 3.4
* @brief 分组中成员变化,触发此回调。
* @param updateOpt 1表示新增成员列表,-1表示离开的成员列表。
* @param group 该回调发生的分组。
* @param members 变动的成员列表。
*/
public void onAudioGroupMemberUpdate(int updateOpt, String group, List<DingRtcEngine.DingRtcAudioGroupMember> members) {}
13)大厅成员变化回调。
/**
* @since 3.4
* @brief 当前留在大厅中的所有的成员列表。
* @param hallMembers 大厅中的成员列表。
* @note 大方会场景下,回调如果比较频繁,存在一定的cpu开销。
* @note 留在大厅是指不在任何分组中。如果加入某个分组,意味着离开了大厅;从所有分组中离开,意味着回到了大厅。
*/
public void onAudioGroupHallMembers(List<DingRtcEngine.DingRtcAudioGroupMember> hallMembers) {}
14)音频分组列表变化回调。
/**
* @since 3.4
* @brief 分组列表变化,触发此回调。
* @param updateOpt 1表示新增的分组,-1表示删除的分组。
* @param group 该回调指示的分组。
*/
public void onAudioGroupListUpdate(int updateOpt, String group) {}
4. 语音激励API升级说明
老版本RTC的语音激励通过enableAudioVolumeIndication接口进行开启或关闭。然后通过registerAudioVolumeObserver接口来注册AliRtcAudioVolumeObserver,通过AliRtcAudioVolumeObserver接口的onAudioVolume和onActiveSpeaker方法来获取说话的人,以及说话的音量。
在新的版本中enableAudioVolumeIndication接口继续保留,但是回调接口不需要注册,回调方法在通用的回调类DingRtcEngineEventListener中,对应的回调方法为onAudioVolumeIndication:
/**
* @since 3.0
* @brief 远端用户音量提示回调。
* @param speakers 用户音量信息,详见参考DingRtcAudioVolumeInfo,如果 speakers 为空,则表示远端用户不发流或没有远端用户。uid为"0"表示本地说话人。
*/
public void onAudioVolumeIndication(List<DingRtcAudioVolumeInfo> speakers)
5. 静音远端音频API升级说明
老版本RTC的muteAllRemoteAudioPlaying已经废弃,在新版本中可以使用setPlayoutVolume接口可以实现同样的功能。
/**
* @since 3.1
* @brief 设置音频播放音量,音量范围[0, 100]。
* @param volume 音量值。
* @return
* - 0:成功;
* - 非0:失败。
*/
public abstract int setPlayoutVolume(int volume);
6. 智能降噪API升级说明
老版本RTC的startIntelligentDenoise接口在新版本重新命名为setAudioDenoise,对应的接口描述:
/**
* @since 3.4
* @brief 设置音频降噪功能。
* @param options 音频降噪参数。
* @return
* - 0:成功;
* - 非0:失败。
* @remark music mode,自动关闭降噪。
*/
public abstract int setAudioDenoise(DingRtcEngineAudioDenoiseOptions options);
可以设置的参数为
音频去噪关:DingRtcEngineAudioDenoiseOff
音频去噪采用传统降噪:DingRtcEngineAudioDenoiseDsp
音频去噪采用智能降噪:DingRtcEngineAudioDenoiseEnhance
7. 基础美颜API升级说明
老版本RTC的setBeautyEffect接口在新版本重新命名为enableBeautyFace,对应的接口描述:
/**
* @brief 开启或关闭美颜功能,并设置美颜效果参数
* @private
* @param enable
* - true:开启美颜功能。
* - false:关闭美颜功能。
* @param options 美颜效果参数,详细定义见{@link com::ding::rtc::DingRtcEngine::DingRtcBeautyFaceOptions}。
* @return - 0:成功;
* - < 0:失败。
* @brief 开启或关闭美颜功能,并设置美颜效果参数。
*/
public abstract int enableBeautyFace(boolean enable, DingRtcBeautyFaceOptions options);
通过DingRtcBeautyFaceOptions可以设置如下参数
开启美肤:enableSkinBuffing(true / false)
磨皮系数:skinBuffingFactor = 0.6f (0.0f ~ 1.0f)
锐化系数:skinSharpenFactor = 0.8f(0.0f~1.0f)
美白系数:enableSkinWhitening (true / false)
美白系数:skinWhitingFactor = 0.8f (0.0f ~ 1.0f)
8. 踢人OpenAPI升级说明
踢人OpenAPI接口在新版本中做了重构,调用形式发生了变化。
老接口参考描述:RemoveTerminals
新接口参考描述:RemoveUsers - 踢出用户
备注:对接时,可下载对应语言的SDK进行集成。下载地址
9. 旁路混流OpenAPI升级说明
旁路混流OpenAPI在新版本中了重构,调用形式发生了变化。
老接口参考描述:StartMPUTask
新接口参考描述:StartStreamingOut - 开始旁路推流任务
备注:对接时,可下载对应语言的SDK进行集成。下载地址
六、客户端API变化说明清单
1. iOS端接口升级说明详情
接口名称 | 描述 | 备注 |
sharedInstance:extras | 初始化 | 一致 |
destroy | 反初始化 | 一致 |
setChannelProfile | 设置频道模式 | 已取消 无相应的限制 |
setClientRole | 设置客户端角色 | 已取消 无相应的限制 |
getCurrentClientRole | 获取客户端角色 | 已取消 无相应的限制 |
setAudioOnlyMode | 纯音频模式 | 已取消 通过关闭视频推流及订阅可代替该接口 |
joinChannel:name:onResult | 入会的回调 | 一致 |
leaveChannel | 离开频道 (参数有修改) | 一致 |
setLocalViewConfig:forTrack | 设置本地视频渲染参数 | 一致 |
setVideoEncoderConfiguration | 设置分辨率 | 一致 |
publishLocalVideoStream | 设置是否允许发布相机流。 | 一致 |
publishLocalAudioStream | 设置是否允许发布音频流。 | 一致 |
publishLocalDualStream | 设置是否允许发布次要视频流。 | 默认打开 |
muteLocalCamera:forTrack | 是否发送黑帧 | 一致 |
muteLocalMic:mode | 设置是否静音 | 一致 |
stopPreview | 停止预览 | 一致 |
startPreview | 开始预览 | 一致 |
switchCamera | 切换摄像头 | 一致 |
enableSpeakerphone | 设置听筒开关 | 一致 |
setAudioSessionOperationRestriction | 设置AudioSession模式 | 一致 |
setDefaultSubscribeAllRemoteAudioStreams | 默认是否订阅所有音频流 | 参见: subscribeAllRemoteAudioStreams |
setDefaultSubscribeAllRemoteVideoStreams | 默认是否订阅所有视频流 | 参见: subscribeAllRemoteVideoStreams |
setRemoteViewConfig:forTrack | 设置远端视频渲染参数 | 一致 |
setRemoteVideoStreamType:type | 设置是否订阅远端相机流。 | type 数据类型 有变化 |
subscribeRemoteVideoStream:track | 设置是否订阅远端视频流。 | 一致 |
subscribeRemoteAudioStream | 设置试听订阅远端音频流。 | 参见: subscribeAllRemoteAudioStreams |
setLogLevel | 设置日志 | 一致 |
getSdkVersion | 获取版本号 | 一致 |
isUserOnline: | 判断用户是否在线 | 一致 |
enablePlugin:pluginName | 注册插件(降噪插件) | 参见 setAudioDenoise |
startIntelligentDenoise | 开启智能降噪 | |
enableDelegateMainQueue | 设置callback在主线程回调 | 一致 |
setBeautyEffect | 设置美颜 | 参见 enableBeautyFace |
enableAudioVolumeIndication | 设置音量回调频率和平滑系数 | 一致 |
sendMediaExtensionMsg | 发送媒体扩展信息 | 一致 |
回调接口名称 | 回调接口描述 | 备注 |
onAudioPublishStateChanged:newState:elapseSinceLastState:channel | 音频推流回调 | 一致 |
onVideoPublishStateChanged:newState:elapseSinceLastState:channel | 视频推流回调 | 一致 |
onDualStreamPublishStateChanged:newState:elapseSinceLastState:channel | 视频次级流推流回调 | 有变化 |
onFirstRemoteVideoFrameDrawn:videoTrack:width:height:elapsed | 首帧渲染回调( 新增参数) | 一致 |
onFirstLocalVideoFrameDrawn:height:elapsed | 本地首帧回调 | 一致 |
onVideoSubscribeStateChanged:oldState:newState:elapseSinceLastState:channel | 视频流变更回调 | 一致 |
onSubscribeStreamTypeChanged:oldStreamType:newStreamType:elapseSinceLastState:channel | 订阅流变更回调 | 一致 |
onFirstRemoteAudioDecodedWithUid:elapsed | 音频首帧回调 | 一致 |
onAudioSubscribeStateChanged:oldState:newState:elapseSinceLastState:channel | 音频订阅状态回调 | 一致 |
onRemoteUserOnLineNotify:elapsed | 用户入会回调( 新增参数) | 一致 |
onRemoteUserOffLineNotify:offlineReason | 用户离会回调( 新增参数) | 一致 |
onRemoteTrackAvailableNotify:audioTrack:videoTrack | 他人推流回调 | 一致 |
onLeaveChannelResult:stats | 离开回调 | 一致 |
onOccurWarning:message | 警告回调 | 一致 |
onOccurError:message | 错误回调 | 一致 |
onPerformanceLow | 设备性能不足回调 | 废弃 |
onPerformanceRecovery | 设备性能恢复回调 | 废弃 |
onRtcStats | 性能数据回调 | 一致 |
onRtcLocalVideoStats | 性能数据回调 | 一致 |
onRtcRemoteVideoStats | 性能数据回调 | 一致 |
onNetworkQualityChanged:upNetworkQuality:downNetworkQuality | 网络状况回调 | 一致 |
onBye | 会议结束或被踢回调 | 一致 |
onConnectionLost | 网络连接断开回调 | 一致 |
onTryToReconnect | 网络连接正在尝试重连中回调 | 一致 |
onConnectionRecovery | 网络连接重连成功回调 | 一致 |
onUpdateRoleNotifyWithOldRole | 客户端角色变化通知 | 已取消 无相应的限制 |
onMediaExtensionMsgReceived | 收到媒体扩展信息回调 | 一致 |
onUserAudioInterruptedBegin | 用户audio被中断通知(一般用户打电话等音频被抢占场景)。 | 已取消 客户业务侧实现 |
onUserAudioInterruptedEnded | 用户audio中断结束通知(对应onUserAudioInterruptedBegin)。 | 已取消 客户业务侧实现 |
onPublishLiveStreamStateChanged | 旁路推流状态改变回调。 | 已取消 |
onPublishTaskStateChanged | 旁路任务状态改变回调。 | 已取消 |
2 Android端接口升级说明详情
接口名称 | 接口描述 | 备注 |
getInstance | 初始化 | 一致 |
destroy | 销毁 | 一致 |
setChannelProfile | 设置频道模式 | 已取消 无相应的限制 |
setClientRole | 设置客户端角色 | 已取消 无相应的限制 |
getCurrentClientRole | 获取客户端角色 | 已取消 无相应的限制 |
setAudioOnlyMode | 设置纯音频模式 | 已取消 通过关闭视频推流及订阅可代替该接口 |
setAudioProfile | 设置音频规格 | 音频场景待对齐 音乐模式等 |
joinChannel | 加入会议 | 一致 |
leaveChannel | 离开会议 | 一致 |
setLocalViewConfig | 设置本地渲染 | 一致 |
setVideoEncoderConfiguration | 设置视频流编码配置 | 一致 |
publishLocalAudioStream | 发布本地音频流 | 一致 |
publishLocalVideoStream | 发布本地视频流 | 一致 |
publishLocalDualStream | 发布本地次要视频流 | 默认开启 |
muteLocalCamera | 本地摄像头开关 | 一致 |
muteLocalMic | 本地麦克风开关 | 一致 |
startPreview | 开始预览 | 一致 |
stopPreview | 停止预览 | 一致 |
switchCamera | 切换摄像头 | 一致 |
setCameraCapturerConfiguration | 设置摄像头配置 | 一致 |
setCameraZoom | 设置摄像头缩放 | 一致 |
setCameraFlash | 设置摄像头聚焦 | 一致 |
setCameraAutoFocusFaceModeEnabled | 设置摄像头自动聚焦 | 一致 |
getCurrentCameraDirection | 获取摄像头方向 | 一致 |
enableSpeakerphone | 开启扬声器 | 一致 |
setDefaultSubscribeAllRemoteAudioStreams | 设置默认订阅远端音频流 | 参见: subscribeAllRemoteAudioStreams |
setDefaultSubscribeAllRemoteVideoStreams | 设置默认订阅远端视频流 | 参见: subscribeAllRemoteVideoStreams |
setRemoteViewConfig | 设置远端渲染 | 一致 |
setRemoteVideoStreamType | 设置视频流类型 | type 数据类型 有变化 |
subscribeRemoteAudioStream | 订阅远端音频流 | 参见: subscribeAllRemoteAudioStreams |
subscribeRemoteVideoStream | 订阅远端视频流 | 一致 |
setPlayoutVolume | 设置音量 | 一致 |
setRtcEngineNotify | 设置RTC通知回调 | 一致 |
setRtcEngineEventListener | 设置RTC事件回调 | 一致 |
setLogLevel | 设置日志等级 | 一致 |
getSdkVersion | 获取SDK版本 | 一致 |
isInCall | 是否在会 | 一致 |
getUserInfo | 获取远端用户 | 一致 |
startIntelligentDenoise | 开启降噪 | 参见 setAudioDenoise |
setBeautyEffect | 设置美颜 | 参见 enableBeautyFace |
enableAudioVolumeIndication | 设置音量回调频率和平滑系数 | 一致 |
sendMediaExtensionMsg | 发送媒体扩展信息 | 一致 |
startNetworkQualityProbeTest | 开始网络质量探测 | 已取消 |
stopNetworkQualityProbeTest | 停止网络质量探测 | 已取消 |
回调接口名称 | 回调接口描述 | 备注 |
onJoinChannelResult | 加入会议时调用 | 一致 |
onLeaveChannelResult | 离开会议时调用 | 一致 |
onAudioPublishStateChanged | 音频发布流发生变化 | 一致 |
onVideoPublishStateChanged | 视频发布流发生变化 | 一致 |
onDualStreamPublishStateChanged | 次要视频发布流发生变化 | 有变化 |
onAudioSubscribeStateChanged | 音频订阅流发生变化 | 一致 |
onVideoSubscribeStateChanged | 视频订阅流发生变化 | 一致 |
onSubscribeStreamTypeChanged | 视频订阅流类型发生变化 | 一致 |
onNetworkQualityChanged | 网络状态变化 | 一致 |
onConnectionLost | 失去连接 | 一致 |
onTryToReconnect | 尝试重新连接 | 一致 |
onConnectionRecovery | 重新连接完成 | 一致 |
onPerformanceLow | 设备性能不足 | 废弃 |
onPermormanceRecovery | 设备性能恢复 | 废弃 |
onOccurError | 发生错误 | 一致 |
onOccurWarning | 发生警告 | 一致 |
onBye | 被服务器踢出或者频道关闭 | 一致 |
onRemoteUserOnLineNotify | 远端用户上线 | 一致 |
onRemoteUserOffLineNotify | 远端用户下线 | 一致 |
onUserWillBecomeActive | 远端 用户应用返回前台 | 一致 |
onUserWillResignActive | 远端 用户应用退到后台 | 一致 |
onRemoteTrackAvailableNotify | 远端用户的流发生变化 | 一致 |
onFirstAudioPacketSent | 音频首包发送回调 | 一致 |
onFirstVideoPacketSent | 视频首包发送回调 | 一致 |
onFirstAudioPacketReceived | 音频首包接收回调 | 一致 |
onFirstVideoPacketReceived | 视频首包接收回调 | 一致 |
onFirstVideoFrameReceived | 视频首帧接收回调 | 一致 |
onFirstRemoteVideoFrameDrawn | 视频首帧绘制完成 | 一致 |
onAliRtcStats | 当前会话统计信息回调 | 一致 |
onRtcLocalAudioStats | 本地音频统计信息 | 一致 |
onRtcRemoteAudioStats | 远端音频统计信息 | 一致 |
onRtcLocalVideoStats | 本地视频统计信息回调 | 一致 |
onRtcRemoteVideoStats | 远端视频统计信息回调 | 一致 |
onLocalVideoSample | 本地视频流源数据 | 一致 |
onRemoteVideoSample | 远端视频流源数据 | 一致 |
onUpdateRoleNotifyWithOldRole | 客户端角色变化通知 | 已取消 无相应的限制 |
onMediaExtensionMsgReceived | 收到媒体扩展信息回调 | 一致 |
onUserAudioInterruptedBegin | 用户audio被中断通知(一般用户打电话等音频被抢占场景)。 | 已取消 客户业务侧实现 |
onUserAudioInterruptedEnded | 用户audio中断结束通知(对应onUserAudioInterruptedBegin)。 | 已取消 客户业务侧实现 |
onNetworkQualityProbeTest | 网络质量探测回调。 | 已取消 |
onPublishLiveStreamStateChanged | 旁路推流状态改变回调。 | 已取消 |
onPublishTaskStateChanged | 旁路任务状态改变回调。 | 已取消 |
3. Windows 端接口升级说明详情
接口名称 | 接口描述 | 备注 |
Create | 初始化 | 一致 |
Destroy | 销毁 | 一致 |
SetChannelProfile | 设置频道模式 | 已取消 无相应的限制 |
SetClientRole | 设置客户端角色 | 已取消 无相应的限制 |
GetCurrentClientRole | 获取客户端角色 | 已取消 无相应的限制 |
SetAudioOnlyMode | 设置纯音频模式 | 已取消 通过关闭视频推流及订阅可代替该接口 |
JoinChannel | 加入会议 | 一致 |
LeaveChannel | 离开会议 | 一致 |
EnableLocalVideo | 打开本地视频采集 | 一致 |
SetLocalViewConfig | 设置本地渲染 | 一致 |
SetVideoEncoderConfiguration | 设置视频流编码配置 | 一致 |
PublishLocalAudioStream | 发布本地音频流 | 一致 |
PublishLocalVideoStream | 发布本地视频流 | 一致 |
PublishLocalDualStream | 发布本地次要视频流 | 默认开启 |
MuteLocalCamera | 本地摄像头开关 | 对应MuteLocalVideo接口 |
MuteLocalMic | 本地麦克风开关 | 对应MuteLocalAudio接口 |
StartPreview | 开始预览 | 一致 |
StopPreview | 停止预览 | 一致 |
SetCameraZoom | 设置摄像头缩放 | 缺失 |
SetCameraFlash | 设置摄像头聚焦 | 缺失 |
SetCameraAutoFocusFaceModeEnabled | 设置摄像头自动聚焦 | 缺失 |
GetCurrentCameraDirection | 获取摄像头方向 | 缺失 |
SetDefaultSubscribeAllRemoteAudioStreams | 设置默认订阅远端音频流 | 参见: SubscribeAllRemoteAudioStreams |
SetDefaultSubscribeAllRemoteVideoStreams | 设置默认订阅远端视频流 | 参见: SubscribeAllRemoteVideoStreams |
SetRemoteViewConfig | 设置远端渲染 | 一致 |
SetRemoteVideoStreamType | 设置视频流类型 | type 数据类型 有变化 |
SubscribeRemoteAudioStream | 订阅远端音频流 | 参见: SubscribeAllRemoteAudioStreams |
SubscribeRemoteVideoStream | 订阅远端视频流 | 一致 |
MuteAllRemoteAudio | 静音所有远端播放声音 | 参考: SetPlayoutDeviceVolume |
SetEngineEventListener | 设置RTC事件回调 | 一致 |
SetLogLevel | 设置日志等级 | 一致 |
GetSDKVersion | 获取SDK版本 | 一致 |
IsUserOnline | 是否在会 | 一致 |
GetUserInfo | 获取远端用户 | 一致 |
enableAudioVolumeIndication | 设置音量回调频率和平滑系数 | 一致 |
sendMediaExtensionMsg | 发送媒体扩展信息 | 一致 |
AliRtcVideoCanvas | renderMode | AliRtcRenderModeAuto |
mirrorMode | AliRtcRenderMirrorModeAllEnabled | |
rotationMode | AliRtcRotationMode_270 AliRtcRotationMode_90 |
回调接口名称 | 回调接口描述 | 备注 |
onRemoteUserOnLineNotify | 远端用户上线 | 一致 |
onRemoteUserOffLineNotify | 远端用户下线 | 一致 |
onJoinChannelResult | 加入会议时调用 | 一致 |
onRemoteTrackAvailableNotify | 远端用户的流发生变化 | 一致 |
onConnectionStatusChange | 网络状态变化时通知 | 一致 |
onUserVideoEnable | 对端用户关闭相机流采集 | 一致 |
onNetworkQualityChanged | 网络质量变化通知 | 一致 |
onRtcRemoteVideoStats | 远端视频统计信息回调 | 一致 |
onRtcLocalVideoStats | 本地视频统计信息回调 | 一致 |
onUpdateRoleNotifyWithOldRole | 客户端角色变化通知 | 已取消 无相应的限制 |
onMediaExtensionMsgReceived | 收到媒体扩展信息回调 | 一致 |
onPublishLiveStreamStateChanged | 旁路推流状态改变回调。 | 已取消 |
onPublishTaskStateChanged | 旁路任务状态改变回调。 | 已取消 |
4、Web端接口升级说明详情
新版本Web 是全量重构版本,在继承了旧版本功能的基础上,优化了 SDK 的内部架构,提高了 API 的易用性,具体包括以下优势:
接口异步化,基于 Promise-based 的 API 使代码更健壮;
支持 TypeScript;
以 Track 轨道代替 Stream概念来控制音视频数据,逻辑各自独立,更为灵活。
优化了事件通知机制,统一了频道内事件的命名和回调参数的格式。
1. 接口相关
被移除且无替代性的接口
旧版接口名称 | 接口描述 | 备注 |
getAvailableResolutions | 获取可支持的分辨率。 | 可参考新版VideoDimension 类型定义 |
isSupportScreenShare | 是否支持屏幕共享。 | 可参考浏览器支持文档有注明 |
setChannelProfile | 设置频道模式。 | 模式可由业务调用方利用API新增参数灵活组合 |
setClientRole | 设置角色。 | 由业务接入方维护 |
setAudioOnlyMode | 设置是否为纯音频模式。 | 可通过仅订阅/发布音频实现 |
dispose | 释放实例。 | 在调用client.leave是会自动清理实例状态 |
enableAudioVolumeIndicator | 设置接收音量值回调。 | 新版本暂未支持获取具体用户音量 |
enableHighDefinitionPreview | 设置是否开启高清预览。 | 新版本具体分辨率由用户设置决定 |
getUserInfo | 获取用户信息。 | remoteUsers返回用户信息里已包含全量信息,无需额外调用该接口 |
功能类似可替代的接口
旧版接口名称 | 接口描述 | 新版接口名称 | 新版接口备注 |
new AliRtcEngine() | 初始化引擎,支持配置自动订阅与发布 | 创建客户端实例,支持多实例,不支持配置自动订阅和发布,可监听"user-published"事件订阅,调用publish() 接口推流实现自动推流 | |
getDevices | 获取设备信息,返回摄像头和音频设备。 | 新版本可选择按照类别来枚举可用设备。 | |
isSupport | 检测浏览器是否支持Web SDK。 | 接口返回调整,仅判断浏览器是否支持rtc能力。h264 支持检测需要getSupportedCodec()接口返回 | |
joinChannel | 加入会议 | JoinParam有所调整 | |
leaveChannel | 离开会议 | 调整为同步调用 | |
configLocalAudioPublish | 设置是否允许发布音频流。 | 用户自己决定是否发布音视频轨道,支持同时发布多个,promise调用保障顺序 | |
configLocalCameraPublish | 设置是否允许发布相机流。 | ||
configLocalScreenPublish | 设置是否允许发布屏幕共享流。 | ||
publish | 发布本地视频流。 | ||
unPublish | 结束发布本地流。 | 用户自己决定是否取消发布音视频轨道,支持同时取消发布多个,promise调用保障顺序 | |
setDisplayRemoteVideo | 为远端的视频设置渲染窗口以及绘制参数。 | 新版本sdk在play 的时候第一个参数来指定容器元素,无需接入方创建video标签, sdk来管理视频流的播放; | |
stopPreview | 停止预览 | cameraTrack.stop | |
startPreview | 开始预览 | ||
muteLocalCamera | 是否停止本地视频采集。 | cameraTrack.setMuted | 基本一致 |
currentCamera | 指定摄像头设备。 | cameraTrack.setDevice | |
videoProfile | 设置视频流或共享流参数。 | cameraTrack.setEncoderConfiguration screenTrack.setEncoderConfiguration | |
setVideoProfile | |||
enableCamera | 设置是否使用摄像头。 | cameraTrack.setEnabled | |
currentAudioCapture | 指定麦克风设备。 | microphoneTrack.setDevice | |
setAudioOutput | 设置音频播放设备。 | remoteAudioTrack.setSpeaker | |
muteLocalMic | 是否停止本地音频采集。 | microphoneTrack.setMuted | |
muteRemoteAudioPlaying | 设置是否停止播放远端音频流。 | remoteAudioTrack.stop | 当前订阅远端音频仅支持订阅mcu,相当于订阅远端所有音频流。仅订阅一次即可,无需重复订阅。 |
muteAllRemoteAudioPlaying | 设置是否停止远端的所有音频流的播放。 | ||
setAudioVolume | 设置订阅用户音量。 | remoteAudioTrack.setVolume | 无需指定用户 |
getAudioVolume | 获取订阅用户音量 | remoteAudioTrack.getVolume | 无需指定用户 |
getUserList | 获取当前房间在线用户 | client.remoteUsers | 一致 |
setExternalMediaTrack | 设置外部输入 | DingRTC.createCustomAudioTrack、DingRTC.createCustomVideoTrack | 注意与摄像头轨道和麦克风轨道不能同时发布。 |
configRemoteAudio | 设置是否订阅远端音频流。 | client.subscribe clienr.unsubscribe client.batchSubscribe client.batchUnsubscribe client.setRemoteVideoStreamType client.setRemoteDefaultVideoStreamType | 新版本参数有变化,接口需用户主动调用,具体参考API文档 订阅音频限制:当前仅支持订阅mcu音频,将userId置为字符串mcu 订阅视频需在第三个参数指定为true时代表订阅共享流,否则订阅的为摄像头流 |
configRemoteCameraTrack | 设置是否订阅远端相机流。 | ||
configRemoteScreenTrack | 设置是否订阅远端屏幕流。 | ||
subscribe | 订阅远程发布流。 | ||
unSubscribe | 取消订阅该用户所有的流。 | ||
on | 订阅事件。 | client.on DingRTC.on track.on | 新版本丰富了事件透出类型与调用层级,具体可参考api文档 |
off | 取消订阅事件 | client.off DingRTC.off track.off |
其余新版本新增功能
功能模块 | API | 说明 |
音视频轨道通用操作 | track.getMediaStreamTrack | 获取浏览器原生的 MediaStreamTrack 对象 |
track.getTrackId | 获取由 SDK 生成的对于媒体轨道来说的唯一 ID | |
track.getTrackLabel | 获取本地轨道的来源描述 | |
track.close | 关闭本地轨道,并释放相关采集设备 | |
track.replaceTrack | 替换本地音视频轨道 | |
音频轨道 | track.getVolumeLevel | 获取音频轨道的音量等级 |
视频轨道 | track.getCurrentFrameData | 获取当前渲染的视频帧数据 返回'image/png' 类型的 dataURL |
远端音视频轨道操作 | track.getUserId | 获取发布远端轨道的远端用户 ID |
支持度 | oneRTC.getSupportedCodec | 获取 DingRtc Web SDK 对正在使用的浏览器支持的编解码格式 |
日志 | DingRTC.setLogLevel | 设置 SDK 的日志输出级别。 |
全局设置项 | setClientConfig | 设置sdk 集成选项设置,例如自定义的gslb地址 |
质量统计 | client.getLocalAudioStats | 获取本地音频相关信息。 |
client.getLocalVideoStats | 获取本地视频相关信息。 | |
client.getRemoteVideoStats | 获取远端用户的视频统计信息。 | |
client.getRemoteNetworkQuality | 获取远端用户的网络统计信息,远端用户也需要在3.3.0版本及以上时才能获取到信息。 |
其中涉及主要几种类的新增属性信息如下:
类名 | 属性名 | 说明 |
client 客户端实例 | remoteUsers | 远端用户信息列表 |
localTracks | 保存当前正在发布的本地轨道对象列表 | |
uid | 本地用户的用户 ID。 | |
channelName | 当前加入的频道名称 | |
user 用户信息 | audioTrack | 订阅远端用户音频保存的远端音频轨道对象 |
audioMuted | 远端当前麦克风是否静音。 | |
videoTrack | 订阅远端用户视频保存的远端视频轨道对象 | |
videoMuted | 远端当前摄像头是否关闭。 | |
auxiliaryTrack | 如果成功订阅了远端用户的桌面共享,这里会保存远端的桌面共享视频轨道对象。 | |
auxiliaryMuted | 远端当前屏幕共享是否关闭。 | |
uid | 远端用户的用户 ID | |
hasAuxiliary | 远端当前是否在发送屏幕共享。 | |
hasVideo | 远端当前是否在发送视频 | |
hasAudio | 远端当前是否在发送视频频 | |
localTrack 本地轨道 | enabled | 本地轨道当前的启用状态 |
isPlaying | 媒体轨道是否正在播放 | |
muted | 本地媒体轨道当前的静音状态 | |
trackMediaType | 媒体轨道的类型"audio"| "video" | |
remoteTrack 远端轨道 | isPlaying | 媒体轨道是否正在播放 |
trackMediaType | 媒体轨道的类型"audio"| "video" |
新版本尚待补齐旧版本接口(伴奏相关)
接口名称 | 接口描述 |
startAudioMixing | 开始播放音乐文件。 |
stopAudioMixing | 停止播放音乐文件。 |
pauseAudioMixing | 暂停播放音乐文件。 |
resumeAudioMixing | 恢复播放音乐文件。 |
adjustAudioMixingVolume | 调节伴奏音量。 |
setAudioMixingPosition | 设置音乐文件的播放位置。 |
getAudioMixingDuration | 获取音乐文件时长。 |
getAudioMixingCurrentPosition | 获取音乐文件播放进度。 |
2. 回调相关
被移除且无替代性的回调
旧版回调名称 | 描述 | 备注 |
onUpdateRole | 角色切换回调。 | 新版本不再有role概念 |
onMediaStream | 订阅流成功回调,返回远程流的Stream对象,通过H5 Video或Audio播放。 | 在client.subscribe接口调用成功后返回的track 对象可直接调用play播放。 |
onMediaStreamUpdate | 订阅流状态变化回调。 | |
onSubscribeChange | 自动订阅回调。 | 新版本不再由sdk内部自动订阅,调整为用户推流时间抛出后,主动调用client.subscribe来订阅。 |
onMedia | 推流和订阅的音视频数据回调。 | 新版本sdk 使用stats 系列api 来主动获取数据监控回调。具体可参考api文档。 |
onPublishChange | 本地发布流回调(自动推流)。 | 可从client.localTracks 获取本地已发布的流 |
onError | 错误异常回调。当有错误发生时,触发onError回调 | 新版本错误信息主要由接口调用抛出,更为灵活。 |
onAudioMixingPlayed | 伴奏开始播放回调。 | 待后续版本设计实现 |
onAudioMixingFinished | 伴奏播放结束回调。 | |
onShareSystemAudioStart | 共享声音通知回调。 | |
onAudioLevel | 音频能量值回调。 |
功能类似可替代的回调
旧版回调名称 | 描述 | 新版回调名称 | 备注 |
onPublisher | 当频道里的其他人发布本地流时的回调 | client.on('user-published', callback) | 功能类似,回调参数有变化,可参考api文档 |
onUnPublisher | 当频道里的其他人取消发布本地流时的回调 | client.on('user-unpublished', callback) | |
onJoin | 当有其他用户加入频道时,触发 | client.on('user-joined', callback) | |
onLeave | 当有其他用户离开频道时,触发 | client.on('user-left', callback) | |
onBye | 被服务器踢出或者频道关闭时回调 | client.on('connection-state-change', callback) | connectionState 变为disconnected 时,会在回调里第三个参数透出原因 |
onNotify | 用户静音状态变化回调。 | client.on('user-info-updated', callback) | 功能类似,回调参数有变化,可参考api文档 |
onNetworkQuality | 网络质量回调。 | client.on('netwrok-quality', callback) | 功能类似,回调参数有变化,可参考api文档 |