Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用TRTC Web SDK实现实时音视频通话

使用TRTC Web SDK实现实时音视频通话

原创
作者头像
yuliang
修改于 2021-03-03 09:59:12
修改于 2021-03-03 09:59:12
3.6K00
代码可运行
举报
文章被收录于专栏:TRTC Web SDKTRTC Web SDK
运行总次数:0
代码可运行

在使用 TRTC Web SDK 中,经常需要使用到两个对象,Client 客户端对象,Stream 流对象:

  • Client 对象,代表一个本地客户端。Client 类的方法提供了加入通话房间、发布本地流、订阅远端流等功能。
  • Stream 对象,代表一个音视频流对象,包括本地音视频流对象 LocalStream 和远端音视频流对象 RemoteStream 。Stream 类的方法主要提供音视频流对象的行为,包括音频和视频的播放控制。

下图展示了一个基本音视频通话API调用流程:

实时音视频通话流程
实时音视频通话流程

1、加入聊天代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        let sdkAppId = this.sdkAppId; // 您从腾讯云申请的 sdkAppId
        let userId = this.userId; // 用户ID
        let roomId = this.roomId; // 房间号
        let client = this.client; // 本地客户端对象
        let localStream = this.localStream; // 本地音视频流对象
        let remoteStream = this.remoteStream; // 远端音视频流对象
        let userSig = genTestUserSig(userId).userSig; // 用户签名,生成方式可以参考 https://cloud.tencent.com/document/product/647/17275

        // 创建client需要的配置参数
        let clientConfig = {
          mode: "rtc", // 实时音视频通话模式,设为‘rtc’;
          sdkAppId,
          userId,
          userSig
        };
        // 相关配置可参考 https://trtc-1252463788.file.myqcloud.com/web/docs/TRTC.html#.createClient
        // 先创建一个client对象
        client = TRTC.createClient(clientConfig);
        this.client = client;

        // client.on(eventName,handler)给client对象设置监听回调函数
        /*  
        eventName事件名称有:了解更多 https://trtc-1252463788.file.myqcloud.com/web/docs/module-Event.html
        stream-added  远端流添加事件,当远端用户发布流后会收到该通知
        stream-removed  远端流移除事件,当远端用户取消发布流后会收到该通知
        stream-updated  远端流更新事件,当远端用户添加、移除或更换音视频轨道后会收到该通知
        stream-subscribed  远端流订阅成功事件,调用 subscribe() 成功后会触发该事件
        connection-state-changed  WebSocket 信令通道连接状态变化事件
                                  ‘DISCONNECTED’:连接断开
                                  ‘CONNECTING’:正在连接中
                                  ‘RECONNECTING’:自动重连中
                                  ‘CONNECTED’:已连接
        peer-join  远端用户进房通知
        peer-leave  远端用户退房通知
            注意:
            live 模式下,不支持观众进退房通知
            v4.8.2 之前版本,远端用户进房推流后,才会收到进房通知
            v4.8.2 及其之后版本,远端用户进房,就能收到进房通知
        mute-audio  远端用户禁用音频通知
        mute-video  远端用户禁用视频通知
        client-banned  用户被踢出房间通知,被踢原因有:同名用户登录;被账户管理员主动踢出房间
        network-quality  网络质量统计数据事件,进房后开始统计,每两秒触发一次,包括上行(uplinkNetworkQuality)和下行(downlinkNetworkQuality)的质量统计数据
            上行网络质量为 SDK 到腾讯云的上行连接网络质量
            下行网络质量为 腾讯云到 SDK 的所有下行连接的平均网络质量
        error  错误事件,当出现不可恢复错误后,会抛出此事件
        player-state-changed  Audio/Video Player 状态变化事件 App 可根据状态变化来更新 UI,比如,通过监听 video player 状态变化来关闭或打开遮板
        */
        // 监听远端流添加事件 请在join()进房前注册该事件,确保您不会错过远端用户进房通知。 收到上述事件后要通过subscribe()订阅远端音视频流。
        client.on("stream-added", event => {
          remoteStream = event.stream;
          this.remoteStream = remoteStream;
          console.log("远端流增加: " + remoteStream.getId());
          //订阅远端流
          client.subscribe(remoteStream);
        });
        // 监听订阅到远端流触发事件
        client.on("stream-subscribed", event => {
          remoteStream = event.stream;
          console.log("远端流订阅成功:" + remoteStream.getId());
          // 播放远端流
          remoteStream.play("remoteStream");
        });

        // client.join()加入房间  相关API:https://trtc-1252463788.file.myqcloud.com/web/docs/Client.html#join
        client.join({ roomId: parseInt(roomId) }).then(() => {
          // 确保加入房间后执行一下代码
          // 创建一个localStream对象所要填写的参数配置
          let streamConfig = {
            userId: userId,
            video: true,
            audio: true
          };
          // 相关配置可参考 https://trtc-1252463788.file.myqcloud.com/web/docs/TRTC.html#.createStream
          // 创建一个localStream本地音视频流对象
          localStream = TRTC.createStream(streamConfig);

          // localStream初始化之前可以进行一些设置  具体方法可参考 https://trtc-1252463788.file.myqcloud.com/web/docs/LocalStream.html
          localStream.setVideoProfile("480p");
          /*
          localStream.setAudioProfile(profile) 设置音频Profile
          localStream.setVideoProfile(profile) 设置视频Profile  v4.8.4 及其之后版本,该方法支持动态调用;v4.8.4 之前版本,该方法需要在 initialize() 之前调用。
          localStream.setScreenProfile(profile) 设置屏幕分享Profile
          */

          // 初始化本地流
          localStream.initialize().then(() => {
            // 初始化成功之后执行一下函数

            /*
            localStream.setVideoContentHint(hint) 设置视频内容提示,主要用于提升在不同场景下的视频编码质量  该方法需要在调用 initialize() 成功之后调用。
            */

            // 初始化后进行推流
            // 该方法需要在 join() 进房后调用,一次音视频会话中只能发布一个本地流。若想发布另外一个本地流,可先通过 unpublish() 取消发布当前本地流后再发布新的本地流。
            // 在发布本地流后,可通过 removeTrack()、addTrack()、 replaceTrack() 来更新本地流中的某个音频或视频流。
            // 发布本地流后远端会收到 ‘stream-added’ 事件通知。同理远端发布视频流时本地端会收到 ‘stream-added’ 事件通知
            client.publish(localStream);
            localStream.play("localStream", {
              //  播放的相关配置参考  https://trtc-1252463788.file.myqcloud.com/web/docs/LocalStream.html#play
              objectFit: "contain", // 视频画面显示模式,参考 CSS object-fit 属性
              muted: true //本地流默认为true,防止播放从麦克风采集回来的声音
            });
            this.localStream = localStream;
            this.client = client;
          });
        });

