Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
時雨堂 WebRTC Gateway Momo 開発ログ

時雨堂 WebRTC Gateway Momo 開発ログ

日時:2016-05-22
作:時雨堂
バージョン:1.2.0
url:http://momo.shiguredo.jp/

概要

時雨堂 で提供している WebRTC Gateway の開発ログです。

興味がある方は contact at shiguredo.jp までご連絡ください

WebRTC Gateway Momo

デモ

なるべく配信するようにしますが、見えないときはごめんなさい

WebRTC Gatway Momo の H.264 配信デモ

https://dl.dropboxusercontent.com/u/89936/momo_h264_demo.png

WebRTC Gateway Momo

ブラウザ以外の端末から WebRTC 経由で映像を送りたいという気持ちがありました。

WebRTC はブラウザで使うものですが、WebRTC.org が iOS や Android を WebRTC 端末として使える用にするライブラリを提供していることもあり、iOS や Android での利用も増えてきています。

しかし、iOS や Android 以外への組み込みがあまりみられてはいません。

そこで時雨堂では Raspberry Pi 2 上で、簡単に WebRTC を使用することができる WebRTC Gateway Momo を用意しました。

この Gateway を使う事でブラウザなしで映像を配信を実現することができます。

構成

単体で 1:1 で配信することが可能になります。

P2P:

カメラ -> momo-gw -> <WebRTC> -> ブラウザ

WebRTC SFU を経由することで気軽に複数へ配信することが可能になります。

WebRTC SFU:

                                                       /-> ブラウザ
カメラ -> momo-gw -> <WebRTC> -> WebRTC SFU -> <WebRTC> -> ブラウザ
                                                       \-> ブラウザ

WebRTC Gatway Momo は WebRTC SFU as a Service Anzu のシグナリング形式のみに対応しています。

使用方法

用意されたバイナリを Raspberry Pi 2 上で動作させるだけです。 カメラは USB の Web カメラでも良いですし Raspberry Pi 専用カメラでも問題ありません。

現時点では Raspberry Pi 2 + Raspbian JESSIE での動作のみを保証しております。

詳細は以下をご覧ください

https://github.com/shiguredo/momo-help/blob/master/doc/QUICK.rst

Raspberry Pi 3 への対応

ARM64 の機能を使わない 32bit モードでの起動は既に対応済みです。

現時点では Raspbian が ARM64 に非対応のため、待ち状態です

ARM64 のため Raspberry Pi 2 用とビルドが分かれるとは思いますが対応予定です。

ARM64 には暗号化高速化のための命令セットが入ってるそうなので、 CPU 使用率が下げられる可能性が高いです。

WebRTC は DTLS-SRTP という暗号方式を使用しており、その部分での AES-CTR による負荷が一定数あるためです。

Raspberry Pi Zero への対応

いろいろ調査した結果、かなり厳しいということがわかっているため、現時点ではペンディングです。

ハードウェアアクセラレータ対応

対応完了報告

2016 年夏リリースに向けて準備中です

2016 年 3 月に、 WebRTC ネイティブ API の OpenMAX (H.264) 対応が一通り完了しました。

Raspberry Pi シリーズが持っている H.264 ハードウェアアクセラレータ対応チップを WebRTC Gateway Momo から使用する事で、 H.264 での映像をハードウェアにてエンコードし、WebRTC 経由で配信することができるようになります。

今までは VP8 を使って配信すると CPU 使用率が 350% (4 コアで 400% とする) 程度使用していました。今回このハードウェアアクセラレーターを使う事で VGA で 30% 、HD で 130 % という状態まで押さえ込めるようになりました。

これにより安定的に低負荷で、高画質での映像配信を行うことが可能となりました。

着手開始報告

2016 年 1 月に、 WebRTC ネイティブ API の OpenMAX 対応に着手しました、ターゲットは Raspberry Pi 2 です。

Raspberry Pi シリーズは H.264 のハードウェアアクセラレータ対応チップを使用しています。この機能を WebRTC 配信部分に使用する機能を開発中です。

主なタスクは WebRTC ライブラリの OpenMAX 対応となります。まだ色々未知数なところもあるため、リリース日は未定です。

ただ、この対応が成功すれば、現時点でのソフトウェアエンコーダ部分で使用している CPU 使用率が激減するため、音声の配信も含められると考えています。

HD モードでの配信

WebRTC Gateway Momo の次のバージョンでは HD 画質での配信を可能にします。

実際の映像を YouTube にアップロードしておきましたので、是非ご覧ください。

WebRTC Gateway を使った WebRTC SFU 経由での映像配信 - YouTube

Chrome での H.264 対応

Chrome Canary / Dev Channel では引数オプションを指定することで H.264 に対応しています。

Chrome Canary M50 に WebRTC H.264 が入った - Qiita

Stable ではまだ H.264 配信を見ることはできません、ただ 2016 年内には対応してくると思います。

HTTP API

外部から操作するための仕組みとして HTTP API を用意しています。

Signaling Connect/Disconnect

  • POST /connect
    • Connect 中に Connect を叩くと 400 エラー
  • POST /close
    • Close 中に Close を叩くと 400 エラー

Mute Enabled/Disabled

  • POST /mute
    • { video: true, audio: false} みたいな感じ有効にする
  • GET /mute/status
    • true / false で返ってくる

ロードマップ

future

  • ソフトウェアエンコード H.264 の配信に対応

    • 必要性が見いだせず現在保留中
    • -s オプション
  • ハードウェアエンコードによる H.264 での配信

    -t オプション

1.0.0

2016 年夏

  • WebRTC ライブラリを M52 にアップデート
  • HD サイズでの配信に対応
    • -r オプション
  • PeerConnection Connect/Disconnect HTTP API
  • Mute Enabled/Disabled HTTP API
  • Opus 形式での音声配信

0.2.0

2016 年 6 月

  • WebRTC ライブラリを M50 にアップデート
  • Sora 2.0 のシグナリングに追従する
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment