基于OpenVidu的视频会议解决方案

news2024/10/7 2:24:55

OpenVidu是什么

OpenVidu 是一个开源的实时音视频通信平台,基于 Apache 2.0 协议开源的 WebRTC 视频会议平台,源码仓库地址:https://github.com/OpenVidu/openvidu。它提供了一组 APISDK ,使开发人员能够轻松地在 Web 和移动应用程序中集成实时音视频通信功能。 OpenVidu 支持多种功能,包括实时音视频通话屏幕共享录制回放等。它基于 WebRTC 技术,可以在不同的设备和浏览器上实现高质量的音视频通信。 OpenVidu 还提供了丰富的文档和示例代码,以帮助开发人员快速上手并构建自己的实时音视频应用程序。
目前, OpenVidu 有以下3个版本:

  1. OpenVidu CE(Community Edition):这是OpenVidu的免费版本,提供了基本的音视频通信功能,包括实时音视频通话、屏幕共享和录制等。
  2. OpenVidu Pro:这是OpenVidu的商业版本,除了包含OpenVidu CE的所有功能外,还提供了更多高级功能,如多路复用、媒体服务器集群、自定义录制存储等。
  3. OpenVidu Enterprise:这是OpenVidu的企业版本,除了OpenVidu Pro的所有功能外,还提供了更高级的企业级功能,如高可用性、自动扩展、安全性增强等。

不同版本的详细特性见下图,本文内容基于社区版的功能(实时音视频通话、屏幕共享、录制和在线聊天等)进行演示:

1699608922215.jpg

Web端效果

getaroom-session-6.png

移动端效果

getaroom-session-6-mob.png

OpenVidu的总体架构

任何一个 OpenVidu 应用都包含以下3部分:

  1. OpenVidu Deployment:OpenVidu的核心组件,负责管理会话和连接,处理信令传输和事件处理。它提供了REST API,用于创建和管理会话、连接和录制等功能;这一部分不需要开发,只要完成社区版部署,我们即拥有了视频会议应该具备的核心能力,只需动态调整一些配置
  2. Application Server:在应用服务器上运行,并使用OpenVidu Deployment提供的REST API(Java和Node SDK可用,但也可以使用任何REST客户端直接调用REST API端点)。通过这种方式,可以创建会话、连接,并在客户端安全地管理我们的视频通话。
  3. Application Client:在Web浏览器、移动设备或桌面应用程序上运行。它使用openvidu-browser.js SDK与OpenVidu Deployment进行通信,连接到会话,发布和订阅媒体流。

openvidu-app-architecture.png

这里重点强调一下 OpenVidu Deployment 包含的组件:

  1. OpenVidu Server:是OpenVidu平台的核心,负责信令平面的功能。
  2. Kurento Media Server:是OpenVidu平台的核心,负责媒体平面的功能。
  3. Coturn:是一个服务器,用于在特定网络中允许与浏览器进行媒体通信。
  4. Redis:是一个缓存数据库,用于管理Coturn服务器中的用户。
  5. Nginx:是一个反向代理服务,用于配置SSL证书,并允许Openvidu Server和应用程序在标准的https端口(443)上提供服务。
  6. Videoconference Application (app):OpenVidu Call应用程序,可以禁用。

OpenVidu的下载与安装

本文使用 Docker 容器的方式部署 OpenVidu Deployment ;在安装 OpenVidu 前,要求具备 Dockerdocker-compose 的环境。

  1. 通过以下一条命令一键下载OpenVidu Deployment所需要的docker-compose.yml文件。

curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_2.28.0.sh | bash

  1. 然后通过start命令,可以实现拉取OpenVidu Deployment所需要的Docker镜像,并运行起来。
  2. 通过http://your-ip访问自带的OpenVidu Call应用程序。

b628f0d693ddbfcd0c52847d67beca8.png

Note: 如果下载时报错 Error when downloading the file '.env! ,则可以通过修改本地主机解析: vi /etc/hosts 配置GitHub的解析地址来解决:

