小白必看,集成七牛云SDK实现Web端音视频通话

article/2025/8/6 6:48:00

😄作者简介:
小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊
座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍

如果你有一个实现”1v1音视频通话“的场景需求,如果你想入门音视频,不妨来看看这篇文章。本文将介绍如何通过少量的代码集成七牛音视频SDK,实现高质量、低延迟的音视频通话Web应用。

文章目录

  • 一 前言🌟
  • 二 前期准备🌟
  • 三 实战环节🌟
    • 3.1 创建Web项目✨
    • 3.2 实现音视频通话✨
    • 3.3 Demo展示 ✨
  • 四 小结 🌟

一 前言🌟

在开始实践之前,有必要提前简单介绍一下七牛的 RTC SDK。它提供了功能丰富的各端SDK,目前QRTC有新旧两套版本并行:

新版本:4.x及之后的版本

旧版本:3.x及之前的版本

如果接入的话,web 端推荐使用4.x版本,其他端使用5.x版本。另外在实现过程中需要用到APPidtoken信息,所以在接入 SDK 之前需要先了解下接入流程,完成对应认证信息,获取对应Appidtoken信息,而且每月有2万分钟免费额度。如果你是学习/调试,这些时长完全够用。

二 前期准备🌟

如果你集成七牛云 SDK 并想实现 Web 端音视频通话,那么需要有以下准备:

  • 首先需要注册七牛云控制台账号,具体注册流程可查看这里。

  • 注册并认证之后,打开“产品与方案”,选择“实时音视频”,创建一个应用,即可获取七牛云 appid。

    在这里插入图片描述

  • 再通过 appid 栏目,生成临时 roomtoken(即 token)。另外,对于appid、roomtoken等相关概念的介绍可查阅基本概念文档。
    在这里插入图片描述

  • 七牛Web SDK:获取最新SDK可在这里获取(web端 SDK对应的是一个js文件)。

小编开发及测试环境如下:

  • Visual Studio code:v1.76.2
  • 七牛Web SDK:v4.2.0
  • Google Chrome:v111.0.5563.64

三 实战环节🌟

基于【前期准备】已经获取了七牛 appid 和临时 token,本小节将介绍 Web 端如何集成七牛云音视频 SDK,实现 1V1 音视频通话。在开发之前,需要了解实时音视频通话的基本流程,流程图如下(图片来源于官网):
在这里插入图片描述

3.1 创建Web项目✨

创建一个名为 VideoCallDemo 的文件夹。一个Web客户端项目至少需包含以下文件:

index.html :主要用于设计Web应用的用户界面。

VideoCall.js: 主要通过 QNRTCClient实现具体应用逻辑的代码。

qnweb.js : 引入Web端RTC SDK。(将官方提供的Web SDK的内容拷贝至该文件内。)

3.2 实现音视频通话✨

(1)引入SDK

index.html 文件中引入SDK

<script src="qnweb.js"></script>

(2)设计客户端用户页面

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>One on One Sample</title><script src="qnweb.js"></script><script src="VideoCall.js"></script><style>#localtracks, #remotetracks {width: 320px;height: 240px;background: #000;}</style></head><body><label>请输入 RoomToken </label><input id="roomtoken" type="text" /><button onclick="joinRoom()">加入房间</button> <p>本地视频</p><div id="localtracks"></div><p>远端视频</p><div id="remotetracks"></div></body></html>

(3)实现音视频通话逻辑

VideoCall.js文件中,实现音视频通话逻辑。
通过调用createClient()方法创建QNRTCClient对象。当用户点击加房时,通过调用join方法加入RTC房间,并在方法中传入 roomtoken 参数,再调用createMicrophoneAndCameraTracks()方法采集音视频,该方法会返回音频轨和视频轨对象,并调用publish()方法将音视频 track发布到房间,再通过play()方法播放本地视频 track。

async function joinRoom() {// 创建QNRTCClient对象const client = QNRTC.createClient();// 需要先监听对应事件再加入房间autoSubscribe(client);const roomTokenInput = document.getElementById("roomtoken");const roomToken = roomTokenInput.value;await client.join(roomToken);await publish(client);
}async function publish(client) {// 返回一组audio track 与 video trackconst localTracks = await QNRTC.createMicrophoneAndCameraTracks();await client.publish(localTracks);// 获取页面上的一个元素作为播放画面的父元素const localElement = document.getElementById("localtracks");// 遍历本地采集的 Track 对象for (const localTrack of localTracks) {console.log(localTrack)// 如果这是麦克风采集的音频 Track,我们就不播放它。if (localTrack.isAudio()) continue;// 调用 Track 对象的 play 方法在这个元素下播放视频轨localTrack.play(localElement, {mirror: true});}
}

(3)订阅远端音视频track

通过subscribe函数实现订阅远端音视频功能,并在预设的位置中播放音视频。

async function subscribe(client, tracks) {
// 传入 Track 对象数组调用订阅方法发起订阅,异步返回成功订阅的 Track 对象。const remoteTracks = await client.subscribe(tracks);const remoteElement = document.getElementById("remotetracks");// 遍历返回的远端 Track,调用 play 方法完成在页面上的播放for (const remoteTrack of [...remoteTracks.videoTracks, ...remoteTracks.audioTracks]) {remoteTrack.play(remoteElement);}
}

