vue视频通话(Agora声网)

article/2025/9/17 9:44:13

文章目录

  • 声网简介
        • 语音视频通话API
        • 互动直播API
        • 实时消息API
        • 实时录制API
        • 实时码流加速API
        • 水晶球Agora Analytics 质量监控平台
  • 基于声网实现视频通话
      • 注册配置
      • 实现音视频通话基本逻辑
        • 创建对象
        • 加入频道
        • 创建轨道
        • 订阅轨道
      • 基于以上步骤封装组件
      • 导入注册使用
      • 项目页面
      • 注意事项
      • GitHub链接

声网简介

声网官网

语音视频通话API

通过调用API,应用可实现1对1、多对多实时语音、视频通话功能

互动直播API

通过调用API,可实现超低延时互动直播,让主播与观众实时连麦

实时消息API

稳定可靠、高并发、低延时的全球消息云服务 帮助你快速构建实时场景

实时录制API

提供音视频通话或直播的录制,满足回放、取证、质检、审核等应用需求,与 Agora Native / Web SDK 兼容

实时码流加速API

通过调用API,可实现自定义码流 在互联网上实时传输

水晶球Agora Analytics 质量监控平台

基于Agora实时通讯全链路数据,提供全周期质量监测、回溯和分析的解决方案

基于声网实现视频通话

注册配置

进入官网后注册进入控制台
在这里插入图片描述

点击创建项目
在这里插入图片描述
项目名称、使用场景可以任意选择
鉴权机制选择安全模式
在这里插入图片描述
提交后显示创建成功 ~~~
在这里插入图片描述

点击配置,我们开始配置token
在这里插入图片描述
点击生成临时token,输入自定义频道号,点击生成~,这样我们就完成了token配置!

实现音视频通话基本逻辑

创建对象

调用 createClient 方法创建 AgoraRTCClient 对象。

加入频道

调用 join 方法加入一个 RTC 频道,你需要在该方法中传入 App ID 、用户 ID、Token、频道名称

创建轨道

先调用createMicrophoneAudioTrack 通过麦克风采集的音频创建本地音频轨道对象;然后调用publish 方法,将本地音频轨道对象当作参数即可将音频发布到频道中。

订阅轨道

当一个远端用户加入频道并发布音频轨道时:
   1、监听client.on(“user-published”) 事件。当 SDK 触发该事件时,在这个事件回调函数的参数中你可以获取远端用户 AgoraRTCRemoteUser 对象 。
   2、调用 join subscribe 方法订阅远端用户 AgoraRTCRemoteUser 对象,获取远端用户的远端音频轨道 RemoteAudioTrack 对象。
   3、调用 play 方法播放远端音频轨道。
   
   
在这里插入图片描述
   
   

基于以上步骤封装组件

全部文件代码贴在在文末GitHub
图片文件github自取

下载SDK

npm install agora-rtc-sdk-ng -s

AgoraVideo.vue

<template><div id="app"><p id="local-player-name" class="player-name"></p><div id="local-player" class="player"><div class="call" @click="sharRTC"></div><div class="answer" @click="Leave"></div></div><div id="remote-playerlist"></div></div>
</template>
<script>
import AgoraRTC from "agora-rtc-sdk-ng";
export default {name: "App",data() {return {agoraClient: null, //实例localTracks: {//信道videoTrack: null,audioTrack: null,},options: {},remoteUsers: {},};},props: {appid: String,token: String,channel: String,uid: Number,},mounted() {$(".answer").css("display", "none");// alert(AgoraRTC.checkSystemRequirements());是否兼容声网},methods: {// 开始sharRTC() {// 创建本地客户端 AgoraRTC 的实例this.agoraClient = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" });// 用户信息this.options = {appid: this.appid,channel: this.channel,uid: 8848,token: this.token,};// 连接this.join();},// 获取async join() {$(".answer").css("display", "block");$(".call").css("display", "none");// 添加事件侦听器以在远程用户发布时播放远程曲目.this.agoraClient.on("user-published", this.handleUserPublished);this.agoraClient.on("user-unpublished", this.handleUserUnpublished);// 加入频道[this.uid, this.localTracks.audioTrack, this.localTracks.videoTrack] =await Promise.all([// join the channelthis.agoraClient.join(this.appid, this.channel, this.token || null),// 使用麦克风和摄像头AgoraRTC.createMicrophoneAudioTrack(),AgoraRTC.createCameraVideoTrack(),]);// 将本地曲目发布到频道await this.agoraClient.publish(Object.values(this.localTracks));// 播放本地视频曲目this.localTracks.videoTrack.play("local-player");},handleUserPublished(user, mediaType) {const id = user.uid;this.remoteUsers[id] = user;this.subscribe(user, mediaType);},handleUserUnpublished(user) {const id = user.uid;delete this.remoteUsers[id];console.log("我离开了,请销毁我的Dom结构!~~~");setTimeout(() => {let length = $(".player").length;for (let i = 0; i < length; i++) {if ($($(".player")[i]).html() == "") {$($(".player")[i]).parent().remove();console.log("销毁成功");}}}, 1000);},async subscribe(user, mediaType) {const uid = user.uid;// <div id="player-wrapper-${uid}">// <p class="player-name">remoteUser(${uid})</p>// 订阅远程用户await this.agoraClient.subscribe(user, mediaType);if (mediaType === "video") {const player = $(`<div class="player-wrapper-id"><div id="player-${uid}" class="player"></div></div>`);$("#remote-playerlist").append(player);user.videoTrack.play(`player-${uid}`);user.audioTrack.play();}if (mediaType === "audio") {user.audioTrack.play();}},// 客户离开信道async Leave() {this.localTracks.videoTrack.stop();this.localTracks.videoTrack.close();this.localTracks.audioTrack.stop();this.localTracks.audioTrack.close();// remove remote users and player viewsthis.remoteUsers = {};$("#remote-playerlist").html("");// leave the channelawait this.agoraClient.leave();$("#local-player-name").text("");console.log("客户离开信道成功");$(".call").css("display", "block");$(".answer").css("display", "none");},},
};
</script>
<style>
#app {width: 100%;height: 100%;
}
.player {width: 100%;height: 100%;border: 1px solid red;position: relative;
}#remote-playerlist {width: 17%;position: absolute;height: 171px;top: 40px;right: 20px;
}
.player-wrapper-id {height: 200px;
}
.call {cursor: pointer;position: absolute;bottom: 4%;left: 50%;transform: translateX(-50%);z-index: 99;width: 40px;height: 40px;background-image: url("~@/assets/接听.png");background-size: contain;background-repeat: no-repeat;
}
.answer {cursor: pointer;position: absolute;left: 50%;transform: translateX(-50%);bottom: 4%;z-index: 99;width: 40px;height: 40px;background-image: url("~@/assets/挂断.png");background-size: contain;background-repeat: no-repeat;
}
</style>

