配置Nginx以支援RTMP直播及HLS流播放

spacelit發表於2024-03-21

配置Nginx以支援RTMP直播及HLS流播放

本文件旨在提供一套詳細指南,透過Nginx伺服器配置RTMP直播,並利用HLS(HTTP Live Streaming)技術實現瀏覽器直播觀看。

前提條件

  • 已安裝Nginx及nginx-rtmp-module。
  • 伺服器具有外網訪問能力,且相應埠(預設情況下為1935用於RTMP和8080用於HTTP)已在防火牆中開放。

配置RTMP直播

基本RTMP伺服器配置

開啟Nginx配置檔案(通常位置為/etc/nginx/nginx.conf),並新增如下配置段以啟用RTMP功能:

rtmp {
    server {
        listen 1935; # RTMP標準埠
        chunk_size 4096;

        application live {
            live on;
            record off;
        }
    }
}

此配置段建立一個RTMP伺服器,監聽1935埠,並定義了一個名為live的應用用於直播,且關閉了錄製功能。

推流金鑰設定

在RTMP URL中透過新增特定路徑或標識(即推流金鑰),用以區分不同的推流源。這在Nginx配置檔案中不直接定義,而是透過推流軟體(如OBS)在推流時指定。推流URL格式通常為:rtmp://your_server_ip/live/STREAM_KEY,其中STREAM_KEY為自定義的推流金鑰。

配置HLS直播播放

設定HLS支援

在相應的RTMP應用配置中啟用HLS並指定HLS檔案儲存的路徑:

application live {
    live on;
    record off;

    # 啟用HLS
    hls on;
    hls_path /var/www/html/hls;
    hls_fragment 3s;
    hls_playlist_length 60s;
}

配置HTTP伺服器以支援HLS播放

新增或修改Nginx的HTTP伺服器配置,以提供對HLS內容的訪問:

http {
    server {
        listen 8080;

        location /hls {
            alias /var/www/html/hls;
            add_header 'Access-Control-Allow-Origin' '*' always;
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
        }
    }
}

觀看直播

一旦配置完成並重啟了Nginx,即可使用OBS或其他支援RTMP的軟體推流到rtmp://your_server_ip/live/STREAM_KEY

為了透過瀏覽器觀看直播,直播流的觀眾可以使用以下URL格式:

http://your_server_ip:8080/hls/STREAM_KEY.m3u8

檔案儲存和清理

透過HLS技術生成和傳輸的影片檔案(.ts檔案)和索引檔案(.m3u8檔案)會被臨時儲存在hls_path所指定的目錄下。Nginx會根據HLS的配置引數(如hls_fragmenthls_playlist_length),實時刪除過時的內容,以確保直播流的連貫性。直播結束後,這些內容最終會被自動刪除,不會長期佔用伺服器儲存空間。

注意

  • 如果需要更高階的安全措施防止未經授權的推流,可能需要考慮使用額外的身份驗證方案。
  • 對於希望永久儲存直播內容的使用者,應透過推流軟體或額外的錄製工具設定錄製功能,而不依賴HLS片段的臨時儲存。

相關文章