通過 nginx 搭建一個基於 http-flv 的直播流媒體伺服器
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