10分钟快速搭建多方视频会议系统

news/2024/12/5 6:16:56/

目录

1、概述

2、环境准备

2.1安装docker

2.2下载docker-compose

2.3Linxu内核参数调优

3、安装运行

3.1拉取docker镜像

3.2运行目录准备

3.3生成测试证书

3.4获得服务器License字串

3.5编辑docker-compose的配置文件

3.6启动服务器

4、测试验证


1、概述

想搭建一个自己的视频会议系统吗?本文将指导你一步一步从零开始搭建一个视频会议系统。

webrtc技术是目前业内最流行的音视频传输技术,最初接触音视频开发的同学使用webrtc客户端,可以快速的实现点对点视频聊天。不过在实际使用过程中,通常需要多方视频通话。因此,除了webrtc客户端以外,还需要一个webrtc服务端来为参与通话的各方提供视频的转发服务。关于webrtc服务端的更详细的技术介绍,本专栏将持续更新。

想要了解多方视频会议系统,最好的方法莫过于亲自搭建一套来玩玩。下面将介绍如何快速搭建。rtcms一个基于webrtc的多功能媒体服务器,可为多种终端(webrtc,sip,rtmp,hls等)提供音视频服务,即稳定可靠,也开放免费,不光可用于视频会议,视频客服等视频通话场景,也可以用于直播,安防,教育,AI图像传输,游戏服务器等场景。搭建过程非常简单,我们来开始吧:

2、环境准备

首先我们要找一台机器作为服务端。服务端可以选择多种操作系统,如Centos,Ubuntu,Windows server或者Win10。我已经将rtcms发布到dockerhub上,因此最快的方式是基于docker来安装运行。

下面我以Ubuntu/Centos等Linux服务器为例:

2.1安装docker

linux服务器中安装docker网上有很多指导,这里我们用最简单的官方安装脚本的方式。如果你的网络环境比较“科学”,那可以用root用户执行:

#curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

如果是普通网络条件,可以用下面的国内镜像方式:

#curl -sSL https://get.daocloud.io/docker | sh

2.2下载docker-compose

docker-compose是一个docker容器管理工具,实际应用的比较多,使用也很方便,安装过程非常简单,是个绿色软件,用curl下载下来后改个名字,赋上可执行权限就可以了(呃,希望你的网络能正常访问github...),本文将它放到/usr/local/bin/下是为了不用配置PATH环境变量就可以直接使用这个工具。

#curl -L "https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#chmod +x /usr/local/bin/docker-compose

到目前为止,如果只是自己测试感受一下,环境就已经完毕了。当然,如果是正式用于生产环境,最好再对linux的内核参数进行一下调优。

2.3Linxu内核参数调优

#vi /etc/sysctl.conf

将sysctl.conf文件的内容替换为:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.accept_source_route = 0
net.core.somaxconn = 2048
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.unix.max_dgram_qlen = 65535
net.ipv4.tcp_syncookies = 1
kernel.sem = 250 32000 100 128
kernel.shmmax = 629145600
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.msgmnb = 65536
kernel.msgmni = 2878
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_default = 262144
net.core.wmem_max = 2097152
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
vm.hugetlb_shm_group = 1000
vm.max_map_count=655360

3、安装运行

rtcms有单机和集群两种运行方式,最简单的是单机运行方式。本文介绍单机下如何运行,对于集群方式,放在后续文章中介绍。

3.1拉取docker镜像

使用docker pull命令,在root用户下用下面命令格式从dockerhub上拉取镜像:

#docker pull zwancqcn/rtcms

等待一段时间,等镜像拉取完成后,可以使用下面命令查看到镜像:

docker images

正常情况下,可以看到名称为zwancqcn/rtcms的镜像信息:

REPOSITORY          TAG          IMAGE ID            CREATED             SIZE
zwancqcn/rtcms      2.7          e284c2a5b51f        7 days ago          2.48GB

3.2运行目录准备

在服务器上找一个运行根目录,本文以/home/rtcms目录为例,创建需要的目录结构:

#mkdir -p /home/rtcms/nginxcerts
#mkdir -p /home/rtcms/nginxlog
#mkdir -p /home/rtcms/oamlog
#mkdir -p /home/rtcms/rtcmslog
#mkdir -p /home/rtcms/record

对这几个目录做个解释:

nginxcerts子目录:由于chrome、firefox等现代浏览器的安全要求,webrtc应用必须运行在https方式下,因此docker容器内部使用了nginx来发布https服务。nginx的https证书存放到nginxcerts目录下。

