本文记录个人在 Ubuntu 16.04
和 Centos 7
环境下 mediasoup
部署过程,主要涉及编译环境搭建,依赖模块安装,公网 IP
和端口配置以及 HTTPS
设置等关键步骤。
基础信息
操作系统和 nodejs 版本信息
操作系统配置信息:Centos 7
版本信息:
CentOS Linux release 7.4.1708 (Core)
Ubuntu 16.04
版本信息:
Ubuntu 16.04.7 LTS
gcc 5.4.0 20160609
g++ 5.4.0 20160609
Nodejs 和 npm
版本信息:
Node: v10.15.2
NPM: 6.4.1
Centos GCC 升级
因 mediasoup 编译要求 GCC
版本大于 4.8
,但 Centos 7.4
通过 yum
安装的 GCC
版本为 4.8.5
,不能够直接编译 mediasoup
使用的 mediasoup-worker
程序。所以,需要对 GCC
版本进行升级处理。具体的操作步骤如下:
安装
SCL
1
yum install -y centos-release-scl
安装
GCC
1
yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
启动
GCC
(临时)1
scl enable devtoolset-9 bash
完成
mediasoup-worker
程序编译后,请关闭shell
终端,不再使用9.3.1
版本GCC
,因为SCL
仅升级了GCC
版本,并未升级libstdc++
和libc
依赖库。如果继续使用9.3.1
版本GCC
将导致mediasoup-worker
程序在启动时找不到高版本的库函数,例如提示libstdc++.so.6: version
GLIBCXX_版本号’ not found 和 libc.so.6: versionGLIBC_版本号' not found
。个人因为永久启动高版本GCC
,差点对libstdc++.so.6
升级处理。
python 升级
mediasoup
要求 python
版本高于 3.7
,因此需要对 python
进行升级:
1 | add-apt-repository ppa:deadsnakes/ppa |
生成自签名 HTTPS
证书
使用如下名称生成 HTTPS
协议使用的公钥和私钥对,其中key表示私钥,crt表示公钥。
1 | openssl req -new -newkey rsa:1024 -x509 -sha256 -days 3650 -nodes -out fullchain.pem -keyout privkey.pem |
生成证书后,将证书和私钥文件复制到 mediasoup-demo/server/certs
目录下。
mediasoup 部署
克隆项目:
1
2
3git clone https://github.com/versatica/mediasoup-demo.git
cd mediasoup-demo
git checkout v3安装
Server
1
2cd server
npm install该步骤会下载
node
需要的node_modules
,其中c++
部分的mediasoup
代码会下载到mediasoup-demo/server/node_modules/mediasoup
目录下,这个目录其实就是mediasoup
,这个项目worker
目录下是c++
,修改后直接make
就可以。
如果使用 npm install
安装 server
的 mediasoup
失败,可考虑使用如下操作方式:
1 | # 设置 npm 安装源为淘宝源 |
安装浏览器
app
1
2
3
4cd app
npm install
# 若安装失败,尝试执行如下命令安装:
npm install --unsafe-perm全局安装
gulp
1
npm install -g gulp-cli
配置修改
服务端配置
复制 mediasoup-demo/server/config.example.js
重命名 config.js
,修改后的配置文件示例如下:
1 | /** |
主要包括修改 HTTPS
监听端口为 15025,RTP
传输端口范围为 15026~15038
,并设置公网IP,其中 192.168.104.8
表示部署机器 IP
地址,10.12.13.14
表示公网 IP
地址。
若使用默认端口,因为在环境变量中没有对 MEDIASOUP_LISTEN_IP
和 MEDIASOUP_ANNOUNCED_IP
进行设置,所以,需要将 config.js
中的 0.0.0.0
的 IP
地址进行设置,否则实时视频通话会失败。在默认端口情形下,配置设置类似如下:
1 | listenIp : |
客户端配置
因为客户端默认监听在 3000 端口,当需要更该客户端默认监听端口时,需在 mediasoup-demo/app/gulpfile.js
文件中的 browserSync
添加端口配置,具体方式如下:
1 | browserSync( |
因服务器端将 HTTPS
监听端口设置为 15025,所以客户端代码亦需要修改对应端口,修改 mediasoup-demo/app/lib/urlFactory.js
文件中的端口:
1 | let protooPort = 15025; |
修改完成后,在 mediasoup-demo/app
路径下执行 gulp
命令打包客户端代码。客户端代码打包成功后,前端客户端页面会发布到 mediasoup-demo/server/public
路径下。
完成配置修改后,客户端将对 15024
端口进行监听服务。
Nginx
发布 app
为简化 app
的发布,因此使用 nginx
部署 HTTPS
服务器,发布客户端。
其中 /home/mediasoup/mediasoup-demo/server/public
目录为客户端发布目录。nginx
配置如下所示:
1 | worker_processes auto; |
服务运行
启动 mediasoup
使用 nohup
方式启动 mediasoup
后台运行,因某些云服务器在关闭 shell
终端时,同样也会结束 nohup
运行的进程,需要执行 exit
命令退出。
1 | cd mediasoup-demo/server/ |
启动 nginx
启动 nginx
服务器,发布客户端。
1 | /opt/nginx/sbin/nginx |
测试
打开浏览器,输入 https:\\10.12.13.14:15024
进入房间。