Skip to content

Instantly share code, notes, and snippets.

@voluntas voluntas/open_momo.rst
Last active Sep 19, 2019

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

OpenMomo プロジェクト

日時:2019-09-18
作:時雨堂
バージョン:19.09.13
Github URL:https://github.com/shiguredo/momo

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

概要

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

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

目的

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

方針

  • バグ修正のみ受け付ける
  • libwebrtc を利用する
  • サポートはベストエフォートで行う
  • オフラインのイベントは行わない
  • H.264 ソフトウェアエンコードは利用しない
  • Raspberry Pi 向けのバイナリのみ提供
  • 無料での機能追加要望は受け付けない
  • 無料でのハードウェア追加対応要望は受け付けない
  • Windows 版のビルドツールは有料で提供

今後の予定

予定は未定ですが、以下のようなものを予定しています。

Raspberry Pi 4 対応

日本国内で正式リリースされ次第対応していきます

デバイス一覧とデバイス指定機能

shiguredo/momo at feature/device-list

デバイス一覧とデバイス指定する機能を追加します。

$ ./momo device-list

ラズパイ限定で --video-device /dev/video0 というビデオデバイスの指定機能を追加しました。

HDMI to CSI-2 調査

Jetson Nano 限定です

HDMI から送られてくる映像をそのまま WebRTC 経由で配信可能にするための調査をしていきます。

Simulcast 対応

Sora 限定です

Momo を WebRTC SFU Sora を利用を前提とした Simulcast に対応します。

  • [ ] rid ベース Simulcast への対応
  • [ ] Raspberry Pi や Jetson Nano のハードウェアエンコーダを利用した際の Simulcast への対応

ROS 対応

仕事として依頼したい方は、 momo at shiguredo.jp までご連絡ください

時雨堂としてはビルドが成功するまでしか保証していません。

ゴール

  • ソースコードを Apache License 2.0 で公開
  • 最新 libwebrtc への追従
  • 4K 解像度までへの対応
  • Raspbian 向けビルド済みバイナリの提供
    • Raspbian 向け ARMv7 (32bit) バイナリ
      • Raspberry Pi 4 対応
      • Raspberry Pi 3 Model B/B+ 対応
    • Raspbian 向け ARMv6 バイナリ
      • Raspberry Pi Zero W/WH 対応
  • Ubuntu 向け ARMv8 ビルド対応
  • Ubuntu 向け x86_64 ビルド対応
  • macOS x86_64 向けビルド対応
  • 複数のシグナリングに対応する
    • 組み込み P2P
    • WebRTC Signaling Server Ayame
    • WebRTC SFU Sora
  • ハードウェアエンコーダー対応

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

仕様

動作環境

  • Raspbian
    • armv7
    • armv6
  • macOS 最新版
    • x86_64
  • Ubuntu 18.04
    • armv8 (Jetson Nano)
    • x86_64
      • バイナリは提供しません、自前でのビルドをお願いします
    • armv8
      • バイナリは提供しません、自前でのビルドをお願いします
  • Windows 最新版

事例

ロボットアームを遠隔制御

Momo 改造例です

tnoho による実装例

STADIA もどき

Momo 改造例です

tnoho による実装例

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

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

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

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

メンテナンス

以下が優先されます

  • libwebrtc のバージョンアップへ追従
  • OS のバージョンアップへ追従
  • ブラウザのバージョンアップへ追従
  • 利用ライブラリのバージョンアップへ追従
  • WebRTC Signaling Server Ayame のバージョンアップへ追従
  • 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-09-18

  • Jetson Nano 向けのビルド対応を公開しました
  • Momo 19.09.1-rc1 をリリース
  • H.264 ライセンス的に Momo のバイナリ配布が問題ないことわかったため、 macOS 版や Jetson Nano 版のバイナリ公開を開始

2019-09-15

2019-09-13

  • Jetson Nano 向けのビルド対応に着手しました
    • すでに Jetson Nano で H.264 + 4K@30 の配信は実現済みです
    • ubuntu-18.04_armv8_jetson_nano.tar.gz というパッケージを提供予定です
    • make ubuntu-18.04_armv8_jetson_nano.package というビルドコマンドを提供予定です

2019-09-10

  • Momo 19.09.0 をリリース
    • https://github.com/shiguredo/momo/releases/tag/19.09.0
    • Boost 1.71.0 へアップデート
    • libwebrtc m78@{#0} へアップデート
    • 音声系オプションの追加
      • --disable-echo-cancellation エコーキャンセルを無効
      • --disable-auto-gain-control オートゲインコントロール無効
      • --disable-noise-suppression ノイズサプレッション無効
      • --disable-highpass-filter ハイパスフィルター無効
      • --disable-typing-detection タイピングディテクション無効
    • いくつかの修正

2019-08-30

  • Momo 19.08.1 をリリース
  • 事例に追加
  • 音声系オプションの追加を検討中です
    • --disable-echo-cancellation エコーキャンセルを無効
    • --disable-auto-gain-control オートゲインコントロール無効
    • --disable-noise-suppression ノイズサプレッション無効
    • --disable-highpass-filter ハイパスフィルター無効
    • --disable-typing-detection タイピングディテクション無効

2019-08-24

Momo をリニューアルして 1 年が経ちました。今後もよろしくおねがいします。

2019-08-20

2019-08-15

  • 事例に追加

2019-08-13

2019-08-09

2019-08-05

2019-08-03

develop で macOS 版が動作しなくなっています

2019-07-29

develop で macOS 版が動作しなくなっています

  • Momo 19.07.1-rc2 のバイナリを公開
  • Ayame の sdp 交換の際の type が answer 固定になっていたのを修正
  • Ayame の candidate 交換の際の JSON スキーマが間違っていたのを修正
  • Ayame で peer connection 生成後に createOffer して send する実装が漏れていたので追加

2019-07-25

develop で macOS 版が動作しなくなっています

  • Momo 19.07.1-rc1 のバイナリを公開
  • Raspberry Pi 向けに --use-native オプションを追加
    • USB カメラ用で MJPEG をハードウェアデコードする
  • Raspberry Pi 向けに --force-i420 オプションを追加
    • Raspberry Pi 専用カメラ用で MJPEG を使えないため HD 以上の解像度でも MJPEG にせず強制的に I420 でキャプチャーする
  • Ayame のサブコマンドで client id を optional に指定できるように修正

2019-07-19

  • Windows 版 Momo の提供準備を開始

2019-07-18

2019-07-12

  • Raspbian を Stretch から Buster に上げる

2019-07-05

2019-07-03

2019-07-02

  • libwebrtc M76.1 に対応しました

2019-07-01

`WebRTC Signaling Server Ayame <https://github.com/OpenAyame/ayame>`_ に対応

利用例:

$ ./momo --no-audio ayame wss://example.com/ws open-momo ayame-client-id

2019-06-25

2019-06-21

  • Windows 版 Momo の広告を追加

2019-06-18

  • ハードウェアエンコーダにデコーダをパイプで繋ぐことでの高速化対応
  • HDMI to CSI-2 調査
  • Raspberry Pi H.264 HWA の MMAL 対応
  • Momo 19.07.0-rc0 のバイナリを公開
  • 事例を追加
  • CircleCI でのビルド対応を開始

2019-06-16

  • Momo Windows 版は有料にて提供する方針を明記

2019-06-15

  • Raspberry Pi H.264 HWA の MMAL 対応へを開始
  • Unified Plan へ対応
  • macOS 版 Momo の対応復活
    • H.264 の HWA を利用する場合 --fix-resolution が必須

2019-06-11

  • libwebrtc M75 にアップデート
  • CLI11 を 1.8.0 にアップデート
  • Unified Plan への対応を開始

2019-06-01

  • Ubuntu 18.04 on ARM64 への対応

2019-05-31

  • リリースの負荷を下げるためビルド済みバイナリ提供を Raspberry Pi 向けのみに絞りました

2019-05-25

  • 次のリリースに向けたタスクを整理しました
    • Jetson Nano (Ubuntu 18.04 on ARM64) 向けバイナリの提供
    • Jetson Nano での L4T Multimedia API を利用した H.264 のハードウェアエンコーダへの対応
    • libwebrtc M75 への対応
    • Unified Plan への対応
    • Ayame への対応
    • Raspberry Pi 利用時の H.264 HWA への改善
    • CLI11 を 1.7.0 にアップデート
  • Simulcast への対応を検討し始めました
    • rid ベース Simulcast へ検討
    • HWA を利用した Simulcast の検討

2019-04-22

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

2019-04-12

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

  • DataChannel 対応プロジェクト
  • L4T MultiMedia API 対応プロジェクト
  • スクリーンキャプチャ対応プロジェクト
  • 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-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_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 向けのビルドの整理

広告

Windows 版 Momo

詳細については以下を確認してください。

Windows 版 WebRTC Native Client Momo

WebRTC SFU Sora

WebRTC SFU Sora

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

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

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

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

  • 大変多くのお客様に採用いただいております
  • とにかく 落ちないこと を目的に作っています
  • とにかく 繋がること を目的に作っています
  • とにかく 手間がかからないこと を目的に作っています
  • 最新ブラウザのアップデートに追従しています
  • シグナリングサーバ内蔵ですので別途立てる必要はありません
  • TURN サーバ内蔵ですので別途立てる必要ありません
  • 日本語によるサポート対応しています
  • フルスクラッチ自前実装なのですべて把握しています
  • 1:1 の双方向に対応しています
  • 1:1000 の片方向に対応しています
  • 3:1000 といった配信者が複数の片方向にも対応しています
  • スポットライトという機能を利用することで 200 人以上の会議に対応しています
  • 録画機能があります
  • 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.