nginxlog子目录:存放nginx的日志文件。

oamlog子目录:docker容器内部使用springboot来提供了rtcms管理台的后台服务。oam的日志存放在该目录中。

rtcmslog子目录:rtcms核心程序的日志目录,包含rtcms中用C/C++编写的所有核心模块的日志。

record目录:存放录像、断流图片等媒体文件的目录。

在准备好目录后,下面在nginxcerts目录下来生产nginx所需要的证书。如果你的服务器有域名并且有相应的ssl证书,那直接放到nginxcerts子目录中即可。如果没有,为了测试需要,需要自己做一个测试证书,步骤如下:

3.3生成测试证书

首先安装openssl,以ubuntu为例,用apt安装:

#apt install openssl

在nginxcerts子目录创建根证书,首先需要一个私钥,用下面命令创建:

#openssl genrsa -out /home/rtcms/nginxcerts/ca-key.pem 1024

创建根证书请求:

#openssl req -new -out /home/rtcms/nginxcerts/ca-req.csr -key /home/rtcms/nginxcerts/ca-key.pemCountry Name (2 letter code) [AU]:cn 
State or Province Name (full name) [Some-State]:cq 
Locality Name (eg, city) []:cq
Organization Name (eg, company) [Internet Widgits Pty Ltd]:test
Organizational Unit Name (eg, section) []:test 
Common Name (eg, YOUR name) []:root 
Email Address []:test
A challenge password []:
An optional company name []:

生成自签名根证书:

#openssl x509 -req -in /home/rtcms/nginxcerts/ca-req.csr -out /home/rtcms/nginxcerts/ca-cert.pem -signkey /home/rtcms/nginxcerts/ca-key.pem -days 3650

创建完根证书后,继续创建服务器证书私钥:

#openssl genrsa -out /home/rtcms/nginxcerts/server-key.pem 1024

创建服务器证书请求:

#openssl req -new -out /home/rtcms/nginxcerts/server-req.csr -key /home/rtcms/nginxcerts/server-key.pemCountry Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:cq
Locality Name (eg, city) []:cq
Organization Name (eg, company) [Internet Widgits Pty Ltd]:test 
Organizational Unit Name (eg, section) []:test
Common Name (eg, YOUR name) []:192.168.1.246   # 注释:一定要写服务器所在的ip地址
Email Address []:test
A challenge password []:
An optional company name []:

生成自签名服务器证书:

#openssl x509 -req -in /home/rtcms/nginxcerts/server-req.csr -out /home/rtcms/nginxcerts/server-cert.pem -signkey /home/rtcms/nginxcerts/server-key.pem -CA /home/rtcms/nginxcerts/ca-cert.pem -CAkey /home/rtcms/nginxcerts/ca-key.pem -CAcreateserial -days 3650

3.4获得服务器License字串

rtcms需要配置License字符串才能正常启动,license机制并非意味这rtcms需要付费,主要是获得用户联系方式方便后续更好的提供支持。通过以下的docker命令获得服务器硬件指纹字符串:

#docker run --rm --net=host --name=rtcms -v /dev/disk/by-uuid:/dev/disk/by-uuid zwancqcn/rtcms:2.0starting rtcms
Machine ID:GenuineIntel-1F8BFBFF-00050657-00000000-00000000Diskid:0070121e-e6fb-4b06-afdc-15c65fcac9d67fe02849-d810-401f-b7f8-e5782ca5939d
missing module type, exit with error

执行docker run命令后出现类似上面的输出,Machine ID后面的字符串 GenuineIntel-1F8BFBFF-00050657-00000000-00000000Diskid:0070121e-e6fb-4b06-afdc-15c65fcac9d67fe02849-d810-401f-b7f8-e5782ca5939d 就是服务器硬件指纹。

访问 https://meeting.zwan.com.cn:2337/#/web/license ,在机器码字段中输入服务器硬件指纹字符串,其它字段可以填你的联系方式,也可以随便填。提交后将获得license字符串,拷贝下来供下一步使用。

3.5编辑docker-compose的配置文件

在/home/rtcms运行根目录中新建docker-compose.yml配置文件,参考下面内容,需要改的就是把几个IP字段更改为你的服务器IP,另外填写上license字串就可以了:

