Member preview

WebRTC からみた SRT

WebRTC 中級

Flash が息絶えても RMTP は生き残るだろうなと思っていたので、あまり RTMP の次というのを気にしていなかったのだが、SRT という RTMP の次に当たりそうな技術を見つけたので、WebRTC 側からみた SRT を話していきたい。

SRT の歴史や経緯などはここでは説明せず、あくまでも WebRTC に興味を持っている人が SRT とは何かをなんとなく理解できるようにするのが目的で書いている。詳しい話が知りたければ公開資料を読むことをおすすめする。

SRT は Secure Reliable Transport の略で、誤解を恐れずに大雑把に説明するのであれば UDP + 暗号化 + 再送制御を利用することで遅延を減らした RTMP くらいの感覚で良いと思う。

WebRTC 側から見ると DTLS-SRTP + RTCP という感じか。実際暗号部分は AES-CTR を利用したりしており、SRTP 自体は意識しているようだ。

WebRTC 自体は様々な機能の組み合わせだが SRT は SRTP をより配信に向けて再定義し、RTCP で実現している再送制御やエラー訂正などを実装したものと考えて良さそうだ。

ちなみに GitHub に LGPL でコードは公開されている。プロトコル仕様書は見つけられなかった。たぶん自分の探し方が下手なだけで公開されていると思う。


さて、SRT は配信業界向けのプロトコルのようでメンバー自体は多い。

サイバーエージェントが入っているのはさすがだ。FRESH! だけでなく AbemaTV でも活用していく方針なのだろう。

ちなみに SRT の日本語情報では、DPSJ の資料がとても良くまとまっており、一番最後に SRT が紹介してある。

SRT (Secure Reliable Transport)は、インターネット経由で高品質且つセキュアな低遅延ビデオデリバリーを可能にする、Haivision 社が開発したビデオトランスポート・プロトコルです。
* 劣悪なネットワーク状況下でベストな品質のライブビデオをデリバリーできるよう設計
* パケットロス、ジッター、帯域幅の変化を考慮して品質を最大化

とてもわかりやすい。つまりインターネットを利用した場合には回線の品質が不安定な場合も多いが、そんな中でも安定的に配信できるような仕組みを提供するというプロトコルである。この辺りは WebRTC はとても似ているだろう。

Wowza が SRT に対応しているようで現時点での Wowza における SRT の用途を掲載している。

まさに RTMP の代わりとしての用途で、配信者がサーバに送るためのプロトコルとして SRT を活用するという感じのようだ。

配信者からの配信をいかに遅延少なくサーバまで届けるかという用途での SRT ということなのだろう。この辺は Mixer の FTL と似ている。


SRT はあくまで通信プロトコルのみを定義しているため、その中に流すデータなどは自由なのだとおもう。基本的には H.264 や H.265 が前提であろう。この辺はあまり深くまで追いかけていない。

ただブラウザで SRT を見ることはできない。そもそもブラウザは UDP をしゃべるには色々頑張らないといけないのでそれは現実的ではないだろう。そのため、Wowza のように SRT で配信サーバに送り、変換を行い HLS/MPEG-DASH で配信するというのが当面の利用方法になりそうだ。

また、より低遅延に配信をしたいのであれば視聴側には CMAF を利用して提供するという方針があるのだろう。

現時点での大規模配信を前提とした最速は SRT to HLS/MPEG-DASH (CMAF) over QUIC という感じになるのだろうか。

ちなみに CMAF については Akamai の資料がとてもわかり易かったので一読をお勧めしておきたい。


SRT は WebRTC とぶつかる技術ではない。WebRTC はあくまでブラウザでプラグイン不要で動作する仕組みというのが大前提にあるからだ。

最後の表示部分がブラウザで遅延を少なくして配信したいのであれば WebRTC しか現時点では選択肢はない。

ただ、スマートフォン上の専用アプリを作るのであれば SRT to HLS/MPEG-DASH (CMAF) over QUIC はありだと思う。大規模であればこちらに寄っていくのではないだろうか、例えばライブコマースなどはこの技術は凄く合っている気がする。

ライブ配信でブラウザをターゲットにしていない場合はとても良い選択肢になりそうだ。

ただ、技術は出揃って入るが、低遅延で安定的に大規模配信する仕組み自体はまだこれからという印象だ。


WebRTC とぶつかるかと言われるとそんなことはまったくなく、SRT と WebRTC は仲良くしていける。

たとえば WebRTC SFU から SRT で FFmpeg に音声や映像を配信できる仕組みとかどうだろうか。FFmpeg は 4.0 で SRT に対応した。

また逆に WebRTC SFU が SRT で音声や映像を受け入れられればそのままブラウザに SRT の映像が配信可能になるかもしれない。

SRT は今後配信業界ではデファクトを担っていく技術なんだと感じた、リアルタイムな世界に身をおいている自分としては少し遠くにある技術のようには感じてしまいがちだが、より身近な技術に感じられるように意識していこうと思う。

Like what you read? Give V a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.