- 安装前准备服务器环境
- gcc
- python3
- node
- mediasoup-demo搭建
- github克隆代码
- 服务端环境搭建
- 客户端环境搭建
在ubuntu和centos8上都很容易搭建mediasoup-demo项目,但在centos7很难安装上,在此记录centos7.9上搭建mediasoup。
本次搭建centos7.9所需环境:
| 依赖 | 版本 |
|---|---|
| gcc | 8.3.1 |
| python3 | 3.8.12 |
| node | 14.19.3 |
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 -vpython3
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 -Vnode
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.orgmediasoup-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



