本文主要面向需要在自己系统中集成视频会议的读者。
原文发布在 腾讯云计算社区https://cloud.tencent.com/developer/article/1923349,如果论坛存在排版问题,可以到原文观看。
客户要求在页面中集成视频会议功能,本来刚开始准备直接用腾讯云的服务来实现,但是客户说他们完全是一个不能访问互联网的局域网的环境,因此需要部署一个自托管的视频会议服务器,并且这个视频会议服务器需要提供相应的接口来和自己的项目集成。经过一些调研,发现了一些不错的第三方开源的项目。今天介绍的是其中的一个openvidu,其采用的是WEBRTC技术, 功能基本上可以满足我们目前的需要,而且采用Docker部署的话也十分方便。
openvidu虽然自身也提供了视频会议的Web页面,但是十分简陋,其主要还是面向的开发用户,用来在自己开发的系统中集成视频会议功能。
前期的测试主要还是在公网环境下运行,因此需要采购一台公网的服务器来做开发测试使用。根据官网的要求,服务器配置至少需要2核CPU以及8G的内存配置,并且需要充足的带宽。基于成本考虑,我们最终购买了腾讯云轻量服务器的4核8G10M带宽配置,后续都基于这个服务器进行部署搭建。
由于浏览器安全协议的限制,除了使用localhost地址访问以后,浏览器会禁止HTTP协议的页面使用摄像头。因此下面的过程中需要配置证书。openvidu支持自己配置证书,也支持使用letsencrypt自动签发证书。如果使用letsencrypt自动签发证书的话,需要使用域名指向服务器IP,使用国内的服务器域名需要备案。如果没有备案的域名的话,可以选择购买同配置香港的轻量服务器。
购买服务器
如果没有服务器的话,需要先购买一台腾讯云的轻量服务器。
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、小程序/小游戏、电商、云盘/图床以及各类开发测试和学习环境,相比普通云服务器更加简单易用,提供高带宽流量包并以套餐形式整体售卖基础云资源,将热门开源软件融合打包实现一键构建应用,是您使用腾讯云的最佳入门途径。为了方便安装应用,我们需要准备Docker环境。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。使用docker来部署应用是非常简单的,一般情况下,只需要一行命令即可完成。
腾讯云经常举办各种活动,可以点击这里进入他们的活动页面进行购买(注意根据官网要求,配置至少要求为8G以上),可以选择距离最近的区域购买,不过不想备案的话,可以选择境外的服务器(比如香港区域)进行购买。镜像的话,选择【官方镜像】下的【docker基础镜像】,实例套餐选择适合自己的,然后提交订单,付款即可。如果不选择【Docker基础镜像】,后面需要自行安装docker容器。
安装docker以及docker-compose
如果没有选择docker基础镜像,则需要自行安装docker镜像。这里假设使用的Ubuntu系统。安装docker的步骤如下
- sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
然后安装docker-compose
- sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
配置安全组
视频会议功能内部采用WEBRTC技术,会使用比较多的端口,因此需要在轻量服务器的防火墙策略上放行相应的端口,目前官网上要求开放的端口如下。
22 TCP: SSH端口
80 TCP: HTTP端口
443 TCP:HTTPS端口
3478 TCP+UDP: TURN服务器端口,TURN服务器是在视频双方无法直接建立点对点连接时进行流量转发使用
40000 - 57000 TCP+UDP: Kurento Media Server建立媒体连接的端口
57001 - 65535 TCP+UDP: TURN服务器建立媒体连接的端口。
除此之外,请确保这些端口80, 443, 3478, 5442, 5443, 6379 和 8888不能被占用
如果嫌麻烦而且仅仅是测试环境使用,可以直接放行所有的端口。
域名解析
将要使用的域名解析到服务器的IP上。如果使用的是国内的服务器,域名需要备案。如果没有备案的域名,需要选购香港的服务器。或者也可以不使用域名,直接使用IP。直接使用IP的话,需要自己来签发并配置证书并配置浏览器信任证书。
开始安装部署
准备工作做完以后,就可以开始下载安装了。默认在/opt目录下进行安装
首先进入到/opt目录下
- cd /opt
然后使用openvidu提供的脚本进行安装
- curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_latest.sh | bash
由于政策原因,在国内服务器上可能下载会失败,可以先在科学上网的环境下安装好,然后把相应的文件上传到服务器的安装目录里。
进入到 openvidu目录里
- cd /openvidu
使用熟悉的工具来编辑.env文件,本文档中使用letsencrypt来自动签发证书(ov的默认选项),只需要修改下面几项配置。
- DOMAIN_OR_PUBLIC_IP=自己的域名
OPENVIDU_SECRET=xxxxxx #密钥,换成一个安全系数高的
LETSENCRYPT_EMAIL=xx@xx.com #换成自己的邮箱
或者不使用letsencrypt签发证书,来自行配置证书。具体配置方法在.env文件中有详细说明。
- # OpenVidu configuration
# ----------------------
# Documentation: https://docs.openvidu.io/en/stable/reference-docs/openvidu-config/
# NOTE: This file doesn't need to quote assignment values, like most shells do.
# All values are stored as-is, even if they contain spaces, so don't quote them.
# Domain name. If you do not have one, the public IP of the machine.
# For example: 198.51.100.1, or openvidu.example.com
DOMAIN_OR_PUBLIC_IP=
# OpenVidu SECRET used for apps to connect to OpenVidu server and users to access to OpenVidu Dashboard
OPENVIDU_SECRET=
# Certificate type:
# - selfsigned:Self signed certificate. Not recommended for production use.
# Users will see an ERROR when connected to web page.
# - owncert: Valid certificate purchased in a Internet services company.
# Please put the certificates files inside folder ./owncert
# with names certificate.key and certificate.cert
# - letsencrypt: Generate a new certificate using letsencrypt. Please set the
# required contact email for Let's Encrypt in LETSENCRYPT_EMAIL
# variable.
CERTIFICATE_TYPE=selfsigned
# If CERTIFICATE_TYPE=letsencrypt, you need to configure a valid email for notifications
LETSENCRYPT_EMAIL=user@example.com
热议
推荐楼 lixiaofei
此命令会拉取并启动相应服务的docker镜像,执行完毕后,用docker ps可以看出启动的容器
启动完毕后,访问https://xxx.xxx.xxx.xxx:port验证服务器。
如果打开看到下面的页面,说明成功了50%。
然后在标签页多打开页面,都加入同样的房间,来测试效果。如果看到下面的画面,说明配置已经成功。
与自己的系统集成
openvidu提供了各种语言和框架的SDK,包含服务端和客户端,并且提供了大量的可以直接复制粘贴的例子来使用。只要把上面的服务配置好了,只需要花十几分钟,就可以集成到自己的系统中。
官方例子提供的github地址是 https://github.com/OpenVidu/openvidu-tutorials
提供的例子有
下面是我在自己VUE项目中集成的效果图,核心代码都是直接复制的例子的。
算了,还是不放自己项目的图了,反正就是集成起来很容易
说的最后
openvidu是一个非常优秀的开源视频会议服务器,腾讯云轻量服务器也是一个性价比非常高的服务器,两者的配合相得益彰。你们还知道有哪些类似的开源视频会议服务,也来推荐一下吧。
3楼 阿森博客 7天前
虽然看不懂 但是技术贴帮顶
4楼 度百 7天前
虽然看不懂,但是很厉害
5楼 lixiaofei 7天前
虽然看不懂,但是很厉害
6楼 shc 7天前
8G内存能同时支持多少用户同时开会?之前装过Jitsi Meeting, 8个用户差不多16G内存都不太够,后来直接换成Zoom了
7楼 875 7天前
看起来好厉害、、、
8楼 lixiaofei 7天前
8G内存能同时支持多少用户同时开会?之前装过Jitsi Meeting, 8个用户差不多16G内存都不太够,后来直接换成Z ...
也有官方的性能测试
https://openvidu.medium.com/openvidu-load-testing-a-systematic-study-of-openvidu-platform-performance-b1aa3c475ba9
9楼 rem 7天前
又见软文。局域网需求为什么在公网测试?
10楼 lixiaofei 7天前
又见软文。局域网需求为什么在公网测试?
最终是在局域网中部署。前期测试的话,线上部署后方便和甲方一块测试
12楼 lixiaofei 7天前
rem 发表于 2021-12-23 13:06
线上只能测连通,比较资源有限,局域网一定程度上不需要考虑带宽问题,只需要往上堆硬件资源,还是得局域 ...
这个明白。谢谢指导
13楼 akkba 7天前
不错,最近也在研究用哪个,目前看了Jitsi
14楼 lixiaofei 7天前
不错,最近也在研究用哪个,目前看了Jitsi
一起学习下,我的项目工期比较紧,没时间一个一个去调研测试。找了一个测试可以用就直接用了。
15楼 lixiaofei 7天前
16楼 wjbdada 7天前
好厉害,榜单顶
17楼 战斗小猪侠 7天前
线上只能测连通,比较资源有限,局域网一定程度上不需要考虑带宽问题,只需要往上堆硬件资源,还是得局域 ...
srs 用过怎么样?最近 正在找这相关的
18楼 八神庵 7天前
'干货,支持
19楼 lixiaofei 6天前
顶顶更健康
20楼 vne 6天前
牛呀大佬
22楼 lixiaofei 9小时前
23楼 lixiaofei 11分钟前
申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。
评论前必须登录!
立即登录 注册