-----------------------------------------------------------------------------------------------------------------------------------------
一分钟快速搭建 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.