WebRTC SFU DataChannel 対応 (1)

なぜ DataChannel を実装するのか

WebRTC には MediaChannel と DataChannel の2つがある。MediaChannel は音声と映像、DataChannel はデータ。自社で開発している WebRTC SFU では MediaChannel のみの対応としてきた。

自社の SFU が MediaChannel のみの対応をしていたのにはいくつか理由がある。

一つは DataChannel がWebRTC P2P で生きる API だと考えていたからだ。実際 WebRTC DataChannel でWebRTC SFU のメリットを活かした事例はでてきていない。

そもそも DataChannel はリアルタイムに P2P なデータをやり取りするための仕組みだが、サーバ経由でデータのやり取りをリアルタイムにやる必要があるのであれば WebSocket を利用するべきであって、わざわざ WebRTC SFU で DataChannel を使うべきではない。

もう一つは DataChannel の実装が複雑すぎるわりに、レガシーなプロトコルを使っているため、実装コストが膨らんでしまうと考えていた。

DataChannel は DataChannel (SCTP 拡張) over SCTP over DTLS over UDP とうプロトコルを重ね合わせた仕組みを利用している。はっきり言って複雑極まりない。将来的には QUIC になるらしいので、その時、実装するかと考えていた。

ただ、音声や映像とともにリアルタイムにデータを提供したいという要望が出てきた。

  • エッジデバイスで映像や音声の解析結果を音声や映像と同時に送りたい
  • VR 利用時に音声と同時にモーションデータを送りたい
  • AR 利用時に音声と映像と同時にモーションデータを送りたい

正直 VR や AR は独自プロトコルとサーバを頑張ったほうがいいのでは?と今も思っておりかなり VR/AR での WebRTC 利用には懐疑的ではある。

ただ、エッジデバイスからのデータ吸い上げは確かに WebRTC SFU + DataChannel の使いみちとしてはとても有用だと感じた。

実際 WebRTC SFU でクライアント側に DataChannel でリアルタイムに命令を送ることができるのも良さそうだ。

そこで重い腰を上げ DataChannel を自社の WebRTC SFU へ実装することにした。

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store