通過 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 設置面板 > 推流(具體怎么配置推流也可以百度)

 

 

 

  1. 將服務設置為: 自定義
  2. 服務器設置為不包含房間名的推流地址示例: rtmp://localhost:553/myapp/
  3. 流秘鑰設置為房間名: mystream

1.4 使用 VLC軟件拉流播放直播

 

 

博文參考:

http://123.57.164.21/?p=1458

https://juejin.cn/post/6978882334829477918

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM