RTMP到HLS多种版本的问题

时间:2019-07-23 13:35:41

标签: nginx http-live-streaming rtmp

我有一台可以在端口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

我需要研究权限问题吗?您以前遇到过同样的问题吗?

感谢您的输入。

1 个答案:

答案 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;

   }