基本介紹
mediasoup是一個sfu架構的流媒體服務器,讀者可以根據需要選擇不同的編譯方式。如果只需要學習c++流媒體傳輸部分,則選擇mediasoup,如果需要學習mediasoup整個demo,并做演示,則可以選擇mediasoup-demo,如果只需要學習mediasoup客戶端部分,則選擇mediasoup-client
前置要求
1.選擇linux環境,centos或者ubuntu
2.nodejs版本大于18.0
安裝 gulp:
sudo npm install -g gulp-cli
安裝 build-essential:
sudo apt install build-essential
編譯
①僅編譯mediasoup
//下載mediasoup源碼
git clone https://github.com/versatica/mediasoup.git
//跳轉到編譯路徑
cd mediasoup/worker
//編譯
執行make命令
編譯后生成的可執行文件路徑為
e/mediasoup/worker/out/Release/mediasoup-worker
②編譯mediasoup-demo
1.下載源碼
git clone https://github.com/versatica/mediasoup-demo.git
2.下載相關依賴
cd mediasoup-demo/server
執行npm install -g gulp-cli
cd mediasoup-demp/client
執行npm install -g gulp-cli
服務依賴項如下
{"name": "mediasoup-demo-server","version": "3.0.0","private": true,"description": "mediasoup demo server","author": "I?aki Baz Castillo <ibc@aliax.net>","license": "All Rights Reserved","main": "lib/index.js","scripts": {"generate-dev-certificate": "mkcert -install --key-file certs/server.key --cert-file certs/server.crt mediasoup-demo.dev \"*.mediasoup-demo.dev\" localhost 127.0.0.1 ::1","lint": "eslint -c .eslintrc.js server.js lib connect.js","start": "DEBUG=${DEBUG:='*mediasoup* *INFO* *WARN* *ERROR*'} INTERACTIVE=${INTERACTIVE:='true'} node server.js","connect": "node connect.js"},"dependencies": {"@sitespeed.io/throttle": "^3.1.1","awaitqueue": "^2.3.3","body-parser": "^1.19.0","colors": "^1.4.0","debug": "^4.3.1","express": "^4.17.1","mediasoup": "github:versatica/mediasoup#v3","pidusage": "^2.0.21","protoo-server": "^4.0.5","rtp.js": "^0.11.4"},"devDependencies": {"eslint": "^6.8.0","gulp": "^4.0.2","gulp-eslint": "^6.0.0","gulp-plumber": "^1.2.1"}
}
客戶端依賴如下
{"name": "mediasoup-demo-app","version": "3.0.0","private": true,"description": "mediasoup demo app","author": "I?aki Baz Castillo <ibc@aliax.net>","license": "All Rights Reserved","main": "lib/index.jsx","scripts": {"lint": "eslint -c .eslintrc.js --ext .js,.jsx gulpfile.js lib","start": "gulp live"},"dependencies": {"@babel/runtime": "^7.8.4","bowser": "^2.11.0","classnames": "^2.2.6","clipboard-copy": "^3.1.0","debug": "^4.3.1","domready": "^1.0.8","face-api.js": "^0.21.0","hark": "^1.2.3","js-cookie": "^2.2.1","mediasoup-client": "github:versatica/mediasoup-client#v3","pokemon": "^2.0.2","prop-types": "^15.7.2","protoo-client": "^4.0.5","random-string": "^0.2.0","react": "^16.12.0","react-dom": "^16.12.0","react-draggable": "^3.3.2","react-dropzone": "^10.2.1","react-redux": "^7.2.0","react-spinner": "^0.2.7","react-tooltip": "^3.11.1","react-transition-group": "^4.3.0","redux": "^4.0.5","redux-logger": "^3.0.6","redux-thunk": "^2.3.0","riek": "^1.1.0","url-parse": "^1.4.7"},"devDependencies": {"@babel/core": "^7.8.4","@babel/plugin-proposal-object-rest-spread": "^7.8.3","@babel/plugin-transform-runtime": "^7.8.3","@babel/preset-env": "^7.8.4","@babel/preset-react": "^7.8.3","babel-plugin-jsx-control-statements": "^4.0.0","babelify": "^10.0.0","browser-sync": "^2.26.7","browserify": "^16.5.0","del": "^5.1.0","envify": "^4.1.0","eslint": "^6.8.0","eslint-plugin-import": "^2.20.1","eslint-plugin-jsx-control-statements": "^2.2.1","eslint-plugin-react": "^7.18.3","gulp": "^4.0.2","gulp-css-base64": "^1.3.4","gulp-eslint": "^6.0.0","gulp-header": "^2.0.9","gulp-if": "^3.0.0","gulp-plumber": "^1.2.1","gulp-rename": "^1.4.0","gulp-stylus": "^2.7.0","gulp-touch-cmd": "0.0.1","gulp-uglify-es": "^3.0.0","gulp-util": "^3.0.8","mkdirp": "^0.5.1","ncp": "^2.0.0","nib": "^1.1.2","supports-color": "^7.1.0","vinyl-buffer": "^1.0.1","vinyl-source-stream": "^2.0.0","watchify": "^3.11.1"}
}
啟動服務
啟動服務之前先生成證書,修改配置文件
在 mediasoup-demo/server下創建cert目錄,然后通過openssl生成自簽名證書
openssl genrsa -out privkey.pem 2048
openssl req -new -key privkey.pem -out csr.pem
openssl x509 -req -in csr.pem -signkey privkey.pem -out fullchain.pem
修改配置文件
將config.example.js改名為config.js
cp config.example.js config.js
修改MEDIASOUP_ANNOUNCED_IP為服務器主機對應的IP
啟動服務
MEDIASOUP_ANNOUNCED_IP=主機對應的IP地址 npm start
啟動客戶端
cd mediasoup-demo/app
npm start
其他方式部署mediasoup
參考李超老師提供的mediasoup-demo編譯