缓存和带宽决定多人播放上限



如果视频文件直接存放在服务器上,最好让Nginx直接读取,而不是每次经过PHP、Java或其他业务程序转发。下面是一份偏保📚守的静态视频配置示例,适合公开访问且文件内容不会频繁变化的MP4、M4V和We📢bM文件。



这条处理通常不会重新编码画面,速度较快,但前提是原视频编码和封装结构能够被目标播放器接受。如果播放器兼容性仍然不好,应重新编码为更通用的H.264视频和AAC音频,并根据目😎标设备制作适当分辨率与码率。



因此,Nginx100%视频优化的正确落地顺序是:先修复视频封装和码率,再确认Range分段传输,然后优化静态文件发送与缓存,最后根据并发量引入自适应码率和边缘分发。只有先找到实际瓶颈,Nginx配置调整才🌟会真正改善播放流畅度。



静态MP4的Nginx基础配置



直播HLS的m3u8播放列表会持续变化,不能使用与固定视频分片相同的长缓🤔存策略。一个常📚见的静态分发思路如下:



对于文件名带版本号、发布后不会改变的点播视频,☀️可以使用较长缓存,例如将视频文件替换为新文件名后再发布。若始终使用同一个文件名更🎆新内容,缓存时间应缩短,或者在更新时主动清理缓存,避免用户拿到旧文件。



HLS、反向代理与缓存要分开设置



Nginx编译并加载了MP4模块时,可以使用mp4指令处理部分MP4伪流式场景,例如根据start参数读取指定位置。但这个模块不是转码器,也不能替代faststart和Range请求;如果只是普通HTML5视频播放,先💎把索引前置并验证分段请求,通常🔥比盲目启用模块更稳妥。使用前应通过Nginx编译信息确认模块是否存在,否则加入该指令会导致配置检查失败。



先处理视频文件,再调整Nginx



Nginx对静态文件通常原生支持字节范围请求,不要在视频目录中配置禁用Range的规则。检查时不要🎨要求首次请求一定返回206,因为播放器首次获取完整文件信息时可能返回200;更重要的是,拖动进度条或从中间开始播放后,响应是否出现206 Partial Content、Content-Range是否正确,以及服务器是否只传输请求的片段。



很多所谓的“Nginx视频优化”其实首先应该在视频文件本身完成。MP4中的moov原子保存时长、轨道和索引信息。如果它位于文件末尾,播放器可能要等待较长时间才能获得完整信息,尤其是在移动网络或需要拖动播放时更明显。



上面的分片缓存策略只适用于分片文件名不会被重复覆盖的情况。如果系统会用同一个文件名替换旧分片,就不能随意设置immutable,否则用户可能持续读取旧内容。点播列表可以采用更长缓存,但直播列表通常需要及时重新请求。



单个MP4不够稳定时,改用自适应播放



跨域播放时还要检查响应头。若播放器和视频不🍀在同一来源,需要允许播放器所在的可信来源访问媒体资源;使用Cookie或授权信息时,不应简单地对所有来源开放通配跨域。公开免费视频与带权限的视频,缓存规则也必须分开,私有视频不能使用面向所有用户的public缓存。



举报/反馈