mediasoup源碼(一)編譯及部署

基本介紹

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編譯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11045.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11045.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11045.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

is和==的關系

Python中is和的關系 is判斷兩個變量是不是指的是同一個內存地址&#xff0c;也就是通過id()函數判斷 判斷兩個變量的值是不是相同 a [1, 2, 3, 4] b [1, 2, 3, 4] print(id(a)) # 2298268712768 print(id(b)) # 2298269716992 print(a is b) # False print(a b) # Tr…

目標檢測標注工具Labelimg安裝與使用

目錄 一、安裝Labelimg與打開 二、使用 1、基本功能介紹 2、快捷鍵 3、狀態欄的工具 三、附錄 1、YOLO模式創建標簽的樣式 2、create ML模式創建標簽的樣式 3、PascalVOC模式創建標簽的樣式 一、安裝Labelimg與打開 labelimg是一款開源的數據標注工具&#xff0c;可以…

51基于單片機的溫室大棚系統設計

設計摘要&#xff1a; 本設計旨在基于51單片機和藍牙技術&#xff0c;實現一個功能完善的溫室大棚系統。該系統具備以下主要功能&#xff1a;首先&#xff0c;通過連接的顯示屏能夠實時地顯示當前的溫度和濕度信息&#xff0c;方便用戶了解溫室內的環境變化。其次&#xff0c;…

ctfshow web271--web273

web271 laravel5.7反序列化漏洞 define(LARAVEL_START, microtime(true));/* |-------------------------------------------------------------------------- | Register The Auto Loader |-------------------------------------------------------------------------- | |…

mysql IF語句,模糊檢索

使用MySQL IF語句完成條件檢索 IF(expr1,expr2,expr3)&#xff0c;expr1如果滿足條件就用expr2&#xff0c;否則用expr3 SELECTa.*,count(*) AS stdSum FROMidb_std_power_engin_v1 a WHERE1 1 AND (IF( KV IS NOT NULL, a.NAME REGEXP KV, 1 1 ) ORIF( KV IS NOT NULL, …

凸優化理論學習二|凸函數及其相關概念

系列文章目錄 凸優化理論學習一|最優化及凸集的基本概念 文章目錄 系列文章目錄一、凸函數&#xff08;一&#xff09;凸集&#xff08;二&#xff09;凸函數的定義及舉例&#xff08;三&#xff09;凸函數的證明1、將凸函數限制在一條直線上2、判斷函數是否為凸函數的一階條件…

如何做筆記

鏈接&#xff1a; 程序員讀技術類書籍如何做筆記&#xff1f; - 知乎 我是如何寫好一篇技術博客的 - 簡書 技術博客&#xff0c;該寫些什么&#xff1f; - 知乎 前言 最近翻翻以前的博客和筆記&#xff0c;都覺得寫的不好。工作這么多年&#xff0c;其實一直都有想做成知識系列…

貝葉斯分類器詳解

1 概率論知識 1.1 先驗概率 先驗概率是基于背景常識或者歷史數據的統計得出的預判概率&#xff0c;一般只包含一個變量&#xff0c;例如P(A)&#xff0c;P(B)。 1.2 聯合概率 聯合概率指的是事件同時發生的概率&#xff0c;例如現在A,B兩個事件同時發生的概率&#xff0c;記…

Python: 獲取時間

from datetime import datetime, timedelta# 獲取當前時間 current_time datetime.now() print(f"current_time {current_time}")# 獲取時分秒部分 time current_time.time() print(f"time {time}")# 獲取當前時間,只要日期部分 current_date current…

華為交換機配置導出備份python腳本

一、腳本編寫思路 &#xff08;一&#xff09;針對設備型號 主要針對華為&#xff08;Huawei&#xff09;和華三&#xff08;H3C&#xff09;交換機設備的配置備份 &#xff08;二&#xff09;導出前預處理 1.在配置導出前&#xff0c;自動打開crt軟件或者MobaXterm軟件&am…

掌握MySQL執行計劃分析【Explain】

前言 MySQL是一個強大的關系型數據庫管理系統&#xff0c;其高效執行SQL查詢的能力是其核心價值之一。然而&#xff0c;當查詢變得復雜或者數據量急劇增長時&#xff0c;SQL查詢的性能問題往往成為我們不得不面對的挑戰。為了深入了解查詢的執行過程并找到性能瓶頸&#xff0c…

Modbus通訊協議初學

目錄 Modbus通訊協議初學什么是Modbus?Modbus用來做什么?4個種類的寄存器協議速記功能碼Modbus 報文幀示例解讀 Modbus通訊協議初學 什么是Modbus? 顧名思義,它是一個bus,即總線協議。比如串口協議、IIC協議、SPI都是通訊協議。你接觸到這種協議,相信你所處的行業是工業方…

如何自定義Linux命令

說明&#xff1a;本文介紹如何將自己常用的命令設置為自定義的命令&#xff0c;以下操作在阿里云服務器CentOS上進行。 修改配置文件 修改配置文件前&#xff0c;先敲下面的命令查看當前系統配置的shell版本 echo $SHELL或者 echo $0區別在于&#xff0c;$SHELL查看的是系統…

落雪音樂 超好用的桌面端音樂播放器

之前一直都是充某Q音樂的會員&#xff0c;突然不想氪金了&#xff0c;終于找到一個開源的音樂播放器&#xff0c;在此先給落雪無痕大佬跪了 太愛了 簡直白嫖怪的福音 話不多說&#xff0c;直接上操作&#xff1a;解壓密碼&#xff1a;www.1234f.com下載地址&#xff1a;極速云…

圖片批量管理邁入智能新時代:一鍵輸入關鍵詞,自動生成并保存驚艷圖片,輕松開啟創意之旅!

在數字化時代&#xff0c;圖片已成為我們表達創意、記錄生活、傳遞信息的重要工具。然而&#xff0c;隨著圖片數量的不斷增加&#xff0c;如何高效、便捷地管理這些圖片&#xff0c;卻成為了一個令人頭疼的問題。 第一步&#xff0c;進入首助編輯高手主頁面&#xff0c;在上方…

簡單的Python示例母親節的祝福

在Python中&#xff0c;我們通常不會直接編寫HTML源碼&#xff0c;但我們可以編寫一個Python腳本來生成或發送包含母親節祝福的HTML內容。以下是一個簡單的Python示例&#xff0c;它使用字符串拼接來創建一個簡單的HTML頁面&#xff0c;其中包含母親節的祝福。 # 定義一個包含…

【AMBA Bus ACE 總線 9.1 -- Non-cache Master 寫操作 詳細介紹】

請閱讀【AMBA Bus ACE 總線與Cache 專欄 】 歡迎學習:【嵌入式開發學習必備專欄】 文章目錄 Non-cache MasterACE 和系統級緩存一致性ACE 非緩存主控(Non-cacheable Master)Non-cache Master ARM的ACE(AXI Coherency Extension)是一種用于增強系統級緩存一致性的接口規范…

視頻封面一鍵提取:從指定時長中輕松獲取您想要的幀圖片

在數字媒體時代&#xff0c;視頻已成為人們獲取信息、娛樂和溝通的主要形式之一。而一個好的視頻封面&#xff0c;往往能夠吸引觀眾的眼球&#xff0c;增加視頻的點擊率和觀看量。然而&#xff0c;對于很多視頻創作者和編輯者來說&#xff0c;如何從視頻中快速、準確地提取出合…

Git知識點總結

目錄 1、版本控制 1.1什么是版本控制 1.2常見的版本控制工具 1.3版本控制分類 2、集中版本控制 SVN 3、分布式版本控制 Git 2、Git與SVN的主要區別 3、軟件下載 安裝&#xff1a;無腦下一步即可&#xff01;安裝完畢就可以使用了&#xff01; 4、啟動Git 4.1常用的Li…

Shell編程之循環語句之for

一.for循環語句 讀取不同的變量值&#xff0c;用來逐個執行同一組命令 for 變量名 in 取值列表 do命令序列 done 示例&#xff1a; 1.計算從1到100所有整數的和 2.提示用戶輸入一個小于100的整數&#xff0c;并計算從1到該數之間所有整數的和 3.求從1到100所有整數的偶數和…