更新记录
6.6.0(2024-04-19)
- 新增重力感应接口 setGravitySensorAdaptiveMode;
- 支持回调本地人声音高信息;
6.5.0(2024-03-16)
- 优化低带宽条件下的音频弱网表现。
- 优化低带宽条件下的视频弱网表现。
- 优化高丢包高延时下的音质。
- 优化 SDK 底层逻辑,提升整体稳定性。
- 升级APP Store发布包屏幕分享功能最低版本要求11.0(内测);
6.4.2(2024-01-15)
- 修复部分HBuilderX编辑器iOS无法打包bug;
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 14.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 17 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
腾讯云实时音视频
实时音视频(Tencent TRTC)主打低延时互动直播和多人音视频两大解决方案,支持低延时直播观看、实时录制、屏幕分享、美颜特效、立体声等能力,还能和直播 CDN 无缝对接,适用于互动连麦、跨房PK、语音电台、K 歌、小班课、大班课、语音聊天、视频聊天、在线会议等业务场景。
接口模式(纯API)
扫描下方二维码,安装示例代码,快速体验插件功能:
Android | iOS | 联系我们 |
---|---|---|
扫码添加技术支持(微信号: ruanyunkeji006),开通测试账号
UI模式
扫描下方二维码,安装示例代码,快速体验插件功能:
Android | iOS | 联系我们 |
---|---|---|
扫码添加技术支持(微信号: ruanyunkeji006),开通测试账号。
定制UI
扫码添加我们技术支持(微信号: ruanyunkeji006),联系定制UI
技术支持
建议扫码添加我们技术支持,协助接入和测试。
联系我们 | 微信号 | 更多功能 |
---|---|---|
ruanyunkeji006 |
人声设置 美颜 背景音乐 |
跑通通话模式
适用场景
TRTC 支持四种不同的进房模式,其中视频通话(VideoCall)和语音通话(VoiceCall)统称为通话模式,视频互动直播(LiveRoom)和语音互动直播(VoiceRoom)统称为 直播模式。 通话模式下的 TRTC,支持单个房间最多300人同时在线,支持最多30人同时发言。适合1对1视频通话、300人视频会议、在线问诊、远程面试、视频客服、在线狼人杀等应用场景。
原理解析
TRTC 云服务由两种不同类型的服务器节点组成,分别是“接口机”和“代理机”:
-
接口机 该类节点都采用最优质的线路和高性能的机器,善于处理端到端的低延时连麦通话,单位时长计费较高。
-
代理机 该类节点都采用普通的线路和性能一般的机器,善于处理高并发的拉流观看需求,单位时长计费较低。
在通话模式下,TRTC 房间中的所有用户都会被分配到接口机上,相当于每个用户都是“主播”,每个用户随时都可以发言(最高的上行并发限制为30路),因此适合在线会议等场景,但单个房间的人数限制为300人。
步骤1: 插件的加载和配置
- 加载插件
首先,加载uniapp平台的原生插件,需要自定义基座后才能使用,您可以按照自定义基座文档进行。
其次,新建nvue文件,注意该模块必须在nvue中使用。
插件名称为: RY-TencentTrtc,
使用
<RY-TencentTrtc ref="trtc" v-bind:style = "{ width: playerWidth, height: playerHeight }"></RY-TencentTrtc>
备注:
可以通过改变width和height参数的大小,来改变视图容器的大小。
- 腾讯云配置
- 点击应用管理,进入应用列表;
- 点击 "创建应用",填入相关信息,创建新应用; 如果使用已有应用,则跳过这步;
- 点击"应用信息",进入应用详情;
- 在"应用信息"标签卡中,点击"SDKAppID"后面的复制按钮,复制SDKAppId,并保存,对应为后文中的"sdkAppId";
- 在"快速上手"标签卡中,"第二步"里,点击"复制秘钥",复制Key,并保存,对应为后文中的"key"值。
- 生成签名
手动签名点击 UserSig生成&校验 ,选择对应的sdkAppId的应用,输入userId,获取对应的用户签名userSig;
如果您需要自动签名,联系我们开通。
步骤2: 开始使用插件
使用RY-TencentTrtc,需要调用 init 初始化模块,才可以调用其他的接口功能。
this.$refs.trtc.init({
docPath: plus.io.convertLocalFileSystemURL('_doc')
}, ret => {
console.log(ret);
});
步骤3: 设置监听
setTrtcListener 注册事件回调,并监听相关事件回调。
this.$refs.trtc.setTrtcListener({}, ret => {
console.log(ret);
});
步骤4: 组装进房参数
在调用 enterRoom 接口时,需要填写几个关键参数,这些参数的必填字段如下表所示。
参数 | 字段类型 | 补充说明 | 填写示例 |
---|---|---|---|
sdkAppId | 整数类型 | 应用Id,您可以在 实时音视频控制台 中查看 SDKAppID | 1400000123 |
userId | 字符串类型 | 只允许包含大小写英文字母(a-z、A-Z)、数字(0-9)及下划线和连词符 | test_user_001 |
userSig | 字符串类型 | 用户签名 | eJyrVareCeYrSy1Ssll... |
roomId | 整数类型 | 默认不支持字符串类型的房间号,字符串类型的房间号会影响进房速度 | 29834 |
注意:
TRTC 同一时间不支持两个相同的 userId 进入房间,否则会相互干扰。
步骤5: 创建并进入房间
- 调用 enterRoom 即可加入 params 参数中roomId代指的音视频房间。如果该房间不存在,SDK 会自动创建一个以字段roomId的值为房间号的新房间。
- 请根据应用场景设置合适的scence参数,使用错误可能会导致卡顿率或画面清晰度不达预期。
- 视频通话,请设置为0。
- 语音通话,请设置为1。
- 进房成功后,SDK 会回调 onEnterRoom 事件。其中,参数result大于0时表示进房成功,具体数值为加入房间所消耗的时间,单位为毫秒(ms);当result小于0时表示进房失败,具体数值为进房失败的错误码。
this.$refs.trtc.enterRoom({
scene: 0,
params: {
sdkAppId: 1423000013,
userId: 'test001',
userSig: 'fdkay23xxxqerq',
roomId: 1234
}
}, ret => {
console.log(ret);
});
this.$refs.trtc.setTrtcListener({}, ret => {
if (ret.hasOwnProperty('eventType')) {
if ('onEnterRoom' == ret.eventType) {
if (ret.result > 0) {
console.log('进房成功');
} else {
console.log('进房失败');
}
}
}
});
注意:
- 如果进房失败,SDK 同时还会回调onError事件,并返回参数errCode(错误码)、errMsg(错误原因)以及extraInfo(保留参数)。
- 如果已在某一个房间中,则必须先调用exitRoom()退出当前房间,才能进入下一个房间。
- 每个端在应用场景 appScene 上必须要进行统一,否则会出现一些不可预料的问题。
步骤6: 订阅远端的音视频流
SDK 支持自动订阅和手动订阅。
自动订阅模式(默认)
在自动订阅模式下,进入某个房间之后,SDK 会自动接收房间中其他用户的音频流,从而达到最佳的“秒开”效果:
- 当房间中有其他用户在上行音频数据时,您会收到 onUserAudioAvailable 事件通知,SDK 会自动播放这些远端用户的声音。
- 您可以通过 muteRemoteAudio 屏蔽某一个 userId 的音频数据,也可以通过 muteAllRemoteAudio 屏蔽所有远端用户的音频数据,屏蔽后 SDK 不再继续拉取对应远端用户的音频数据。
- 当房间中有其他用户在上行视频数据时,您会收到 onUserVideoAvailable 事件通知,但此时 SDK 未收到该如何展示视频数据的指令,因此不会自动处理视频数据。您需要通过调用 startRemoteView 方法将远端用户的视频数据和显示view关联起来。
- 您可以通过 setRemoteViewFillMode 指定视频画面的显示模式:
- Fill 模式:表示填充,画面可能会等比放大和裁剪,但不会有黑边。
- Fit 模式:表示适应,画面可能会等比缩小以完全显示其内容,可能会有黑边。
- 您可以通过 stopRemoteView 可以屏蔽某一个 userId 的视频数据,也可以通过 stopAllRemoteView 屏蔽所有远端用户的视频数据,屏蔽后 SDK 不再继续拉取对应远端用户的视频数据。
// 实例代码:根据通知订阅(或取消订阅)远端用户的视频画面
this.$refs.setTrtcListener({}, ret => {
if (ret.hasOwnProperty('eventType')) {
if ('onUserVideoAvailable' == ret.eventType) {
if (ret.available) {
this.$refs.trtc.startRemoteView({
rect: {
x: 0,
y: 0,
w: self.playerWidth / 2,
h: self.playerHeight / 2
},
userId: self.remoteUserId,
streamType: self.streamType
}, ret => {
console.log(ret);
});
} else {
this.$refs.trtc.stopRemoteView({
userId: self.remoteUserId,
streamType: self.streamType
}, ret => {
console.log(ret);
});
}
}
}
});
说明:
如果您在收到onUserVideoAvailable()事件回调后没有立即调用startRemoteView()订阅视频流,SDK 将会在5s内停止接收来自远端的视频数据。
手动订阅模式
您可以通过 setDefaultStreamRecvMode 接口将 SDK 指定为手动订阅模式。在手动订阅模式下,SDK 不会自动接收房间中其他用户的音视频数据,需要您手动通过 API 函数触发。
- 在进房前调用 setDefaultStreamRecvMode 接口将 SDK 设定为手动订阅模式。
- 当房间中有其他用户在上行音频数据时,您会收到 onUserAudioAvailable 事件通知。此时,您需要通过调用 muteRemoteAudio 手动订阅该用户的音频数据,SDK 会在接收到该用户的音频数据后解码并播放。
- 当房间中有其他用户在上行视频数据时,您会收到 onUserVideoAvailable 事件通知。此时,您需要通过调用 startRemoteView 方法手动订阅该用户的视频数据,SDK 会在接收到该用户的视频数据后解码并播放。
步骤7: 发布本地的音视频流
- 调用 startLocalAudio 可以开启本地的麦克风采集,并将采集到的声音编码并发送出去。
- 调用 startLocalPreview 可以开启本地的摄像头,并将采集到的画面编码并发送出去。
- 调用 setLocalRenderParams 可以设定本地视频画面的显示模式fillMode:
- 0: 模式表示填充,画面可能会被等比放大和裁剪,但不会有黑边。
- 1: 模式表示适应,画面可能会等比缩小以完全显示其内容,可能会有黑边。
- 调用 setVideoEncoderParam 接口可以设定本地视频的编码参数,该参数将决定房间里其他用户观看您的画面时所感受到的画面质量。
this.$refs.trtc.startLocalPreview({
isFront: true,
rect: {
x: 0,
y: 0,
w: self.playerWidth,
h: self.playerHeight
}
}, ret => {
console.log(ret);
});
this.$refs.trtc.startLocalAudio({
quality: 0
}, ret => {
console.log(ret);
});
步骤8: 退出当前房间
调用 exitRoom 方法退出房间,SDK 在退房时需要关闭和释放摄像头、麦克风等硬件设备,因此退房动作并非瞬间完成的,需收到 onExitRoom 回调后才算真正完成退房操作。
this.$refs.trtc.exitRoom({}, ret => {
console.log(ret);
});
this.$refs.trtc.setTrtcListener({}, ret => {
if (ret.hasOwnProperty('eventType')) {
if ('onExitRoom' == ret.eventType) {
console.log('离开房间: reason: ' + ret.reason);
}
}
});
注意:
如果您的 App 中同时集成了多个音视频 SDK,请在收到onExitRoom回调后再启动其它音视频 SDK,否则可能会遇到硬件占用问题。
跑通直播模式
适用场景
TRTC 支持四种不同的进房模式,其中视频通话(VideoCall)和语音通话(VoiceCall)统称为 通话模式,视频互动直播(LiveRoom)和语音互动直播(VoiceRoom)统称为直播模式。 直播模式下的 TRTC,支持单个房间最多10万人同时在线,具备小于300ms的连麦延迟和小于1000ms的观看延迟,以及平滑上下麦切换技术。适用低延时互动直播、十万人互动课堂、视频相亲、在线教育、远程培训、超大型会议等应用场景。
原理解析
TRTC 云服务由两种不同类型的服务器节点组成,分别是“接口机”和“代理机”:
-
接口机 该类节点都采用最优质的线路和高性能的机器,善于处理端到端的低延时连麦通话,单位时长计费较高。
-
代理机 该类节点都采用普通的线路和性能一般的机器,善于处理高并发的拉流观看需求,单位时长计费较低。
在直播模式下,TRTC 引入了角色的概念,用户被分成“主播”和“观众”两种角色,“主播”会被分配到接口机上,“观众”则被分配在代理机,同一个房间的观众人数上限为10万人。 如果“观众”要上麦,需要先切换角色(switchRole)为“主播”才能发言。切换角色的过程也伴随着用户从代理机到接口机的迁移,TRTC 特有的低延时观看技术和平滑上下麦切换技术,可以让整个切换时间变得非常短暂。
步骤1: 插件的加载和配置
- 加载插件
首先,加载uniapp平台的原生插件,需要自定义基座后才能使用,您可以按照自定义基座文档进行。
其次,新建nvue文件,注意该模块必须在nvue中使用。
插件名称为: RY-TencentTrtc,
使用
<RY-TencentTrtc ref="trtc" v-bind:style = "{ width: playerWidth, height: playerHeight }"></RY-TencentTrtc>
备注:
可以通过改变width和height参数的大小,来改变视图容器的大小。
- 腾讯云配置
- 点击应用管理,进入应用列表;
- 点击 "创建应用",填入相关信息,创建新应用; 如果使用已有应用,则跳过这步;
- 点击"应用信息",进入应用详情;
- 在"应用信息"标签卡中,点击"SDKAppID"后面的复制按钮,复制SDKAppId,并保存,对应为后文中的"sdkAppId";
- 在"快速上手"标签卡中,"第二步"里,点击"复制秘钥",复制Key,并保存,对应为后文中的"key"值。
- 生成签名
手动签名点击 UserSig生成&校验 ,选择对应的sdkAppId的应用,输入userId,获取对应的用户签名userSig;
如果您需要自动签名,联系我们开通。
步骤2: 开始使用插件
使用RY-TencentTrtc,需要调用 init 初始化模块,才可以调用其他的接口功能。
this.$refs.trtc.init({
docPath: plus.io.convertLocalFileSystemURL('_doc')
}, ret => {
console.log(ret);
});
步骤3: 设置监听
setTrtcListener 注册事件回调,并监听相关事件和错误通知
this.$refs.trtc.setTrtcListener({}, ret => {
console.log(ret);
});
步骤4: 组装进房参数
在调用 enterRoom 接口时,需要填写几个关键参数,这些参数的必填字段如下表所示。
参数 | 字段类型 | 补充说明 | 填写示例 |
---|---|---|---|
sdkAppId | 整数类型 | 应用Id,您可以在 实时音视频控制台 中查看 SDKAppID | 1400000123 |
userId | 字符串类型 | 只允许包含大小写英文字母(a-z、A-Z)、数字(0-9)及下划线和连词符 | test_user_001 |
userSig | 字符串类型 | 用户签名 | eJyrVareCeYrSy1Ssll... |
roomId | 整数类型 | 默认不支持字符串类型的房间号,字符串类型的房间号会影响进房速度 | 29834 |
注意:
- TRTC 同一时间不支持两个相同的 userId 进入房间,否则会相互干扰。
- 每个端在应用场景 appScene 上必须要进行统一,否则会出现一些不可预料的问题。
步骤5: 主播端开启摄像头预览和麦克风采音
- 主播端调用 startLocalPreview 可以开启本地的摄像头预览,SDK 会向系统请求摄像头使用权限。
- 主播端调用 setLocalRenderParams 可以设定本地视频画面的显示模式fillMode:
- 0: 模式表示填充,画面可能会被等比放大和裁剪,但不会有黑边。
- 1: 模式表示适应,画面可能会等比缩小以完全显示其内容,可能会有黑边。
- 主播端调用 setVideoEncoderParam 接口可以设定本地视频的编码参数,该参数将决定房间里其他用户观看您的画面时所感受到的 画面质量。
- 主播端调用 startLocalAudio 开启麦克风,SDK 会向系统请求麦克风使用权限。
// 示例代码:发布本地的音视频流
this.$refs.trtc.startLocalPreview({
isFront: self.isFront,
rect: {
x: 0,
y: 0,
w: self.playerWidth,
h: self.playerHeight
}
}, ret => {
console.log(ret);
});
this.$refs.trtc.setVideoEncoderParam({
// todo
}, ret => {
console.log(ret);
});
步骤6: 主播端设置美颜效果
- 主播端调用 setBeautyStyle 可以设置美颜风格:
- Smooth:光滑,效果比较明显,类似网红风格。
- Nature:自然,磨皮算法更多地保留了面部细节,主观感受上会更加自然。
- Pitu :仅 企业版 才支持。
- 主播端调用 setBeautyLevel 可以设置磨皮的级别,一般设置为5即可。
- 主播端调用 setWhitenessLevel 可以设置美白级别,一般设置为5即可。
- 由于 iPhone 的摄像头调色默认偏黄,建议调用 setFilter 为主播增加美白特效,美白特效所对应的滤镜文件的下载地址:滤镜文件。
步骤7: 主播端创建房间并开始推流
- 主播端设置 TRTCParams 中的字段role为0,表示当前用户的角色为主播。
- 主播端调用 enterRoom 即可创建 params 参数字段roomId的值为房间号的音视频房间,并指定scene参数:
- 2:视频互动直播模式,本文以该模式为例。
- 3:语音互动直播模式。
- 房间创建成功后,主播端开始音视频数据的编码和传输流程。同时,SDK 会回调 onEnterRoom 事件,参数result大于0时表示进房成功,具体数值为加入房间所消耗的时间,单位为毫秒(ms);当result小于0时表示进房失败,具体数值为进房失败的错误码。
步骤8: 观众端进入房间观看直播
- 观众端设置 TRTCParams 中的字段role为1,表示当前用户的角色为观众。
- 观众端调用 enterRoom 即可进入 TRTCParams 参数中roomId代指的音视频房间,并指定scene参数:
- 3:视频互动直播模式,本文以该模式为例。
- 4:语音互动直播模式。
- 观看主播的画面:
- 如果观众端事先知道主播的 userId,直接在进房成功后使用主播userId调用 startRemoteView 即可显示主播的画面。
- 如果观众端不知道主播的 userId,观众端在进房成功后会收到 onUserVideoAvailable 事件通知,使用回调中获取的主播userId调用 startRemoteView 便可显示主播的画面。
步骤9: 观众跟主播连麦
- 观众端调用 switchRole 将角色切换为主播: 0。
- 观众端调用 startLocalPreview 可以开启本地的画面。
- 观众端调用 startLocalAudio 开启麦克风采音。
// 示例代码:观众上麦
this.$refs.trtc.switchRole({
role: 0
}, ret => {
console.log(ret);
});
this.$refs.trtc.startLocalAudio({
quality: 0
}, ret => {
console.log(ret);
});
this.$refs.trtc.startLocalPreview({
rect: {
x: 0,
y: 0,
w: self.playerWidth,
h: self.playerHeight
},
isFront: true
}, ret => {
console.log(ret);
});
// 示例代码:观众下麦
this.$refs.trtc.switchRole({
role: 1
}, ret => {
console.log(ret);
});
this.$refs.trtc.stopLocalAudio({}, ret => {
console.log(ret);
});
this.$refs.trtc.stopLocalPreview({}, ret => {
console.log(ret);
});
步骤10: 主播间进行跨房连麦 PK
TRTC 中两个不同音视频房间中的主播,可以在不退出原来的直播间的场景下,通过“跨房通话”功能拉通连麦通话功能进行“跨房连麦 PK”。
- 主播 A 调用 connectOtherRoom 接口,需要将主播 B 的roomId和userId作为参数传递给接口函数。
- 跨房成功后,主播 A 会收到 onConnectOtherRoom 事件回调。同时,两个直播房间里的所有用户均会收到 onUserVideoAvailable 和 onUserAudioAvailable 事件通知。 例如,当房间“001”中的主播 A 通过connectOtherRoom与房间“002”中的主播 B 拉通跨房通话后, 房间“001”中的用户会收到主播 B 的 onUserVideoAvailable 回调和 onUserAudioAvailable(B, available: true)回调。 房间“002”中的用户会收到主播 A 的 onUserVideoAvailable(A, available: true) 回调和onUserAudioAvailable(A, available: true)回调。
- 两个房间里的用户通过调用 startRemoteView 即可显示另一房间里主播的画面,声音会自动播放。
//示例代码:跨房连麦 PK
this.$refs.trtc.connectOtherRoom({
userId: 'userId',
roomId: 'roomId'
}, ret => {
console.log(ret);
});
步骤11: 退出当前房间
调用 exitRoom 方法退出房间,SDK 在退房时需要关闭和释放摄像头、麦克风等硬件设备,因此退房动作并非瞬间完成的,需收到 onExitRoom 回调后才算真正完成退房操作。
// 调用退房后请等待 onExitRoom 事件回调
this.$refs.trtc.exitRoom({}, ret => {
console.log(ret);
});
this.$refs.trtc.setTrtcListener({}, ret => {
if (ret.hasOwnProperty('eventType')) {
if ('onExitRoom' == ret.eventType) {
console.log('离开房间: reason: ' + ret.reason);
}
}
});
注意:
如果您的 App 中同时集成了多个音视频 SDK,请在收到onExitRoom回调后再启动其它音视频 SDK,否则可能会遇到硬件占用问题。
更多功能
- 人声设置
- 背景音乐
- 美颜
扫码添加, 获取技术支持:
微信号: ruanyunkeji006