バッファ時間とは?|
バッファ時間の役割とストリーミングに与える影響


バッファ時間とは?バッファ時間の役割とストリーミングに与える影響

動画のストリーミングにおける“バッファ時間”は、配信側と視聴者側とで異なる動きを表します。
本記事では、配信側、視聴側それぞれにおけるバッファ時間について理解を深め、ストリーミングを改善する方法を見ていきましょう。

配信側におけるバッファ時間

配信側でのバッファ時間とは、エンコードされたパケットがストリーミングサーバー上で、送信されずに待ち状態が発生した場合に、キューにパケットを保持しておく時間を表します。ネットワークなどの環境が完璧な状況下では、エンコーダで作成されたパケットはすぐに視聴者側に送り出されます。しかし現実世界、特にモバイルクライアントの場合、ネットワーク状況は完璧ではない事がほとんどです。その為、トラフィック増加に伴いキューイングされたパケットが増えた場合、パケットをキューに保持し続けるかバッファ時間でキューのパケットをダンプするかを選択することができます。キューにパケットを保持する時間は秒単位で設定することができ、値を大きく設定しておけば、その分パケットを保持する時間を長くできます。

バッファ時間設定でのポイント(配信側)

ネットワークが動画のストリーミングに耐えられなくなると、モバイルアプリケーションでは強制的にパケットダンプが行われます。パケットダンプが行われると動画の一部の場面が失われてしまうため、パケットダンプの頻度が高くなるほど、カクカクした動画になってしまう可能性が高まります。
頻繁なパケットダンプがこのように動画の品質を落としてしまうのであれば、バッファ時間を長く設定してパケットダンプをしないようにしておけば良いのでしょうか。
もしバッファ時間を長く設定し、キューにパケットを残し続けると、その間パケットダンプは行われない為、キューでパケットが堰き止められ、遅延が発生します。バッファ時間を長くすることで、よりなめらかな動画を視聴できる一方、待ち時間が長くなってしまうため、ユーザー体験が損なわれてしまいます。

視聴側におけるバッファ時間

すでに述べたように、視聴側で設定するバッファ時間は配信側とは別のものです。視聴側でのバッファ時間とは、動画が視聴者に配信される前に、サーバー側でビデオパケットの蓄積を許可する時間です。この視聴者側でのバッファ時間を長くするほどネットワークへのアクセス集中時のバックアップが可能になります。また、時間が短いほど、キューにあるビデオが通過するのにかかる時間が短くなります。視聴側で設定したバッファ時間を超えてもパケットがサーバー上のキューに存在する場合、パケットダンプを行って最新のビデオパケットを配信するよう視聴側からサーバーに対して指示が送られます。

バッファ時間設定でのポイント(視聴側)

配信側と同様に、視聴側においても、設定したバッファ時間が、なめらかな動画を重視するのか、待ち時間を短くするのかを調整します。バッファ時間を短く設定すれば、小間切れでもリアルタイムに動画を視聴できますが、バッファ時間を長くしてなめらかな動画を視聴する場合は待ち時間が長くなり、リアルタイム性も失われます。ユーザー体験を維持しながら可能なかぎりなめらかなストリーミングを実現するために、バッファ時間の役割を確認しましたが、ネットワーク環境や視聴端末の状態によって、ストリーミングされた動画でコマ落ちが発生するということも起こります。尚、Red5Proに組み込まれているロジックでは、設定されたバッファ時間に間に合わない場合、サーバーがビデオの送信を完全に停止し、音声のみのストリームを作成し、それを通知するイベントを受信することも可能です。

まとめ

ここまで見てきたように、バッファ時間を使って動画の品質と遅延(待ち時間)の調整を行う為、バッファ時間の機能はユーザーの視聴体験に大きな影響を与えます。
動画の品質に関しては、帯域幅も大きな影響を持つため、帯域幅が特定の閾値を下回った場合に通知を送信し、ストリーミング開始前に顧客の帯域幅が良好かどうかを確認する事で動画の品質を保つことができます。それに加えて、今回解説したバッファ時間を使って、より長いバッファ時間を設定することで動画の品質を確保することも可能です。その場合、遅延が発生する可能性も高くなりますが、動画の品質を重視するのか、またはなるべく遅延(待ち時間)を抑えてリアルタイム性を重視したストリーミングにするのか、提供するストリーミングサービスや状況に応じて調整を行う必要があります。
尚、Red5Proで提供されているiOSとAndroidのSDKでもバッファ時間の機能が実装されています。トライアルも可能ですので、お気軽にご相談ください。
コラム「低遅延への道」