Лучшая практика Nginx + rtmp + ffmpeg для публикации потокового видео с несколькими разрешениями - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу сделать прямую трансляцию из видеофайла с несколькими разрешениями (480,720), используя nginx и rtmp, что я могу для этого сделать лучше всего:

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

пример:

rtmp {
    server {
        listen 1935;
        notify_method get;

        application live {
            live on; 
            ffmpeg -re -i /path/video_720.mp4
           -re -i /path/video_480.mp4
           -map 0 vcodec libx264 -threads 0 -vprofile baseline -acodec aac -strict -2 -f flv rtmp://localhost:1935/show/${name}_720
           -map 0 vcodec libx264 -threads 0 -vprofile baseline -acodec aac -strict -2 -f flv rtmp://localhost:1935/show/${name}_480
        }

       application show {

            live on;

            hls on;
            hls_path /stream/live/hls;
            hls_nested on;
            record off;

            # Instruct clients to adjust resolution according to bandwidth

            hls_variant _720 BANDWIDTH=2048000; # High bitrate, HD 720p resolution
            hls_variant _480 BANDWIDTH=448000; # Medium bitrate, SD resolution

        }

    }
}

2 - сохраняйте оригинальное видео и публикуйте его с разными разрешениями с помощью ffmpeg

пример:

rtmp {
    server {
        listen 1935;
        notify_method get;

        application live {
            live on;     

            exec_pull ffmpeg -re -i http://server_ip/$app/$name -vcodec libx264 -threads 0 -vprofile baseline -acodec aac -strict -2 -b:v 1920k -b:a 128k -vf "scale=1280:trunc(ow/a/2)*2" -f flv rtmp://localhost:1935/show/${name}_720 
            -vcodec libx264 -threads 0 -vprofile baseline -acodec aac -strict -2 -b:v 1024k -b:a 128k -vf "scale=854:trunc(ow/a/2)*2" -f flv rtmp://localhost:1935/show/${name}_480;
        }

       application show {

            live on;

            hls on;
            hls_path /home/stream/live/hls;
            hls_nested on;
            record off;

            # Instruct clients to adjust resolution according to bandwidth

            hls_variant _720 BANDWIDTH=2048000; # High bitrate, HD 720p resolution
            hls_variant _480 BANDWIDTH=448000; # Medium bitrate, SD resolution

        }

    }
}
...