Wowzaを使ってライブ配信!だけど遅延が30~60秒と遅すぎたので3秒まで改善させる
先日とあるプロジェクトが舞い込んできまして、ライブコマースをやりたいと。
ライブコマースは、ライブ配信しながらお客さんとリアルタイムでコミュケーションを取って商品を紹介していくというスタイルのビジネスモデル。
あまり日本ではまだ流行っていませんが、中国とかでは人気らしい。
このライブコマースを実現するためにライブ配信が可能なWowzaを使うことになったのだが、初期状態だとすごく遅すぎてライブ配信どころじゃなかったです。
初期状態だと30~60秒が当たり前
Wowzaを契約して、プロジェクトを作成して、いざ配信を開始すると30~60秒ほどの遅延が発生します。負荷分散の目的でCloudFront(CDN)も導入してみたが、変化なし状態。
もちろんお客さんから「遅過ぎでライブ配信ではない」と指摘受けまして、ライブ配信の仕組みから一つ一つ調べることになりました。
配信者側はRTMPプロトコルを使用し、視聴者側はHLS(HTTP Live Streaming)という規格受信する仕組みを作ったのですが、どうやら視聴者側はHLSに問題がありました。
HLS(HTTP Live Streaming)の仕様
HLSでライブを受信すると、必ず遅延が発生します。HLSはバッファリングしながら動画データ取得しながら再生しているのですが、バッファリングするバッファサイズ(チャンクサイズ)が大きいと、その分遅延が発生することがわかりました。
HLSのバッファリングは3つのチャンク(3個のバッファデータ)を読み込んでから再生するようになっています。
つまり1個の動画データの時間が10秒だとすると、3個をデータを読み込んでから再生されるため30秒(10秒×3個)の遅延が必ず発生します。
コミュニケーションはリアルタイム(1秒くらい)で取っているので、配信者側から見ると30秒~60秒前にしゃべったことが、30~60秒後に返信が返ってくるという感じになります。配信者側はとにかくやりずらい環境かと思います。
Wowzaの遅延を改善する
先に答えを書きますが、この遅延を改善するには先ほどのチャンクの時間を短くしてやれば遅延も短縮することができます。
Wowzaのチャンクの設定は10秒(初期状態)になっています。必ず30秒以上は遅延するように設定されているためこのチャンクの設定を変更してあげます。
詳細はWowzaの公式に推奨する設定が書いてあるのでそれ通り設定してあげます。
(推奨しているならデフォルトで設定してほしいですが・・・)
参考:https://www.wowza.com/docs/how-to-improve-playback-of-lower-latency-apple-hls-streams
- cupertinoChunkDurationTarget –各チャンクの期間をミリ秒単位で設定します。デフォルト値は10000ですが、Apple HLSストリームの待ち時間を短縮するには、chunkDurationTargetを小さくする必要があります。1秒のチャンクサイズの場合、値を1000に設定します。
- cupertinoMaxChunkCount – Wowza StreamingEngineが使用可能なチャンクリストに保存するチャンクの最大数を設定します。デフォルト値は10ですが、待ち時間を短縮するために、50秒相当のチャンクを保存することをお勧めします。1秒のチャンクの場合、cupertinoMaxChunkCountを50に設定します。0.5秒のチャンクを使用している場合は、値を2倍(100)にする必要があります。
- cupertinoPlaylistChunkCount –プレイリスト内のプレーヤーに返されるアイテムの数を設定します。デフォルト値は3ですが、待ち時間を短縮するために、12秒のデータをプレーヤーに返すことをお勧めします。これにより、チャンクリスト要求間でチャンクが失われるのを防ぎます。1秒のチャンクの場合、cupertinoPlaylistChunkCountを12に設定します。0.5秒のチャンクを使用している場合は、値を2倍にする必要があります。
このようにチャンクの設定を10→1秒に変更することで実質3秒(他の要因で数秒遅れる)の遅延まで減らすことができます。
デメリットとして10秒に1回アクセスが発生していたものが、3秒に1回動画取得のアクセスが発生するため、サーバー側に負荷がかかります。
ですので、受信側にCDNを導入しておく必要があります。じゃないとwowzaのサーバー負荷で耐えられず落ちます。
Wowzaチューニング後
wowzaをチューニングして30秒~60秒かかっていた遅延が3~10秒ほどまで短縮されることができました。
再生プレーヤーによっても5秒ほど変わったりするので、どのプレーヤーが遅延が少ないかの確認も必ずしたほうが良いかと思います。
また端末(Android、iPhone、PC)でも遅延が異なったりするので、端末のチェックも忘れずにしましょう。
コメント
コメントを残す