Instantly share code, notes, and snippets.

Embed
What would you like to do?
OpenMomo プロジェクト

OpenMomo プロジェクト

日時:2018-12-08
作:時雨堂
バージョン:18.12.2
URL:https://github.com/shiguredo/momo

このプロジェクトに興味がある人はこの資料や momo のリポジトリに Star をつけてもらえると嬉しいです。

概要

OpenMomo プロジェクトとは 時雨堂 が開発/提供している WebRTC Gateway Momo を、 WebRTC Native Client Momo として再定義し、1 から作り直して OSS として公開し、その後も継続して開発していくプロジェクトです。

Momo は今から 2 年以上前に立ち上げた実験的製品でした。ただ残念ながら当時は Momo へリソースを割くことが難しく、うまく活用することができませんでした。

多くのお客様のおかげで WebRTC SFU Sora がビジネスとして軌道にのったこともあり、Sora を多くの人に触ってもらおうという OpenSora プロジェクト とともに、多くの人にブラウザ以外の WebRTC を体験してもらいたいという思いから、このプロジェクトを立ち上げました。

WebRTC Native Client Momo

WebRTC Native Client Momo は libwebrtc を利用しブラウザなしで様々な環境で動作する WebRTC ネイティブクライアントです。

特に Raspberry Pi 環境では Raspberry Pi の GPU に積まれている H.264 ハードウェアエンコーダー機能を利用することが可能です。

WebRTC Native Client Momo 今後 – shiguredo – Medium

目的

ブラウザなしの WebRTC を多くの人に体験してほしいと考えています。またソースコードをオープンにすることで、 Momo をベースにした何かが生まれていけばと思います。

方針

  • libwebrtc を利用する
  • サポートはベストエフォートで行う
  • オフラインのイベントは行わない
  • 現時点では Raspberry Pi 以外の HWA 対応を行わない
  • 対応 OS 追加については要望が多い Linux ディストリビューションのみ受け付ける、それ以外は受け付けない
  • 無料での機能追加要望は受け付けない
  • 無料でのハードウェア追加対応要望は受け付けない
  • バグ修正のみ受け付ける

GitHub

https://github.com/shiguredo/momo

ゴール

  • ソースコードを Apache License 2.0 で公開
  • 最新 libwebrtc への追従
  • 4K 解像度までへの対応
  • ビルド済みバイナリ提供
    • Windows 向け x86_64 バイナリ
    • macOS 向け x86_64 バイナリ
    • Ubuntu 向け x86_64 バイナリ
    • Ubuntu 向け ARMv8 バイナリ
    • Raspbian 向け ARMv7 (32bit) バイナリ
      • Raspberry Pi 3 Model B/B+ 対応
    • Raspbian 向け ARMv6 バイナリ
      • Raspberry Pi Zero W/WH 対応
  • シグナリング部分をプラガブルに実装可能にする
    • デフォルトは WebRTC SFU Sora と P2P に対応
  • ハードウェアエンコーダー部分をプラガブルに実装可能にする
  • ROS 対応
    • ROS ノードとして MotionJPEG を受け取り WebRTC での配信を実現できるようにする
  • マルチストリームを利用した双方向配信への対応
    • 要検討
  • データチャネルへの対応
    • 要検討
  • Momo を利用したアプリの開発ドキュメント

進捗

2018-12-07

  • ROS 対応版の 18.12 リリースに向けてパッケージ名を整理した
    • momo-18.12.0_raspbian-stretch_armv6.tar.gz
    • momo-18.12.0_raspbian-stretch_armv7.tar.gz
    • momo-18.12.0_ubuntu-18.04_armv8.tar.gz
    • momo-18.12.0_ubuntu-18.04_x86_64.tar.gz
    • momo-18.12.0_ubuntu-16.04_x86_64.tar.gz
    • momo-18.12.0_ubuntu-18.04_x86_64_ros.tar.gz
    • momo-18.12.0_ubuntu-16.04_x86_64_ros.tar.gz
    • momo-18.12.0_ubuntu-18.04_armv8_ros.tar.gz
    • momo-18.12.0_ubuntu-16.04_armv7_ros.tar.gz

2018-12-03

  • 18.10.2 をリリースした
    • 解像度を固定する --fix-resolution を追加した
    • シグナリング時に candidate が重複するバグを修正した

2018-11-28

  • ROS ノードとして ROS の usb_cam を利用し MJPEG を受けて P2P または Sora で動作することを確認した

p2p:

./momo image:=/usb_cam/compressed_image/compressed _use_p2p:=true _compressed:=true

sora:

./momo _use_sora:=true _SIGNALING_URL:="wss://sora.example.com/signaling" \
    _CHANNEL_ID:="sora" _auto:=true  _compressed:=true \
    image:=/usb_cam/compressed_image/compressed _video_codec:=H264 \
    _resolution:=VGA _video_bitrate:=1000 _audio_codec:=OPUS
  • ROS Melodic Morenia と ROS Kinetic Kame の 2 バージョンを提供予定
  • Intel QSV の調査を継続中
    • 2019 年には Intel QSV を利用した配信を目指す