导入注册使用

<agora-video:appid='appid' :token="token" :channel="channel" :uid="uid"/><script>
import AgoraVideo from './AgoraVideo.vue'
export default {components: {AgoraVideo },data() {return {appid:'',//你的AppIdtoken:'', // 根据房间号生成的token(房间号和token对应)channel:'',//频道号uid:8848,//uid必须为数字类型}}
}
</script>

项目页面

在这里插入图片描述
点击拨打

在这里插入图片描述
完结

注意事项

1、有的电脑没有摄像头,或者有摄像头不支持(用电脑微信视频通话测试摄像头是否正常使用)
2、必须使用https协议或者本地localhost进行测试

GitHub链接

👉本文GitHub源码仓库连接

👉官网 Dome vue2组件版本(不支持vue3) GitHub源码仓库连接

👉官网 Dome vue2组件版本 配套文档

在这里插入图片描述


http://chatgpt.dhexx.cn/article/rF9oDgXZ.shtml

相关文章

vue 视频播放插件VideoPlayer

vue 视频播放插件VideoPlayer 1.npm install vue-video-player --save 2.main.js引入 import VideoPlayer from vue-video-player import vue-video-player/src/custom-theme.css import video.js/dist/video-js.cssVue.use(VideoPlayer)

vue 视频播放

一、概述 基于 Vue 的一个轻量级视频播放组件&#xff0c;适配 PC 和移动端。 官方链接&#xff1a;https://webweifeng.github.io/vue-mini-player/ 特色 1.轻量级 HTML5 播放器&#xff0c;精美 UI 控件&#xff0c;简单易上手 2.提供以 npm 的形式安装提供全局组件 3.多格式…

VUE视频

1.Vue后台脚手架安装过程&#xff1a;node.js

vue 视频截屏

video播放视频&#xff0c;一键截屏功能实现&#xff08;2种方式&#xff09; 1.canvas <template><div class"hik-box"><canvas style"display:none;width:200px;height:200px" id"myCanvas"></canvas><video wid…

Vue视频学习

黑马程序员vue前端基础教程-4个小时带你快速入门vue_哔哩哔哩_bilibili vue的el挂载点 id选择器&#xff0c;class选择器&#xff0c;元素选择器&#xff0c;推荐使用id选择器&#xff0c;因为id选择器唯一 vue的数据对象 vue开发网页&#xff1a; v-text v-html:解析返回的…

Vue2视频播放(Video)

Vue3视频播放&#xff08;Video&#xff09; 可自定义设置以下属性&#xff1a; 视频文件url&#xff08;src&#xff09;&#xff0c;必传&#xff0c;默认 &#xff0c;支持网络地址https和相对地址require(...) 视频封面url&#xff08;poster&#xff09;&#xff0c;默…

vue实现视频播放器功能,你学会了吗

&#x1f48c; 作者简介 &#x1f4d6; 个人介绍&#xff1a;小伙伴们&#xff0c;大家好&#xff01;我是水香木鱼&#xff0c;【前端领域创作者】&#x1f61c;&#x1f4dc; CSDN主页&#xff1a;水香木鱼&#x1f4d1; 个人博客&#xff1a;陈春波&#x1f3a8; 系列专栏&…

测试开发工程师成长日记001 - 敏捷测试、CI/CD/CT、DecOps的一些介绍

始终都没有很坚定想去做一份职业&#xff0c;大概就是缺少对互联网的热爱与坚持&#xff0c;对于我个人而言&#xff0c;大概需要的是简单而明确的方向&#xff0c;比如考研&#xff1a;选中一个学校并开始各个科目的学习和延伸。但是&#xff0c;找工作完全不一样&#xff0c;…

浅谈弱网测试及QNET

最近工作中需要进行弱网测试&#xff0c;所以在此将自己遇到的一些问题记录一下。本文是基于QNET进行的弱网测试。**首先弱网测试是什么&#xff1f;**模拟各种弱网环境&#xff0c;借助丢包、延时等弱网场景测试对弱网的处理机制&#xff0c;以游戏为例&#xff0c;就是保证前…

shell脚本测试

目录 test命令进行测试 1.比较大小 2.关于文件的权限检测&#xff08;-x常用&#xff09; 3.1测试文件是否存在&#xff08;-f&#xff0c;-d&#xff09; 4.多种条件的判断&#xff08;-a -o常用&#xff09; 5.判断字符串是否相等 expr命令 数值比较符号 逻辑判断脚本…

【Cmake】Ctest测试工具

目录 前言 一、初识CTest 二、使用方法 三、完整的简单测试工程 附录 附录一 cmake命令 enable_testing add_test 前言 原文&#xff1a;CTest - https://www.cnblogs.com/457220157-FTD/p/4139149.html 一、初识CTest CTest是CMake集成的一个测试工具&#xff0c;在使…

软件测试常见面试题

1、软件的含义 程序、数据以及相关文档的集合。 2、测试与调试的区别是什么&#xff1f; 测试是测试人员进行&#xff0c;主要目标是发现、报告、跟踪缺陷&#xff1b; 调试是开发人员进行&#xff0c;主要目标是定位缺陷位置、分析缺陷原因、修复缺陷。 3、IEEE是什么意思…

Web服务稳定性测试 负载测试 可靠性测试 方案 测试报告

注&#xff1a; 1. 程序员做的测试 2. 测试报告文档原稿在上传审核中&#xff0c;请等待 审核好了&#xff1a;https://download.csdn.net/download/yiquan_yang/12694138 1 概述 1.1 背景 系统的稳定性是系统长期稳定运行能力&#xff0c;需要时间累积才能度量。平台的某些问…

NFC测试

NFC功能点介绍&#xff1a; NFC英文全称Near Field Communication&#xff0c;近距离无线通信。 NFC采用主动和被动两种读取模式&#xff0c;NFC应用模式分为三种&#xff1a; 1、NFC卡模式&#xff08;被读模式&#xff0c;手机终端可以模拟成为一张普通的非接触卡被pos机读取…

Python 接口并发测试详解

一、接口并发测试简介 1、性能测试简介 性能测试是通过自动化测试工具模拟多种正常、峰值及异常负载条件对系统的各项性能指标进行的测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,…

jmeter测试工具

文章目录 参考文章jmeter接口验签tomcat最大连接数jmeter参数彻底理解jmeter的ramp-up参数总结说明 持续时间的使用场景彻底理解ramp up2循环次数ramp-up线程数循环次数&#xff08;永远&#xff09;持续时间同步器里面的Timeout in milliseconds参数线程组参数 版本缺陷记录jm…

点餐系统测试

一、设计测试用例 二、提交BUG a)BUG 一 标题:兼容性差&#xff0c;只能在Chrome浏览器和火狐浏览器上使用 1.版本号&#xff1a;V0009 2.测试环境&#xff1a;Chrome 浏览器 版本号 96.0.4664.45 火狐 浏览器 版本号 97.0.1 操作系统&#xff1a;win10 3.测试数据…

接口 测试

一.接口概念 1.什么是接口(API) 接口:接口是为了提供一种服务 所有的接口统称为API,接口分为内部接口和外部接口 外部接口:测试被测系统和外部系统之间的接口 测试内部接口: 1.内部接口提供内部系统使用:开发人员自己开发的对自身系统提供的接口) 2.内部接口提供外部系统使用:…

Visual Studio 2017 15.8 正式发布,测试速度提高 82%

Visual Studio 2017 15.8 版本已正式发布&#xff1a; 发行说明&#xff1a;https://docs.microsoft.com/zh-cn/visualstudio/releasenotes/vs2017-relnotes#15.8下载地址&#xff1a;https://visualstudio.microsoft.com/downloads/ 安装 现可选择在开始安装之前下载所有安装文…

跟LintCode的算法题杠上了(82落单的数)

前言 今天闲来无事准备刷个算法题&#xff0c;缓解一下办公室尴尬的气氛&#xff0c;放松一下&#xff0c;谁知我竟然跟这题杠上了&#xff0c;我必须得好好研究一下&#xff0c;哈哈 题目 点击进入lintcode&#xff0c;第82题落单的数 给出 2 * n 1个数字&#xff0c;除其…