(4)添加事件监听
通过监听 client.on("user-published") 事件来获取远端用户 track 列表,实时检测房间内 track变化,并在合适的时机调用 subscribe

function autoSubscribe(client) {// 添加事件监听,当房间中出现新的 Track 时就会触发,参数是 trackInfo 列表client.on("user-published", (userId,tracks) => {subscribe(client, tracks).then(() => console.log("subscribe success!")).catch(e => console.error("subscribe error", e));});
}

至此,音视频通话简易demo已完成,可以尝试运行查看效果

(5)浏览器兼容性检测

并不是所有的浏览器都支持webRTC,可以通过checkSystemRequirements()方法检测浏览器兼容性,该方法,会自动检测媒体流采集、加入房间、发布、订阅、离开房间等整个流程。在VideoCall.js文件实现checkSystem()函数。

async function checkSystem(){const result = await QNRTC.checkSystemRequirements();if (result.ok) {console.log("test ok!");} else {console.log("test fail", result.reason);}
}

并在index.html文件中增加对应 button 进行函数调用。

<div><button onclick="checkSystem()">checkSystem</button>
</div>

3.3 Demo展示 ✨

推荐:如果你也是使用的VSCode IDE ,不妨在插件列表中安装Live Server插件,之后在html文件中右击选择Open with Live Server即可运行网页。demo运行地址为 http://127.0.0.1:5502/index.html

在这里插入图片描述

当用户点击checkSystem 按钮时,可以在控制台过滤“test ok! ”查看检测信息。(如下图右侧控制台信息);当点击加入房间时,客户端开始采集麦克风和摄像头并进行发布,同时当远端用户加入时,会实时监测并订阅远端音视频 track。至此,音视频通话demo实现完毕。

在这里插入图片描述

四 小结 🌟

本文详细介绍了web平台如何集成七牛云SDK,实现音视频通话。通过少量代码,实现简易音视频Demo,如果你想实现更复杂的场景,可以参考七牛官网API。行文仓促,认识有限,欢迎讨论拍砖。


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

相关文章

Unity Metaverse(八)、RTC Engine 基于Agora声网SDK实现音视频通话

文章目录 简介创建应用构建应用场景API调用与回调事件测试 简介 本文介绍如何在Unity中接入声网SDK&#xff0c;它可以应用的场景有许多&#xff0c;例如直播、电商、游戏、社交等&#xff0c;音视频通话是其实时互动的基础能力。 如下图所示&#xff0c;可以在官网中选择Unit…

新知实验室实时音视频sdk体验

文章目录 前言一、开通产品免费使用二、下载demo运行体验1.快速跑通demo 示例2.基础功能的使用3.使用感受 总结 前言 直播&#xff0c;k歌&#xff0c;网课&#xff0c;已成为了大众生活的一部分&#xff0c;日常使用的频率是越来越高&#xff0c;这些场景使用的是当下热门的技…

主流的音视频SDK调研

需求来源&#xff1a; ● 功能需求&#xff1a; 1、文字聊天&#xff1a;包含文字聊天和简单的表情功能&#xff0c;以及发送图片功能 2、语音聊天&#xff1a;可以进行线上语音功能&#xff0c;语音与文字聊天计时方式是合并计算 3、自动录音&#xff1a;语音聊天自动进行录音…

论文阅读-DDFN: Decoupled Dynamic Filter Networks解耦的动态卷积

一、论文信息 论文名称&#xff1a;Decoupled Dynamic Filter Networks 论文&#xff1a;https://thefoxofsky.github.io/files/ddf.pdf 代码&#xff1a;https://github.com/theFoxofSky/ddfnet 主页&#xff1a;https://thefoxofsky.github.io/project_pages/ddf 作者团…

Decoupled Sparial-Temporal Attention Network forSkeleton-Based Action Recognition

Abstract 解决问题&#xff1a;以前的方法严重依赖于手工设计的遍历规则或图像拓扑结构来对关节之间的依赖关系建模。 方法&#xff1a;提出了一种新的解耦时空注意网络&#xff08;DSTA-Net&#xff09;&#xff0c;允许对关节之间的时空依赖关系建模&#xff0c;无需知道位…

3、RDD-Single-Stage Rotation-Decoupled Detector for Oriented Object

3、RDD-Single-Stage Rotation-Decoupled Detector for Oriented Object code&#xff1a; https://github.com/Capino512/pytorch-rotation-decoupled-detector 1.Abstract 2.Introduction 贡献&#xff1a; 文章提出一种新的单阶段检测算法用于有效且准确的方向性目标检…

基于Yolov5的道路缺陷识别,加入CVPR2023 InceptionNeXt、华为诺亚2023 VanillaNet、ASFF、EVC、Decoupled_Detect、TSCODE、WIoU优化

目录 1.数据集介绍 1.1数据增强&#xff0c;扩充数据集 1.1.1 通过split_train_val.py得到trainval.txt、val.txt、test.txt 1.1.2 通过voc_label.py得到适合yolov5训练需要的 2.基于yolov5的道路缺陷识别 2.1配置 crack.yaml 2.2 修改yolov5s_crack.yaml 2.3训练道路缺…

