WebRTC 的服務器 mediasoup 的編譯與安裝

-----------------------------------------------------------------------------------------------------------------------------------------

一分鐘快速搭建 rtmpd 服務器: https://blog.csdn.net/freeabc/article/details/102880984

軟件下載地址: http://www.qiyicc.com/download/rtmpd.rar

github 地址:https://github.com/superconvert/smart_rtmpd

-----------------------------------------------------------------------------------------------------------------------------------------

WebRTC 的服務器 mediasoup 的編譯與安裝

Mediasoup 的框架圖,優點簡潔,性能高

信令與業務採用 JS 實現,流媒體的部分採用 C++。

操作系統: ubuntu LTS 16.04.6

1. apt-get update

apt-get update 時,經常遇到下面的問題

Ign:1 cdrom://Ubuntu-Server 16.04.6 LTS _Xenial Xerus_ - Release amd64 (20190226) xenial InRelease
Ign:2 cdrom://Ubuntu-Server 16.04.6 LTS _Xenial Xerus_ - Release amd64 (20190226) xenial Release
Ign:3 cdrom://Ubuntu-Server 16.04.6 LTS _Xenial Xerus_ - Release amd64 (20190226) xenial/main amd64 Packages
省略 。。。 。。。 

需要編輯文件 vi /etc/apt/sources.list

deb cdrom:[Ubuntu-Server 16.04.6 LTS _Xenial Xerus_ - Release amd64 (20190226)]/ xenial main restricted

需要註釋掉這句,並保存退出,然後繼續執行 apt-get update 即可

2. 升級 node 或 npm

mediasoup 需要 node 版本 > 10, 默認安裝的是 node : 4.2.6, npm : 3.5.2,升級 node 

2.1 更新ubuntu軟件源

sudo apt-get update
sudo apt-get install -y python-software-properties software-properties-common
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update

執行 apt-get update 的過程中,有可能遇到下面的錯誤

The repository 'http://ppa.launchpad.net/chris-lea/node.js/ubuntu xenial Release' does not have a Release file

需要執行下面的語句後,繼續執行 apt-get update

mv /etc/apt/sources.list.d/chris-lea-ubuntu-node_js-xenial.list /etc/apt/sources.list.d/chris-lea-ubuntu-node_js-xenial.list.bak

2.2 安裝NodeJS和NPM

安裝 nodejs 和 npm

sudo apt-get install nodejs
sudo apt install nodejs-legacy
sudo apt install npm

設置 npm 的包鏡像源,你懂的

sudo npm config set registry https://registry.npm.taobao.org
sudo npm config list

全局安裝n管理器(用於管理nodejs版本)

sudo npm install n -g

安裝最新版本 nodejs

# 安裝最新穩定版本的 node
sudo n stable
# 查看 node 版本
sudo node -v
# 查看 npm 版本
sudo npm -v

3. 安裝 mediasoup

一般直接安裝會報錯

npm WARN enoent ENOENT: no such file or directory, open '/root/mediasoup/package.json'

首先進行

# 解決缺失 package.json 的錯誤
sudo npm init
# 下載並編譯
sudo npm install mediasoup

安裝 mediasoup-client

sudo npm install mediasoup-client

安裝 mediasoup-demo

git clone https://github.com/versatica/mediasoup-demo.git

4. 安裝配置 server

# 進入 server 目錄
cd mediasoup-demo/server
# 安裝 server
npm install

上面這步容易卡住,你懂的,如果卡住,請用下面的方法試試

# 換成國內源
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
# 執行安裝
sudo cnpm install

準備配置文件,準備證書,需要服務器證書和私鑰,這個需要大家通過 openssl 生成一個。

# 準備配置文件
cp config.example.js config.js
# 證書的目錄
mkdir certs
# 拷貝服務器端證書及私鑰到 certs,這裏的 server.crt 和 server.key 需要自己做
cp server.crt server.key ./certs
# 編輯配置文件
vi config.js

編輯配置文件,配置 https 裏的 tls 裏的 cert 證書和 key 私鑰名字,webRtcTransportOptions  的 listenIps 的 ip, plainTransportOptions 的 的 listenIps 的 ip

const os = require('os');

module.exports =
{
        // Listening hostname (just for `gulp live` task).
        domain : process.env.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 : process.env.PROTOO_LISTEN_PORT || 4443,
                // NOTE: Set your own valid certificate files.
                tls        :
                {
                        cert : process.env.HTTPS_CERT_FULLCHAIN || `${__dirname}/certs/server.crt`,
                        key  : process.env.HTTPS_CERT_PRIVKEY || `${__dirname}/certs/server.key`
                }
        },

        。。。 。。。

        // 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.1.112',
                    announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
                }
            ],
            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.1.112',
                announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
            },
            maxSctpMessageSize : 262144
        }
    }
};

5. 安裝瀏覽器端 App

​# 進入 app 目錄
cd mediasoup-demo/app
# 安裝 server
npm install

上面這步容易卡住,你懂的,如果卡住,同樣請用下面的方法試試

# 換成國內源
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
# 執行安裝
sudo cnpm install

全局安裝 gulp-cli 

sudo npm install -g gulp-cli

6. 運行 Mediasoup Demo

運行 server

cd mediasoup-demo/server
node server.js

運行 app 

cd mediasoup-demo/app
gulp live

參見下圖,用 chrome 訪問 https://192.168.1.112:3000/?info=true 就可以運行了。

創建一個房間 https://192.168.1.112:3000/?roomId=mediaRoom, mediaRoom 就是會議室 ID. 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
 

7. mediasoup 的有關文檔

官方文檔,參見下面的鏈接,有想做深度開發的,請參考裏面的鏈接。

https://mediasoup.org/documentation/v3/

mediasoup-client ( JavaScript  )  ---  Client side JavaScript library for browsers and Node.js clients.

libmediasoupclient ( C++ )  --- C++ library built on top of libwebrtc. It exposes the same API than mediasoup-client.

mediasoup-client-aiortc(Python)--- mediasoup-client handler for aiortc Python library.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章