185.199.108.133   raw.githubusercontent.com
185.199.109.133   raw.githubusercontent.com
185.199.110.133   raw.githubusercontent.com
185.199.111.133   raw.githubusercontent.com
2606:50c0:8000::154 raw.githubusercontent.com
2606:50c0:8001::154 raw.githubusercontent.com
2606:50c0:8002::154 raw.githubusercontent.com

OpenVidu容器化部署

# 到服务器的/opt目录下执行以下安装脚本命令
[root@meeting opt]# curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_2.28.0.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15619  100 15619    0     0   2416      0  0:00:06  0:00:06 --:--:--  3952

     =======================================
          Install OpenVidu CE v2.28.0
     =======================================

     => Creating folder openvidu...
     => Downloading OpenVidu CE files:
          - .env
          - docker-compose.override.yml
          - docker-compose.yml
          - openvidu
     => Adding permission to 'openvidu' program...
     => Adding permission to 'recordings' folder...
     => Creating folder 'owncert'...
     => Creating folder 'custom-nginx-vhosts'...
     => Creating folder 'custom-nginx-locations'...

     =======================================
     Openvidu Platform successfully installed.
     =======================================

     1. Go to openvidu folder:
     $ cd openvidu

     2. Configure DOMAIN_OR_PUBLIC_IP and OPENVIDU_SECRET in .env file:
     $ nano .env

     3. Start OpenVidu
     $ ./openvidu start

     For more information, check:
     https://docs.openvidu.io/en/2.28.0/deployment/deploying-on-premises/
# 安装完成后,进入到openvidu目录
[root@meeting opt]# cd openvidu/

# 修改.env配置文件,设置IP地址信息:DOMAIN_OR_PUBLIC_IP,秘钥信息:OPENVIDU_SECRET
[root@meeting openvidu]# vi .env 

# 配置完成后,启动
[root@meeting openvidu]# ./openvidu start
[+] Running 60/5
 ✔ openvidu-server 9 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                      292.5s 
 ✔ coturn 9 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                               201.1s 
 ✔ app 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                706.8s 
 ✔ kms 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                             963.0s 
 ✔ nginx 14 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                           75.6s 
[+] Running 6/6
 ✔ Network openvidu_default              Created                                                                      0.1s 
 ✔ Container openvidu-coturn-1           Started                                                                      5.4s 
 ✔ Container openvidu-nginx-1            Started                                                                      5.4s 
 ✔ Container openvidu-app-1              Started                                                                      5.4s 
 ✔ Container openvidu-kms-1              Started                                                                      5.4s 
 ✔ Container openvidu-openvidu-server-1  Started                                                                      5.4s 

openvidu-openvidu-server-1  | ----------------------------------------------------
openvidu-openvidu-server-1  | 
openvidu-openvidu-server-1  |    OpenVidu is ready!
openvidu-openvidu-server-1  |    ---------------------------
openvidu-openvidu-server-1  | 
openvidu-openvidu-server-1  |    * OpenVidu Server URL: https://your-ip/
openvidu-openvidu-server-1  | 
openvidu-openvidu-server-1  |    * OpenVidu Dashboard: https://your-ip/dashboard
openvidu-openvidu-server-1  | 
openvidu-openvidu-server-1  | ----------------------------------------------------

1699684469994.jpg

Note: 默认的用户名为 admin ,密码为在安装时 .env 文件中配置的 OPENVIDU_SECRET

OpenVidu常用的管理命令

启动OpenVidu
./openvidu start

停止OpenVidu
./openvidu stop

重启OpenVidu
./openvidu restart

查看OpenVidu日志
./openvidu logs

查看Kurento Media Server日志
./openvidu kms-logs

查看deployment的版本信息
./openvidu version

生成报告:system information, containers running, logs and configuration files
./openvidu report

查询命令与帮助文档
./openvidu help

