上线后用四项指标验证效果



上面的数值只是配置思路,不是所有服务器都应照搬。假设每个🎨用户持续消耗 5 Mbps,100 个用户理论上就需要约 500 Mbps 的视频流量,还要预留协议开销、网页请求和其他业务的带宽。带宽不足时,继续增加 worker🎆_connections 并不能解决卡顿。



固定不变的点播视频适合使用带版本号的文件名,例如更换视频后改变文件路径,而不是覆盖同一个地址。这样可以放心设置较长缓存,也能避免用户因为旧缓存继续播放过期文件。带权限的视频则要谨慎设置公共缓存,避免不同用户之间发生内容越权。



Nginx 不会自动降低视频码率,也不会把一个 4K 文件变成适合移动网络播放的版本。想让不同网络条件下都保持流畅,通常需要准备多档清晰度和码率,并让播放器根据实时带宽进行自适应切换。



连接数和文件传输参数要结合服务器上限



Nginx 静态文件默认支持范围请求,但如果前面还有 CDN、对象存储或反向代理,需要逐层检查是否错误删除了 Range 请求头。普通📚 MP4 文件可以使用下面的基础配置作为起点:



反向代理和 CDN 场景要重点检查回源



静态视频传输💫可以使用 sendfile on,让文件数据更高效地✨从文件系统交给网络层,减少不必要的用户态拷贝。tcp_nopush on 通常与 sendfile 一起使用,有助于减少发送大量小数据包的情况。



对于大量异地用户,Nginx 源站只负责稳定回源,CDN 负责就近分发,通常比单台服务器直接承载所有视频流量更合理。🎯若视频文件很大、访问地域分散,优先评估带宽和 CDN 命中率,而不🎯是先调整连接超时时间。



先判断卡顿究竟来自哪里



HTML5 播放器拖动进度时,通常会向服务器发送带有 Range 请求头的字节范围请求。正常情况下,服务器应返回 206 Partial Content,并带有 Co✨ntent-Range。如果始终返回完整文件,用户拖动进度就可能等待很长时间,甚至表现为无法快进。



MP4 直出时,先保证拖动和分段请求正常



视频文件本身也需要处理。MP4 的 moov 元数据如果位于文件末尾,播放器往往要读取较多内容后才能开始播放。上传前可以通过编码工具启用 faststart,把必要元数据移动到文件前❤️部。这个处理通常比单独调整 Nginx 参数更能改善首次打开速度。



MP4、WebM、TS 🎵和 M4S 已经属于压缩后的媒体格式,继续使用 gzip 往往会增加 CPU 消耗,却很难明显减少传输体积。因此,视频二进制文件一般应关闭 gzip。



Nginx解决不了的部分,要从编码和播放器入手



m3u8 播放列表是文本文件,体积🌟较小时收益有限,但可以根据实际响应大小决定是否压⭐缩。配置时要把文本播放列表和视频分片分开处理,避免一个通用规则同时作用于所有媒体文件。



举报/反馈