version: '3'services:rtcms:container_name: rtcms-appimage: zwancqcn/rtcms:2.0network_mode: "host"    environment:#Module type: rtcgw|zwmp|allType: "all"     #单服务器固定为all#Module configurationModuleID: "1"ModuleIP: "192.168.1.100"      #填写成此服务器私网IP地址ModulePort: "2339"License: "MzM4ZTg0MGRiZWEyMDVjNmFiYWVhYTA5OTE4MmY0YTAg"  #填写上一步获得的licensePublicIP: "192.168.1.100"       #填写成此服务器的公网IP地址,如果是测试,填写私网IP即可#RTCGW Module configuration      WSPort: "2338" //信令websocket的tcp端口,docker内部使用,不用在防火墙上开放给客户端网络StunPort: "2331" //stun端口,tcp和udp同时监听,需要在防火墙上开放给客户端网络LOGPort: "2336" //维护websocket的tcp端口,docker内部使用,不用在防火墙上开放WEBPort: "2337" //对外的https和wss服务端口,需要在防火墙上开放给客户端网络SIPPort: "2333" //对外的sip服务端口,如果需要接入sip线路和终端,则需要开放,否则无用WEBCertPem: "server-cert.pem"    //上一步生成的服务器测试证书WEBCertKey: "server-key.pem"     //上一步生成的服务器测试证书key#ZWMP Module net configurationRtcgwModuleID: "1"RtcgwModuleIP: "192.168.1.100"   #填写成此服务器私网IP地址RtcgwModulePort: "2339"      ZwmpStunIP: "192.168.1.100"      #填写成此服务器私网IP地址ZwmpStunPort: "2331"  //和StunPort一致RTMPPort: "2334"      //rtmp服务端口,tcp,如果不需要rtmp服务,可忽略AudioPortMin: "44000" //sip音频媒体端口段,不需要sip终端接入时可忽略AudioPortMax: "44299" VideoPortMin: "44300" //sip视频媒体端口段,不需要sip终端接入时可忽略VideoPortMax: "44599" WebrtcPortMin: "44600" //webrtc视频媒体端口段,需要在防火墙上开放给客户端网络WebrtcPortMax: "44999"#ZWMP Module parameterAudioChanNum: "100"  //音频通道数VideoChanNum: "100"  //视频通道数AudioThreadNum: "2"  //音频线程数,如果是8核cpu服务器,可选2,即用2个内核跑音频线程VideoThreadNum: "6"  //视频线程数,如果是8核cpu服务器,可选6,即用6个内核跑视频线程NoStreamPicFile: "nostream.bmp"  //MCU会议模式时,如果终端未推流,则用这个图片代替视频volumes:- "/dev/disk/by-uuid:/dev/disk/by-uuid"- "/home/rtcms/rtcmslog:/home/rtcms/log"#RTCGW- "/home/rtcms/oamlog:/home/rtcms/web/oam/log"- "/home/rtcms/nginxlog:/home/rtcms/web/nginx/logs"- "/home/rtcms/nginxcerts:/home/rtcms/web/nginx/certs"#ZWMP- "/home/rtcms/record:/home/rtcms/record"   //录像文件保存路径privileged: true

3.6启动服务器

在运行服务器根目录运行下面命令启动docker容器:

#cd /home/rtcms
#docker-compose up -d

可以通过docker ps命令查看运行中的容器,也可以通过执行容器中的show命令来查看到核心进程,正常情况下应该由7个进程,至此,服务器就启动完成了,见下:

#docker psCONTAINER ID        IMAGE                COMMAND                CREATED             STATUS              PORTS               NAMES
67568d2727ac        zwancqcn/rtcms:2.0   "/bin/bash -c start"   46 hours ago        Up 14 minutes                           rtcms-app#docker exec -it $(docker ps -q) su - rtcms -s /bin/bash -c "show"
rtcms      228     1  0 14:12 ?        00:00:00 zwdog
rtcms      426     1  0 14:12 ?        00:00:00 zwstart
rtcms      509     1  0 14:12 ?        00:00:00 zwcomm
rtcms      514     1  0 14:12 ?        00:00:01 rtcgw
rtcms      520     1  0 14:12 ?        00:00:01 turnserver
rtcms      526     1  0 14:12 ?        00:00:00 logserver
rtcms      532     1 13 14:12 ?        00:01:18 zwmp

如果发现进程少于7个,请使用docker stop $(docker ps -q)命令停止,检查yml配置文件,特别是license字串是否拷贝完整,在通过docker-compose来启动。

