# WebRTC Gateway

# はじめに

SkyWay WebRTC Gatewayは、WebRTCの可能性を広げる実験的な取り組みです。 ともにイノベーションに挑戦する仲間を募集しています。

# コンセプト

SkyWayは、WebRTCを誰にとっても使いやすくすることをミッションとして開発しています。 まずブラウザに対してはシグナリングを提供するところからスタートし、次にiOSやAndroidでも動かせるようにSDKを開発するなどサポート範囲の拡大を行ってきました。 これらの取り組みの次の一手として、動作対象とユースケースを一気に拡大すべく、IP通信のできる全てのデバイスをサポートするために作ったのがこのSkyWay WebRTC Gatewayです。

# 背景

ブラウザの中にあるWebRTC Engineは、ブラウザのAPIを介してしか操作できません。ブラウザ上のJavaScriptからの操作が前提になっています。

WebブラウザのWebRTC Engineを直接コントロールできない

そのためかゆいところに手が届かず、悩んでいることがあるのではないでしょうか。例えば

  • ブラウザを動かす能力のないデバイスでもWebRTCで通信したい
  • 外部にあるIoTデバイスをどうやって操作したらいいんだろう?
  • AIで映像を解析したり、作ったデータを送りたいんだけど…
  • サーバでも動かしたいんだけど、ヘッドレスブラウザでは用途に合わないんだよね…
  • 自社にある莫大なSIP/RTP資産をWebRTC時代にも活用できないものか…?
  • etc...

外部のプログラムから自由に操作できる、むき出しのWebRTC Engineがあればもっと自由度が高く開発できるのに…

このようなニーズを埋めるためには、libWebRTCのようなWebRTCライブラリを利用して自分で一から開発するか、OpenWebRTCJanusのようなWebRTC対応のアプリケーションを利用するかしか方法がありませんでした。 しかし、ライブラリの内容を理解してアプリケーションを開発するのは大変です。既存のアプリケーションもブラウザとは使い勝手が異なったり、シグナリングサーバやTURNサーバを自分で準備する必要があったり、開発者から運用サポートが得られないという問題があったりと、サービス導入までには様々な課題が有りました。

# 機能

以上の問題を解決するため、WebRTC通信エンジンをSkyWayでラッピングしたアプリケーションとして、SkyWay WebRTC Gatewayを開発しました。次のような機能があります。

  • 今まで通りSkyWayを利用できる
    • シグナリングサーバ、TURNサーバの利用
    • 既存のAPIに似たREST APIで操作できる
  • 外部から自由にデータを流し込むことができる
    • RTPを送ってMediaStream経由で相手側へ送信する
    • 相手側から届いたMediaStreamをRTPで受け取る
    • UDPを送ってDataChannelに流し込む
    • DataChannelで届いたデータをUDPで受け取る
  • 単体のアプリケションとして動作するので、非力なデバイスでも他の端末上で動作しているSkyWay WebRTC Gatewayを利用できる

WebRTCを外部プログラムから自由に扱える

# 利用の流れ

まずREST APIを叩き、WebRTCセッションを確立します。 後は外部のプログラムからダイレクトにRTPやUDPでデータを送受信すれば、確立したWebRTCセッション上をデータが流れていきます。 録画用デバイスに映像を流し込んだり、Firewallの裏にいるデバイスに制御信号を送ったりとWebRTCをさまざまなユースケースで自由に扱えるようになります。

# ユースケース

WebRTC Engineを自由に操作できることで、その用途は無限に広がります。 その一部をご紹介します。

  • 自分ではWebRTCを話せない非力なデバイスをブラウザからコントロール

IoT UseCase

  • 通話録音

Recorder UseCase

  • VRゲームの通信部分をWebRTCで実装する

VR Game

  • 1000人に同じ映像を送ってバーチャルWebRTCerになりたい

Virtual Youtuber

  • クラウド上のAI基盤へのデータ集積

AI UseCase1

  • クラウド上のAI基盤の解析結果閲覧

AI UseCase2

  • 既存SIP/RTP機器の活用

SIP UseCase

他にも面白い使い方を思いついたら教えて下さい!

# How to Use

API Reference

samples

sequence

Docs

# Download

Download

  • Windows(x64): Windows 10, 8, 7
  • Linux(x64): Ubuntu18.04, 16.04, etc.
  • Linux(ARM)

# Raspberry Pi (Linux ARM) Minimum Requirements

  • Hardware: Raspberry Pi 3B or later
  • Software: Raspbian Version 9 or later

# Updates and Release Notes

issues release notes

# License

利用規約

このソフトウェアは、 Apache 2.0ライセンスで配布されている製作物が含まれています。

LICENSE

NOTICE