使用 Nginx 或 Node 流式传输保存的 HLS 视频

Posted

技术标签:

【中文标题】使用 Nginx 或 Node 流式传输保存的 HLS 视频【英文标题】:Streaming saved HLS videos using Nginx or Node 【发布时间】:2018-05-01 03:39:18 【问题描述】:

我们必须将存储的 HLS(.m3u8,非实时)文件流式传输到本地服务器上的客户端。多个客户端同时请求多个视频,并且必须从服务器提供存储的 m3u8 片段。

我看到了两种选择

1) 使用 nginx Live 进行流式传输 2) 使用 Nodejs 或 python 应用程序将视频流式传输到客户端。

我对 nginx 和单独的应用程序服务器感到困惑。 Nginx 还支持一些没有任何应用程序服务器的流。 nginx 可以为多个客户端流式传输多个存储的视频还是仅用于实时流式传输?

Nginx 教程:: https://docs.peer5.com/guides/setting-up-hls-live-streaming-server-using-nginx/

Nodejs 应用程序:用于提供存储的 m3u8 文件的 HLS 服务器 https://github.com/RationalCoding/hls-server

我尝试了 nodeApp 并且它工作正常,并想为此使用 nginx 反向代理。但我发现使用 nginx 进行流式传输。那么对于我的应用程序,我应该使用节点应用程序流式传输还是 nginx 流式传输?这个 nginx 是否一次动态支持多个流?

任何有用的建议或文件。

【问题讨论】:

如果它不存在,任何 HTTP 服务器(包括 Nginx)都会完成同样的事情。 【参考方案1】:

如果它不是实时的,那么任何网络服务器都可以工作,因为它只是一堆小文件。您不需要为此提供任何特殊的流式传输支持。

可以从任何普通网络服务器提供视频点播的 HLS。无论是 nginx、Apache、IIS 还是一些自制的节点服务器。

【讨论】:

【参考方案2】:

是的,我们可以使用任何 HTTP 服务器来提供静态文件。如果你想写一些逻辑,那么必须使用应用服务器。 用于静态 HLS 服务的 NGINX 服务器配置。

server 
    listen       8001;
    server_name  localhost;

    location /gcf-media 
        # 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 /Users/tarun/Desktop/labVideo;
    

现在试试 VLC 或任何客户端应用程序中的 localhost:8081/gcf-media/1/1.m3u8

【讨论】:

以上是关于使用 Nginx 或 Node 流式传输保存的 HLS 视频的主要内容,如果未能解决你的问题,请参考以下文章

使用 node 和 ffmpeg 将编程创建的视频流式传输到 youtube

使用 Node.js 或任何其他 Comet 解决方案进行流式传输

使用 node js 实时流式传输 MP3 文件

排序时流式传输大数据

如何使用 WebRTC 将视频流式传输到 RTMP?

将 h.264 流包装在 mp.4 容器中并使用 nodejs 流式传输