仕事でライブ配信のシステム開発に携わることになりいろいろと調べていたのですが、
今回自分の中でライブ配信周りについてまとめたかったのは、一口にライブ配信
と言っても、ユースケースの違いによって技術的には180°変わってしまうということがあるようなので、クライアントへ正しく説明し、開発者やディレクターに共有するためにも記事にしました。
ライブ動画配信とリアルタイム動画配信
WOWZA media systems / DPSJより引用
一般的にライブ動画配信というのは、あるところで撮影している動画を、最大数分程度の時差=遅延で視聴者に見せるようなもののことをいうようです。例えるならテレビのスポーツライブのようなものです。
一方でリアルタイム動画配信というのは、zoomなどのようにインタラクションを行うためにほぼ同時のタイミングで視聴者に動画を配信するようなもののことです。双方向にコミュニケーションするためには、遅延は数秒以内にチューニングされている必要があります。
上記の図にある通り、一般的にはHLS ≒ MPED-DASH > RTMP > WebRTCの順に遅延が少ないです。
HLS / MPEG-DASH / RTMP / WebRTC
HLSとは
HLS(HTTP Live Streaming)はAppleが手動するフォーマットで、2017年にIETFで承認され、標準的に使用されています。
動画を.ts
というチャンクファイルに分割し、それをまとめた.m3u8
というフォーマットのファイルを参照します。
MPEG-DASH (DASH)
MPEG-DASHはISO国際標準規格です。HLSと同様にファイルを分割して配信しますが、コーデックを必要としないため、tsファイルを用いる場合のHLSとは異なり、H265への対応が可能だったりします。そのほかの仕様はだいたいHLSと同じで、1つのチャンクファイルが小さいために高速でチャンネルを切り替えることが可能です。
一方で、チャンクファイルが小さいことでパフォーマンスに影響を与える可能性があります。
RTMP (Real-Time Messaging Protocol)
RTMPは超低遅延、リアルタイム配信を目的に作られたプロトコルです。flashベースのため2020年末にサポートが終了するということになっていますが、未だにRTMPが使われているケースが多いのは、対応しているエンコーダ(後述)が多いためです。そのため新規案件であっても対応せざるを得ない場合があります。
WebRTC (Web Real-Time Communications)
P2Pのリアルタイム通信もともとはWebの規格として生まれたものですが、実際にはWindowsやMac、iOS、Androidにも対応しています。ミリセカンドレベルの超低遅延のため、コミュニケーションツールなどで良く使われています。
一方、WebRTCはP2Pの通信であるため、配信側は視聴者の分のデータ変換を行う必要があります。つまり視聴者が増えれば増えるほど、配信側の負担が増加していきます。そのため、大人数が視聴する場合には向いていません。
CMAFとは
CMAFというAppleとMicrosoftがMPEGに提出した、分割ファイルをさらに細かいセグメントに分ける仕組みのことです。これによってHLSなどでも低遅延が実現できますが、対応しているエンコーダーやプレイヤーが少ないため実用的に使われるには壁がありそうです。
Wirecast / TriCaster / OBSとかって?
ライブ配信を行う時に良く使われるRTMPエンコーダです。クライアントによってはこういった機材に依存している可能性もあるので、確認しておきましょう。
ユースケースごとに使うべき技術
ここまで技術的仕様や特徴をだらだらと書いてきましたが、だいたいユースケースによって使う技術が決まってくるはずです。
双方向チャットなどのように少人数ならWebRTC、インタラクティブ機能がなく、遅延を許容できる場合はHLSやDASH、大人数で尚且つ低遅延を実現したいのであれば、CMAFなどを使ってチューニングするしかない、というような感じだと思います。
僕もこの辺りは調べ始めたばかりなので、もしこれ以外のソリューションをご存知の方は教えてほしいです。
まとめ
おそらくCMAFの登場もあって、HLSやDASHでもチューニングを頑張れば低遅延が実現できる時代がやってきそうです。このチューニングの部分は開発者としては楽しい部分だと思うので、僕ももう少し調べてみようと思っています。
参考になれば幸いです。