WebRTC 技术由 Google 最先提出,目前主要在桌面版 Chrome 浏览器、桌面版 Safari 浏览器以及移动版的 Safari 浏览器上有较为完整的支持,其他平台(例如 Android 平台的浏览器)支持情况均比较差。
所以,如果是移动端,建议使用小程序或者安卓开发和IOS开发等。
我们目前暂时以Chrome 浏览器为例。
sdkAppId
并记录请记录右侧sdkAppId
点击复制密钥,并记录
npm install trtc-js-sdk --save
import 引入方式(配合上面npm包管理)
import TRTC from 'trtc-js-sdk';
html引用方式(配合上面单击下载方式)
<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><!-- 调用前端签名生成工具(配置) -->
<!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>
const client = TRTC.createClient({
mode: 'videoCall',
sdkAppId:'', // 开通实时音视频服务创建应用后分配的 SDKAppID
userId:'', // 用户 ID,可以由您的帐号系统指定
userSig:'' // 身份签名,相当于登录密码的作用
});
client.join({ roomId:'1002' }).catch(error => {//暂时写死房间号为1002做测试
console.error('进房失败 ' + error);
}).then(() => {
console.log('进房成功');
//
});
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('本地流发布成功');
});
});
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());
});
<!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也行,暂时没有写监听退房事件,那就自己看官方文档扩展功能咯。
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 删除。