Vue实现腾讯云_音视频通话的推拉流

本文详细介绍了如何使用TRTCWebSDK进行单对单音视频通信,包括安装、创建client和stream、加入房间、监听事件、推流、销毁会话等步骤,并提供了错误处理和设备检查的示例代码。通过监听'stream-added'事件来拉取远端流,'stream-removed'事件处理用户离开,'error'事件捕获异常。
摘要由CSDN通过智能技术生成

目标:单对单通信
大部分异步使用 async await 进行同步,try catch 捕获错误处理
先放一个流程图,解决80%的问题
在这里插入图片描述

安装 TRTC Web SDK

安装

npm install trtc-js-sdk --save

需要的页面中引入,或者全局引入

import TRTC from 'trtc-js-sdk'

创建 client,stream

created中创建,存入当前页面的全局即可,不需要放入data中
TRTC.createClient
TRTC.createStream

rtcClient = TRTC.createClient({
  mode: 'rtc',
  sdkAppId: sdkAppId,
  userId: userId,
  userSig: userSig
  // autoSubscribe: false
})
localStream = TRTC.createStream({
  userId: userId,
  audio: true,
  video: true
})

join之后开启监听

join之后开启监听,拉流主要在 on监听中的 stream-added 中监听获取,然后拿到流使用 remoteStream.play() 在指定dom id中添加video进行播放

在 stream-leave中监听用户是否离开房间,做相应的处理。

rtcClient.join
remoteStream.play
rtcClient.on
on监听事件

await rtcClient.join({ roomId: id })
// 开启监听
this.handleClientEvents()
// 音视频监听
handleClientEvents() {
  // 错误
  rtcClient.on('error', (error) => {
    const errorCode = error.getCode()
    if (errorCode === 0x4043) {
      console.log('PLAY_NOT_ALLOWED')
      // PLAY_NOT_ALLOWED,引导用户手势操作并调用 stream.resume 恢复音视频播放
      // stream.resume()
    }
  })
  // 远端流添加事件,当远端用户发布流后会收到该通知。
  rtcClient.on('stream-added', (event) => {
    console.log('stream-added', event)
    // 远端流添加,在此进行处理
    const remoteStream = event.stream
    remoteStream.play('dom id').catch((error) => {
      console.log(error, 'play error')
    })
  })
  // 远端流更新事件,当远端用户添加、移除或更换音视频轨道后会收到该通知。
  rtcClient.on('stream-update', (event) => {
    console.log('stream-update', event)
    
  })
  // 远端流移除事件,当远端用户取消发布流后会收到该通知。
  rtcClient.on('stream-removed', (event) => {
    // this.$message.error('患者端视频推送异常,播放失败!')
    console.log('stream-removed', event)
  })
  // 远端流订阅成功事件,调用 subscribe() 成功后会触发该事件。
  rtcClient.on('stream-subscribed', (event) => {
    console.log('stream-subscribed', event)
  })
  // 远端用户进房通知
  rtcClient.on('peer-join', (event) => {
    console.log('peer-join', event)
  })
  // 远端用户退房通知
  rtcClient.on('peer-leave', (event) => {
    console.log('peer-leave', event)
  })
}

推流

以上已经完成了拉流,紧接着进行推流的处理。
初始化流的时候进行设备的检查,如果要求必须打开摄像头和麦克风,在此进行驳回
localStream.initialize
rtcClient.publish

// 初始化流
await localStream.initialize()
// 初始化完成之后进行 发布流
await rtcClient.publish(localStream)
// 播放流
await localStream.play('dom id')

销毁

销毁会话可以分为三种,全部卸载,卸载本地,卸载远程
流程反着来,一步步关闭
localStream.stop
rtcClient.unpublish
localStream.close
rtcClient.leave
rtcClient.off

// 卸载会话 1-全部卸载 2-本地卸载 3-远程卸载
async uninstallRtcClient(type = 1) {
  const loading = this.$loading({
    lock: true,
    text: '销毁会话中...',
    spinner: 'el-icon-loading',
    background: 'rgba(0, 0, 0, 0.7)'
  })
  try {
    if (type !== 3) {
      await localStream.stop('dom id')
      try {
        await rtcClient.unpublish(localStream)
      } catch (e) {}
      await localStream.close()
    }
    if (type !== 2) {
      await localStream.stop('dom id')
    }
    await rtcClient.leave()
  } catch (e) {
    console.log(e, 'uninstallRtcClient err')
  }
  rtcClient.off('*')
  loading.close()
}

转载请标明原文及作者,谢谢!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值