🎃

SkyWay WebRTC GatewayをC#から使ってみる

2023/03/05に公開約1,400字

モチベ

  • 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通信したい

どうぞ

https://github.com/husty530/skyway-gateway-template

  • ライブラリはコチラに。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

ログインするとコメントできます