Я хочу сделать прямую трансляцию из видеофайла с несколькими разрешениями (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
}
}
}