4、测试验证

rtcms是个开放的系统,所有代码将逐步开源,目前开源了客户端,用户可以下载客户端sdk进行二次开发。在前面启动的docker容器中提供了oam后台管理页面和一个测试页面,该测试页面有完善的视频会议功能。

通过chrome、firefox、edge等支持webrtc的现代浏览器,在一台带有摄像头和麦克风的电脑上访问: https://[你服务器的IP]:2337/demo即可访问到服务器oam界面,用户名和密码都填admin即可登录进oam主页面:

在左侧菜单中点击“在线demo”,可跳转到docker提供的远程协助视频会议应用界面:

用户名和密码随意输入即可登录进demo主界面:

点击创建会议,填写会议名称,选择本机的麦克风和摄像头设备,即可创建一个视频会议。注意,第一次运行浏览器会提示是否允许本网站使用麦克风和摄像头设备,请选择允许:

为了达到最佳显示效果,请选择你电脑上的摄像头的最大分辨率,通常笔记本电脑的最大分辨率是720P,外接的高清摄像头分辨率是1080P。

其它参数的解释可以参考本专栏后续文章。

点击创建会议按钮,此时你应该可以看到摄像头已经被打开,并且出现了画面了。

 此画面是从服务器上传输回来。你可以使用其它pc机访问同样的服务器地址,加入你刚刚创建的房间,此时,你们应该可以开始进行视频通话了。


http://www.ppmy.cn/news/264715.html

相关文章

视频会议系统gk服务器,详解华为视频会议系统中信令之间如何实现跨GK呼叫

跨越华为视频会议系统中GK的终端呼叫流程与在之前的基础上,只是增加了视频会议系统中的2.LRQ与3.LCF两个信令消息交互,其他信令交互与上述交货过程相同,本篇文章不再单独叙述。 2.LRQ:定位请求,通过GK路由前缀(类似如区…

视频会议系统gk服务器,华为视频会议系统中的终端如何通过GK发起呼叫

细心同学会问,为什么到现在华为视频会议系统里的终端都还没有向GK注册流程呢?及时发送RRQ这些子信令与GK交互?那是因为在视频会议系统中用这种方式呼叫时,之前就已经在终端上有过注册GK的流程了,换句话说,就…

视频会议服务器维护,视频会议系统一般故障与应对措施

摘 要:随着社会现代化的发展,我国各个领域的改革逐渐深入,技术不断创新,而视频会议系统作为新型技术,越来越广泛被运用于各领域。利用视频会议系统,为用户提供全方位的服务,在视频会议中依托互联网技术搭建媒体平台,给用户带来的便利,对国家的发展有重要影响,但是在使用过程…

前端面试:常见的Web安全问题解答

Web安全是前端开发中必须了解的重要领域。在面试过程中,面试官通常会询问与Web安全相关的问题。以下是常见的Web安全问题的解答,希望能对前端开发者的面试有所帮助。 什么是跨站脚本攻击(XSS)? 跨站脚本攻击是一种利…

PDCCH monitoring capability

欢迎关注同名微信公众号“modem协议笔记”。 前段时间看search space set group (SSSG) switching相关内容时,注意到R17和R16的描述由于PDCCH monitoring capability的变化,内容有些不一样。于是就顺带看了下R16 R17PDCCH monitoring capability的内容。…

带你探索400G光模块测试

随着移动互联网、云计算、大数据等技术快速发展,数据中心及云计算资源需求的爆发式地增长,核心网传输带宽需求大幅度的提升,同时也带动了超大规模云数据中心的发展,对数据中心内部和之间的互联的光模块带宽需求呈快速增长&#xf…

搜狗输入法 for Mac V6.6.0.13588官方版

搜狗输入法Mac版支持全拼、双拼、模糊输入、苹果输入、云输入、自动同步、繁体输入,还有超强组词算法,词库大,打字快,手感流畅,可以直接使用搜狗拼音输入法的数万款静态皮肤。搜狗输入法使用率占比46.9%,位…

linux双拼输入法,百度输入法Linux版下载:支持在Ubuntu下用全拼、双拼、五笔

百度输入法Linux版发布下载了,已提供Ubuntu_Deepin-fcitx-baidupinyin-64.zip包下载,支持Ubuntu 18.04/18.10/19.04/19.10和Deepin 15.10/15.11操作系统,也能用在Deepin V20上,可在支持的操作系统中使用全拼、双拼、五笔。 简介 百…