Web

最近更新时间:2025-04-16 16:57:02

我的收藏

业务流程

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

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


接入准备

步骤一:开通服务

在线娃娃机场景通常需要依赖腾讯云 实时音视频 TRTC 付费 PaaS 服务构建。其中,TRTC 负责提供实时音视频互动能力。您可根据实际业务需求自由选择开通上述服务。
1. 首先,您需要登录 实时音视频 TRTC 控制台 > 应用管理 创建应用,您可根据需要选择升级 TRTC 应用版本,例如旗舰版可解锁更多增值功能服务。



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




步骤二:导入 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>
说明:
trtc.js 需要下载至您项目本地进行集成,对应的 SDK 下载链接与 Demo 地址

步骤三:鉴权与许可

UserSig 是腾讯云设计的一种安全保护签名,目的是为了阻止恶意攻击者盗用您的云服务使用权,TRTC 在进房时校验该鉴权凭证。
调试跑通阶段:可以通过 客户端示例代码控制台 计算生成 UserSig,仅用于调试测试。
正式运行阶段:推荐安全等级更高的服务端计算 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);
});
说明:
建议监听 SDK 事件通知,对一些常见错误进行日志打印和处理,详请请参见 错误码表

步骤六:生成 RTMP 推流地址(RTMP推流)

1. 进入 实时音视频 > 应用管理,在应用的功能配置 > 增值功能页面开启输入媒体流进房功能。



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

接入过程

API 时序图



步骤一:娃娃机推流

TRTC 推流

1. 通过 客户端示例代码控制台 计算生成 UserSig。
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) 关闭自动播放限制。
说明:
有关处理完整的自动播放策略限制的建议,请参考 Tutorial: 自动播放受限处理建议
TRTC iOS 微信浏览器自动播放可能无法通过以上方法生效。如有需要,请 联系我们