ピュア WebRTC 実装

ピュアというのは libwebrtc を利用しておらずという意味で使っています。例えば時雨堂が提供している WebRTC Native Client Momo は libwebrtc ベースです。

libwebrtc は Chrome や Firefox や Safari が利用しています。というか本気で WebRTC をクライアントとしてやるなら libwebrtc 一択です。それほど機能が充実していますし、チューニングもされています。

ただ、libwebrtc は気軽に使えません、さらに破壊的変更が積極的に入ります。バージョンが上がるだけでビルドできなくなるなんてざらです。追従していくには仕事でやっていくしかありません。

そこでちょっと沢てみたい人向けに WebRTC ピュア実装の出番です。libwebrtc を利用していないため気軽に利用できます。当たり前ですが音声や映像の変換は流石に libvpx や libopus を使っています。これらを利用しないというのは流石に無理です。

ピュア実装では Go と Python のクライアントがとても良くできています。

Pion

pion は Go で書かれた WebRTC 実装です。何を血迷ったか DTLS まで自前実装しています。さらに SCTP までも自前実装しているため、音声や映像の変換系のライブラリ以外は完全に Go で書かれています。

TURN は DTLS が落ち着いたらと書いてあるので、 DTLS が終わった今、対応を待ちましょう。

pion は Go のライブラリとして使えるため、自前のツールやアプリケーションに気軽に WebRTC 機能を組み込めるということです。これはとても素敵です。

最終的には WebRTC の Media Server も実装できるライブラリにしたいと書いてありました。素晴らしいですね。

aiortc

aiortc はピュア Python で実装された WebRTC 実装です。以前も紹介したことがありますが、それからガンガン実装されており、もう何でもできるライブラリになっています。DTLS 部分は OpenSSL を利用していますが SCTP は自前実装です。変換は libvpx や libopus を使っています。最近では libav を利用した H.264 に対応しました。

このライブラリは「気軽に使ってほしい」というのが主に目的になっています。特に機械学習系と連携させるのに相性が良いと思います。エンコードや暗号化は C のライブラリをラップしているため、速度性能がボトルネックになることはありません。

Python は機械学習系と相性が良いこともあり、aiortc を使って色々なことが気軽にできると思います。

Go と Python のピュア WebRTC 実装を紹介しました。これら2つはとてもよくできており、さらに活発に開発されています。もし WebRTC をブラウザや iOS/Android 以外から気軽に使ってみたい人は触ってみてください。

仕事であれば、必ず libwebrtc を使ってください。それだけは忘れないでください。ピュア WebRTC 実装と libwebrtc 実装の機能や性能差はとてつもなく大きいです。

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