🎃
SkyWay WebRTC GatewayをC#から使ってみる
モチベ
- NTTコミュニケーションズが提供しているSkywayというサービスがあります。これはシグナリングサーバーを各自で用意しなくてもWebRTC通信を手軽に行えるものです。無料枠がかなり大きいのでZoomみたいなアプリを簡単に自作することもできます。
ところがこのAPIはJavaScript, Android, iOSのSDKしか提供しておらず,PC端末ではブラウザ有りきなサービスとなっていました。 - しかし2021年,ついにNTT様はSkyway WebRTC Gatewayなるものを正式提供しました。これは先に述べたSDKのコアになる生のREST APIを公開したものとなります。「WebRTCの可能性を広げる実験的な取り組み」とあるように,よりゴリゴリな開発者向けの仕様となっています。
- 公式GitHubリポジトリにはRubyのサンプルのみ置かれているのですが,他の実装例も欲しいところだったのでC#で書いてみました,という記事です。
- ちなみに本記事の執筆時点(March, 2023)では新SkyWayでGatewayが公開されていません。旧SkyWayを使う前提で進めますので,サービス停止済などの場合は悪しからず。
こんな人へ
- NAT越えしんどい
- コンパイル型言語 × WebRTC したい
- ブラウザレスでやりたい
- 異言語間のP2P通信したい
どうぞ
- ライブラリはコチラに。NuGetでHusty.SkywayGatewayという名前で配布しています。.NET7以上のターゲットに限定していますので,Unityなどで使いたい場合はライブラリのコードをコピペして使ってください。
- Windowsでのサンプルですが,ライブラリ自体はLinuxでも使えます。
- Gatewayの実行ファイルと旧SkywayのAPIキー,映像用のGStreamerを用意する必要があります。詳しくはREADMEを参照ください。
解説
- プロジェクトの名前はGatewayServer/GatewayClientとしています。立ち上げる順番Listen→Callに合わせています。P2Pなので実際はどちらがサーバーでもないですが,わかりやすさのためにこうしています。
- 通常のバイナリ/文字列データ通信はDataChannel(UDP)を使います。
- 映像のやりとりにはMediaChannelを使います。RTPストリームを流せとのことなので,GStreamerで配信/受信してみました。受信側のサンプルにはOpenCvSharpのGStreamerビルドしたものもつけてみました。いろいろなオプションがあります。
- JavaScriptのクライアントサンプルもつけています。このように,配信と受信を別言語で記述することも可能です。自由になりましたね。
Discussion