Skip to content

Instantly share code, notes, and snippets.

@voluntas voluntas/open_momo.rst
Last active May 18, 2019

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

OpenMomo プロジェクト

日時:2019-05-06
作:時雨堂
バージョン:19.05.0
Github URL:https://github.com/shiguredo/momo

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

概要

OpenMomo プロジェクトとは 時雨堂 が開発/提供している WebRTC Native Client Momo を OSS として公開し、 その後も継続して開発、メンテナンスしていくプロジェクトです。

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

OpenMomo プロジェクト

WebRTC Native Client Momo を継続的に開発、メンテナンスしていくプロジェクトです。

機能追加開発などはサブプロジェクトとしてやっていきます。

優先的対応について

サブプロジェクトで公開している機能については、有償にて優先的に対応することが可能です。

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

ROS 対応プロジェクト

Momo を ROS に対応するプロジェクトです。

  • [ ] ROS Melodic Morenia
  • [ ] ROS2 Crystal Clemmys

DataChannel 対応プロジェクト

Momo で DataChannel の利用を可能にするプロジェクトです。

  • [ ] シグナリングの DataChannel 対応

NVENC 対応プロジェクト

Momo を NVIDIA のビデオカードが提要する NVENC (ハードウェアエンコーダ) に対応するプロジェクトです。

  • [ ] Jetson Nano での NVENC 対応
  • [ ] Windows 10 での NVENC 対応

Windows 対応プロジェクト

Momo を Windows に対応するプロジェクトです。

  • [ ] Windows 10 最新版への対応
  • [ ] libwebrtc の Windows ビルド対応

スクリーンキャプチャ対応プロジェクト

Momo にスクリーンキャプチャ機能を追加するプロジェクトです。

  • [ ] Windows 最新版への対応
  • [ ] macOS 最新版へ対応

WebRTC Signaling Server Ayame 対応プロジェクト

  • [ ] Ayame 最新版へ対応

Momo に WebRTC Signaling Server Ayame 対応を追加するプロジェクトです。

以下のように ayame というサブコマンドが利用できるようになります:

./momo ayame

目的

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

方針

  • libwebrtc を利用する
  • サポートはベストエフォートで行う
  • オフラインのイベントは行わない
  • 無料での機能追加要望は受け付けない
  • 無料でのハードウェア追加対応要望は受け付けない
  • バグ修正のみ受け付ける
  • H.264 ソフトウェアエンコードは利用しない
  • 機能追加はサブプロジェクトとして進めていく

ゴール

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

WebRTC Native Client Momo

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

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

WebRTC Native Client Momo 今後 – shiguredo – Medium

仕様

  • ソースコードのライセンスは Apache License 2.0
  • WebRTC SFU Sora 向けシグナリング機能搭載
  • P2P で利用可能なシグナリングサーバ内蔵
  • 音声コーデックは Opus
  • 映像コーデックは VP8 または VP9 または H.264
    • H.264 についてはソフトウェアエンコーダには非対応でハードウェアエンコーダのみに対応
  • Ubuntu x86_64 向けビルド
  • Ubuntu ARMv8 向けビルド
  • Raspbian ARMv7 向けビルド
  • Raspbian ARMv6 向けビルド
  • Windows x86_64 対応
    • 継続的な開発、メンテナンスの対象外
  • macOS x86_64 向けビルド
    • 継続的な開発、メンテナンスの対象外
  • ROS 対応
    • 継続的な開発、メンテナンスの対象外
  • external/webrtc - Git at Google
    • 修正 BSD ライブラリ
    • WebRTC ライブラリ
  • nlohmann/json: JSON for Modern C++
    • MIT ライセンス
    • JSON ライブラリ
  • CLIUtils/CLI11: CLI11 is a command line parser for C++11 and beyond that provides a rich feature set with a simple and intuitive interface.
    • 修正 BSD ライセンス
    • コマンドライン引数ライブラリ
  • Boost C++ Libraries
    • Boost ライセンス
    • C++ ライブラリ

動作環境

リリースを行っていないものも含まれます

  • Ubuntu 18.04
    • x86_64
    • armv8
  • Ubuntu 16.04
    • armv8
  • Raspbian 最新版
    • armv7
    • armv6
  • macOS 最新版
    • macOS 版は継続的な開発、メンテナンスの対象外です
    • バイナリも提供しません、自前でのビルドをお願いします
    • x86_64
  • Windows 10 最新版
    • Windows 版は継続的な開発、メンテナンスの対象外です
    • バイナリも提供しません、自前でのビルドをお願いします
    • x86_64

事例

STADIA もどき

tnoho による実装例

  • Momo を Windows に対応
  • 画面共有機能の追加
    • 映像だけでなく音声データのステレオでの取得対応
  • NVIDIA のハードウェアエンコーダである NVENC を利用して H.264 に変換
  • ブラウザのマウス、キーボードの情報を DataChannel で送信

以下につぶやきをまとめました。

もう少し詳細にまとめた記事はこちら。

WebRTC で実現する STADIA もどき – V – Medium

メンテナンス

  • 利用しているライブラリのアップデート
  • 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 のカスタマイズをするためのテクニカルサポートを提供しています。

進捗

2019-04-22

  • Jetson Nano への対応を開始しました
    • Ubuntu 18.04 on ARM64 への対応
    • NVENC プロジェクトへの開始

2019-04-12

いくつかのサブプロジェクトを立ち上げました

  • DataChannel 対応プロジェクト
  • NVENC 対応プロジェクト
  • Windows 対応プロジェクト
  • スクリーンキャプチャ対応プロジェクト
  • WebRTC Signaling Server Ayame 対応プロジェクト

2019-03-30

  • Jetson Nano への対応を検討しています
    • 4K@30 H.264 のハードウェアエンコードに対応している
    • 対応 OS が Ubuntu 18.04 である
    • ROS に対応している

2019-03-14

2019-02-24

  • ROS の Audio に対応中
  • libwebrtc M73 に対応中

2019-02-06

  • macOS の VideoToolbox 対応の Pull-Request をマージした
    • tnoho に感謝
    • H.264 コーデック利用時に macOS に搭載されているハードウェアエンコーダーを利用する

2019-01-22

2019-01-08

  • macOS 対応の Pull-Request をマージした
    • hakobera (Kazuyuki Honda) に感謝
    • H.264 関連の調査が必要なため macOS 版対応のリリースは 19.02 か 19.03 で行う

2018-12-25

  • 18.12.0 をリリースした
    • ROS Kinetic 対応
    • p2p モードの切断後に自動的に window が閉じられないようにする
    • Boost 1.69.0 にアップデート
    • CLI11 v1.6.2 にアップデート
    • JSON v3.4.0 にアップデート

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 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
You can’t perform that action at this time.