Itay Mendelawy is Product Manager at BlazeMeter. Prior to joining BlazeMeter, Itay was a Sysadmin and Devops consultant at Devops Israel, focusing on the development of agile and devops methodologies. Itay also spent several years as a programmer and integrator at Bank Hapoalim for CyberArk products designing and developing systems for secure server management. Itay began his career with 5 years as a Systems IT/Programmer in the Israeli Defense Forces.

Become a JMeter and Continuous Testing Pro

Start Learning
Slack

Test Your Website Performance NOW!

arrow Please enter a URL with http(s)

JMeter で HLS (HTTP Live Media Streaming)の負荷テストを行う方法

最近では、ビデオはおそらく最も人気のあるタイプのオンライン コンテンツです。そのため、オンライン雑誌や Web サイトでは、世界中に高品質なビデオ コンテンツを提供し、シームレスなストリーミングを確保することが不可欠になっています。何と言っても、常に数百万人もの視聴者がいるのです。最も一般的なビデオ ストリーミング プロトコルは RTMP です。これは(Adobe が開発した)フラッシュベースのプロトコルですが、HTML や iOS デバイスではサポートされていません。

 

それでも、できることはあります。HLS (HTTP Live Streaming)は、HTML と iOS デバイスの双方でサポートされるだけでなく、JMeter で負荷テストを行うこともできます。これは以下のように実行します。

 

HTTP ベースのメディア ストリーミング


Apple は、特別なサーバ ソフトウェアがなくてもオーディオ コンテンツやビデオ コンテンツを配信できることを目指して HLS (HTTP Live Streaming)を開発しました。HTTP ベースのメディア ストリーミング プロトコルとして、HLS は Web サーバを使用し、豊富なストリームを通じて異なるビット レートでライブ コンテンツやレコーディング済みコンテンツを送信することで、さまざまなネットワーク帯域幅に対応できます。このような機能を実現するために、HLS ではメディア ストリームを分割して、ストリーム全体をダウンロード可能な連続した短いファイル コンポーネントに変換します。

 

さらに、HLS では標準の HTTP トラフィックを許可するファイアウォールやプロキシ サーバをバイパスすることができ、

多数の CDN 全体でコンテンツ配信が可能になります。HLS の詳細については、iOS デベロッパ ライブラリを参照してください

 

HLS の基盤は HTTP であるため、生成されたトラフィックは JMeter で簡単に利用できます。つまり、負荷テストを簡単に作成できます。すでに説明したとおり、HLS はメディア ソースを小さなファイルに分割し、それらのファイルをプレイリスト形式に振り分けることによって機能します。そのため、基本的には、プレイリストを取得した後にコンテンツをループして、すべてのファイルをダウンロードできます。説明は以上です。

 

スクリプトの作成

 

前述のとおり、ストリーム全体は小さなセグメントに分割されています。つまり、プレイリスト ファイル(m3u8)を取得するには、まず、最初の HTTP 要求(リソースに対して GET を実行する単純な HTTP サンプラ)を完了する必要があります。各ストリームには複数(ビデオ解像度ごと)のプレイリストを含めることができます。

 

 

プレイリストからの応答でチャンクリスト(より小さなプレイリスト)が提供されるので、正規表現のポストプロセッサを使用してすべてのリストを配列内に収集します。

 

[Match No.]ボックスに「-1」が指定されていることに注意してください。この便利な機能により、JMeter は特定の正規表現に一致するすべての文字列を検索し、それらの文字列をまとめて確認することができます。

 

これで「chunks」配列を取得できたので、以下のような foreach-controller を追加する必要があります。

 

 

このコントローラは、変数「chunks」が文字列のリストであることを認識します。そのため、各繰り返しで現在の値を「chunk」変数に格納します。

 

次の手順では、実際のメディアパーツを取得して、「ブラウザ」がメディアコンテンツを受信できるようにします。このために、以下のように別の HTTP サンプラを作成する必要があります。

 

 

この要求からの応答は、ブラウザで再生する実際のメディア ファイルになります。

 

注: これらのファイルは通常、別のサービス プロバイダ(Akamai や AWS CloudFront などの CDN プロバイダ)でホストされています。そのため、一般には、残りの要求を行う必要はありません。CDN は負荷テスト中にトラフィック シェイピングを実行し、そのトラフィックが DDoS であると判断する可能性もあるためです。このようなテストを実行する前には、CDN に連絡する必要があります。

 

次の手順では、ストリーム自体を取得します。ここでは、さらに別の正規表現ポストプロセッサが必要になります。

 

JMeter の同じ「-1」の手法がここでも使用されます。

最後に、別の HTTP 要求内だけでなく「streams」配列上で別のループを実行し、ストリームを取得します。

 

JMeter ツリーは以下のようになります。

 

 

最後に

 

HLS は現在、ビデオをストリーミングする最適な方法の 1 つであり、iOS をサポートしているのは、このプロトコルのみです。人気のビデオ ストリーミング フレームワークであるのも不思議ではありません。

 

HLS は HTTP を利用するので、他の Web トラフィック データ ストリームとほぼ同じ方法でビデオをストリーミングします。このプロトコルでは、「ネイティブ HTTP」ベースのツールを使用して、オンライン ビデオをテスト、開発、運用できるため、高い柔軟性を実現できます。このブログ記事を読んだ後は、JMeter で HLS の負荷テストを非常に簡単に実行できることもわかるでしょう。

 

質問やコメントがあれば、下のコメント欄で共有してください。できるだけ早く回答します。

 

JMeter による負荷テストの詳細については、無料の JMeter オンライン トレーニング コースにご登録ください。

     
arrow Please enter a URL with http(s)

You might also find these useful:

Interested in writing for our Blog?Send us a pitch!