hesp.liveにフェイルオーバーストリームを追加する

2022.03.10

動画プレイヤー製品である THEOplayer を開発しているTHEO Technologiesのサービスであるhesp.liveは, HTTPベースの低遅延プロトコルである High Efficiency Streaming Protocol (HESP) を利用しているリアルタイムストリーミングを実現するためのサービスです。

配信する側はOBS等の配信ソフトウェアを利用するだけで簡単にライブ配信を開始できるのですが、映像の取り込みの失敗した場合、何らかの接続の失敗が起こった場合でも映像をストップせずに提供したいといった要件が出てくると思います。

このような時のためにhesp.liveではフェイルオーバーストリームを設定することが可能となっています。 一つのストリームが利用できない場合、もう一つのストリームに自動的に切り替えることにより視聴者側はごくわずかな中断しか見ることができず、何もしなくても視聴を続けることができる ということです、

自動的に切り替えることはhesp.liveのプレイヤーが判断しておこなってくれるようです。

フェイルオーバーストリームの追加方法

チャネルを2つ用意

配信用のチャネルを2つ作成します。

管理コンソールから上記のようにリージョンを分けて2つ作ってみました。

  • mainChannel(us-east)
  • backupChannel(us-west)

フェールオーバーチャネルの設定

フェールオーバーチャネルの指定は管理コンソールから簡単に設定できます。

メインのチャネルの設定画面に入り、Add a failover channelという箇所からフェールオーバー時に使用してほしいチャネルを選択して保存するだけです。

動作検証

では実際に配信を行なってみて、フェールオーバーされるのか確認してみます。 Webページにプレイヤーを埋め込んで検証します。

プレイヤーの設定

以下のhtmlを記述し、保存します。

<your-channel-id> の箇所を、メインチャンネルのIDに置き換えます。

<!DOCTYPE html>
<html>
    <head>
        <title>Test page</title>
    </head>
    <body>
        <h1>Testing embed.js</h1>
        <div
            data-hesp-live-id="<your-channel-id>"
            style="width: 600px; height: 400px"
        ></div>
        <script type="text/javascript" src="https://cdn.hesp.live/player/embed.js" async></script>
    </body>
</html>

ストリーミング開始

フェイルオーバーストリームへの自動切り替えが行われる条件として、チャネルが開始している状態 でないといけないので両方のチャネルを開始しておきます。

チャンネル開始状態は、チャンネルにストリーミングされている状態のことです。 ストリーミングがされていると、下記画像のようにチェックマークが表示されます。

メインのチャネルと、フェイルオーバー用のチャネル両方にストリーミングしておきます。

ストリーミングの開始方法に関しては、公式のドキュメントを参照。

メインチャネルの映像が来ているかは、プレイヤーで指定したチャンネルIDを含むURLで通信しているかどうかを確認しました。

メインチャネルを停止してみる

hesp.liveのコンソール上からチャネルを停止してみます。

停止した状態でプレイヤーを確認してみると、映像はほぼ止まらずに再生され続けるはずです。

プレイヤーで指定したチャンネルIDではなく、フェイルオーバーチャンネルで指定したIDを含むURLで通信していることも確認できました。

プライマリストリームが利用できなくなると、プレイヤーはバックアップストリームが定義されているかどうかを検索し、可能であればそれに切り替えます

というように、ドキュメントに書かれた通りの挙動になりましたね。

さいごに

hesp.liveのフェイルオーバー追加を試してみました。

ドキュメントを読む前はクラスター的な動きをしてくれるものだと思っていましたが、プレイヤー側で勝手にバックアップ側のストリームに切り替えてくれる機能でしたね。 将来的にはクライアントから送るストリームは1つでバックアップのチャンネルに裏で流してくれるようにしてくれればもっといいなと思いました。

参考

Adding a failover