2018-11-16

  • 18.10.1 をリリースした
    • websocketpp と civetweb を Boost.beast に置き換えた
    • --audio-bitrate を指定した場合正常に動作しない問題を修正した
    • p2p モードに --document-root オプションを追加した
    • libwebrtc を M71 に上げた

2018-11-13

  • websocketpp と civetweb を Boost.beast に置き換えた
  • 18.10.1 のリリースに向けて方針を決定
    • libwebrtc M71 への対応
    • p2p 向けオプションに --document-root を追加
    • --metadata を sora のオプションにする

2018-11-05

  • ゴールにデバイス選択機能を追加
  • ROS 用パッケージ名を何となく決める
    • momo-18.10.0_ros_amd64.tar.gz
    • momo-18.10.0_ros_arm64.tar.gz

2018-11-03

  • ゴールに ROS 対応を追加
    • ROS ノードとして Momo が Subscriber としてモーション JPEG を受けて配信できる仕組みを追加
    • ROS パッケージを追加することで Momo を簡単に ROS で利用する仕組みを追加

2018-11-01

2018-10-29

2018-10-26

2018-10-22

  • 18.10.0-rc3 をリリースした
    • バージョン情報を MOMO_VERSION に指定したら momo のバイナリの --version も反映するようにする
    • --metadata の引数は JSON のみを指定できるようにする
    • Release 18.10.0-rc3 · shiguredo/momo

2018-10-19

  • 18.10.0-rc2 をリリースした
    • P2P で音声配信が動作しなかったものを修正した
    • 解像度指定から 4K を削除した
      • 対応するには libwebrtc 側にパッチを当てる必要がある
    • Release 18.10.0-rc2 · shiguredo/momo

2018-10-17

2018-10-11

2018-10-02

  • --resolution で解像度を指定できるオプションを追加した
  • --framerate でフレームレートを指定できるオプションを追加した
  • --priority で解像度かフレームレートかを優先できるオプションを追加した
    • デフォルトはバランスを取るりますがこの機能はリリース段階で実験的機能です
  • --no-video でビデオを無効にするオプションを追加した
  • --no-audio でオーディオを無効にするオプションを追加した

2018-09-28

  • Ubuntu ARM64 対応機種に Rock64(PINE64) を追加した

2018-09-25

  • libwebrtc M70 に追従した

2018-09-20

  • Momo のコマンドライン引数をひとまず実装した

2018-09-17

  • libwebrtc M69 に追従した

2018-09-16

  • Ubuntu 16.04 向け ARMv8 (ARM64) ビルドに成功した
  • 生成されたバイナリの file コマンド結果を公開した

2018-09-12

  • Ubuntu 16.04 向け ARMv8 (ARM64) 対応をゴールに追加した

2018-09-06

  • Windows 10 x86_64 向けビルドに成功した

2018-09-02

  • Ubuntu 18.04 x86_64 向けビルドに対応した
  • Momo のコマンドライン引数を決めた

2018-09-01

  • macOS 10.13 向けビルドに対応した
  • Raspberry Pi 3 B/B+ (ARMv8) 向けを libwebrtc M69 に対応した

2018-08-31

  • Docker を利用して Raspberry Pi Zero 向けの H.264 ハードウェアエンコーダー対応ビルドが可能になった

2018-08-30

  • Raspberry Pi Zero 向けの H.264 ハードウェアエンコーダに対応した
  • 提供予定のバイナリの名前を決めた
    • momo-18.10.0_ubuntu_x86_64.tar.gz
      • Ubuntu 18.04
    • momo-18.10.0_ubuntu_armv8.tar.gz
      • Ubuntu 16.04
    • momo-18.10.0_windows_x86_64.zip
      • Windows 10
    • momo-18.10.0_macos_x86_64.zip
      • macOS 10.13
    • momo-18.10.0_raspbian_armv7.tar.gz
      • Raspbian June 2018
      • Raspberry Pi 3 B/B+
    • momo-18.10.0_raspbian_armv6.tar.gz
      • Raspbian June 2018
      • Raspberry Pi Zero H/HW

2018-08-28

  • Raspberry Pi 3 向けの H.264 ハードウェアエンコーダに対応した
  • Docker を利用して Raspberry Pi 3 向けの H.264 ハードウェアエンコーダー対応ビルドが可能になった

2018-08-25

  • Docker を利用して Raspberry Pi 3 向けのビルドが可能になった

2018-08-24

  • OpenMomo プロジェクトを公開した
  • OpenMomo に向けて Momo 2.0 のコードを整理
  • Raspberry Pi 3 向けのビルドの整理

WebRTC Native Client Momo

動作環境

  • Windows 10 最新版
    • x86_64
  • Ubuntu 18.04
    • x86_64
  • Ubuntu 16.04
    • armv8
  • macOS 最新版
    • x86_64
  • Raspbian 最新版
    • armv7
    • armv6

