Я создал потоковый сервер, используя Nginx, и модуль RMTP на VPS, работающем под CentOS 7. Я пытаюсь транслировать несколько IP-камер, используя OBS для широковещательной передачи потока. Мой вопрос заключается в том, как создать несколько потоковых файлов m3u8 для каждой камеры, используя различные приложения в файле nginx .conf. Я пытался использовать несколько экземпляров OBS для достижения этой цели, но у меня заканчивается процессор. Я обнаружил, что с помощью ffmpeg есть способ для потоковой передачи нескольких потоков, но я не знаю точных команд. Битрейт каждой камеры для трансляции составляет примерно 512 кбит / с-1024 кбит / с. Мой nginx .conf выглядит следующим образом:
# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;
# Define the Application
application camera1 {
live on;
exec ffmpeg -i rtmp://123.123.123.123/folder/$name -vcodec libx264 -vprofile
baseline -x264opts keyint=40 -acodec aac -strict -2 -f flv rtmp://123.123.123.123/hls/$name;
# Turn on HLS
hls on;
hls_path /mnt/hls/camera1;
hls_fragment 3s;
hls_playlist_length 60s;
# disable consuming the stream from nginx as rtmp
# deny play all;
}
application camera2 {
live on;
exec ffmpeg -i rtmp://123.123.123.123./$app/$name -vcodec libx264 -vprofile
baseline -x264opts keyint=40 -acodec aac -strict -2 -f flv rtmp://123.123.123.123/hls/$name;
# Turn on HLS
hls on;
hls_path /mnt/hls/camera2;
hls_fragment 3s;
hls_playlist_length 60s;
# disable consuming the stream from nginx as rtmp
# deny play all;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
aio on;
directio 512;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
server {
listen 80;
server_name 123.123.123.123;
location / {
root /var/www/html;
index index.html index.htm;
}
location /hls {
# Disable cache
add_header 'Cache-Control' 'no-cache';
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
types {
application/dash+xml mpd;
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /mnt/;
}
}
}
Используя 2 экземпляра OBS с другим именем потока, я смог одновременно транслировать 2 камеры, но я хочу транслировать более 50 камер, и с помощью этого метода невозможно. Я думаю, что это можно сделать с помощью ffmpeg. Формат потоков RTSP: rtsp: // username:password@hostname: port, но я хочу немного помочь с командами. Любая помощь будет оценена. Заранее спасибо.