Answer the question
In order to leave comments, you need to log in
Why doesn't hls distribution through nginx-rtmp-module work?
Наастраиваю рестримминг rtsp-потока через hls средствами nginx-rtmp-module и ffmpeg. Если на раздающем сервере выполнить rtmpdump -r "rtmp://127.0.0.1:1935/show/live" -v, то поток запускается. В это время в нужной папочке появляются файлы .m3u8 и .ts. Но при запросе файла .m3u8 по http файл не создается и не отдается.
По сути имею 2 проблемы:
1. Не знаю точно, как должен работать модуль, но в фоновом режиме (без запуска rtmpdump) файлы .m3u8 и .ts не создаются. По http-запросу они также не создаются.
2. Даже если во время работы rtmpdump попытаться загрузить файл .m3u8 через videojs на сайте, то плеер ругается на неизвестный формат. "code: 4, message: "No compatible source was found for this media."
Как решить эти проблемы?
конфиг nginx
# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;
application show {
live on;
hls on;
hls_path /tmp/hls;
hls_fragment 5s;
exec_pull ffmpeg -i "rtsp://@10.10.120.200/0" -vcodec copy -f flv -an rtmp://localhost:1935/show/live 2>>/var/log/nginx/ffmpeg_show.log;
#exec_pull ffmpeg -i "rtsp://@10.10.120.200/0" -vcodec copy -f ssegment -segment_list live.m3u8 -segment_list_flags +live -segment_time 10 out%03d.ts;
}
}
}
.....
server {
listen 192.168.100.87:80;
server_name tm2.test.ru www.tm2.test.ru;
index index.php index.html index.htm;
access_log /home/user1/logs/tm2.demis.ru.log combined;
access_log /home/user1/logs/tm2.demis.ru.bytes bytes;
error_log /home/user1/logs/tm2.demis.ru.error.log error;
root /home/user1/web/blog/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
expires max;
}
location ~ [^/]\.php(/|$) {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass 127.0.0.1:9006;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
add_header Access-Control-Allow-Origin *;
}
}
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/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
#root /tmp;
alias /tmp/hls;
}
error_page 403 /error/404.html;
error_page 404 /error/404.html;
error_page 500 502 503 504 /error/50x.html;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Live Streaming</title>
<link href="//vjs.zencdn.net/5.8/video-js.min.css" rel="stylesheet">
<script src="//vjs.zencdn.net/5.8/video.min.js"></script>
</head>
<body>
<video id="player" class="video-js vjs-default-skin" height="360" width="640" controls preload="none">
<source src="http://tm2.test.ru/hls/live.m3u8" type="application/x-mpegURL" />
</video>
<script>
var player = videojs('#player');
</script>
</body>
</html>
Answer the question
In order to leave comments, you need to log in
Поменяйте exec_pull на exec_static
Сейчас он у вас запускается только по первому запросу к rtmp
Делали отдачу как то по HLS. МОгу поискать конфиги.
Но насколько я помню, файл m3u8 доложен отдаваться в браузер как минимум.
Тоесть можете его запросить у веб сервера?
Вроде файл m3u8 должен создаваться NGINX при старте hls...
Попробуй измени строку
на
exec_static ffmpeg -i "rtsp://@10.10.120.200/0" -vcodec copy -f flv -an rtmp://localhost:1935/show/live;
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question