jmeter压测视频流-HLS
一、拉流场景
场景分析:使用拉流接口index/api/addStreamProxy,分别添加一个rtsp、rtmp、hls三种类型的视频流,通过接口,把视频上传到咱们的平台IP。通过转换,从咱们的平台播放此视频。
压测100路,可以把1个流媒体,通过拉流接口,保存100个文件stream。
压测播放:通过转换,从平台同时播放100stream文件。只同时播放同一个stream,不能压测服务器,只能吃带宽。
查询到的视频流需要在
二、使用的工具
1.Jmeter+扩展包Plugins Manager, 安装:HLS插件
插件管理器地址:https://jmeter-plugins.org/wiki/PluginsManager/

Available Plugins 安装BlazeMeter-HLS Plugin, 版本2.0, 两个包如下。安装插件后,Jmeter会自动启动。 遇到问题:只能安装version2.0, 高版本不能安装。 可直接把包放在lib\ext文件中。 hlsparserj-1.0.0.jar jmeter-bzm-hls-2.0.jar

2.外观
该插件内部解决了 HLS 的复杂性。它获取主播放列表文件,选择一个变体,并获取其媒体播放列表文件,片段等。该插件可模拟用户通过 HLS 支持不同的情况:流类型、播放时间、网络带宽和设备分辨率。

3.插件使用
- 创建一个线程组;
- 添加 HLS 采样器添加 - >采样器 - > HLS 流式采样器。
- 添加结果树View Results Tree、添加 Summary Report。查看接口返回流信息。

- 主播放地址列表
将链接设置为主播放列表文件:

5.持续时间
将播放时间设置为整个视频或一定的视频时长(秒)

6.音频和字幕轨道
可以通过语言代码或名称(例如 fr 或 french)指定是否要让插件下载特定的替代音频或字幕轨道。

7.带宽
选择要在测试中模拟的带宽。如果所选带宽只有一个播放列表,则插件将仅根据此标准选择播放列表。
- 自定义带宽(位/秒)
- 最小带宽可用
- 最大可用带宽

8.清晰度
选择所需带宽后,可以选择分辨率来模拟特定设备。

9.恢复视频下载
指定是否要在两者之间继续播放。如果保留默认值,则插件将在每次迭代时从流的开头重新开始播放。

10. 测试结果
可以设置监听器以评估测试结果。查看结果树监听器将显示 HLS 采样器的结果样本,因此可以检查请求和响应的工作方式。它将显示具有相关类型(主播放列表,媒体播放列表或视频片段)的每个样本,以轻松识别它们。

采样器将自动添加一个 X-MEDIA-SEGMENT-DURATIONHTTP
响应头,其中包含以秒为单位的媒体段持续时间(以十进制表示)。将该值与关联样本中花费的时间进行比较后,可用于执行分析。

对于 MPEG DASH,结果树显示具有相关类型(媒体,音频和字幕的清单,初始化和片段)的结果样本,以便可以轻松识别它们。
11.断言和后置处理器
该插件支持在任何可能的样本结果类型(主播放列表,媒体播放列表,媒体片段,音频播放列表,音频片段,字幕,字幕播放列表和字幕片段)上添加断言和后置处理器。要添加与特定结果匹配的断言或后置处理器,只需将其用作名称后缀以及应断言或后置处理的样本结果的类型即可。
以下是仅适用于媒体段的断言示例:

Duration Assertion: Duration to Assert:断言持续时间,填写期待的最长持续时长,单位为毫秒,若响应的时长小于填写的,则断言通过,若超过则断言失败。
如果要将断言应用于所有生成的样本结果,则只需使用不包含样本结果类型后缀的任何名称。
注意:断言和后处理器将不适用于子结果(如重定向子样本)。并且选择要应用于断言和后置处理器的样本(主样本/子样本)将不起作用。
三、示例脚本
我们在 HLS 插件的基础上简单制作上篇文章中的例子。
首先我们通过硬编码定义全局变量:

对于线程组的设置:

HLS采样器设置:

五、案例详细介绍
场景1: 拉流
使用拉流接口index/api/addStreamProxy,分别添加一个rtsp、rtmp、hls三种类型的视频流,通过接口,把视频上传到咱们的平台IP。 使用接口添加流:index/api/addStreamProxy 传参:secret :秘密 035c73f7-bb6b-4889-a715-d9eb2d1925cc (1)生成stream名称,使名称不重复。

(2)向平台发送多个媒体流信息,保存成不同的名字。

(3)把视频流stream文件名,保存到文件中。

场景2:播放拉流媒体信息
并发读取媒流体stream名称,播放流媒体视频。

场景3 :抽查播放质量
使用VLC的脚本,并发打开多个播放器,播放上传的流媒体。

文件名称test001.bat 文件内容

场景4:关闭所有的媒体流信息。

六、参考资料
1.视频播放资源参考:https://blog.csdn.net/changyana/article/details/126304833
2.媒体服务HLS压测参考资料:https://zuozewei.blog.csdn.net/article/details/110730270
3.流媒体传输协议简介: https://blog.csdn.net/Hulu_Beijing/article/details/127699147 https://cloud.tencent.com/developer/article/2021488
4.流媒体git 上ZLMediaKit:https://github.com/zlmediakit/ZLMediaKit/wiki/MediaServer%E6%94%AF%E6%8C%81%E7%9A%84HTTP-API
5.国内ZLMediaKit: https://gitee.com/xia-chu/ZLMediaKit/wikis/MediaServer%E6%94%AF%E6%8C%81%E7%9A%84HTTP-API