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 功能,不同的終端解碼能力不同,發出和收到的視頻分辨率也有差別)