Масштабирование потоковой трансляции nginx-rtmp с транскодированием ffmpeg - PullRequest
0 голосов
/ 26 апреля 2018

В настоящее время у меня есть функциональная настройка прямой трансляции с использованием библиотеки nginx-rtmp, и я использую ffmpeg для обеспечения различных разрешений моего потока.

Единственная проблема в том, что ffmpeg только с двумя выходами съедает ~ 50% моего процессора. Я хотел бы иметь возможность поддерживать до 20 стримеров одновременно - с учетом текущего спроса это означало бы, что мне нужно в 10 раз больше ресурсов процессора, чем у меня сейчас!

Как я могу масштабировать мои настройки транскодирования с nginx-rtmp и ffmpeg?

rtmp {
server {
    listen 1935;

    application src {
        live on;
        exec_push ffmpeg -i rtmp://localhost/src/$name
            -c:v copy -preset:v ultrafast -b:v 512K -c:a copy -tune zerolatency -f flv rtmp://localhost/hls/$name_hi
            -c:v libx264 -preset:v ultrafast -s 852x480 -b:v 128K -c:a copy -tune zerolatency -f flv rtmp://localhost/hls/$name_low;

            # -c:v libx264 -s 852x480 -b:v 128K -c:a copy -tune zerolatency -f flv rtmp://localhost/hls/$name_low;
            # -c:v libx264 -s 1280x720 -b:v 256k -c:a copy -tune zerolatency -f flv rtmp://localhost/hls/$name_mid;
    }

    application hls {
        live on;
        hls on;
        hls_path /tmp/hls;

        # hls_fragment 1s;
        # hls_playlist_length 4s;
        hls_fragment 4s;
        hls_playlist_length 12s;
        hls_nested on;
        hls_variant _low BANDWIDTH=160000;
        # hls_variant _mid BANDWIDTH=320000;
        hls_variant _hi  BANDWIDTH=640000;
    }
}

}

1 Ответ

0 голосов
/ 26 апреля 2018

Вы не можете без ущерба для качества. Если бы был какой-то способ, ffmpeg включил бы его по умолчанию. Лучше всего добавить аппаратный кодер или два, например карту Nvidia с nvenc (убедитесь, что вы получаете дорогой код с неограниченным количеством потоков, большинство ограничено двумя).

...