OpenVidu集成

这里重点说明下, OpenVidu 在介绍自己时的愿景:我们的主要目标是让开发人员能够快速地将实时通信功能添加到他们的应用程序中,并且对他们的代码影响较小

Our main goal is to allow developers to add real-time communications to their apps very fast and with low impact in their code.

OpenVidu 支持以下三种集成方式,分别是开箱即用的 WebComponent (基于官方的杀手锏应用 OpenVidu Call 改造而来),独立封装的视频会议通用组件以及基于客户端 SDK 从零开始实现前后端应用。支持主流的前后端开发语言及框架,eg: Java, Node.js以及Vue.js,React.js。
关于不同的集成方式,官方文档写的非常清晰,并提供了源示例码供开发者参考:
源码地址:https://github.com/OpenVidu/openvidu-tutorials/tree/v2.28.0

基于WebComponent,开箱即用

如果需要快速出一版 MVP ,时间紧迫,快速试错,建议采用这种方式,基于 OpenVidu 社区版的 DeploymentWebComponent 已经提供了视频会议几乎所有的刚需功能:实时音视频通话、屏幕共享、录制和在线文字聊天等。
具体实现参考 openvidu-tutorials-2.28.0 源码仓库下的

  • 后端服务:openvidu-basic-java目录
  • 前端应用:openvidu-webcomponent目录

Note:

  1. 后端服务中需要先配置以下连接信息:
OPENVIDU_URL: https://your-ip:443/
OPENVIDU_SECRET: your-secret
  1. 可以直接打开index.html或者通过一个静态资源服务器来运行前端。
# 全局安装HTTP Server
npm install --location=global http-server

# 托管静态资源服务
http-server openvidu-webcomponent/web

另外,如果遇到字体加载失败,可将的 openvidu-webcomponent-2.28.0.css 里的
https://fonts.gstatic.com/s/materialicons/v129/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2
替换为
https://cdn.bootcdn.net/ajax/libs/material-design-icons/2.0.0/iconfont/MaterialIcons-Regular.woff2

关于开箱即用的 WebComponent 的定制化,官方文档给出了修改样式、 Logo 的方式,以及粗粒度的定制化参数配置:https://docs.openvidu.io/en/2.28.0/api/openvidu-angular/components/OpenviduWebComponentComponent.html

基于独立封装的组件

OpenVidu 官方提供了一系列视频会议会用到的独立组件,通过npm依赖的方式进行安装使用,但是目前仅支持 Angular.js ,对国内用户不友好,不建议使用

从零搭建前后端,全面掌控UI效果

如果希望将视频会议作为未来一个重点方向进行研发,建议使用这种方式。使用 openvidu-browser.js SDK 从头开始将 OpenVidu 集成到您的应用程序客户端。这种策略为您在构建布局和自定义视频会议用户界面方面提供了最大的自由度和灵活性。 DeploymentApplication Server 以及 Application Client 三者之间大致的交互流程如下(创建 Session ,创建连接,发送 Token ,连接 Session ,订阅/发布视频流):

openvidu-workflow.png

基础音视频通话

具体实现参考 openvidu-tutorials-2.28.0 源码仓库下的

  • 后端服务:openvidu-basic-java目录
  • 前端应用:openvidu-vue目录

Note:记得先配置 application.properties 里连接信息。
结合国内实际,前端采用了 Vue.js ,可通过 npm install 安装依赖,然后 npm run serve 命令启动前端服务;为了加快静态资源(这里主要是 Bootstrap 的样式与脚本)的加载速度,将前端应用中 index.html 里的以下内容替换为国内的 CDN

<!-- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> -->
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<!-- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> -->
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>

图片.png

OpenVidu会议录制

Note:默认配置下 OpenVidu 的录制功能是关闭状态,需要修改 .env 配置 OPENVIDU_RECORDING=true ,然后重启 OpenVidu Deployment 服务。录制分多种方式,其中 Compose 方式默认的存储路径为: /opt/openvidu/recordings ,格式为 MP4
具体实现参考 openvidu-tutorials-2.28.0 源码仓库下的

  • 前后端不分离:openvidu-recording-java目录

图片.png

OpenVidu示例

实时音视频通话

图片.png

屏幕共享

图片.png

在线聊天

图片.png

参考

  • 静态资源国内CDN
  • OpenVidu官网
  • OpenVidu官方文档

If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1319902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

山区老人爱的礼物丨走进武隆区土地乡为山区老人送温暖

从车水马龙的城市到人烟稀少的乡村&#xff0c;穿越重峦叠嶂的高山&#xff0c;见到的是独属于大山的辽阔和山区老人眼中的星河。近日&#xff0c;传益千里为爱出发&#xff0c;在三棵柚公益基金会的支持下开展“山区老人爱的礼物”公益计划&#xff0c;走进武隆区土地乡&#…

GeoTrust SSL证书:您的网络信任卫士

在如今的数字化时代&#xff0c;我们的网络交易如脉搏般不断跳动&#xff0c;在这个过程中&#xff0c;安全保障尤其重要。于是像GeoTrust这样的品牌应运而生&#xff0c;它向我们承诺一件事情&#xff1a;无论在什么时候&#xff0c;我们的数据和交易都能得到最强的保护。下面…

Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)

目录 一、前言 二、基于注解配置Bean 1.基本介绍 : 2.应用实例 : 3.注意事项 : 三、手动实现Spring 注解配置机制 1.需求 : 2.思路 : 3.实现 : 3.1 自定义注解类 3.2 自定义配置类 3.3 自定义容器类 3.4 在测试类中进行测试 四、自动装配 0.总述 : 1.AutoWired自动装…

关于 Redis 与传统关系型数据库的选择

当需要为你的应用程序选择合适的数据库时&#xff0c;选择何种数据库通常取决于你项目的特定要求。Redis 是一种高性能的内存数据存储&#xff0c;而 MySQL 等传统关系型数据库也各自具有自己的优势和劣势。在本期文章中&#xff0c;我们将探讨在 Redis 和传统关系型数据库之间…

minio异常处理:S3 API Requests must be made to API port

1、创建minio服务时候需要映射出console端口和api端口&#xff0c;指定console端口和api端口 docker run -p 9000:9000 -p 9099:9099 --name minio -d --restartalways -e "MINIO_ACCESS_KEYadmin" -e "MINIO_SECRET_KEYMINIOE:<&G5*;dL?(fr" -v…

【✅如何针对大Excel做文件读取?】

✅如何针对大Excel做文件读取&#xff1f; &#x1f7e9;如何针对大Excel做文件读取&#x1f7e9;XSSFWorkbook文件读取&#x1f7e9;EasyExcel文件读取 ✅扩展知识&#x1f7e9; EasyExcel简介&#x1f7e9;EasyExcel 为什么内存占用小&#xff1f; &#x1f7e9;如何针对大Ex…

JavaScript中的一些惊艳的编程技巧

你见过哪些令你膛目结舌的代码技巧&#xff1f; 代码世界有很多令人大呼小叫的技巧&#xff01;有的代码像魔术师一样巧妙地隐藏了自己&#xff0c;有的像魔法师一样让你眼花缭乱&#xff0c;还有的像瑜伽大师一样灵活自如。它们让我们惊叹不已&#xff0c;让我们觉得自己仿佛…

检测当前目录,将文件名输出到excel文件并建立链接

EXCEL是一个非常使用的软件,虽然我们平时仅使用他做一些报表,仅此而已; 我在工作中,由于很懒,不愿意做考试重复的工作,就想着使用vba的宏来完成重复的工作,这样就能省出一部分的时间来了。 本人不喜欢在博客里面写以下教程类的东西,我的理念是将工作中的痛点的解决办法…

我记不住的那些vim操作2

背景&#xff1a;最近在重新学习vi/vim&#xff0c;发现这个编辑器的用法真是太灵活了&#xff0c;所能掌控的也太多了&#xff0c;这次学习了一些之前没有学习过的内容&#xff0c;之前都是移动鼠标、编辑、复制、粘贴、保存等等(点我查看)&#xff0c;本次将介绍 标签、区域、…

设计模式-单例设计模式详解

生命无罪&#xff0c;健康万岁&#xff0c;我是laity。 我曾七次鄙视自己的灵魂&#xff1a; 第一次&#xff0c;当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次&#xff0c;当它在空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次&#xff0c;在困难和容易之…

一文图解 Transformer,小白也看得懂(完整版)

原作者&#xff1a;Jay Alammar 原链接&#xff1a;https://jalammar.github.io/illustrated-transformer 1.导语 谷歌推出的BERT模型在11项NLP任务中夺得SOTA结果&#xff0c;引爆了整个NLP界。而BERT取得成功的一个关键因素是Transformer的强大作用。谷歌的Transformer模型最…

043.Python异常处理_自定义上下文管理器

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

ESP32 核心闪存损坏

问题描述&#xff1a;使用Platform 开发ESP32-S3 报错通过串口打印报错提示为核心闪存损失具体报错如下。 ELF file SHA256: 25c739c3d81d8f15 E (183) esp_core_dump_flash: Core dump flash config is corrupted! CRC0x7bd5c66f instead of 0x0 Rebooting... ESP-ROM:esp32s3…

Python项目——表白照片墙

1、介绍 利用女神的照片&#xff0c;组成女神的名字&#xff0c;向女神表白。如下图&#xff1a; 原理&#xff1a;获取每个像素点的颜色&#xff0c;白色不贴图&#xff0c;黑色贴图。 2、工具 语言&#xff1a;python3.11编译器&#xff1a;PyCharm包&#xff1a;pygame p…

【IOS开发】传感器 SensorKit

资源 官方文档 https://developer.apple.com/search/?qmotion%20graph&typeDocumentation SensorKit 使应用程序能够访问选定的原始数据或系统从传感器处理的指标。 步骤信息加速度计或旋转速率数据用户手腕上手表的配置物理环境中的环境光有关用户日常通勤或旅行的详细…

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案

使用技术&#xff1a; Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台&#xff1a; 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务&#xff08;30个通用微服务如&#xff1a;商品、订单、购物车、个人中心、支…

项目实操四-性能测试过程实时监控分析

这里写目录标题 一、JMeter性能测试技巧1、CSV文件驱动2、定时器a、泊松随机定时器b、固定定时器c、高斯随机定时器d、均衡随机定时器e、同步定时器f、固定吞吐量定时器g、精准吞吐量定时器 3、全局变量 - 跨线程数据传递4、Debug调试器5、JMeter执行机端口被占用 二、JMeter性…

Linux集群实用脚本

现有三台虚拟机&#xff0c;例如&#xff1a;node2、node3、node4 三台虚拟机配置了免密登录&#xff0c;安装了hadoop等软件。 相关集群实用脚本命令 统一执行jps命令 jpsall #!/bin/bash ​ for host in node2 node3 node4 doecho $host ssh $host jps done ​ 统一执行命…

JVM日常故障排查小结

前置知识 jstack简介 jstack是JVM自带的工具&#xff0c;用于追踪Java进程线程id的堆栈信息、锁信息&#xff0c;或者打印core file&#xff0c;远程调试Java堆栈信息等。 而我们常用的指令则是下面这条: # 打印对应java进程的堆栈信息 jstack [ option ] pid option常见选…

AI摄影绘画与PS优化:重塑数字艺术的未来

文章目录 《AI摄影绘画与PS优化从入门到精通》内容简介作者简介楚天 目录前言/序言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的各个领域&#xff0c;包括艺术创作。AI摄影绘画和Photoshop&#xff08;PS&#xff09;优化是这个领…