1. 準備
首先,找一台linux服務器,推薦用Ubuntu,安裝最新版本的NodeJS和NPM,安裝方法可參考 《安裝最新版NodeJS和NPM》 一文。
安裝部署過程需要下載GitHub上的源碼,故需要先安裝好git,使用下面命令安裝git
sudo apt-get install git -y
2. 安裝Mediasoup
使用下面命令安裝mediasoup
sudo npm install mediasoup
3. 安裝Mediasoup-client
使用下面命令安裝mediasoup-client
sudo npm install mediasoup-client
4. 安裝Mediasoup-demo
4.1 下載源碼
使用下面命令克隆GitHub上的源碼
git clone https://github.com/versatica/mediasoup-demo.git
4.2 安裝配置Server
進入Server目錄
cd mediasoup-demo/server
安裝Server
npm install
複製 config.example.js 重命名 config.js,並可以自定義設置
cp config.example.js config.js
最新的V3版本中,config.js增加了webRtcTransportOptions 、plainRtpTransportOptions 等一些配置項,需要修改一下里邊的IP為服務器的IP,如:172.16.72.147,修改後的內容如下:
/**
* IMPORTANT (PLEASE READ THIS):
*
* This is not the "configuration file" of mediasoup. This is the configuration
* file of the mediasoup-demo app. mediasoup itself is a server-side library, it
* does not read any "configuration file". Instead it exposes an API. This demo
* application just reads settings from this file (once copied to config.js) and
* calls the mediasoup API with those settings when appropriate.
*/
const os = require('os');
module.exports =
{
// Listening hostname (just for `gulp live` task).
domain : 'localhost',
// Signaling settings (protoo WebSocket server and HTTP API server).
https :
{
listenIp : '0.0.0.0',
// NOTE: Don't change listenPort (client app assumes 4443).
listenPort : 4443,
// NOTE: Set your own valid certificate files.
tls :
{
cert : `${__dirname}/certs/mediasoup-demo.localhost.cert.pem`,
key : `${__dirname}/certs/mediasoup-demo.localhost.key.pem`
}
},
// 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'
],
rtcMinPort : 40000,
rtcMaxPort : 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: '172.16.72.147', announcedIp: null }
],
initialAvailableOutgoingBitrate : 1000000,
minimumAvailableOutgoingBitrate : 300000,
// Additional options that are not part of WebRtcTransportOptions.
maxIncomingBitrate : 1500000
},
// mediasoup PlainRtpTransport options for legacy RTP endpoints (FFmpeg,
// GStreamer).
// See https://mediasoup.org/documentation/v3/mediasoup/api/#PlainRtpTransportOptions
plainRtpTransportOptions :
{
listenIp : { ip: '172.16.72.147', announcedIp: null }
}
}
};
4.3 安裝瀏覽器端App
進入瀏覽器端app目錄
cd mediasoup-demo/app
安裝瀏覽器APP
npm install
全局安裝 gulp-cli (可能需要使用 sudo):
npm install -g gulp-cli
5. 運行Mediasoup Demo項目
1、首先,打開一個終端,運行server :
cd mediasoup-demo/server
node server.js
2、在 另外一個終端 中打開啓動app :
cd mediasoup-demo/app
gulp live
3、接着就可以用瀏覽器瀏覽了,如下圖所示,兩個瀏覽器都訪問同一會議室,https://172.16.72.147:3000/?roomId=gvuxkens ,其中:
https://172.16.72.147:3000/ 為Mediasoup Demo項目的訪問地址
gvuxkens 為會議室id號
4、可以通過URL參數進行設置,相關URL參數及説明如下表所示:
參數 説明
roomId 會議室ID,任意字符串
displayName 當前用户暱稱,任意字符串
sipEndpoint 是否是SIP終端,true-是,false-否,默認false
simulcast 是否開啓Simulcast,true-是,false-否,默認true
forceTcp 是否強制使用TCP,true-是,false-否,默認false
spy 是否spy,true-是,false-否,默認false
forceH264 是否強制當前終端使用H264編碼,true-是,false-否,默認false
例如:打開下面的地址可以進行下面的設置
當前終端進入的會議室ID為:123456
當前終端暱稱為:cgs
當前終端開啓Simulcast
當前終端使用H264進行編碼(默認是以VPx進行編碼的)
6. 運行結果
圖中紅色框出的為終端所使用的音頻格式、視頻格式以及視頻分辨率信息
(注意:由於使用了 Simulcast 功能,不同的終端解碼能力不同,發出和收到的視頻分辨率也有差別)