业务流程
本节汇总了 在线娃娃机中一些常见的业务流程,帮助您更好地理解整个场景的实现过程。
下图展示了在线娃娃机 TRTC 推流的序列图,其中包含网络摄像头 TRTC 推流、用户拉流等流程。

下图展示了在线娃娃机 RTMP 推流的序列图,其中包含网络摄像头 RTMP 推流、用户拉流等流程。

接入准备
步骤一:开通服务
1. 首先,您需要登录 实时音视频 TRTC 控制台 > 应用管理 创建应用,您可根据需要选择升级 TRTC 应用版本,例如旗舰版可解锁更多增值功能服务。


说明:
建议创建两个应用分别用于测试环境和生产环境,首次开通 TRTC 服务可前往 试用中心 免费领取10000分钟试用时长包。
TRTC 包月套餐(入门版、基础版、尊享版、旗舰版)可以解锁不同的增值功能服务,详情可见 包月套餐说明。
2. 应用创建完毕之后,您可以在 应用管理 > 应用概览中看到该应用的基本信息,其中需要您保管好 SDKAppID、SDKSecretKey 便于后续使用,同时应避免密钥泄露造成流量盗刷。


步骤二:导入 SDK
NPM 集成
1. 您可以在项目中使用 npm 安装 trtc-sdk-v5。
npm install trtc-sdk-v5 --save
2. 在项目脚本里导入模块。
import TRTC from 'trtc-sdk-v5';
Script 集成
在您的 Web 页面中添加如下代码即可:
<script src="trtc.js"></script>
说明:
步骤三:鉴权与许可
UserSig 是腾讯云设计的一种安全保护签名,目的是为了阻止恶意攻击者盗用您的云服务使用权,TRTC 在进房时校验该鉴权凭证。
正式运行阶段:推荐安全等级更高的服务端计算 UserSig 方案,防止客户端被逆向破解泄露密钥。
具体实现流程如下:
1. 您的 App 在调用 SDK 的初始化函数之前,首先要向您的服务器请求 UserSig。
2. 您的服务器根据 SDKAppID 和 UserID 计算 UserSig。
3. 服务器将计算好的 UserSig 返回给您的 App。
4. 您的 App 将获得的 UserSig 通过特定 API 传递给 SDK。
5. SDK 将 SDKAppID + UserID + UserSig 提交给腾讯云服务器进行校验。
6. 腾讯云校验 UserSig,确认合法性。
7. 校验通过后,会向 TRTC SDK 提供实时音视频服务。


注意:
调试跑通阶段的本地 UserSig 计算方式不推荐应用到线上环境,容易被逆向破解导致密钥泄露。
我们提供了多个语言版本(Java/GO/PHP/Nodejs/Python/C#/C++)的 UserSig 服务端计算源代码,详情请参见 UserSig 计算源码。
步骤五:初始化 SDK 与监听
TRTC SDK 创建实例与设置事件监听器。
const trtc = TRTC.create();trtc.on('error', err => {console.error(err);});
说明:
步骤六:生成 RTMP 推流地址(RTMP推流)
1. 进入 实时音视频 > 应用管理,在应用的功能配置 > 增值功能页面开启输入媒体流进房功能。


2. 生成 RTMP 推流地址。
rtmp://rtmp.rtc.qq.com/push/房间号?sdkappid=应用&userid=用户名&usersig=签名
RTMP appName 是 push。
地址中的房间号、应用、用户名、签名需要换成业务的。
为简化参数,只支持字符串房间号,不超过64个字符,字符只能是数字、字母、下划线。
usersig 的生成规则,请参见 UserSig 相关 (请注意签名要在有效期内)。
示例:
rtmp://rtmp.rtc.qq.com/push/hello-string-room?sdkappid=140*****66&userid=******rtmp2&usersig=eJw1jdE********RBZ8qKGRj8Yp-wVbv*mGMVZqS7w-mMDQL
接入过程
API 时序图

步骤一:娃娃机推流
TRTC 推流
2. 将 SdkAppid、UserId、Usersig、RoomId 等信息配置到 TRTC 网络摄像头或推流盒上开启推流。
注意:
TRTC 房间号分为数字类型
roomId
和字符串类型 strRoomId
,两种类型的房间不互通,建议统一房间号类型。TRTC 用户角色分为主播和听众,只有主播才有推流权限,进房时需指定用户角色,如未指定则默认为主播角色。
在线娃娃机场景下,进房模式建议选用
TRTC_APP_SCENE_VIDEOCALL
,这样延迟更低。RTMP 推流
1. 通过 RTMP 推流生成器 生成 RTMP 推流地址。


2. 将 RTMP 推流地址配置到 RTMP 网络摄像头或推流盒上开启推流。
步骤二:用户进房拉流
1. 用户进入 TRTC 房间。
const trtc = TRTC.create();// 进入房间try {await trtc.enterRoom({ strRoomId, scene:'rtc', sdkAppId, userId, userSig});console.log('进房成功');} catch (error) {console.error('进房失败' + error);}
2. 用户订阅主播音视频流。
trtc.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, ({ userId, streamType }) => {// 为了播放视频画面,您需在 DOM 中放置一个 HTMLElement,可以是一个 div 标签,假设其 id 为${userId}_${streamType}
const view =$
{
userId
}
_$
{
streamType
}
;trtc.startRemoteVideo({ userId, streamType, view });});trtc.on(TRTC.EVENT.FIRST_VIDEO_FRAME, event => {// event.height: 视频高度// event.width: 视频宽度// event.streamType: 视频流类型.// event.userId: 用户 ID,若是空串,则代表是本地视频。})
步骤三:用户退出房间
1. 用户退出房间。
await trtc.exitRoom();// 退房成功后,若后续无需使用 trtc 实例,则可以调用 trtc.destroy 方法销毁实例,及时释放相关资源。// 销毁后的 trtc 实例无法继续使用,需要重新创建新的实例。trtc.destroy();
2. 解散房间。
服务端解散房间
TRTC 提供了服务端解散数字类型房间 API
DismissRoom
,以及解散字符串类型房间 API DismissRoomByStrRoomId
,您可以通过调用服务端解散房间接口把房间内所有用户从房间移出,并解散房间。客户端解散房间
客户端没有直接解散房间的 API,需要各个客户端调用
exitRoom
退出房间,当房间内的所有主播和观众完成退房后,根据 TRTC 房间生命周期规则,房间将会自动解散,详情请参见 TRTC 退出房间。异常处理
自动播放策略限制
在 Web 端拉流的场景中,为了提升用户进入房间的体验,默认设置为进入房间后自动播放。但是,在 Android 和 iOS 的 Webview 中,默认的自动播放策略可能与浏览器中的不同。您可以参考以下文档,在您的 App 中关闭自动播放限制。
Android Webview 关闭自动播放限制:调用 setMediaPlaybackRequiresUserGesture(false) 关闭自动播放限制。
iOS Webview 关闭自动播放限制:设置 mediaTypesRequiringUserActionForPlayback 为 WKAudiovisualMediaTypeNone。