1. RTMP 基礎概念??
-
??核心角色??:
- ??推流端(Publisher)??:將音視頻數據推送到服務器的設備(如OBS、手機APP)。
- ??服務器(RTMP Server)??:接收推流并分發給觀眾的中間節點(如Nginx-RTMP、SRS)。
- ??播放端(Player)??:從服務器拉取流并播放的設備(如VLC、網頁播放器)。
-
??協議特點??:
- ??基于TCP??:保證數據完整性,但延遲較高(3-5秒)。
- ??默認端口??:1935(推流和拉流均通過此端口)。
- 2. 快速搭建 RTMP 服務器??
-
以 ??Nginx-RTMP?? 為例(支持Linux/Windows):
??步驟1:安裝 Nginx-RTMP?
步驟2:配置 RTMP 服務??
編輯配置文件?
/etc/nginx/nginx.conf
,添加以下內容: -
rtmp {server {listen 1935;chunk_size 4096;application live {live on;record off;# 允許所有IP推流(生產環境需限制)allow publish all;}} }
步驟3:重啟 Nginx?
-
sudo systemctl restart nginx
3. 推流與拉流操作??
??推流端(以 OBS 為例)??
-
??下載 OBS??:https://obsproject.com/
-
??配置推流地址??:
- 服務器:
rtmp://你的服務器IP:1935/live
- 流密鑰:自定義唯一標識(如?
test
) - 完整推流URL:
rtmp://你的服務器IP:1935/live/test
- 服務器:
-
??開始推流??:點擊“開始推流”。
??拉流播放(以 VLC 為例)??
- 打開 VLC → 媒體 → 打開網絡串流 → 輸入地址:
rtmp://你的服務器IP:1935/live/test
- 點擊“播放”。
??4. 進階功能??
??轉碼與多協議分發??
在?nginx.conf
?中添加轉碼配置:
application live {live on;exec ffmpeg -i rtmp://localhost:1935/live/$name-c:v libx264 -preset ultrafast -tune zerolatency -g 20 -r 30 -b:v 1000k -f flv rtmp://localhost:1935/hls/$name;
}application hls {live on;hls on;hls_path /tmp/hls;hls_fragment 2s;hls_playlist_length 6s;
}
通過HLS協議播放:http://你的服務器IP:8080/hls/test.m3u8
??錄制直播流?
application live {live on;record all;record_path /var/rec;record_unique on;
}
5. 常見問題與解決??
??問題1:推流失敗??
??問題3:瀏覽器無法播放RTMP??
- ??原因??:服務器防火墻未開放1935端口。
- ??解決??:
sudo ufw allow 1935/tcp sudo systemctl restart nginx
問題2:播放卡頓??
- ??原因??:網絡帶寬不足或服務器性能瓶頸。
- ??解決??:
- 降低推流碼率(OBS設置 → 輸出 → 視頻比特率)。
- 使用CDN分發或升級服務器配置。
- ??原因??:現代瀏覽器已廢棄Flash,需轉用HLS/WebRTC。
- ??解決??:
- 使用基于HLS的播放器(如Video.js、hls.js)。
- 將RTMP流轉碼為HLS/DASH(參考進階功能)。
6. RTMP 的替代方案??
- ??SRT(Secure Reliable Transport)??:低延遲、抗丟包,適合不穩定網絡。
- ??WebRTC??:超低延遲(<1秒),適合實時互動場景。
- ??HLS/DASH??:基于HTTP的流媒體,兼容所有瀏覽器和設備。
-
??總結??
- ??適用場景??:傳統直播推流、視頻監控、簡單直播系統。