简体   繁体   中英

Testing HLS using JMeter

I am using JMeter to test HLS playback from a Streaming Server. So, the first HTTP request is for a master manifest file(m3u8). Say,

http://myserver/application1/subpath1/file1.m3u8

The reply to this will result in a playlist something like,

subsubFolder/360p/file1.m3u8
subsubFolder/480p/file1.m3u8
subsubFolder/720p/file1.m3u8

So, next set of URLs become

http://myserver/application1/subpath1/subsubFolder/360p/file1.m3u8
http://myserver/application1/subpath1/subsubFolder/480p/file1.m3u8
http://myserver/application1/subpath1/subsubFolder/720p/file1.m3u8

Now, individual reply to these further will be an index of chunks, like

0/file1.ts
1/file1.ts
2/file2.ts
3/file3.ts

Again, we have next set of URLs as

http://myserver/application1/subpath1/subsubFolder/360p/0/file1.ts
http://myserver/application1/subpath1/subsubFolder/360p/1/file1.ts
http://myserver/application1/subpath1/subsubFolder/360p/2/file1.ts
http://myserver/application1/subpath1/subsubFolder/360p/3/file1.ts

This is just the case of one set(360p). There will be 2 more sets like these(for 480p, 720p).

I hope the requirement statement is clear uptill this.
Now, the problem statement.

Using http://myserver/application1 as static part, regex(.+?).m3u8 is applied at 1st reply which gives subpath1/subsubFolder/360p/file1 . This, is then added to the static part again, to get http://myserver/application1/subpath1/subsubFolder/360p/file1 + .m3u8 The problem comes at the next stage. As, you can see, with parts extracted previously, all I'm getting is

http://myserver/application1/subpath1/subsubFolder/360p/file1/0/file1.ts

The problem is obvious, an extra file1, 360p/file1 in place of 360p/0 .

Any suggestions, inputs or alternate approaches appreciated.

If I understood the problem correctly, all you need is the file name as the other URLs can be constructed with it. Rather than using http://myserver/application1 as static part of your regex, I would try to get the filename directly:

([^\/.]+)\.m3u8$
# match one or more characters that are not a forward slash or a period
# followed by a period
# followed by the file extension (m3u8)
# anchor the whole match to the end

Now consider your urls, eg http://myserver/application1/subpath1/subsubFolder/360p/file1.m3u8 , the above regex will capture file1 , see a working demo here. Now you can construct the other URLs, eg (pseudo code):

http://myserver/application1/subpath1/subsubFolder/360p/ + filename + .m3u8
http://myserver/application1/subpath1/subsubFolder/360p/ + filename + /0/ + filename + .ts

Is this what you were after?

Make sure you use:

  • (.*?) - as Regular Expression (change plus to asterisk in your regex)
  • -1 - as Match No.
  • $1$ - as template

正则表达式4 HLS

See How to Load Test HTTP Live Media Streaming (HLS) with JMeter article for detailed instructions.

If you are ready to pay for a commercial plugin, then there is an easy and much more realistic solution which is a plugin for Apache JMeter provided by UbikLoadPack:

Besides doing this job for you, it will simulate the way a player would read the file. It will also scale much better than any custom script or player solution. It supports VOD and Live which are quite difficult to script.

See:

Disclaimer, we are the providers of this solution

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM