centos7.9搭建mediasoup-demo环境
安装前准备服务器环境
在ubuntu和centos8上都很容易搭建mediasoup-demo项目,但在centos7很难安装上,在此记录centos7.9上搭建mediasoup。
本次搭建centos7.9所需环境:
依赖 | 版本 |
---|---|
gcc | 8.3.1 |
python3 | 3.8.12 |
node | 14.19.3 |
gcc
gcc需升级到4.9版本以上 ,本次安装使用版本为gcc 8.3.1
$ sudo yum install centos-release-scl
$ sudo yum install devtoolset-8-gcc*
$ scl enable devtoolset-8 bash
$ gcc -v
python3
python3需升级到3.7版本以上 ,本次安装使用版本为python 3.8.12
安装python3的依赖
$ yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
$ yum install libffi-devel -y
下载python3安装包
$ wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tar.xz
$ tar -xvJf Python-3.8.12.tar.xz
编译安装
$ mkdir /usr/local/python3 #创建编译安装目录
$ cd Python-3.8.12
$ ./configure --prefix=/usr/local/python3
$ make && make install
创建软连接
$ ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
$ ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
验证是否成功
$ python3 -V
$ pip3 -V
node
node需升级到10版本以上 ,本次安装使用版本为node14.19.3
下载node安装包
$ wget https://nodejs.org/dist/v14.19.3/node-v14.19.3-linux-x64.tar.xz
$ tar xvf node-v14.19.3-linux-x64.tar.xz
创建软链接
$ ln -s /root/node-v14.19.3-linux-x64/bin/node /usr/local/bin/node
$ ln -s /root/node-v14.19.3-linux-x64/bin/npm /usr/local/bin/npm
验证是否成功
$ node -v
$ npm -v
安装 cnpm
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
mediasoup-demo搭建
github克隆代码
$ git clone https://github.com/versatica/mediasoup-demo.git
$ cd mediasoup-demo
$ git checkout v3
服务端环境搭建
$ cd mediasoup-demo/server
修改mediasoup的版本号为3.9.1
$ vi package.json
"mediasoup": "3.9.1",
使用cnpm i安装依赖
$ cnpm i
安装完成后,生成证书(有证书忽略)
$ mkdir certs
$ cd certs
$ openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout privkey.pem -out fullchain.pem
复制config.example.js 为config.js
$ cp config.example.js config.js
修改config.js文件中的配置(复制以下代码,修改ip地址为公网ip, 并修改证书)
$ vi config.js
const os = require('os');
module.exports =
{
domain : process.env.DOMAIN || '192.168.2.104',
https :
{
// listenIp : '0.0.0.0',
listenIp : '192.168.2.104',
// NOTE: Don't change listenPort (client app assumes 4443).
// listenPort : process.env.PROTOO_LISTEN_PORT || 4443,
listenPort : process.env.PROTOO_LISTEN_PORT || 4443,
// NOTE: Set your own valid certificate files.
tls :
{
cert : process.env.HTTPS_CERT_FULLCHAIN || `${__dirname}/certs/localhost.pem`,
key : process.env.HTTPS_CERT_PRIVKEY || `${__dirname}/certs/localhost.key`
}
},
// mediasoup settings.
mediasoup :
{
// Number of mediasoup workers to launch.
numWorkers : Object.keys(os.cpus()).length,
// mediasoup WorkerSettings.
// See https://mediasoup.org/documentation/v3/mediasoup/api/#WorkerSettings
workerSettings :
{
logLevel : 'warn',
logTags :
[
'info',
'ice',
'dtls',
'rtp',
'srtp',
'rtcp',
'rtx',
'bwe',
'score',
'simulcast',
'svc',
'sctp'
],
rtcMinPort : process.env.MEDIASOUP_MIN_PORT || 40000,
rtcMaxPort : process.env.MEDIASOUP_MAX_PORT || 49999
},
// mediasoup Router options.
// See https://mediasoup.org/documentation/v3/mediasoup/api/#RouterOptions
routerOptions :
{
mediaCodecs :
[
{
kind : 'audio',
mimeType : 'audio/opus',
clockRate : 48000,
channels : 2
},
{
kind : 'video',
mimeType : 'video/VP8',
clockRate : 90000,
parameters :
{
'x-google-start-bitrate' : 1000
}
},
{
kind : 'video',
mimeType : 'video/VP9',
clockRate : 90000,
parameters :
{
'profile-id' : 2,
'x-google-start-bitrate' : 1000
}
},
{
kind : 'video',
mimeType : 'video/h264',
clockRate : 90000,
parameters :
{
'packetization-mode' : 1,
'profile-level-id' : '4d0032',
'level-asymmetry-allowed' : 1,
'x-google-start-bitrate' : 1000
}
},
{
kind : 'video',
mimeType : 'video/h264',
clockRate : 90000,
parameters :
{
'packetization-mode' : 1,
'profile-level-id' : '42e01f',
'level-asymmetry-allowed' : 1,
'x-google-start-bitrate' : 1000
}
}
]
},
// mediasoup WebRtcTransport options for WebRTC endpoints (mediasoup-client,
// libmediasoupclient).
// See https://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcTransportOptions
webRtcTransportOptions :
{
listenIps :
[
{
ip : process.env.MEDIASOUP_LISTEN_IP || '192.168.2.104',
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP || '192.168.2.104'
}
],
initialAvailableOutgoingBitrate : 1000000,
minimumAvailableOutgoingBitrate : 600000,
maxSctpMessageSize : 262144,
// Additional options that are not part of WebRtcTransportOptions.
maxIncomingBitrate : 1500000
},
// mediasoup PlainTransport options for legacy RTP endpoints (FFmpeg,
// GStreamer).
// See https://mediasoup.org/documentation/v3/mediasoup/api/#PlainTransportOptions
plainTransportOptions :
{
listenIp :
{
ip : process.env.MEDIASOUP_LISTEN_IP || '192.168.2.104',
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP || '192.168.2.104'
},
maxSctpMessageSize : 262144
}
}
};
启动
$ npm start
若要后台启动 将INTERACTIVE:='true' 改为 false
$ vi package.json
"start": "DEBUG=${DEBUG:='*mediasoup* *INFO* *WARN* *ERROR*'} INTERACTIVE=${INTERACTIVE:='false'} node server.js",
客户端环境搭建
$ cd mediasoup-demo/app
修改mediasoup-client版本号
$ vi package.json
"mediasoup-client": "^3.6.48",
安装依赖
$ cnpm i
启动(默认3000端口)
npm start