连续webm视频流请求忽略Range头问题及JMeter测试方案问询
连续WebM流Range请求不生效的根因&适配方案
- 静态资源与固定长度WebM可正常支持Range请求,是因为服务端可提前获取资源完整字节长度、支持随机偏移访问。连续WebM流属于实时生成的无固定总长度资源,默认不存在可回溯的固定字节偏移边界,大部分服务端默认会直接忽略这类动态流的Range头,属于正常行为。
- 要让连续WebM流支持Range请求,需对服务端做两处改造:
- 新增最近一段时间的流切片缓存,为每一段切片分配固定的字节偏移映射范围,响应头返回
Accept-Ranges: bytes,同时在Content-Range中正确返回当前请求的分片范围和模拟的总长度占位 - 检查服务端的Web服务器(Nginx/Apache/Caddy等)配置,删除针对动态流路径的Range头禁用规则,部分直播服务默认会主动忽略动态流的Range头避免缓存混乱
- 新增最近一段时间的流切片缓存,为每一段切片分配固定的字节偏移映射范围,响应头返回
JMeter负载测试请求构造方案
你不需要等服务端完成Range适配,也可以按以下步骤构造请求完成负载测试:
- 基础请求配置:
- 新建HTTP请求,请求方法选
GET,填入你的连续WebM流地址 - 添加请求头:
Range: bytes=0-102399,可根据需要调整范围,示例为请求前100KB内容,足够验证服务端处理能力
- 新建HTTP请求,请求方法选
- 响应校验配置:
- 若要验证Range请求是否生效,添加响应断言判断返回码为
206 Partial Content即可 - 若服务端暂不支持Range,可调整断言判断返回码为
200,同时添加响应大小断言,只要接收到大于1KB的WebM流数据即判定请求成功
- 若要验证Range请求是否生效,添加响应断言判断返回码为
- 负载配置优化:
- 线程组按测试需求设置并发数,单线程循环次数建议设置为5-10次,避免长时间拉流占满测试机内存
- 新增
HTTP请求默认值配置统一的域名、端口参数,减少重复配置
本地测试用连续WebM流生成方法
你可以用FFmpeg在本地生成自定义的连续WebM流,不需要依赖公开在线资源:
- 执行以下命令即可启动本地连续WebM流服务:
ffmpeg -re -i [本地固定长度WebM文件路径] -loop 1 -c:v libvpx -c:a libvorbis -f webm -listen 1 http://0.0.0.0:8080/live.webm - 命令会循环播放本地的WebM文件,生成无固定长度的连续流,你可以在这个本地服务上调试Range请求适配逻辑
内容的提问来源于stack exchange,提问作者Nelson Teixeira
相关产品推荐
相关产品推荐