【Decouple】《Improving Semantic Segmentation via Decoupled Body and Edge Supervision》

ECCV-2020 作者分享&#xff1a;https://www.techbeat.net/talk-info?id462 Code&#xff1a;https://github.com/lxtGH/DecoupleSegNets 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Decoupled segmentation framework4.2 …

【CVPR2021】Decoupled dynamic filter networks

论文&#xff1a;https://thefoxofsky.github.io/files/ddf.pdf 代码&#xff1a;https://github.com/thefoxofsky/ddfnet 主页&#xff1a;https://thefoxofsky.github.io/project_pages/ddf 先从论文首页的图说起。第一行为普通静态卷积&#xff0c;对于道路、车辆、建筑使用…

阅读Decoupled Spatial-Temporal Attention Network for Skeleton-Based Action Recognition

基于骨骼动作识别的解耦时空注意网络 paper&#xff1a;https://arxiv.org/abs/2007.03263 文章目录 AbstractIntroductionMethod3.1 Spatial-temporal attention module 3.2 Decoupled Position encoding3.3 Spatial global regularization3.4 Complete attention module3.5 O…

[论文评析]Decoupled Knowledge Distillation, CVPR2022

[论文评析]Decoupled Knowledge Distillation&#xff0c; CVPR2022 文章信息动机方法Basic notionsKL Loss重要发现伪码 思考References 文章信息 题目&#xff1a;Decoupled Knowledge Distillation 发表&#xff1a; CVPR ,2022 作者&#xff1a;Borui Zhao 11&#xff0c;…

Decoupled head(解耦合头)和Coupled head(耦合头)

&#x1f47b;解耦合头和耦合头是目标检测中常见的两种头部设计&#xff0c;用于从检测网络的特征图中提取目标位置和类别信息。 &#xff08;先看概念&#xff0c;概念看不懂可以直接看图一定能懂&#x1f601;&#xff09; 文章目录 耦合头&#xff08;Coupled head&#xf…

#Reading Paper# 【序列推荐】SIGIR 2022 Decoupled Side Information Fusion for Sequential Recommendation

#论文题目&#xff1a;【序列推荐】Decoupled Side Information Fusion for Sequential Recommendation&#xff08;DIF-SR&#xff1a;用于序列推荐的辅助信息解耦&#xff09; #论文地址&#xff1a;https://arxiv.org/pdf/2204.11046.pdf #论文源码开源地址&#xff1a;http…

yolox Head-Decoupled head源码解读

目录 前言 yolox网络结构 yolox head网络结构 head组件及对应源码 解码 前言 yolox backbone部分介绍 yolox neck部分介绍 yolox:https://github.com/Megvii-BaseDetection/YOLOX yolox详细解读可参考&#xff1a;https://jishuin.proginn.com/p/763bfbd628ce yolox网络…

Decoupled Knowledge Distillation——目标分布与非目标分布相解耦

通过传统知识蒸馏的解耦分析&#xff0c;DKD&#xff08;Decoupled Knowledge Distillation&#xff09;重新审视了暗知识的本质&#xff0c;并通过蒸馏损失函数的改进、获得DKD loss&#xff0c;显著改善了任务相关知识迁移的效果&#xff1a; Paper地址&#xff1a;https://a…

【GCN-CTR】DC-GNN: Decoupled GNN for Improving and Accelerating Large-Scale E-commerce Retrieval WWW22

《DC-GNN: Decoupled Graph Neural Networks for Improving and Accelerating Large-Scale E-commerce Retrieval》(WWW’22) 在工业场景中&#xff0c;数百亿节点和数千亿的边直接端到端的GNN-based CTR模型开销太大&#xff0c;文章把整个GNN框架解耦成三阶段&#xff1a;预…

(2019.01, iclr) Decoupled Weight Decay Regularization

code: https://github.com/loshchil/AdamW-and-SGDW 除了纯SGD, L2 ! weight_decay 背景知识&#xff1a; sgd with momentum和adam&#xff0c;详见《深度学习》: L2 regulization and weight decay: https://benihime91.github.io/blog/machinelearning/deeplearning/python3…

Decoupled Novel Object Captioner

Decoupled Novel Object Captioner AbstractIntroductionMethodsPreliminariesZero-Shot Novel Object Captioning.Sequence Model with the PlaceholderKey-Value Object MemoryFramework OverviewTraining Reference Reference[原文]: Joselynzhao.top & 夏木青 | Decoup…

Video Anomaly Detection by Solving Decoupled Spatio-Temp

Video Anomaly Detection by Solving Decoupled Spatio-Temp 什么是SSL? Self-Supervised Learning&#xff0c;又称为自监督学习什么是多标签分类问题: 一个数据有多个标签pretext 任务&#xff1a; 简单的来说&#xff0c;通过另一个任务简介完成主任务 比如&#xff0c;要训…

魔改YOLOv5/YOLOv7高阶版——改进之结合解耦头Decoupled_Detect

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