NGINX.COM

NGINX 被广泛用于交付采用渐进式下载或 HTTP 伪流MP4FLV 视频内容。渐进式下载依赖于流媒体服务器处理磁盘 I/O 和并发连接的效率,而 MP4 或 FLV 伪流媒体功能则允许客户端使用简单的“拖动播放”技术在视频流中定位所需位置,而无需下载整个资源。

NGINX Plus 将这一功能扩展到了自适应的流媒体上,以支持使用 Apple HLSAdobe HDS、采用 RTMP 且基于 Flash 的服务的视频点播(VOD)应用。除了普通流媒体有的好处以外,自适应的流媒体还允许视频播放器实时选择最合适的比特率。

NGINX Plus 还可以对单个 MP4 视频流施加智能带宽限制,以防止网速过快的客户端和下载加速器使用过多资源。并且其增强的会话日志功能可以减少使用 HTTP 流媒体来记录标准 HTTP 请求的开销。

NGINX Plus 支持所有常见的视频格式,包括渐进式下载、HTTP 伪流和自适应流媒体

 

HLS点播

NGINX Plus 中的 HLS/VOD 模块为打包在 MP4 文件容器(文件扩展名为 .mp4.m4v.m4a)中的 H.264/AAC 编码内容提供 HTTP Live Streaming (HLS) 支持。通过 HLS/VOD 模块,在向用户引入自适应流传输时,无需重新打包现有的 MP4 内容 – 内容会从 MP4 文件容器“转换”或“多路复用”到 HLS。NGINX Plus 模块会在不重新编码内容的情况下,从 MP4 文件容器实时分段、封包和多路复用到 HLS/MPEG-TS。

在客户端开始下载媒体片段之前,它们首先会请求一个清单文件(文件扩展名为 .m3u8)。HLS/VOD 模块会即时生成播放列表,因此您无需手动描述片段结构。

您可以将 NGINX 配置为从特定位置为 HLS 流提供服务,如下方所示:

location /hls/ {
    hls;  # Use the HLS handler to manage requests

    # Serve content from the following location
    alias /var/www/video;

    # HLS parameters
    hls_fragment            8s;
    hls_buffers         10 10m;
    hls_mp4_buffer_size     1m;
    hls_mp4_max_buffer_size 5m;
}

HLS 客户端会先请求该位置的文件的 .m3u8 清单,然后开始下载文件中指定的视频片段。同样,NGINX Plus 会实时处理 MP4 打包内容的分段任务,以进行 HLS 流传输。

此外,HLS 功能可以与 NGINX 的安全链接模块一起使用,根据唯一客户端数据(如 Cookie 或源 IP 地址)生成授权的限时链接。这为防止视频服务的滥用提供了强有力的保护。

 

HDS 自适应流媒体

Adobe 的 HTTP Dynamic Streaming (HDS) 提供了一种向用户传递自适应流媒体的替代方法。它的工作方式类似于 Apple 的 HLS,但使用不同的文件格式。

首先,使用 Adobe 的 f4fpackager 工具准备视频,该工具会生成清单(文件扩展名为 .f4m)、分段(.f4f)和索引(.f4x)文件。然后将这些文件发布到 Web 服务器,NGINX Plus 的 f4f 处理程序会将它们传递给客户端。

location /hds/ {
    f4f;  # Use the HDS handler to manage requests

    # Serve content from the following location
    alias /var/www/video;
}

 

会话日志聚合

使用 HDS 或 HLS 访问内容的视频客户端通常会为视频片段发出大量 HTTP 请求。结果产生的请求日志可能非常冗长且难以分析。

为了使流媒体下载的日志更有用,NGINX Plus 的会话日志聚合功能会生成更简明的日志,将多个 HTTP 请求合并为单个日志文件条目。单个限时会话中的所有请求都会被合并,并记录传输的总数据量。所有其他参数都来自会话中的第一个请求。

您可以启用会话日志聚合功能,以用于对媒体位置的请求,并对所有其他客户端请求使用标准日志,以保留请求日志中的详细信息。

 

MP4 带宽控制

要对 HTTP 流量下载实施限制,请使用 limit_ratelimit_rate_after 指令。这些指令定义了针对带宽的限制(字节/秒)。

NGINX Plus 还为 MP4 内容提供智能限制功能。mp4_limit_ratemp4_limit_rate_after 指令可以根据下载文件的比特率以及应用带宽限制的时间来定义带宽限制。

以下配置示例允许 MP4 文件在 15 秒内无限制地流式传输,以便客户端可以预读,然后将带宽限制为 MP4 文件比特率的 120%。

location /video/ {
    mp4;
    mp4_limit_rate_after 15s;
    mp4_limit_rate       1.2;
}

这有助于避免在客户端使用“拖动播放”功能跳过视频文件时浪费过多带宽资源,并减少视频下载加速器的影响。