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



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



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



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



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



先判断卡顿发生在哪一层



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



上线前按播放场景验收



视频文件已经经过编码压缩,通常不应再对MP4或WebM启用gzip。对视频做gzip往往只会增加CPU消耗,却很难获得明显的体积收益。对于特别大的文件,可以在确认操作系统和Nginx版本支持后测试异步I/🌺O或线程池,但不要把aio、directio等参数直接复制到所有服务器上;磁盘类型、文件大小和内核配置不同,结果可能相反。



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



对于自建站点上的MP4视频,优先完成四件事:把MP4的索引信息放到文件前部,确保拖动时支持HTTP Range分段请求,使用Nginx高效发送静态文件,并为可缓存的视频设置合理缓存策略。如果视频需要适应不同🎯网络环境,还应使用HLS或DASH提供多档码率,而不是只依赖单个大MP4文件。



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



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



举报/反馈