
WebRTC低延遲直播Monibuca WHIP/WHEP 5分鐘接入完全指南【免費下載鏈接】monibucaMonibuca簡稱 m7s是一款純 Go 開發(fā)的開源流媒體服務(wù)器開發(fā)框架。項目地址: https://gitcode.com/langhuihui/monibucaMonibuca簡稱 m7s是一款純 Go 開發(fā)的開源流媒體服務(wù)器框架其內(nèi)置的 WebRTC 插件原生支持WHIP 推流與WHEP 拉流兩大標(biāo)準(zhǔn)協(xié)議無需復(fù)雜信令開發(fā)瀏覽器 5 分鐘即可跑通毫秒級低延遲直播。為什么選擇 Monibuca 做 WebRTC 低延遲直播傳統(tǒng)直播方案在延遲上有明顯短板WebRTC 正好補上這一環(huán)方案典型延遲適用場景HLS10s~30s點播、大并發(fā)分發(fā)RTMP3s~5s推流上行WebRTCWHIP/WHEP200ms~1s低延遲直播、互動連麥、云監(jiān)考、遠程運維Monibuca 的 WebRTC 插件基于 Pion 實現(xiàn)開箱即用的能力包括?WHIP/WHEP 標(biāo)準(zhǔn)協(xié)議一個 HTTP POST 完成 SDP 協(xié)商天然穿透防火墻?多編解碼支持H.264、H.265、AV1、VP9 視頻 Opus、PCMA、PCMU 音頻?TCP/UDP 雙傳輸Docker 與嚴格防火墻環(huán)境下也能穩(wěn)定建連?內(nèi)置測試頁面推流、拉流、屏幕共享、多路流一應(yīng)俱全?DataChannel 兜底瀏覽器不支持的編碼格式自動降級傳輸插件源碼位于 plugin/webrtc/完整協(xié)議說明可參考 README_CN.md。5 分鐘接入快速開始三步走第 1 步克隆并配置git clone https://gitcode.com/langhuihui/monibuca在config.yaml中啟用 WebRTC 插件核心配置如下webrtc: port: tcp:9000 # 媒體傳輸端口也支持 udp:9000 或 udp:10000-20000 pli: 2s # 視頻丟包后請求關(guān)鍵幀的間隔 enabledc: false # 是否啟用 DataChannel 備用傳輸 iceservers: [] # 公網(wǎng)直連場景可留空 服務(wù)器部署在 NAT/Docker 后時務(wù)必額外配置公網(wǎng) IPpublicip: 1.2.3.4否則客戶端無法建立 ICE 連接。第 2 步啟動服務(wù)啟動 Monibuca 后插件自動注冊以下 HTTP 端點POST /webrtc/push/{streamPath}—— WHIP 推流POST /webrtc/play/{streamPath}—— WHEP 拉流GET /webrtc/test/{name}—— 內(nèi)置測試頁面第 3 步用測試頁面驗證瀏覽器打開以下地址即可驗證整條鏈路頁面地址用途推流/webrtc/test/publish攝像頭麥克風(fēng) WHIP 推流拉流/webrtc/test/subscribe?streamPathlive/testWHEP 拉流播放屏幕共享/webrtc/test/screenshare桌面推流多路流/webrtc/test/batchv2單連接同時訂閱多路流頁面源碼在 publish.html 與 subscribe.html可以直接抄作業(yè)。WHIP 推流實戰(zhàn)一個 POST 請求搞定WHIPWebRTC-HTTP Ingestion Protocol把繁瑣的信令壓縮成一次 HTTP 往返客戶端將 SDP Offer 以application/sdp格式 POST 到服務(wù)器服務(wù)器返回 SDP Answer隨后自動交換 ICE 候選并開啟 SRTP 媒體傳輸。瀏覽器端核心代碼只有 10 行左右const pc new RTCPeerConnection(); const stream await navigator.mediaDevices.getUserMedia({ video: true, audio: true }); stream.getTracks().forEach(t pc.addTrack(t, stream)); const offer await pc.createOffer(); await pc.setLocalDescription(offer); const res await fetch(/webrtc/push/live/myroom, { method: POST, headers: { Content-Type: application/sdp }, body: offer.sdp }); await pc.setRemoteDescription(new RTCSessionDescription({ type: answer, sdp: await res.text() }));拿到201 Created后畫面就以毫秒級延遲進入 Monibuca 流媒體核心同一路流可被 RTMP、HLS、FLV 等所有下游協(xié)議消費——這正是WebRTC 入口 多協(xié)議分發(fā)架構(gòu)的威力。服務(wù)端推流處理實現(xiàn)在 index.go 的servePush流路徑支持?bearertoken參數(shù)做鑒權(quán)。WHEP 拉流實戰(zhàn)瀏覽器低延遲播放WHEPWebRTC HTTP Egress Protocol與推流幾乎鏡像對稱區(qū)別在于客戶端要添加recvonly軌道并監(jiān)聽ontrack事件把遠端流掛到video上const pc new RTCPeerConnection(); pc.ontrack e { video.srcObject e.streams[0]; video.play(); }; pc.addTransceiver(video, { direction: recvonly }); pc.addTransceiver(audio, { direction: recvonly }); const offer await pc.createOffer(); await pc.setLocalDescription(offer); const res await fetch(/webrtc/play/live/myroom, { method: POST, headers: { Content-Type: application/sdp }, body: offer.sdp }); await pc.setRemoteDescription(new RTCSessionDescription({ type: answer, sdp: await res.text() }));流不存在時服務(wù)器返回404可作為流是否就緒的探測手段。拉流端實現(xiàn)可參考 whep_client.goMonibuca 也能反過來作為 WHEP 客戶端從外部服務(wù)器拉流。關(guān)鍵配置port、publicip 與 iceservers這三個參數(shù)決定了 WebRTC 連接能否打得穿網(wǎng)絡(luò)1. port —— 傳輸協(xié)議選擇port: tcp:9000 # TCPDocker/嚴格防火墻下最穩(wěn)推薦 port: udp:9000 # UDP延遲更低 port: udp:10000-20000 # UDP 端口池每連接獨立端口高并發(fā)首選2. publicip —— NAT 穿透的鑰匙服務(wù)器位于 Docker 或內(nèi)網(wǎng)時ICE 候選中只會帶內(nèi)網(wǎng)地址客戶端永遠連不進來。配置publicip后Monibuca 會通過 NAT 1:1 映射機制把公網(wǎng) IP 寫進 SDP Answer實現(xiàn)見 index.go 的initSettingEnginepublicip: 203.0.113.1 # 實際對外的公網(wǎng) IPv4 publicipv6: 2001:db8::1 # 可選 IPv63. iceservers —— STUN/TURN 兜底公網(wǎng)直連場景可留空企業(yè)網(wǎng)、對稱 NAT 建議配置 TURN 中繼webrtc: iceservers: - urls: - stun:stun.l.google.com:19302 - urls: - turn:turn.example.com:3478 username: user credential: passwordDocker 部署推薦--network host模式徹底規(guī)避端口映射與 PublicIP 問題bridge 模式則需精確映射對應(yīng)協(xié)議的端口如-p 9000:9000/udp。常見問題速查連不上先查這 5 處現(xiàn)象可能原因解決建議ICE 一直卡在 checkingNAT 后未配publicip配置正確公網(wǎng) IP 或換 host 網(wǎng)絡(luò)模式企業(yè)網(wǎng)/手機連不上對稱 NAT 無法打洞部署 TURN 中繼服務(wù)器兜底連接成功但無畫面編碼不被支持如 H.265開啟enabledc: true走 DataChannel音頻無聲AAC 源流WebRTC 僅支持 Opus/PCMA/PCMU編碼端改 Opus或啟用 DataChannel跨域 fetch 被攔截前端與服務(wù)器不同源同源部署或配置 CORS更多細節(jié)連接狀態(tài)監(jiān)聽、BatchV2 多路流、H.265 推流技巧完整收錄在 plugin/webrtc/README_CN.md??偨Y(jié)把低延遲直播變成一次 POSTMonibuca 的 WebRTC 插件把 WHIP/WHEP 的標(biāo)準(zhǔn)能力做成了零信令開發(fā)體驗配置 1 分鐘webrtc段幾個字段搞定端口與 NAT 設(shè)置驗證 1 分鐘內(nèi)置測試頁面點選即推即播集成 3 分鐘10 行 JS 接入自己的業(yè)務(wù)依托 Monibuca 的插件化核心環(huán)緩沖、任務(wù)系統(tǒng)、發(fā)布訂閱一路 WebRTC 低延遲直播流可以同時分發(fā)給 RTMP、HLS、FLV、GB28181 等協(xié)議用戶是構(gòu)建實時音視頻業(yè)務(wù)的理想底座?!久赓M下載鏈接】monibucaMonibuca簡稱 m7s是一款純 Go 開發(fā)的開源流媒體服務(wù)器開發(fā)框架。項目地址: https://gitcode.com/langhuihui/monibuca創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考