前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零开始创建一个超简单的TRTC音视频通讯程序(web篇)

从零开始创建一个超简单的TRTC音视频通讯程序(web篇)

原创
作者头像
F颜
修改2020-06-19 12:01:30
4.3K6
修改2020-06-19 12:01:30
举报

1、前置条件

1.1、浏览器支持问题

WebRTC 技术由 Google 最先提出,目前主要在桌面版 Chrome 浏览器、桌面版 Safari 浏览器以及移动版的 Safari 浏览器上有较为完整的支持,其他平台(例如 Android 平台的浏览器)支持情况均比较差。

所以,如果是移动端,建议使用小程序或者安卓开发和IOS开发等。

我们目前暂时以Chrome 浏览器为例。

1.1、通过控制台创建应用

  • 进入腾讯云实时音视频控制台创建一个新的应用,获得sdkAppId并记录

请记录右侧sdkAppId

  • 点击快速上手,查看秘钥,复制秘钥

点击复制密钥,并记录

2、下载SDK并配置

2.1、下载SDK

代码语言:javascript
复制
npm install trtc-js-sdk --save

2.2、创建主页面文件(index.html)并引入SDK

import 引入方式(配合上面npm包管理)

代码语言:javascript
复制
import TRTC from 'trtc-js-sdk';

html引用方式(配合上面单击下载方式)

代码语言:javascript
复制
<script src="trtc.js"></script>
<script src="vue.min.js"></script><!-- 以vue框架为例 -->
<script src="lib-generate-test-usersig.min.js"></script><!-- 前端签名生成工具 -->
<script src="debug/GenerateTestUserSig.js"></script><!-- 调用前端签名生成工具(配置) -->

2.3、那么开发前期工作就准备好了,具体结构如下

文件目录结构
文件目录结构
代码语言:html
复制
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>第一个web音视频通讯</title>
	</head>
	<body>
		
		<script src="trtc.js"></script>
		<script src="vue.min.js"></script>
		<script src="lib-generate-test-usersig.min.js"></script>
		<script src="debug/GenerateTestUserSig.js"></script>
	</body>
</html>

3、直接开始写代码

3.1、创建本地连接对象Client。

代码语言:javascript
复制
const client = TRTC.createClient({
  mode: 'videoCall',
  sdkAppId:'', // 开通实时音视频服务创建应用后分配的 SDKAppID
  userId:'', // 用户 ID,可以由您的帐号系统指定
  userSig:'' // 身份签名,相当于登录密码的作用
});

3.2、加入房间

代码语言:javascript
复制
client.join({ roomId:'1002' }).catch(error => {//暂时写死房间号为1002做测试
  console.error('进房失败 ' + error);
}).then(() => {
  console.log('进房成功');
  //
});

3.3、发布本地音视频流

代码语言:javascript
复制
const localStream = TRTC.createStream({ userId, audio: true, video: true });//创建本地音视频流对象

localStream.initialize().catch(error => {//初始化本地音视频流
  console.error('初始化本地流失败 ' + error);
}).then(() => {
  console.log('初始化本地流成功');
  
  //成功后,播放并发布本地流。
  localStream.play('local_stream');//播放本地视频流
  
  client.publish(localStream).catch(error => {
    console.error('本地流发布失败 ' + error);
  }).then(() => {
    console.log('本地流发布成功');
  });
  
});

3.4、订阅远端音视频流(官方建议在进入房间之前订阅,以免错过远端用户进房通知)

代码语言:javascript
复制
client.on('stream-added', event => {
  const remoteStream = event.stream;
  console.log('远端流增加: ' + remoteStream.getId());
  //订阅远端流
  client.subscribe(remoteStream);
});
client.on('stream-subscribed', event => {
  const remoteStream = event.stream;
  console.log('远端流订阅成功:' + remoteStream.getId());
  // 播放远端流
  remoteStream.play('remote_stream-' + remoteStream.getId());
});

4、最终网页代码如下(vue版)

