#fukabori で低遅延ライブ配信に入門してみた
第81回のfukabori.fmで解説されていた、HLSやRTMPを使用した一般的なライブ配信や、WebRTCを利用した低遅延配信について、個人メモを残しておきます。
81. 低遅延ライブ配信を支える技術 w/ mmasaki | fukabori.fm
前提として、ポッドキャスト収録時点において、ホストの@iwashiさんとゲストの@mmasakiさんの所属はエヌ・ティ・ティ・コミュニケーションズ株式会社です。@iwashi さんは、同社が提供するWebRTCベースのリアルタイムコミュニケーションSDK「SkyWay」の開発に携わっており、 @mmasaki さんは、低遅延ライブ配信サービス「Smart vLive」の開発者です。
典型的なライブ配信
現在の主流となっているライブ配信は、MPEG-DASHやHLSといったHTTPベースの配信技術を使用しています。
映像ファイルを小片に分割(「セグメント」と呼ばれ、一般的に6秒間隔)し、これらの小さなファイルを順にダウンロードすることで、ストリーミングのように見せかけています。
配信の通信プロトコルがHTTPのため、企業のプロキシを通過することが可能であり、CDNを活用することで大規模配信に対応できます。
遅延を減少させるためにはCMAFやUltra Low LatencyやLow Latency HLSなどの技術があり、映像のファイルサイズをさらに小さくする、バッファとして保持するファイルの数を削減する、HTTP Rangeリクエストを活用するなどしてリクエストの単位を小さくして、低遅延を実現しています。
この方式では、一般的に3秒から5秒程度の遅延を伴います。
HTTPベース配信の遅延要因は、映像ファイルを事前に作成しておく必要があること、CDNの仕様上、クライアントからのリクエストを元にオリジンサーバーから映像を取得する必要があること、ブラウザ側でバッファとして複数のファイルを持たないといけないことなどです。
低遅延ライブ配信
WebRTCを利用すると、1秒未満(Sub-Second)の超低遅延配信が可能です。
WebRTCはもともとWeb会議で使用される技術ですが、Smart vLiveではライブ配信に応用しています。
撮ってるカメラの映像と配信された映像の遅延をglass to glassと呼び、WebRTCでは0.5~0.7秒で配信できています。
低遅延ライブ配信「Smart vLive」のアーキテクチャー
Smart vLiveでは、映像のアップロードにはデファクトスタンダードであるTCPベースのRTMP(Real Time Messaging Protocol)を使用しています。
RTMPを通じて映像をアップロードした後、クラウド内でSRT(Secure Reliable Transport)を使用して映像を転送し、WebRTCを使ってクライアントに配信します。
Flashの時代には、RTMPだけでエンドツーエンドの配信が可能でした。
映像を上げることに関して、UDPベースのトランスポート技術であるSRTを利用する試みなどもありますが、Flashが終焉した後も、RTMPが定番です。
Smart vLiveではRTMPを受ける1段目とWebRTC配信を行う2段目の多段構成を取っており、クライアント数に応じて2段目をスケールアウトさせています。遅延とスケーラビリティはトレードオフの関係にあり、1段構成にすると、遅延が減る一方で、スケールしなくなります。(1段目と2段目の通信を要確認)
WebRTCの発展的話題
WebRTCはUDPを使用しているため、パケットロスが発生する可能性があります。この問題に対処するために、Smart vLiveは再送制御プロトコルであるRTX(RFC 4588 - RTP Retransmission Payload Format)や前方誤り訂正機能(Forward Error Correction;FEC)を利用し、3%程度までのパケットロスにはどうにか耐えられるとのことです。
WebRTCはUDPであり、どのポートが使われるかもわからないため、多くの企業ネットワークでは利用できません。
この回避策として、80/443のようなwell knownポートでTCP通信を中継するTURNサーバーがあります(TURN-UDP over TCP;RFC 7376 - Problems with Session Traversal Utilities for NAT (STUN) Long-Term Authentication for Traversal Using Relays around NAT (TURN))。ブラウザがあたかもHTTPかのようにTURNサーバーと通信します。
WebRTCを改善する WebTransport/WebCodecs も登場していますが、2022年9月のポッドキャスト公開当時も、2024年1月執筆時点でもSafariは未対応のため、採用が難しいです。
WebTransport/WebCodecsについては、過去のfukabori.fm(なんでもあるな)でやはりエヌ・ティ・ティ・コミュニケーションズ社員の @yuki_wtz さんの回を参照ください。
Discussion