2、断开聊天代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      let client = this.client; // 本地客户端对象
      let localStream = this.localStream; // 本地音视频流对象
      client.unpublish(localStream).then(() => {
        // 确认取消发布本地流后执行一下代码

        // 退出当前音视频通话房间,结束一次音视频通话会话。
        // 退房前请确保已经通过 unpublish() 取消发布本地流,若未取消发布本地流,SDK 内部会自动取消发布本地流。 同时,退房会关闭所有远端流。
        client.leave();
      });

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用TRTC Web SDK实现互动直播
以主播身份进入房间进行直播的场景跟实时音视频通话场景流程一样,请参考使用TRTC Web SDK实现实时音视频通话。本文主要介绍以观众身份进入直播间。
yuliang
2021/03/02
2.6K0
关于 TRTC (实时音视频通话模式)在我司的实践
腾讯实时音视频(Tencent Real-Time Communication,TRTC)将腾讯 21 年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
发声的沉默者
2021/06/14
1.9K0
关于 TRTC (实时音视频通话模式)在我司的实践
从零开始创建一个超简单的TRTC音视频通讯程序(web篇)
WebRTC 技术由 Google 最先提出,目前主要在桌面版 Chrome 浏览器、桌面版 Safari 浏览器以及移动版的 Safari 浏览器上有较为完整的支持,其他平台(例如 Android 平台的浏览器)支持情况均比较差。
F颜
2020/06/19
4.5K7
云终端系列(一)—— 实时音视频Web端接入体验(Vue基础音视频通话篇)
这个系列呢,主要给各位观众老爷看看目前有较大趋势的SaaS应用的SDK在各种主流Web终端的使用姿势和异常分析,如果想要纯粹了解开发的或者云原生,云开发的可以去往另一个系列——云开发系列。
楚歌
2020/11/23
4.3K1
vue使用TRTC Web SDK实现多人会话场景
基本的对话场景请参考 使用TRTC Web SDK实现实时音视频通话 。本文主要讲述 vue 使用 TRTC Web SDK 来实现多人会议的功能,废话不多说直接上代码:(注意下方代码中 sdkAppId 请使用自己的)
yuliang
2021/03/03
2.7K0
uni-app/vue接入腾讯TRCT(一)---基础音视频
最近需要做一个类似于视频会议的项目,也是选用了腾讯云TRCT,原因:简单易用,打算和IM即时通信结合,可以做一个简易聊天加视频应用,这里是一个简单用法的demo
代码哈士奇
2022/05/11
3.8K2
uni-app/vue接入腾讯TRCT(一)---基础音视频
体验腾讯云音视频
首次开通腾讯云音视频免费赠送10000分钟的免费试用套餐包,包含了视频通话、语音通话、视频互动直播、语音互动直播这些模块,另外说明一下腾讯云音视频是按照 1 : 2 : 4 : 9 : 16 : 36 分别抵扣语音、标清、高清、超高清、2K和4K时长,例如1分钟高清视频时长扣除4分钟免费套餐包时长。
就叫7620521吧
2022/11/25
8.2K0
TRTC学习之旅(一)--多人聊天室web篇(官方demo)
大家好,我是刚入坑TRTC的小菜鸡,黑圆圈云豆。因为我的主要技术方向是web,所以我就从基于web开发的TRTC demo进行学习和知识分享。
黑眼圈云豆
2020/06/19
4.7K0
TRTC学习之旅(一)--多人聊天室web篇(官方demo)
TRTC学习之旅(二)-- 使用vue+ts集成TRTC实现多人会议室
根据上回学习了官方TRTC demo之后,已经了解了一个基础的多人会议室创建的流程,接下来我需要将自己学到的转换为自己能够运用的。
黑眼圈云豆
2020/06/24
4K3
TRTC学习之旅(二)--  使用vue+ts集成TRTC实现多人会议室
iOS音视频接入 - TRTC接入实时视频通话
(前面我们已经了解TRTC的基本架构和功能,现在我们就来接入实时视频通话功能,此功能和微信的一对一视频通话是一致的,需要两个角色,一个角色是主动呼叫、一个为呼叫接听,结合使用场景我们来接入此功能。
小明同学接音视频
2020/10/13
6.1K0
iOS音视频接入 - TRTC接入实时视频通话
实时音视频SDK迎来最新的 6.8 版本
腾讯实时音视频=TRTC,全称Tencent Real-Time Communication。拥有QQ十几年来在音视频技术上的积累,致力于帮助企业快速搭建低成本、高品质音视频通讯能力的完整解决方案。 1.我们在 Windows 版本中新增了 socks5 的支持,对于金融和保险类客户,可以通过搭建代理服务器解决内外网通信问题。 该功能通过调用 ITXLiteAVNetworkProxy.h 中的 setSocks5Proxy 接口进行设置,可以参考 Socks5 代理服务器的的搭建方案: /*
腾讯即时通信IM
2020/06/19
2.3K0
实时音视频开发学习4 - 实现web端运行
trtc的实践功能主要谈及两个模块,一个是web端,另一个为小程序端。这二者分别阐述了trtc的通话模式、直播模式、实时屏幕分享、云端流录制与回放CDN直播回放。
金林学音视频
2020/08/21
2.6K2
实时音视频开发学习4 - 实现web端运行
实时音视频开发学习12 - web端API
从2019年10月11日开始,浏览器端API版本从4.0.0版本升至4.6.2版本。中间修复unpublish成功后又重新publish失败报错问题,修复上行 peerConnection 断开时没有打印日志的问题修复 getTransportStats 接口返回的 rtt 值为 NAN 的问题等。增加了NETWORK_QUALITY 事件,增加部署环境自动检测,对createClient 增加 streamId userdefinerecordid 字段等优化了。优化上行码率调控逻辑,优化 switchRole 参数校验逻辑,优化上行网络质量计算逻辑,优化错误提示信息等。以下内容为web端的核心内容和代码中未体现的内容。
金林学音视频
2020/08/28
1.8K0
实时音视频开发学习12 - web端API
实时音视频开发学习14 - 常见问题
V1和V2主要区别在于IM的SDK是否内嵌于TRTC中,V1线路是内嵌,而V2则可选,默认不打包IM的SDK包。V2在通话质量、线路规格、接入难度以及功能扩展上均比V1更有优势。
金林学音视频
2020/08/30
2.7K0
实时音视频开发学习14 - 常见问题
实时音视频 TRTC 常见问题汇总---小程序篇
如有更多需求,或希望深度合作,可以 提交工单 或致电4009100100联系我们。
腾讯视频云-Zachary
2021/09/21
5.8K0
实时音视频 TRTC 常见问题汇总---小程序篇
TRTC零基础入门之Web篇(一)
在建立这个在线课堂应用过程中,可能会使用到腾讯云的IM、云直播等服务,以及对应安卓端SDK,下面将通过三篇文章来记录这个过程,本文为第一篇。
天上云间
2020/12/20
4.2K2
TRTC零基础入门之Web篇(一)
实时音视频开发学习5 - 实现分享、音频和音量
trtc的实践功能主要谈及两个模块,一个是web端,另一个为小程序端。这二者分别阐述了trtc的通话模式、直播模式、实时屏幕分享、云端流录制与回放CDN直播回放。
金林学音视频
2020/08/24
1.6K0
实时音视频开发学习5 - 实现分享、音频和音量
【版本发布】腾讯实时音视频TRTC SDK 6.9
新的版本围绕视频画质、直播 CDN 融合、Android 10.0 系统兼容,以及云端录制等几个方面,增加了很多新的功能特性,期待您的使用:
shixin
2020/01/21
2.7K0
实时音视频开发学习10 - 小程序端一
小程序端双人通话、多人会议和语音聊天室三个功能。双人通话中实现1V1视频通话,在结合Web IM SDK可实现在线问诊或客服;语音聊天室能支持多人互动语音聊天,混音、混响等声音特效,适用于狼人杀、在线语音直播等社交场景;多人会议支持多路音视频通话、大小画面和屏幕分享等功能,适用于远程培训、在线教育等。
金林学音视频
2020/08/27
1.4K0
实时音视频开发学习10 - 小程序端一
TRTC Android端开发接入学习之常见问题(十一)
V1和V2主要区别在于IM的SDK是否内嵌于TRTC中,V1线路是内嵌,而V2则可选,默认不打包IM的SDK包。V2在通话质量、线路规格、接入难度以及功能扩展上均比V1更有优势。
腾讯云-hongyang
2020/09/27
3.1K0
推荐阅读
相关推荐
使用TRTC Web SDK实现互动直播
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档