前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用TRTC Web SDK实现实时音视频通话

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

原创
作者头像
yuliang
修改2021-03-03 17:59:12
3.4K0
修改2021-03-03 17:59:12
举报
文章被收录于专栏:TRTC Web SDK

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

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

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

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

1、加入聊天代码:

代码语言:javascript
复制
        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
复制
      let client = this.client; // 本地客户端对象
      let localStream = this.localStream; // 本地音视频流对象
      client.unpublish(localStream).then(() => {
        // 确认取消发布本地流后执行一下代码

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
实时音视频
实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档