目录

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机访问同样的服务器地址,加入你刚刚创建的房间,此时,你们应该可以开始进行视频通话了。

10分钟快速搭建多方视频会议系统相关推荐

  1. 转载文章-【工具】10分钟快速搭建属于自己的文档网站-来自掘金

    掘金 首页 探索掘金 搜索 lvhanghmm的头像 Gopal lv-4 2021年03月09日 阅读 9930 关注 [工具]10分钟快速搭建属于自己的文档网站 前言 很多同学都希望能够拥有自己的 ...

  2. 10分钟快速搭建自己的服务器

    快速搭建服务器 1.创建虚拟机 2.CentOS 7的安装 3.CentOS 7 配置 4. Xshell连接 5.Docker的安装 前言:买了个阿里云的服务器,但是由于内存小docker运行几个容 ...

  3. 【开发篇】10分钟快速搭建React后台管理系统模板

    React后台管理系统模板 github 我又回来了!!!学完前端react,再学spring,这周或者下周写spring有关的!!! 一.准备React 1.建立react应用 npx create ...

  4. centos6 10分钟快速搭建iscsi存储服务器

    1.系统架构 2.安装软件 yum list | grep target yum -y install scsi-target-utils.x86_64 3.修改配置文件 先准备一个硬盘进行分区 /d ...

  5. 10分钟快速搭建实战Web项目:生鲜电商

    生鲜电商环境搭建 生鲜电商环境搭建 软件环境准备 登录宝塔 上传源码文件 创建数据库 开放端口 导入数据 修改配置文件 宝塔面板配置网站 登录生鲜电商 权限获取 登录生鲜官网 登录后台 生鲜电商环境搭 ...

  6. ESP8266 Non-OS SDK 开发之旅 基础篇① 初识 Non-OS SDK,史上超级详细手把手教小白20分钟快速搭建SDK软件开发环境,完成第一个例子Hello World!

    文章目录 1.前言 2. SDK概述 2.1 SDK使用流程 2.2 ESP8266 HDK -- 硬件开发工具 2.3 ESP8266 SDK -- 软件开发工具包 2.3.1 Non-OS SDK ...

  7. 【工具篇】10分钟快速学会React图表搭建

    10分钟快速学会React图表搭建 本次紧着之前的antd,接着学习有关react图表以及富文本编辑器的搭建. 本次的功能实现基于上次的[工具篇]10分钟学会Ant Design of React用法 ...

  8. 【华为云技术分享】10分钟快速在华为云鲲鹏弹性云服务器上部署一个自己的弹幕网站!

    摘要:从零代码开始,10分钟快速开发一个可以发送弹幕的网站,并将其部署在华为云服务器上:学完本期教程,将知道如何使用Nginx.如何将自己的网站部署到云服务器上. 直播相信大家都不陌生了吧,大家经常会 ...

  9. 使用Elasticsearch快速搭建食谱搜索系统

    搜索是一个网站的基础功能,一个好的搜索系统可以直接促进页面访问量的提升,目前流行的搜索系统方案都是基于开源的Elasticsearch和Solr搭建.本文以食谱搜索场景为例,介绍如何利用阿里云Elas ...

  10. 30分钟快速搭建移动应用直传OSS服务

    30分钟快速搭建移动应用直传服务 背景 这是一个移动互联的时代.手机APP上传的数据会越来越多.把数据存储的问题交给OSS, 让开发者能更加专注于自己的应用逻辑. 那么怎么样基于OSS构建一个APP存 ...

最新文章

  1. github READme 的使用教程
  2. python编程,外星人飞船
  3. Java开发知识体系!我用2个月的时间破茧成蝶
  4. Shell脚本自动监控docker容器的状态
  5. mysql知识思维导图
  6. SqlServer2012下载+安装+启动(资源+密钥)
  7. 你知道有哪些超级好用的网盘存储吗?
  8. gst-rtsp-server 开源包的说明
  9. Java Io中涉及到的类和涉及模式
  10. 程矢Oracle PowerDesigner中生成Oracle版本主键和自增列
  11. 程序员后来都干啥去了
  12. Delphi 中资源文件使用详解
  13. Android 10.0 当安装多个播放器时,设置默认播放器播放歌曲
  14. 百度编辑器上传视频以及视频编辑器预览bug解决
  15. [转] 菜鸟手脱VMP,附上脱壳过程和自己写的脚本,可跨平台
  16. 全国各地运营商dns列表(供查询)
  17. Asp.net 微信H5唤起支付和支付回调
  18. 创客筑梦,第二届机智云智能硬件36小时开发大赛圆满落幕
  19. Python+Django毕业设计郑州市智慧农贸市场管理系统(程序+LW+部署)
  20. Pandas:时间数据的季节分析

热门文章

  1. 杭州电子科技大学计算机网络考研,2017杭州电子科技大学计算机网络考研大纲...
  2. 【AutoCAD】04.直线类命令
  3. L337. 打家劫舍 III
  4. 24V电压TVS二极管选型
  5. 将阳历转换为阴历php,php将阳历转换为阴历
  6. R语言笔记--par()函数详解
  7. java 数独算法_[Java] 数独生成和求解
  8. 产品研发项目管理软件哪个好? 1
  9. 电脑自动跳出计算机管理员登陆界面,解决运行wegame总是弹出用户账户控制界面的方法...
  10. 第五章---面向对象---小练习