ロードマップ

18.12

  • ROS 対応
    • ROS 専用パッケージを作成
  • libwebrtc M72 対応
  • Intel QSV 向け H.264 / VP8 HWA の提供
  • 優先オプション改善
    • フレームレートか解像度のどちらを優先するか指定可能
  • デバイス選択機能
    • --select-camera-device
    • --select-microphone-device

18.10.1

リリース:2018 年 11 月 16 日
  • libwebrtc M71 対応
  • websocketpp と civietweb の代わりに Boost.beast を利用
  • バグ修正

18.10.0

リリース:2018 年 10 月 29 日
  • Momo を Apache License 2.0 でオープンソース化
  • Ubuntu 18.04 x86_64 対応
  • Ubuntu 18.04 x86_64 向けのバイナリの提供
  • Ubuntu 16.04 ARMv8 向けのバイナリの提供
  • Ubuntu 16.04 ARMv8 対応
  • Rock64 対応
  • Raspberry Pi 3 B/B+ 向け ARMv7 バイナリの提供
  • Raspberry Pi 3 B/B+ 向け H.264 HWA 対応
  • Raspberry Pi Zero W/WH 対応
  • Raspberry Pi Zero W/WH 向け ARMv6 バイナリの提供
  • Raspberry Pi Zero W/WH 向け H.264 HWA 対応
  • 優先オプション
    • フレームレートか解像度のどちらを優先するか指定可能
  • libwebrtc M70 対応

TODO

  • macOS 10.14 x86_64 対応
    • macOS x86_64 向けのバイナリの提供
  • Windows x86_64 対応
    • Windows x86_64 向けのバイナリの提供
  • Raspberry 向け H.264 HWA を MMAL を利用したものに変更する
  • Unified Plan 対応
  • --mock-camera
    • ダミーカメラ
  • --mock-microphone
    • ダミーマイク
  • 双方向配信対応
  • DataChannel API の用意

メンテナンス

  • 利用しているライブラリのアップデート
  • libwebrtc のアップデート
  • OS のバージョンアップへの追従
  • WebRTC SFU Sora のバージョンアップへの追従

ライセンス

WebRTC Native Client Momo のソースコードライセンスは Apache License 2.0 として公開しています。

サポート

無料でのサポート提供は行いません

WebRTC SFU Sora ライセンス契約している場合

有料にて以下の内容を提供可能です。

  • Momo のテクニカルサポート
  • Momo の OSS 公開前提での機能追加

まずは Sora サポートまでご連絡ください。

Discord

ベストエフォート運用です

最新の状況などはこちらで共有しています。質疑応答もこちらでのみ受け付けています。

https://discord.gg/gmEuZye

カスタマイズ

WebRTC Native Client Momo のカスタマイズについては、時雨堂では受け付けておりません。 ただしサポートとして Momo のカスタマイズをするためのテクニカルサポートを提供しています。

広告

WebRTC SFU Sora

WebRTC SFU Sora

商用の WebRTC SFU です。価格は同時 100 接続で年間利用料ライセンス 60 万円です。毎年かかります。製品のサポート料金込みです。200 接続だと年間 120 万円です。

複数人数での会議や、 数百人への配信、一対一の面談など様々な用途に利用可能です。

パッケージで提供しますので、自社で運用が可能です。 AWS だろうが GCP だろうが、オンプレだろうがなんでも好きな環境で動かすことができます。

サーバさえあれば起動までは 10 分です。デモ機能が内蔵しているので動かすまで 15 分です。

  • 大変多くのお客様に採用いただいております
  • とにかく 落ちないこと を目的に作っています
  • とにかく 繋がること を目的に作っています
  • とにかく 手間がかからないこと を目的に作っています
  • 最新ブラウザのアップデートに追従しています
  • シグナリングサーバ内蔵ですので別途立てる必要はありません
  • TURN サーバ内蔵ですので別途立てる必要ありません
  • 日本語によるサポート対応しています
  • フルスクラッチ自前実装なのですべて把握しています
  • 1:1 の双方向に対応しています
  • 1:300 の片方向に対応しています
  • 3:300 といった配信者が複数の片方向にも対応しています
  • スポットライトという機能を利用することで 50 人以上の会議に対応しています
  • 録画機能があります
  • Chrome / Firefox / Edge / Safari といった主要ブラウザ全てに対応しています
  • Apache 2.0 ライセンスで JavaScript と iOS と Android のクライアント SDK を公開しています
  • Apache 2.0 ライセンスで React Native 向け WebRTC ライブラリを公開しています
  • 既存システムとの連携を重視しており、Web フック機能を利用して簡単に連携が可能です
    • 認証や、クライアントの接続切断などもすべて HTTP での通知を既存のシステムに送ることができます

興味のある方はお気軽に sora at shiguredo.jp までお問い合わせください。

紹介や検討資料も公開しております。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment