涉及技術點
- nginx
- ffmpeg
- rtmp 協議
- webrtc
- WCS服務器
其實整體來說可能跟 mediasoup 沒有太多緊密聯繫(站在bs結構)h5的方式沒有辦法直接推流到 rtmp地址,下面一點一點來總結整理。
nginx 方面
這裏研究了 nginx 搭建rtmp, 安裝nginx 需要 --with-rtmp-module,
安裝成功之後配置rtmp服務,
rtmp {
server {
listen 1935;
application room {
live on;
#record keyframes;
#record_path /tmp;
#record_max_size 128K;
#record_interval 30s;
#record_suffix .this.is.flv;
#on_publish http://localhost:8080/publish;
#on_play http://localhost:8080/play;
#on_record_done http://localhost:8080/record_done;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
hls_fragment 10s; #每個視頻切片的時長。
hls_playlist_length 60s; #總共可以回看的事件,這裏設置的是1分鐘。
#hls_continuous on; #連續模式。
#hls_cleanup on; #對多餘的切片進行刪除。
#hls_nested on; #嵌套模式。
}
}
}
重啓 nginx
ffmpeg 模擬推流
這裏沒有太多東西要說的
ffmpeg -re -i /home/lee/video.mp4 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://localhost/room/123123
rtmp 協議
RTMP(Real Time Message Protocol)由 Adobe 公司提出流媒體協議,並且是私有協議,未完全公開,用來解決多媒體數據傳輸流的多路複用(Multiplexing)和分包(packetizing)的問題,RTMP協議一般傳輸的是 flv,f4v 格式流。一般在 TCP 1個通道上傳輸命令和數據。
- 優勢:
在於低延遲,穩定性高,支持所有攝像頭格式
專爲流媒體開發的協議,對底層的優化比其它協議更加優秀
- 劣勢:
瀏覽器需要加載 flash插件才能播放。
RTMP 爲 Adobe 私有協議,很多設備無法播放,特別是在 iOS 端,需要使用第三方解碼器才能播放
基於 TCP 傳輸,非公共端口,可能會被防火牆阻攔
webrtc to rtmp 服務端轉換的話。
這裏轉換可能會耗費資源較多。
當然還有其他方案,不需要服務端轉換, 直接客戶端推流 rtmp 和 webrtc 兩種 ,如果推rtmp流就需要用端的方式,純bs結構不支持了, 前面rtmp提到了
wcs服務器
這塊不太瞭解了就
參考連接
- https://www.kutu66.com/Web_Development/article_2367
- https://www.helplib.cn/%E5%AD%A6%E4%BB%A5%E8%87%B4%E7%94%A8/7-ways-to-stream-rtsp-on-the-page