久しぶりに配信のネタ
つい先日、YouTube Liveに超低遅延モードというのが追加されましたが、これは一体どういう仕組みなのかを追いかけて考察してみる
これまでの配信を振り返る
低遅延という話を聞くと、RTMPを思い出すわけですが、RTMPによる配信はほぼ無くなりつつあります
とはいえ、低遅延の需要というのは一定数あり続けるわけです
ですが昨今の配信では30秒以上の遅延を伴うHTTPを使った方式がライブ配信では一般的になっています
AbemaTVしかり、これまでのYouTubeしかり
超低遅延モードの仕組み
まず、超低遅延モードを使用した場合は最短で約2.0秒で配信する事が出来ます
私なりに色々と試行錯誤をして超低遅延モードで流れている映像のGOP構造を解析してみました
その結果、超低遅延モードでの配信はMPEG-DASHによって行われており、GOP構造に特殊な細工がされている事が分かりました
通常の配信方式では、IフレームとPフレームとBフレームの三種類を使用します
例えばIPBBBB・・・みたいな配列ですね。これが一般的です
ところが、超低遅延モードで流れてくる映像のGOPにはBフレームが存在しません
つまり、IPPPPP・・・という配列で映像が流れてくるわけです
これが一番のミソです
CMAFという規格を知る
IPPPPという配列を見て私が思い出すのは、伝送用のエンコーダーで使用されていたなぁという事です
確かに伝送用のエンコーダーは、その名の通りで低遅延で映像を遠隔地から伝送する事が出来ます。ここに目を付けたんでしょうね
そしてIフレームとPフレームだけを使った配信について色々と調べたところ、この超低遅延モードは、CMAFという規格が使用されていると推測されます
CMAFについて詳しくはこちらの資料をご参照ください
https://parisvideotech.com/wp-content/uploads/2017/07/Bouqueau-Weil_UltraLowLatencyWithCMAF.pdf
ざっくりとCMAFを説明すると以下のような事になります
・fMP4を使っている
・DASHとHLSで使用する
・セグメントの長さだけでなく、チャンクの長さも利用して低遅延化する
・I+Pフレームだけで構成されている
・再生はIDRから始まる
通常はセグメントをダウンロードして再生を行うところを、セグメントを使用するのはオリジンのサーバー内だけで、後段のCDNではセグメント内のチャンク化した物をHTTPチャンクとしてPullしてプレイヤーに流すという仕組みのようです
しかもCMAFの規格の場合は、通常のセグメント内にさらに細かく500msのようなチャンクを仕込んで流すので、1つのセグメントを待たずして映像の再生が開始されるという仕組みです
今後の展望
現行のCAMFを使った配信にはHTTP/1.1を使用しているようなので、HTTP/2での実装が待っているようです
そうしないと私みたいに解析する変な人が出ると思いますし
あとは、この方式が一般化するまでには半年ぐらいかかるんじゃないかなというのが私見です
今はYouTubeだけでやってると思いますが、正直YouTube内のサーバーで力業でやってる感があるので、エンコーダーからMPEG-DASHのPushでCMAF出せるようにならないと普及はしないでしょう
既にHarmonic、Elemental、Media Excelが対応に乗り出してるようです。この三社は流石ですね
それにしても色々と考えるものだと感心してしまいます