无法从 nginx-rtmp 获得破折号流式传输

Posted

技术标签:

【中文标题】无法从 nginx-rtmp 获得破折号流式传输【英文标题】:Can't get dash streaming to work from nginx-rtmp 【发布时间】:2020-11-18 20:56:03 【问题描述】:

我正在尝试使用 rtmp 服务器将流从 OBS(编解码器设置为 x264)广播到 nginx,然后在 VLC 中以 mpeg-dash 的形式查看流。

我已经使用 rtmp 模块设置了 nginx,并且可以正常工作。我可以流式传输到 nginx 并通过 VLC 中的 rtmp 接收流。为此,我使用了这个 URL:rtmp://127.0.0.1/live/stream

这是我的配置。

 #user  nobody;
worker_processes  1;

error_log  logs/error.log debug;

events 
    worker_connections  1024;


rtmp 
    server 
        listen 1935;
        ping 30s;
        notify_method get;

        application live 
            live on;
        dash on;
        dash_path /tmp/dash;
        
    



http 
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile off;
    tcp_nopush on;
    aio off;
    directio 512;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    server 
        listen 8080;
    location /dash 
            # Serve DASH fragments
            types 
                application/dash+xml mpd;
                video/mp4 mp4;
            
            root /tmp;
            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;
            
        
    

我可以在文件资源管理器中看到stream.mpd,但是VLC总是说不能开源。我尝试了两个 URL:http://127.0.0.1/tmp/dash/stream.mpd 和 http://127.0.0.1/dash/stream.mpd,但都不起作用。

我也尝试过使用 HLS,但我也无法让它工作。

为了避免文件权限问题,我将整个文件夹设置为 chmod 777。

任何想法可能是错误的或我可以尝试什么?谢谢

【问题讨论】:

【参考方案1】:

我解决了,有点……

我使用了这里的配置:html5 live streaming

我不得不更改文件中的一些内容(例如缺少 http-tag),但随后它可以与 HLS 一起使用。事实证明,如果我使用 MPEG-DASH 或 HLS 并没有什么不同,所以我可以接受。

我发现的另一件事是,我总是在没有定义端口的情况下尝试它。对于 RTMP,这没有问题,因为我可以使用标准端口。但是在 http 上我不得不使用端口 8080,因为 80 已经在使用中。但在 VLC 中,我没有想到要定义端口。

现在它对我有用;)

【讨论】:

以上是关于无法从 nginx-rtmp 获得破折号流式传输的主要内容,如果未能解决你的问题,请参考以下文章

无法从蓝牙设备流式传输音频

如何在 flash/rtmp 中将客户端网络摄像头流式传输到网络服务器

从 Parse 下载后无法流式传输视频

如何在流式传输期间每 n 秒获取特定帧?

从 Azure 存储流式传输 blob - 无法访问已关闭的流

Android 从 Google 驱动器流式传输视频