#nginx #http-live-streaming #rtsp #rtmp
#nginx #http-прямая трансляция #rtsp #rtmp
Вопрос:
В настоящее время у меня работает сценарий ffmpeg bash, который извлекает канал RTSP из ленты с живой камерой, а затем публикует его в формате RTM на мой сервер Nginx.
Требования к серверу заключаются в том, что пользователи могут подписываться как на канал RTMP, который публикует сервер Nginx, так и на поток HLS.
Проблема, которую я нахожу, заключается в том, что поток RTMP через некоторое время зависает, хотя поток HLS продолжает работать.
Мне интересно, не потому ли это, что это отдельный процесс, а не тот, который выполняется самим Nginx с помощью его exec
команды.
Кроме того, я не настраивал этот сервер, поэтому я понятия не имею, что мне нужно немного изменить конфигурацию.
Вот мои два сценария.
#!/bin/bash sleep 1 VID_SOURCE="rtsp://camerastream.com/MediaInput/h264/stream_" VIDEO_OPTS="-vcodec libx264 -video_size 1280x720 -b:v 2048k" AUDIO_OPTS="-c:a copy" VID_OUTPUT="rtmp://localserver:1935/live/livestream" ffmpeg -rtsp_transport tcp -r 15 -i $VID_SOURCE $VIDEO_OPTS $AUDIO_OPTS -f flv $VID_OUTPUT
А затем моя конфигурация Nginx
vents {} rtmp { server { listen 1935; application live { live on; interleave on; # Turn on HLS hls on; hls_path /tmp/hls; hls_playlist_length 15s; } } } http { default_type application/octet-stream; server { listen 8080; 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 /tmp/; } } }
Цель состоит в том, чтобы иметь один сервер, на котором подписчики могли бы просматривать канал rtmp или канал HLS