動画ストリーミングの仕組み — 少しずつ届く動画をどう再生する?
動画の片と、再生待ちのバッファー
まずは、動画片の「目次」を読む
動画を少しずつ受け取りながら見る仕組みを、HLSのプレイリストで見てみましょう。次は理解用の短い例です。動画そのものではなく、再生する片の場所と長さを並べたテキストです。
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:4.0,
part0.ts
#EXTINF:4.0,
part1.ts
#EXTINF:2.0,
part2.ts
#EXT-X-ENDLIST
part0.tsを4秒、part1.tsを4秒、part2.tsを2秒、順に再生する一覧です。合計は10秒です。EXT-X-ENDLISTは、これ以上の片が追加されないことを示します。この一覧だけでは再生できず、実際の動画片と対応した配信環境が必要です。
ここでは4秒を例にしていますが、片の長さが常に4秒という決まりではありません。EXT-X-TARGETDURATIONは片の長さを扱う上限の指定で、RFCでは各EXTINFを整数に丸めた値がこれを超えない条件があります。
再生中にも、次の片を受け取る
プレーヤーは届いた片を再生しながら、次のデータを先に受け取ってバッファーへためます。受信が再生に追いつかずバッファーが足りなくなると、待ち時間が出ることがあります。
長くためればいつでも良いわけではありません。とくにライブでは、ためる量を増やすと実際の出来事から遅れて見ることにつながります。図の片やためる数は理解用の例です。
画質を変える一覧は、別にある
上の例は1つの流れのメディアプレイリストです。別のビットレートや音声などを選ぶための一覧は、複数の流れを案内するプレイリストです。プレーヤーは用意された候補と通信状況、バッファー、端末等を考えて選びます。
- ビットレート:一定時間のデータ量に関わります。
- 解像度:画像の縦横の画素数です。
- 見た目の品質:元映像やコーデック、設定なども影響します。同じ解像度でも同じ品質とは限りません。
もう少し詳しく:ライブ・CDN・形式の役割
ライブのプレイリストは新しい片の追加に合わせて更新されます。録画配信のVODと、古い片を残すイベント配信、見られる範囲が進むライブ配信は、一覧の扱いが違います。
CDNは配信の分散やキャッシュを担当し、コーデックは映像・音声を符号化します。MPEG-TSやfMP4などの形式はデータの入れ物、HLSなどは配信の扱いです。CMAFを使うことだけで低遅延が保証されるわけではありません。
低遅延HLSは片の一部を扱う仕組み等も使います。WebRTC等との選択では、やり取りの目的、規模、遅延、実装条件を見ます。「HLSは必ず30秒」「WebRTCは必ず1秒未満」といった固定値で決めないようにしましょう。
🐧 ペンギン先生のまとめ:「ストリーミング」って出てきたら「届くデータをためながら、順に再生していく仕組み」と思えばだいたいOK!
配信経路はCDNの仕組み、通信の始まりはTCPハンドシェイクで続けて見られます。
参考資料
- RFC 8216:HTTP Live Streaming — プレイリスト・片・長さ・終了タグと配信条件
- Apple:About HTTP Live Streaming — 複数の流れ・ライブと録画の一覧・画質切り替え
- Apple:Enabling Low-Latency HLS — 部分セグメントと配信側の対応条件