1、传输 MP4 和 FLV 格式的文件
需要流式传输 MP4 或 FLV 格式的数字媒体。
解决方案
指定一个 HTTP location 代码块,提供 .mp4 或 .flv 格式的视频。NGINX 将使用渐进式
下载或 HTTP 伪流技术流式传输媒体并支持搜索:
http {server {# ...location /videos/ {mp4;}location ~ \.flv$ { flv;}}
}
示例中的第一个 location 代码块告知 NGINX,videos 目录中的文件是 MP4 格式的,可以通过渐进式下载进行传输。第二个 location 代码块告知 NGINX,所有以 .flv 结尾的文件都是 FLV 格式的,可以利用 HTTP 伪流技术进行传输。
详解
NGINX 中的流视频或音频文件处理就像单个指令一样简单。渐进式下载使客户能够在文件下载完成之前播放媒体文件。NGINX 为两种格式的媒体提供未下载部分搜索支持。
2、使用 NGINX Plus 的 HLS 模块进行流式传输
需要 HTTP Live Streaming(HLS)处理 MP4 文件中封装的 H.264/AAC 编码内容。
利用 NGINX Plus 的 HLS 模块进行实时分段、分包和多路复用,及控制分段缓冲等等,例如转发 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 4s;hls_buffers 10 10m; hls_mp4_buffer_size 1m; hls_mp4_max_buffer_size 5m;
}
该 location 代码块指示 NGINX 流式传输来自 /var/www/video 目录的 HLS 媒体,并将该媒体分割成 4 秒长度的片段。HLS 缓冲区的数量设置为 10,大小为 10MB。初始MP4 缓冲区大小设置为 1MB,最大为 5MB。
详解
NGINX Plus 的 HLS 模块支持动态复用转换 MP4 媒体文件。许多指令都支持控制媒体的分段和缓冲方式。location 代码块必须配置为使用 HLS 处理程序将媒体作为 HLS 流进行传输。HLS 分段时长设置为几秒,指示 NGINX 按时间长度对媒体进行分段。缓冲的数据量通过 hls_buffers 指令进行设置,该指令指定了缓冲区的数量和大小。允许客户端在缓冲数据达到一定数量(由 hls_mp4_buffer_size 指定)后开始播放媒体文件。但这可能需要较大的缓冲区,因为视频相关的元数据可能会超过初始缓冲区的大小。缓冲区的上限通过 hls_mp4_max_buffer_size 设置。NGINX 可通过这些缓冲变量优化最终用户体验。为这些指令选择正确的值需要了解目标受众和媒体。举例来说,如果您的大部分媒体是大型视频文件,并且目标受众拥有很高的带宽,那么您可以选择更大的最大缓冲区和更长时间的分段。这样,与内容相关的元数据在初始下载时不会出错,并且用户能够接收到更大的片段。
3、使用 NGINX Plus 的 HDS 模块进行流式传输
需要支持已经分段且与元数据分开的 Adobe HTTP Dynamic Streaming(HDS)文件。
NGINX Plus 通过 F4F 模块支持分段的 FLV 文件,使用该功能向用户提供 Adobe Adaptive Streaming(Adobe 自适应流媒体):
location /video/ {alias /var/www/transformed_video; f4f;f4f_buffer_size 512k;
}
该示例指示 NGINX Plus 使用 NGINX Plus F4F 模块向客户端提供来自磁盘某个位置的此前已分段的媒体。索引文件(.f4x)的缓冲区大小设置为 512KB。
详解
NGINX Plus F4F 模块支持 NGINX 向最终用户提供此前已分段的媒体。这样的配置就像在 HTTP location 代码块内部使用 f4f 处理程序一样简单。f4f_buffer_size 指令为此类媒体的索引文件配置缓冲区大小。
4、使用 NGINX Plus 限制带宽
需要限制下游(downstream)媒体串流客户端的带宽,且不会影响观看体验。
利用 NGINX Plus 的比特率限制功能处理 MP4 媒体文件:
location /video/ { mp4;mp4_limit_rate_after 15s; mp4_limit_rate 1.2;
}
该配置允许下游客户端在应用比特率限制之前下载 15 秒。15 秒钟过后,客户端能够以 120% 的比特率速率下载媒体,因此客户端的下载速度始终快于播放速度。
详解
NGINX Plus 的比特率限制能够让流媒体服务器根据传输的媒体动态限制带宽,客户端可以下载尽可能多的内容,从而确保无缝的用户体验。实操指南 9.1 中描述的 MP4 处理程序将这个 location 代码块指定为流式传输 MP4 媒体格式。速率限制指令(例如mp4_limit_rate_after)告知 NGINX 仅在指定的时间(几秒钟)之后限制流量的速度。MP4 速率限制方面的另一个指令是 mp4_limit_rate,该指令指定了允许客户端下载的比特率(相对于媒体的比特率)。赋予 mp4_limit_rate 指令的值 1 指定 NGINX 将带宽限制为媒体的比特率(1 比 1)。如果为 mp4_limit_rate 指令提供的值超过 1,用户将能够以超过观看的速度下载,进而缓冲媒体,并在下载时无缝观看媒体内容。