簡體   English   中英

如何使用 FFmpeg 和 NGINX RTMP 進行流式傳輸

[英]How to Stream With FFmpeg and NGINX RTMP

我正在嘗試從我的 Windows PC 上的 OBS(開放廣播軟件)流式傳輸到同樣安裝在同一台 PC 上的 NGINX+RTMP。 我在 OBS 中設置了 20,000Kbps 的比特率,這將是我打算在 NGINX 中設置的多個流的基礎比特率。

我希望能夠流式傳輸到 NGINX,然后即時使用 FFmpeg 對流進行轉碼,以符合我打算廣播到的流媒體站點,例如 Twitch.tv。

如果我使用網絡路徑 rtmp://localhost/live/test,我可以通過 VLC 查看我的流。 但是,當我在 Twitch 的檢查員網站上查看我的直播是否結束時,我什么也沒有收到。 我不知道我的 FFmpeg 是否正常工作,或者下面的 NGINX 配置有問題。

如果有人可以闡明我可能會出錯的地方,那將不勝感激。

nginx.conf

#user www-data;
worker_processes  1;

events {
    worker_connections  1024;
}

http { 
    server_tokens off;

    include mime.types;
    default_type application/octet-stream;
    sendfile off;
    keepalive_timeout 65;

    server {
        listen 80;
        server_name localhost;

        # make a internal server page and put it in html
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

rtmp {
    server {
        listen 1935;
        chunk_size 8192;

        application live {
            live on;
            #interleave on;
            #wait_video on;
            record off;

            # Twitch
            exec_push "D:\Users\Will\Downloads\ffmpeg\bin"
                -i rtmp://localhost/source/$name 
                -c:v libx264 
                -c:a copy 
                -preset veryfast 
                -profile:v high 
                -level 4.1
                -x264-params "nal-hrd=cbr" "opencl=true"
                -b:v 8000K 
                -minrate 8000K 
                -maxrate 8000K
                -keyint 2
                -s 1920x1080
                push rtmp://live-lhr03.twitch.tv/app/STREAM_KEY;
        }
    }
}

非常感謝

更新 1

為簡單起見,我在同一台物理計算機(Windows PC)上測試 OBS、NGINX 和 FFmpeg。 一旦一切正常,我會將 NGINX 和 FFmpeg 移植到我的 Linux PC。

我正在使用帶有 RTMP 模塊的 NGINX 的預編譯版本。我還下載了最新的 FFmpeg 庫,我在 Windows 中設置了路徑環境變量,以便可以在 CommandPrompt/PowerShell 中調用 FFmpeg 命令。

這是我要走的路:-

OBS 以 20,000Kbps 的速度對 x264 進行編碼,它的目標是 NGINX 中稱為“實時”的 RTMP 應用程序。 從這里我想將來自 OBS 的一個流編碼成幾個更小的帶寬流,以便我可以滿足流媒體服務的要求,例如 Twitch 和 Mixer。

在 FFmpeg 參數結束時,我是直接將輸出推送到 Twitch 還是將 FFmpeg 的輸出發送回 NGINX 上的第二個 RTMP 應用程序,然后再推送到 Twitch?

在轉到外部流服務之前將 FFmpeg 的輸出推回 NGINX 的一個優點是,我可以通過支持 RTMP 的播放器(例如 VLC)打開 FFmpeg 轉碼流,從而允許我查看壓縮輸出。

我的另一個問題是,FFmpeg 參數可以放在單獨的行中還是必須全部放在一行中?

這是一個非常好的網站,我一直在回顧

https://blog.twitch.tv/en/2017/10/10/live-video-transmuxing-transcoding-f-fmpeg-vs-twitch-transcoder-part-i-489c1c125f28/

您的 ffmpeg 命令正在嘗試連接到 rtmp://localhost/source 但是您將應用程序命名為“live”,而不是“source”

此外,除非您真正了解關卡的工作原理以及限制條件,否則不要手動發送關卡。 X264 也會自動選擇最佳級別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM