WebRTC 的服务器 mediasoup 的编译与安装

    技术2025-04-16  19

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

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

    软件下载地址: http://www.qiyicc.com/download/rtmpd.zip

    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

    也可以通过下面命令安装 nodejs

    curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -  apt-get install -y nodejs

    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.

    Processed: 0.014, SQL: 12