Интересно, кто-нибудь может предложить решение и проблему, которая у меня есть.
Я запускаю несколько сценариев FFMPEG внутри блока RTMP-сервера на сервере NGINX, работающем в Ubuntu 18.04.
В основном я принимаю поток RTMP на сервер, затем использую FFMPEG для демультиплексирования в отдельные файлы заголовков аудио и видео и файлы чанков, затем в отдельных сценариях я создаю два отдельных манифеста как для аудио, так и для видео.
У моего проигрывателя (разработка ambisoni c, видеоплеер 360) возникают проблемы с правильным чтением потока, и я считаю, что это связано с процессом FFMPEG для манифестов, которые не ждут 2 секунды перед запуском.
Есть ли способ запрограммировать ожидание между скриптами, чтобы облегчить это?
Более того, есть ли способ заставить скрипты манифеста запускаться только один раз, а затем завершаться?
вот мой текущий NGINX .conf
user root;
#user www-data;
worker_processes 1;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
#ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
interleave off;
wait_key on;
meta on;
wait_video off;
idle_streams off;
sync 300ms;
session_relay on;
#allow publish 127.0.0.1;
#allow publish 192.168.2.0/24;
allow publish all;
#deny publish all;
allow play all;
#RX stream to FFMPEG, demux audio and video, write .hdr files, start chunking DASH segments .chk
exec_push sudo ffmpeg -y -re -i 'rtmp://localhost:1935/live/stream' -map 0:1 -pix_fmt yuv420p -maxrate 750k -bufsize 3000k -c:v libvpx-vp9 -s 1920x1080 -keyint_min 60 -g 60 -speed 6 -tile-columns 4 -frame-parallel 1 -threads 8 -static-thresh 0 -max-intra-rate 300 -deadline realtime -lag-in-frames 0 -error-resilient 1 -b:v 6000k -f webm_chunk -header "/var/www/html/dash/video_360.hdr" -chunk_start_index 1 "/var/www/html/dash/video_360_%d.chk" -map 0:2 -c:a libopus -mapping_family 255 -b:a 1024k -vn -f webm_chunk -audio_chunk_duration 2000 -header "/var/www/html/dash/audio_171.hdr" -chunk_start_index 1 "/var/www/html/dash/audio_171_%d.chk" 2>>/var/log/nginx/ffmpegChunk.log;
#Create video manifest
exec_push sudo ffmpeg -probesize 500M -analyzeduration 100M -f webm_dash_manifest -live 1 -i "/var/www/html/dash/video_360.hdr" -map 0 -c copy -f webm_dash_manifest -live 1 -adaptation_sets "id=0,streams=0" -chunk_start_index 1 -chunk_duration_ms 2000 -minimum_update_period 7200 "/var/www/html/dash/video.mpd" 2>>/var/log/nginx/ffmpegManifestVideo.log;
#Create audio manifest
exec_push sudo ffmpeg -probesize 500M -analyzeduration 100M -f webm_dash_manifest -live 1 -i "/var/www/html/dash/audio_171.hdr" -map 0 -c libopus -mapping_family 255 -f webm_dash_manifest -live 1 -adaptation_sets "id=1,streams=0" -chunk_start_index 1 -chunk_duration_ms 2000 -minimum_update_period 7200 "/var/www/html/dash/audio_16ch.mpd" 2>>/var/log/nginx/ffmpegManifestAudio.log;
##
# Record the incoming stream
##
# Record audio and video together
record all;
record_path /home/mathewknight/Desktop/StreamRecord/Master;
record_notify on;
# Record audio seperately
recorder audio {
record audio;
record_path /home/mathewknight/Desktop/StreamRecord/Audio;
record_suffix -%d-%b-%y-%T.audio.flv;
record_notify on;
}
# Record video seperately
recorder video{
record video;
record_path /home/mathewknight/Desktop/StreamRecord/Video;
record_suffix -%d-%b-%y-%T.video.flv;
record_notify on;
}
}
}
}