obs + nginx + nginx-http-flv-module+ VLC實現直播
實現思路
- 下載obs軟件,通過RTMP推流(下載軟件不演示了)
- 通過nginx開啟一個流媒體服務,在obs中推流到該服務器,通過HTTP-FLV拉流
- 下載VLC軟件, VLC播放器實現HTTP-FLV拉流進行播放 (下載軟件不演示了)
1 搭建流媒體服務器
安裝添加RTMP和HTTP-FLV模塊的Nginx,並進行配置。 如果已安裝過nginx,可以跳過安裝步驟,直接添加模塊,這里不再贅述。
1.1 安裝Nginx
以mac系統為例: 首先更新brew
brew update
安裝編譯nginx所需的開發包
brew install gcc brew install pcre pcre-devel brew install openssl openssl-devel brew install wget unzip
一、下載源代碼
為了讓 nginx 擁有處理流媒體的能力,我們需要通過 編譯安裝 的方式來安裝 nginx。
由於在本篇中我們嘗試講清楚的是搭建一個基於 http-flv 的流媒體服務器,所以在編譯時,我們需要為 nginx 添加 nginx-http-flv-module 模塊。
我們把 nginx 和 nginx-http-flv-module 的源代碼都下載到 /tmp 目錄下
cd /tmp git clone nginx-http-flv-module wget https://nginx.org/download/nginx-1.20.2.tar.gz
解壓剛剛下載的 nginx,並進入到 nginx 的目錄
tar -xzf nginx-1.20.2.tar.gz
cd nginx-1.20.2
二、編譯安裝
./configure --add-module=/tmp/nginx-http-flv-module --with-http_ssl_module
make
make install
這么一個過程下來后,nginx 會被安裝在 /usr/local/nginx 底下。
需要注意的是,nginx-http-flv-module 是基於 nginx-rtmp-module 開發的,完全兼容 nginx-rtmp-module 的所有功能,所以在編譯時無需重復添加 nginx-rtmp-module 模塊。
上述命令中還包含了 --with-http_ssl_module 參數,是根據 nginx-rtmp-module 的編譯安裝說明進行的。
1.2 Nginx配置
在/usr/local/nginx/conf/nginx.conf中,添加相關的配置。
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8080; server_name localhost; location / { root html; index index.html index.htm; } location /live { # 拉流時的 uri ,可以自行修改 flv_live on; # 打開 http-flv 服務 chunked_transfer_encoding on; add_header 'Access-Control-Allow-Origin' '*'; # 允許跨域 add_header 'Access-Control-Allow-Credentials' 'true'; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } rtmp_auto_push on; rtmp { server { listen 553; # 接受推流的端口號 chunk_size 8192; # 單一推流數據包的最大容量? application myapp { # myapp 模塊,可以自行更換名字 live on; # 打開直播 # 非常重要, 設定讓ngnix斷開阻塞中的連接, 才能觸發exec_record_done # 以及客戶端的LFLiveKit reconnectCount自動重新連接才會好用 drop_idle_publisher 5s; meta off; # 為了兼容網頁前端的 flv.js,設置為 off 可以避免報錯 gop_cache on; # 支持GOP緩存,以減少首屏時間 allow play all; # 允許來自任何 ip 的人拉流 } } }
1.3 啟動Nginx
啟動位於 /usr/local/nginx/sbin 的 nginx
sudo ./nginx
- rtmp推流地址(舉例,可以用obs推流出來):
rtmp://localhost:553/myapp/mystream
- http-flv拉流播放地址(舉例):
http://localhost:8080/live?port=553&app=myapp&stream=mystream
其中的 myapp 指的是配置文件(nginx.conf)中 rtmp 塊指定的 application,一個 rtmp server可以擁有多個 application,只要名字對應的上,叫啥都可以。
示例地址中的 mystream 可以由用戶自己指定,只要拉流地址的參數stream對應的上就行了,有點類似於房間的概念,推流要推到哪個application底下的哪個房間的感覺。
1.3 使用 OBS 推流
我這里使用的是 OBS 軟件進行推流,打開 OBS 設置面板 > 推流(具體怎么配置推流也可以百度)

- 將服務設置為:
自定義 - 服務器設置為不包含房間名的推流地址示例:
rtmp://localhost:553/myapp/ - 流秘鑰設置為房間名:
mystream
1.4 使用 VLC軟件拉流播放直播

博文參考:
http://123.57.164.21/?p=1458
https://juejin.cn/post/6978882334829477918