代码语言:html
复制
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>第一个web音视频通讯</title>
		<style type="text/css">
			.video-view {
				width: 600px;
				height: 600px;
				float: left;
				margin-left: 5px;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<div v-for="vv in videoView" v-if="!vv.close" :id="vv.id" class="video-view"></div>
		</div>
		<script src="trtc.js"></script>
		<script src="vue.min.js"></script>
		<script src="lib-generate-test-usersig.min.js"></script>
		<script src="debug/GenerateTestUserSig.js"></script>
		<script>
			const vm = new Vue({
				el:"#app",
				data:{
					userId:'test_web',// 用户 ID,可以由您的帐号系统指定
					videoView:[{id:'local_stream'}]//视频容器对象组
				},
				created(){
					let Signature = genTestUserSig(this.userId);//根据用户id{test_web}生成签名
					const client = TRTC.createClient({
					  mode: 'videoCall',//模式为视频通话
					  sdkAppId:Signature.sdkAppId, // 开通实时音视频服务创建应用后分配的 SDKAppID
					  userId:this.userId, // 用户 ID,可以由您的帐号系统指定
					  userSig:Signature.userSig // 身份签名,相当于登录密码的作用
					});
					
					client.on('stream-added', event => {//监听远端流增加
					  const remoteStream = event.stream;
					  console.log('远端流增加: ' + remoteStream.getId());
					  //订阅远端流
					  client.subscribe(remoteStream);
					});
					client.on('stream-subscribed', event => {//监听订阅远端流成功
					  const remoteStream = event.stream;
					  console.log('远端流订阅成功:' + remoteStream.getId());
						let viewId = 'view_'+remoteStream.getId();
						this.videoView.push({id:viewId});
						this.$nextTick(()=> {// DOM 更新后再播放远端流
						  // 播放远端流
								remoteStream.play(viewId);
						 })
					  
					});
					
					client.join({ roomId:'1002' }).catch(error => {//暂时写死房间号为1002做测试
					  console.error('进房失败 ' + error);
					}).then(() => {
					  console.log('进房成功');
					  //
					});
					
					const localStream = TRTC.createStream({ userId: this.userId, audio: true, video: true });//创建本地音视频流对象
					
					localStream.initialize().catch(error => {//初始化本地音视频流
					  console.error('初始化本地流失败 ' + error);
					}).then(() => {
					  console.log('初始化本地流成功');
					  
					  //成功后,播放并发布本地流。
					  localStream.play('local_stream');//播放本地视频流
					  
					  client.publish(localStream).catch(error => {
					    console.error('本地流发布失败 ' + error);
					  }).then(() => {
					    console.log('本地流发布成功');
					  });
					});
				}
			});
		</script>
	</body>
</html>

ps:v-if="!vv.close" 是为了退房之后清除退房人的视频流容器,v-show也行,暂时没有写监听退房事件,那就自己看官方文档扩展功能咯。

5、小总结

1、web版的要比小程序版本逻辑清晰一些,各种操作和单视图容器都比较方便自定义一点。

2、web版不会如同小程序一样还要额外开通推拉流标签使用权限。

3、这里只是演示,所以userSig身份签名会放在前端去处理,建议还是后端加密获取。

4、初始化本地流成功后再播放和发布本地流。

5、记得先订阅远端流监听再进房,以免错过入房通知(非强制,官方建议)。

6、vue的dom刷新时统一提交(有延迟),所以对dom操作要放在this.$nextTick(()=>{});的回调里面,play就是对dom进行视频播放等元素的加载。

7、和小程序的互动一定是要在同一个应用下,也就是sdkAppId要一致(其实是废话),并且房间号也一致(也是废话)。

8、这些SDK接口方法基本都用到了promise代理 ,我们应该尽量用async和await去写增加代码可读性。

完结,放一下成功截图

这叫套娃
这叫套娃

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、前置条件
    • 1.1、浏览器支持问题
      • 1.1、通过控制台创建应用
      • 2、下载SDK并配置
        • 2.1、下载SDK
          • 2.2、创建主页面文件(index.html)并引入SDK
            • 2.3、那么开发前期工作就准备好了,具体结构如下
            • 3、直接开始写代码
              • 3.1、创建本地连接对象Client。
                • 3.2、加入房间
                  • 3.3、发布本地音视频流
                    • 3.4、订阅远端音视频流(官方建议在进入房间之前订阅,以免错过远端用户进房通知)
                    • 4、最终网页代码如下(vue版)
                    • 5、小总结
                    • 完结,放一下成功截图
                    相关产品与服务
                    实时音视频
                    实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档