我有一台可以在端口1935上成功流式传输RTMP的服务器。我可以从VLC访问该流。地址是rtmp:// localhost:1935 / live
我还可以成功使用Nginx-RTMP-Module https://github.com/arut/nginx-rtmp-module在HLS中进行流式传输。在nginx中,我将RTMP转换为HLS路径,并具有一个服务器块,该服务器块通过http服务生成的.m3u8文件。
问题是按照上述命名库中的建议配置HLS变体时遇到的问题。
只需澄清一下:RTMP到HLS的效果很好,但是在尝试提供多种变体时却存在问题。这是我到目前为止所做的事情,并进行了一些调查,但是仍然很难为我的m3u8服务,我不断收到404,当我运行top命令时我什么也看不到。我还将Nginx conf中的用户从www-data更改为Ubuntu。
当前配置:
运行Ubuntu 18.04 在端口1935上拉RTMP 通过https的访问权限为:https://rtmp.dev/live/stream.m3u8(当我有一个流时,此配置可以正常工作)
Nginx.conf
user ubuntu;
worker_processes 1;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
sendfile off;
tcp_nopush on;
keepalive_timeout 65;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
rtmp {
server {
listen 1935;
chunk_size 4000;
appliation src {
live on;
exec ffmpeg -i rtmp://127.0.0.1/live/$name
-c:a libfdk_aac -b:a 32k -c:v libx264 -b:v 128K -f flv rtmp://localhost/hls/$name_low
-c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 256k -f flv rtmp://localhost/hls/$name_mid
-c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost/hls/$name_hi;
}
application live {
live on;
hls on;
hls_path /home/ubuntu/hls;
hls_nested on;
hls_fragment 3;
hls_playlist_length 60;
hls_variant _low BANDWIDTH=160000;
hls_variant _mid BANDWIDTH=320000;
hls_variant _hi BANDWIDTH=640000;
}
}
}
这是服务器nginx服务器块,允许通过https进行访问
server {
listen 80 http2;
listen [::]:80 http2;
listen 443 http2 ssl;
ssl on;
ssl_certificate /home/ubuntu/ssl/domain-ca-bundle.crt;
ssl_certificate_key /home/ubuntu/ssl/domain.key;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:20m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
root /home/ubuntu/hls;
server_name rtmp.dev;
location / {
types {
application/dash+xml mpd;
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
}
}
我使用FFMPEG在RTMP中进行流传输,我可以自己播放stream.m3u8流,但是当设置了多种版本时,它将变成404响应。
您可以看到Nginx在/ home / ubuntu / hls中存储了一个文件,但是当我将nginx conf更改为多版本时,该文件夹为空。
我的猜测是问题可能是FFMPEG无法访问此文件夹,但是一旦我将文件夹所有者变成ubuntu,我便将nginx用户更改为ubuntu并重新加载nginx
drwxr-xr-x 2 ubuntu www-data 4096 Jul 23 12:26 hls
我需要研究权限问题吗?您以前遇到过同样的问题吗?
感谢您的输入。
答案 0 :(得分:1)
根据Docs,您的ffmpeg输入使用的是 live 路径,但是您应用程序的路径是 src 。更正的版本是这样:
appliation src {
live on;
exec ffmpeg -i rtmp://127.0.0.1/src/$name
-c:a libfdk_aac -b:a 32k -c:v libx264 -b:v 128K -f flv rtmp://localhost/hls/$name_low
-c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 256k -f flv rtmp://localhost/hls/$name_mid
-c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost/hls/$name_hi;
}