From 830796598b253cc2f1fee22d5968cdbd8a6cacd8 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sun, 22 Dec 2019 23:50:24 +0900 Subject: [PATCH 001/105] =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=81=8C?= =?UTF-8?q?=E3=81=8B=E3=81=AA=E3=82=8A=E7=B0=A1=E5=8D=98=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E6=8C=91=E6=88=A6=E3=82=84?= =?UTF-8?q?=E3=83=81=E3=83=A3=E3=83=AC=E3=83=B3=E3=82=B8=E3=82=92=E6=B6=88?= =?UTF-8?q?=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- doc/BUILD_LINUX.md | 5 +---- doc/BUILD_MACOS.md | 5 +---- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e3a4bb0e..96c6d5ca 100644 --- a/README.md +++ b/README.md @@ -81,10 +81,10 @@ Momo はオープンソースソフトウェアですが、開発については Momo を使ってみたい人は [USE.md](doc/USE.md) をお読みください。 -## ビルドにチャレンジする +## ビルドする -- Linux 版 Momo のビルドに挑戦したい人は [BUILD_LINUX.md](doc/BUILD_LINUX.md) をお読みください -- macOS 版 Momo のビルドに挑戦したい人は [BUILD_MACOS.md](doc/BUILD_MACOS.md) をお読みください +- Linux 版 Momo のビルドしたい人は [BUILD_LINUX.md](doc/BUILD_LINUX.md) をお読みください +- macOS 版 Momo のビルドしたい人は [BUILD_MACOS.md](doc/BUILD_MACOS.md) をお読みください ## パッケージを作成する diff --git a/doc/BUILD_LINUX.md b/doc/BUILD_LINUX.md index 3a006f7d..a48dae8a 100644 --- a/doc/BUILD_LINUX.md +++ b/doc/BUILD_LINUX.md @@ -1,7 +1,4 @@ -# Linux 版 Momo のビルドに挑戦する - -Linux 版 Momo ビルドにはマシンパワーにもよりますが、少なくとも 30 分以上かかり、さらに 20GB 以上のダウンロードが必要です。 -そのため、覚悟を持って make コマンドを叩いてください。 +# Linux 版 Momo をビルドする まずは momo のリポジトリをダウンロードします。 diff --git a/doc/BUILD_MACOS.md b/doc/BUILD_MACOS.md index 7ae0b719..e076a487 100644 --- a/doc/BUILD_MACOS.md +++ b/doc/BUILD_MACOS.md @@ -1,7 +1,4 @@ -# macOS 版 Momo のビルドに挑戦する - -ビルドにはマシンパワーにもよりますが、少なくとも 30 分以上かかり、さらに 20GB 以上のダウンロードが必要です。 -そのため、覚悟を持って make コマンドを叩いてください。 +# macOS 版 Momo をビルドする まずは momo のリポジトリをダウンロードします。 From 65c656cced35d084a9301e6d33ba1e5c9c07a197 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sun, 22 Dec 2019 23:53:21 +0900 Subject: [PATCH 002/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=95=B4=E7=90=86=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 8c95ef59..ae663725 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,7 +13,8 @@ ## 19.12.1 -- [UPDATE] libwebrtc を時前しないようにする +- [UPDATE] libwebrtc を時前ビルドしないようにする + - https://github.com/shiguredo-webrtc-build/webrtc-build を利用する - @melpon - [FIX] momo + ayame モードで再接続時に delay してしまう問題を解決 - @kdxu From 8f9e140003ea3580ff9df0c0f716383fc779a6c3 Mon Sep 17 00:00:00 2001 From: Kazuyuki Honda Date: Mon, 23 Dec 2019 00:41:25 +0900 Subject: [PATCH 003/105] =?UTF-8?q?GitHub=20Actions=20=E3=81=AE=E3=83=87?= =?UTF-8?q?=E3=82=A3=E3=82=B9=E3=82=AF=E5=AE=B9=E9=87=8F=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E8=A7=A3=E6=B1=BA=E3=81=99=E3=82=8B=20Workaround=20?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prebuilt libwebrtc を使うようになったので、不要になったため --- .github/workflows/build.yml | 7 ------- .github/workflows/daily_build.yml | 7 ------- .github/workflows/script/disk_cleanup.sh | 13 ------------- 3 files changed, 27 deletions(-) delete mode 100755 .github/workflows/script/disk_cleanup.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ea39a18c..c44a52a2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,20 +11,14 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - - run: df -hT - - run: .github/workflows/script/disk_cleanup.sh - - run: df -hT - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make raspbian-buster_armv6 working-directory: build timeout-minutes: 120 - - run: df -hT - - run: docker system df -v build_raspbian-buster_armv7: name: Build momo for raspbian-buster_armv7 runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - - run: .github/workflows/script/disk_cleanup.sh - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make raspbian-buster_armv7 working-directory: build timeout-minutes: 120 @@ -33,7 +27,6 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - - run: .github/workflows/script/disk_cleanup.sh - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-18.04_armv8_jetson_nano working-directory: build timeout-minutes: 120 diff --git a/.github/workflows/daily_build.yml b/.github/workflows/daily_build.yml index 5fc90c52..6def3629 100644 --- a/.github/workflows/daily_build.yml +++ b/.github/workflows/daily_build.yml @@ -12,7 +12,6 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - - run: .github/workflows/script/disk_cleanup.sh - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make raspbian-buster_armv6 working-directory: build timeout-minutes: 120 @@ -21,7 +20,6 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - - run: .github/workflows/script/disk_cleanup.sh - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make raspbian-buster_armv7 working-directory: build timeout-minutes: 120 @@ -30,7 +28,6 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - - run: .github/workflows/script/disk_cleanup.sh - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-18.04_armv8_jetson_nano working-directory: build timeout-minutes: 120 @@ -47,7 +44,6 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - - run: .github/workflows/script/disk_cleanup.sh - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-18.04_x86_64 working-directory: build timeout-minutes: 120 @@ -56,7 +52,6 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - - run: .github/workflows/script/disk_cleanup.sh - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-18.04_armv8 working-directory: build timeout-minutes: 120 @@ -65,7 +60,6 @@ jobs: # runs-on: ubuntu-16.04 # steps: # - uses: actions/checkout@v1 -# - run: .github/workflows/script/disk_cleanup.sh # - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-16.04_armv7_ros # working-directory: build # timeout-minutes: 120 @@ -74,7 +68,6 @@ jobs: # runs-on: ubuntu-16.04 # steps: # - uses: actions/checkout@v1 -# - run: .github/workflows/script/disk_cleanup.sh # - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-16.04_x86_64_ros # working-directory: build # timeout-minutes: 120 diff --git a/.github/workflows/script/disk_cleanup.sh b/.github/workflows/script/disk_cleanup.sh deleted file mode 100755 index c84c4491..00000000 --- a/.github/workflows/script/disk_cleanup.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -# Cache 済み Docker Image の削除 -docker rmi $(docker images -q -a) - -# Android SDK の削除 -sudo rm -rf ${ANDROID_HOME} - -# JVM の削除 -sudo rm -rf ${JAVA_HOME_11_X64} -sudo rm -rf ${JAVA_HOME_12_X64} -sudo rm -rf ${JAVA_HOME_8_X64} -sudo rm -rf ${JAVA_HOME_7_X64} From 5ec426fe33d4d72b65881c29a2582ff9c5e4e7e8 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Tue, 24 Dec 2019 12:48:07 +0900 Subject: [PATCH 004/105] =?UTF-8?q?Boost=20=E3=82=92=201.72.0=20=E3=81=AB?= =?UTF-8?q?=E4=B8=8A=E3=81=92=E3=82=8B=E3=80=81=E3=83=90=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=82=92=202020.1=20=E3=81=AB=E4=B8=8A?= =?UTF-8?q?=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 5 +++++ VERSION | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index ae663725..4c9ab924 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,11 @@ ## develop +- [UPDATE] 2020.1 にバージョンを上げる + - @voluntas +- [UPDATE] Boost 1.72.0 にアップデートする + - @voluntas + ## 19.12.1 - [UPDATE] libwebrtc を時前ビルドしないようにする diff --git a/VERSION b/VERSION index 78b99713..a89e3d7f 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ # 各種ライブラリのバージョン情報 # 項目を変更してビルドすれば各環境へ反映される(ように作る) -MOMO_VERSION=19.12.1 +MOMO_VERSION=2020.1 WEBRTC_BUILD_VERSION=79.5.3 -BOOST_VERSION=1.71.0 +BOOST_VERSION=1.72.0 JSON_VERSION=3.7.3 CLI11_VERSION=1.8.0 SDL2_VERSION=2.0.10 From bb48fb5e4122a335b9eafd6cae693386e4096c9c Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Tue, 24 Dec 2019 12:49:52 +0900 Subject: [PATCH 005/105] =?UTF-8?q?ROS=20=E3=81=AE=E3=83=87=E3=82=A4?= =?UTF-8?q?=E3=83=AA=E3=83=BC=E3=83=93=E3=83=AB=E3=83=89=E3=82=92=E5=BE=A9?= =?UTF-8?q?=E6=B4=BB=E3=81=95=E3=81=9B=E3=81=A6=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/daily_build.yml | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/daily_build.yml b/.github/workflows/daily_build.yml index 6def3629..5f2f468b 100644 --- a/.github/workflows/daily_build.yml +++ b/.github/workflows/daily_build.yml @@ -55,19 +55,19 @@ jobs: - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-18.04_armv8 working-directory: build timeout-minutes: 120 -# build_ubuntu-16_04_armv7_ros: -# name: Build momo for Ubuntu 16.04 armv7 ROS -# runs-on: ubuntu-16.04 -# steps: -# - uses: actions/checkout@v1 -# - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-16.04_armv7_ros -# working-directory: build -# timeout-minutes: 120 -# build_ubuntu-16_04_x86_64_ros: -# name: Build momo for Ubuntu 16.04 x86_64 ROS -# runs-on: ubuntu-16.04 -# steps: -# - uses: actions/checkout@v1 -# - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-16.04_x86_64_ros -# working-directory: build -# timeout-minutes: 120 + build_ubuntu-16_04_armv7_ros: + name: Build momo for Ubuntu 16.04 armv7 ROS + runs-on: ubuntu-16.04 + steps: + - uses: actions/checkout@v1 + - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-16.04_armv7_ros + working-directory: build + timeout-minutes: 120 + build_ubuntu-16_04_x86_64_ros: + name: Build momo for Ubuntu 16.04 x86_64 ROS + runs-on: ubuntu-16.04 + steps: + - uses: actions/checkout@v1 + - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-16.04_x86_64_ros + working-directory: build + timeout-minutes: 120 From 28e3c1409fde9ba4cc406bb153f3fe113f20ba75 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Tue, 24 Dec 2019 12:55:42 +0900 Subject: [PATCH 006/105] =?UTF-8?q?README=20=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 +- README.md | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4c9ab924..67a67094 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,7 +11,7 @@ ## develop -- [UPDATE] 2020.1 にバージョンを上げる +- [UPDATE] Momo 2020.1 にバージョンを上げる - @voluntas - [UPDATE] Boost 1.72.0 にアップデートする - @voluntas diff --git a/README.md b/README.md index 96c6d5ca..963c617d 100644 --- a/README.md +++ b/README.md @@ -51,9 +51,9 @@ Momo はオープンソースソフトウェアですが、開発については 4 種類のバイナリを配布しています。 -- Raspberry Raspbian Buster ARMv7 -- Raspberry Raspbian Buster ARMv6 -- Jetson Nano Ubuntu 18.04 ARMv8 +- Raspbian Buster ARMv7 +- Raspbian Buster ARMv6 +- Ubuntu 18.04 ARMv8 (Jetson Nano) - macOS 10.15 x86_64 ## 動作環境 @@ -90,6 +90,12 @@ Momo を使ってみたい人は [USE.md](doc/USE.md) をお読みください パッケージ作成したい人は [PACKAGE.md](doc/PACKAGE.md) をお読みください。 +## バージョン番号について + +``` +YYYY.<リリースした回数> +``` + ## ライセンス Apache License 2.0 @@ -112,12 +118,15 @@ limitations under the License. ## サポートについて -WebRTC Native Client Momo に関するバグ報告は GitHub Issues へお願いします。それ以外については Discord へお願いします。 +WebRTC Native Client Momo に関するバグ報告は GitHub Issues へお願いします。 +それ以外については Discord へお願いします。 ### バグ報告 https://github.com/shiguredo/momo/issues +バグ報告すべきか悩んだら Discord で気軽に相談してください。 + #### 理想的なバグ報告例 - [ローカルネット上のAyameを使用して接続した場合にSEGVが発生する · Issue \#100 · shiguredo/momo](https://github.com/shiguredo/momo/issues/100) @@ -134,7 +143,8 @@ WebRTC Native Client に対する有料でのサポート契約については W ## H.264 のライセンス費用について -H.264 ハードウェアエンコーダ **のみ** を利用している Momo 単体の配布においてはライセンス費用は不要ですが、ハードウェアとセットで配布する場合はライセンス費用を支払う必要があります。 +H.264 ハードウェアエンコーダ **のみ** を利用している Momo 単体の配布においてはライセンス費用は不要ですが、 +ハードウェアとセットで配布する場合はライセンス費用を支払う必要があります。 ただし、 Raspberry Pi においては H.264 のライセンスがハードウェア費用に含まれているため、配布時にライセンス費用を支払う必要はありません。 From 364a8b271110da7afc8d57a1c0d8d62f39a13e2f Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Tue, 24 Dec 2019 12:56:17 +0900 Subject: [PATCH 007/105] =?UTF-8?q?=E8=A3=9C=E8=B6=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 963c617d..c0990c4f 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ Momo を使ってみたい人は [USE.md](doc/USE.md) をお読みください ## バージョン番号について ``` -YYYY.<リリースした回数> +YYYY.<その年にリリースした回数> ``` ## ライセンス From 4c216c0fe4cf70b8205ca1d039b448f94a7cba57 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Tue, 24 Dec 2019 16:53:53 +0900 Subject: [PATCH 008/105] =?UTF-8?q?JetPack=204.3=20=E4=BB=A5=E4=B8=8A?= =?UTF-8?q?=E3=82=92=E5=BF=85=E9=A0=88=E3=81=AB=E3=81=97=E3=80=81=20libnvj?= =?UTF-8?q?peg=20=E3=81=AE=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=88=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE_JETSON_NANO.md | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/doc/USE_JETSON_NANO.md b/doc/USE_JETSON_NANO.md index c2cbba1e..66d8c534 100644 --- a/doc/USE_JETSON_NANO.md +++ b/doc/USE_JETSON_NANO.md @@ -39,26 +39,16 @@ https://github.com/shiguredo/momo/releases にて最新版のバイナリをダウンロードしてください。 +## JetPack 4.3 以上を必ず利用してください + +`JetPack 4.3 - L4T R32.3.1 released - NVIDIA Developer Forums `_ + ## 4K@30 を出すためにやること ### 実行時のコマンドについて `--fixed-resolution` を外してみてください。4Kの時には `--fixed-resolution` オプションを使うとレートが安定しない傾向があります。 -### --use-native オプション利用時のハングアップについて - -Jetson Nano のライブラリにバグがあるため、 `/usr/lib/aarch64-linux-gnu/tegra/libnvjpeg.so` を下記の記事で配布されているものに置き換えてください - -下記のコマンドの実行結果でパッチが異なります - -> cat /etc/nv_tegra_release | head -1 - -`# R32 (release), REVISION: 1.0` の場合は [こちら](https://devtalk.nvidia.com/default/topic/1050162/jetson-nano/r32-1-0-mmapi-and-decodetofd-leak-memory-/) - -`# R32 (release), REVISION: 2.1` の場合は [こちら](https://devtalk.nvidia.com/default/topic/1060896/jetson-tx2/jetpack-4-2-1-nvjpeg-leaking/) - -を適用してください - ### フレームレートが出ない場合 一番多いのは暗い場所で利用しているパターンです。カメラが自動的に露光時間を伸ばすためフレームレートが下がります。部屋を明るくする。もしくはカメラの設定変更が可能な場合はフレームレート優先設定に変更してください。 From 34e7d0485238d2499d460e41969d0c0f661f4e31 Mon Sep 17 00:00:00 2001 From: melpon Date: Wed, 25 Dec 2019 12:30:52 +0900 Subject: [PATCH 009/105] =?UTF-8?q?=E3=81=84=E3=82=89=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E3=82=B3=E3=83=94?= =?UTF-8?q?=E3=83=BC=E3=81=8C=E6=AE=8B=E3=81=A3=E3=81=A6=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/ubuntu-16.04_x86_64_ros/Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/build/ubuntu-16.04_x86_64_ros/Dockerfile b/build/ubuntu-16.04_x86_64_ros/Dockerfile index af074d1c..bedb3cfe 100644 --- a/build/ubuntu-16.04_x86_64_ros/Dockerfile +++ b/build/ubuntu-16.04_x86_64_ros/Dockerfile @@ -7,8 +7,6 @@ LABEL jp.shiguredo.momo=$PACKAGE_NAME RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache -COPY script/docker.sh /root/ - # パッケージのインストール COPY script/apt_install_x86_64.sh /root/ From 751640c75b216624dbb5c08a1895f2802b4e14df Mon Sep 17 00:00:00 2001 From: melpon Date: Wed, 25 Dec 2019 17:40:54 +0900 Subject: [PATCH 010/105] =?UTF-8?q?clang=20=E3=82=B3=E3=83=B3=E3=83=91?= =?UTF-8?q?=E3=82=A4=E3=83=A9=E3=81=AE=E4=BD=8D=E7=BD=AE=E3=82=92=E5=A4=96?= =?UTF-8?q?=E3=81=8B=E3=82=89=E6=8C=87=E5=AE=9A=E3=81=A7=E3=81=8D=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 5e52df32..0e75c26c 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,9 @@ include VERSION # # WEBRTC_INCLUDE_DIR: WebRTC のインクルードディレクトリ # -# WEBRTC_LIB_ROOT: WebRTC のビルドディレクトリ +# WEBRTC_LIBRARY_DIR: WebRTC のライブラリディレクトリ +# +# CLANG_ROOT: ビルドに使う clang コンパイラのインストール先ディレクトリ # # USE_LIBCXX: libstdc++ の代わりに libc++ を使うかどうか # 有効な値は 0, 1 @@ -79,6 +81,7 @@ ifeq ($(PACKAGE_NAME),raspbian-buster_armv6) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include SYSROOT ?= /root/rootfs @@ -97,6 +100,7 @@ else ifeq ($(PACKAGE_NAME),raspbian-buster_armv7) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include SYSROOT ?= /root/rootfs @@ -115,6 +119,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-16.04_armv7_ros) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 0 SYSROOT ?= /root/rootfs else ifeq ($(PACKAGE_NAME),ubuntu-18.04_armv8) @@ -132,6 +137,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-18.04_armv8) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include SYSROOT ?= /root/rootfs @@ -151,6 +157,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-18.04_armv8_jetson_nano) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include SYSROOT ?= /root/rootfs @@ -168,6 +175,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-16.04_x86_64_ros) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 0 else ifeq ($(PACKAGE_NAME),ubuntu-18.04_x86_64) TARGET_OS ?= linux @@ -183,6 +191,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-18.04_x86_64) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include else ifeq ($(PACKAGE_NAME),macos) @@ -199,12 +208,9 @@ else ifeq ($(PACKAGE_NAME),macos) CLI11_ROOT ?= $(CURDIR)/build/macos/CLI11 WEBRTC_INCLUDE_DIR ?= $(CURDIR)/build/macos/webrtc/include WEBRTC_LIBRARY_DIR ?= $(CURDIR)/build/macos/webrtc/lib + CLANG_ROOT ?= $(CURDIR)/build/macos/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= $(CURDIR)/build/macos/llvm/libcxx/include - - # depot_tools へのパスを通しておく - # (Docker から実行するタイプのビルドでは事前に通してあるが、こっちは通してない可能性があるので) - # export PATH := $(CURDIR)/build/macos/webrtc/depot_tools:$(PATH) else # 各変数がちゃんと設定されているか確認する @@ -272,6 +278,11 @@ else HAS_ERROR = 1 endif + ifndef CLANG_ROOT + $(info - CLANG_ROOT が指定されていません) + HAS_ERROR = 1 + endif + ifndef USE_LIBCXX $(info - USE_LIBCXX が指定されていません) HAS_ERROR = 1 @@ -336,9 +347,9 @@ ifeq ($(TARGET_OS),linux) CFLAGS += -fpic LDFLAGS += -lX11 -lXau -lXdmcp -lxcb -lplds4 -lXext -lexpat -ldl -lnss3 -lnssutil3 -lplc4 -lnspr4 -lrt - CC = /root/llvm/clang/bin/clang - CXX = /root/llvm/clang/bin/clang++ - AR = /root/llvm/clang/bin/llvm-ar + CC = $(CLANG_ROOT)/bin/clang + CXX = $(CLANG_ROOT)/bin/clang++ + AR = $(CLANG_ROOT)/bin/llvm-ar ifeq ($(TARGET_ARCH),arm) ifeq ($(TARGET_ARCH_ARM),armv8) @@ -459,8 +470,8 @@ ifeq ($(TARGET_OS),linux) endif ifeq ($(TARGET_OS),macos) - CC = $(CURDIR)/build/macos/llvm/clang/bin/clang - CXX = $(CURDIR)/build/macos/llvm/clang/bin/clang++ + CC = $(CLANG_ROOT)/bin/clang + CXX = $(CLANG_ROOT)/bin/clang++ # brew でインストールした ar コマンドを使うとエラーになるので、明示的にフルパスを指定する AR = /usr/bin/ar From c2117b6d5c10d29bc36f67094675373610af4bfe Mon Sep 17 00:00:00 2001 From: melpon Date: Thu, 26 Dec 2019 02:50:06 +0900 Subject: [PATCH 011/105] =?UTF-8?q?Jetson=20Nano=20=E3=81=AE=E7=92=B0?= =?UTF-8?q?=E5=A2=83=E3=82=92=2032.3.1=20=E3=81=AB=E3=82=A2=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=83=87=E3=83=BC=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ubuntu-18.04_armv8_jetson_nano/jetson.sh | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/build/ubuntu-18.04_armv8_jetson_nano/jetson.sh b/build/ubuntu-18.04_armv8_jetson_nano/jetson.sh index 4f466842..cd5d3bc2 100755 --- a/build/ubuntu-18.04_armv8_jetson_nano/jetson.sh +++ b/build/ubuntu-18.04_armv8_jetson_nano/jetson.sh @@ -10,31 +10,31 @@ cd $WORK_DIR # https://developer.nvidia.com/embedded/linux-tegra から必要なファイルをダウンロードしてくる -if [ ! -e Tegra210_Linux_R32.2.1_aarch64.tbz2 ]; then - curl -LO https://developer.nvidia.com/embedded/dlc/r32-2-1_Release_v1.0/Nano-TX1/Tegra210_Linux_R32.2.1_aarch64.tbz2 +if [ ! -e Tegra210_Linux_R32.3.1_aarch64.tbz2 ]; then + curl -LO https://developer.nvidia.com/embedded/dlc/r32-3-1_Release_v1.0/t210ref_release_aarch64/Tegra210_Linux_R32.3.1_aarch64.tbz2 fi -if [ ! -e Tegra_Multimedia_API_R32.2.1_aarch64.tbz2 ]; then - curl -LO https://developer.nvidia.com/embedded/dlc/r32-2-1_Release_v1.0/Nano-TX1/Tegra_Multimedia_API_R32.2.1_aarch64.tbz2 +if [ ! -e Tegra_Multimedia_API_R32.2.3_aarch64.tbz2 ]; then + curl -LO https://developer.nvidia.com/embedded/r32-2-3_Release_v1.0/t210ref_release_aarch64/Tegra_Multimedia_API_R32.2.3_aarch64.tbz2 fi -if [ ! -e Tegra_Linux_Sample-Root-Filesystem_R32.2.1_aarch64.tbz2 ]; then - curl -LO https://developer.nvidia.com/embedded/dlc/r32-2-1_Release_v1.0/Nano-TX1/Tegra_Linux_Sample-Root-Filesystem_R32.2.1_aarch64.tbz2 +if [ ! -e Tegra_Linux_Sample-Root-Filesystem_R32.3.1_aarch64.tbz2 ]; then + curl -LO https://developer.nvidia.com/embedded/dlc/r32-3-1_Release_v1.0/t210ref_release_aarch64/Tegra_Linux_Sample-Root-Filesystem_R32.3.1_aarch64.tbz2 fi # Tegra Multimedia API # 必要なファイルだけ展開する pushd $SYSDIR - tar xvf $WORK_DIR/Tegra_Multimedia_API_R32.2.1_aarch64.tbz2 --strip-components=1 tegra_multimedia_api/include/ + tar xvf $WORK_DIR/Tegra_Multimedia_API_R32.2.3_aarch64.tbz2 --strip-components=1 tegra_multimedia_api/include/ popd mkdir -p $SYSDIR/usr/src/nvidia pushd $SYSDIR/usr/src/nvidia # ほんとは全部展開するのが正しいけど、必要なのはソースだけなのでそこだけ展開する - tar xvf $WORK_DIR/Tegra_Multimedia_API_R32.2.1_aarch64.tbz2 tegra_multimedia_api/samples/common/classes + tar xvf $WORK_DIR/Tegra_Multimedia_API_R32.2.3_aarch64.tbz2 tegra_multimedia_api/samples/common/classes popd # nvidia drivers # 何も考えずに全部展開する -tar xvf Tegra210_Linux_R32.2.1_aarch64.tbz2 Linux_for_Tegra/nv_tegra/nvidia_drivers.tbz2 +tar xvf Tegra210_Linux_R32.3.1_aarch64.tbz2 Linux_for_Tegra/nv_tegra/nvidia_drivers.tbz2 pushd $SYSDIR tar xvf $WORK_DIR/Linux_for_Tegra/nv_tegra/nvidia_drivers.tbz2 popd @@ -43,20 +43,24 @@ popd pushd $SYSDIR # ライブラリ系とインクルード系だけ展開する tar \ - -xvf $WORK_DIR/Tegra_Linux_Sample-Root-Filesystem_R32.2.1_aarch64.tbz2 \ + -xvf $WORK_DIR/Tegra_Linux_Sample-Root-Filesystem_R32.3.1_aarch64.tbz2 \ --wildcards \ lib/aarch64-linux-gnu \ 'usr/lib/aarch64-linux-gnu/*.so*' \ usr/include \ --exclude 'lib/aarch64-linux-gnu/*/*' +popd - pushd usr/lib/aarch64-linux-gnu - # 既存の libdl.so は libdl.so -> ../../../lib/aarch64-linux-gnu/libdl.so.2 なのに対して、 - # Jetson Nano の libdl.so は libdl.so -> /lib/aarch64-linux-gnu/libdl.so.2 になっているため、パスが見つからない。 - # なので symlink を相対パスで貼り直してやる。 - ln -sf ../../../lib/aarch64-linux-gnu/libdl.so.2 libdl.so - # libz.so も同じ。 - ln -sf ../../../lib/aarch64-linux-gnu/libz.so.1.2.11 libz.so +pushd $SYSDIR/usr/lib/aarch64-linux-gnu + # 既存の libdl.so は libdl.so -> ../../../lib/aarch64-linux-gnu/libdl.so.2 なのに対して、 + # Jetson Nano の libdl.so は libdl.so -> /lib/aarch64-linux-gnu/libdl.so.2 になっているため、パスが見つからない。 + # なので symlink を相対パスで貼り直してやる。 + ln -sf ../../../lib/aarch64-linux-gnu/libdl.so.2 libdl.so + # libz.so も同じ。 + ln -sf ../../../lib/aarch64-linux-gnu/libz.so.1.2.11 libz.so + pushd tegra + # libnvbuf_utils.so.1.0.0 も同じ + ln -sf libnvbuf_utils.so.1.0.0 libnvbuf_utils.so popd popd @@ -65,7 +69,6 @@ pushd $SYSDIR/usr/lib/aarch64-linux-gnu/ ln -s libv4l2.so.0.0.999999 libv4l2.so popd pushd $SYSDIR/usr/lib/aarch64-linux-gnu/tegra/ - ln -s libnvbuf_utils.so.1.0.0 libnvbuf_utils.so ln -s libnvbuf_fdmap.so.1.0.0 libnvbuf_fdmap.so popd From d6c4eef7d951930242a04a414903d0a7e8b821e7 Mon Sep 17 00:00:00 2001 From: melpon Date: Thu, 26 Dec 2019 13:17:36 +0900 Subject: [PATCH 012/105] =?UTF-8?q?patch=20=E3=83=87=E3=82=A3=E3=83=AC?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=83=AA=E3=82=92=E5=90=84=E7=92=B0=E5=A2=83?= =?UTF-8?q?=E3=81=AB=E3=82=B3=E3=83=94=E3=83=BC=E3=81=97=E3=81=A6=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/Makefile | 3 --- build/raspbian-buster_armv6/Dockerfile | 2 +- .../raspbian-buster_armv6}/rpi-raspbian.conf | 0 build/raspbian-buster_armv7/Dockerfile | 2 +- build/raspbian-buster_armv7/rpi-raspbian.conf | 16 ++++++++++++++++ build/ubuntu-16.04_armv7_ros/Dockerfile | 2 +- .../ubuntu-16.04_armv7_ros}/rpi-xenial-ros.conf | 0 build/ubuntu-18.04_armv8/Dockerfile | 2 +- {patch => build/ubuntu-18.04_armv8}/arm64.conf | 0 build/ubuntu-18.04_armv8_jetson_nano/Dockerfile | 2 +- build/ubuntu-18.04_armv8_jetson_nano/arm64.conf | 12 ++++++++++++ 11 files changed, 33 insertions(+), 8 deletions(-) rename {patch => build/raspbian-buster_armv6}/rpi-raspbian.conf (100%) create mode 100644 build/raspbian-buster_armv7/rpi-raspbian.conf rename {patch => build/ubuntu-16.04_armv7_ros}/rpi-xenial-ros.conf (100%) rename {patch => build/ubuntu-18.04_armv8}/arm64.conf (100%) create mode 100644 build/ubuntu-18.04_armv8_jetson_nano/arm64.conf diff --git a/build/Makefile b/build/Makefile index 01658c33..4a24b60a 100644 --- a/build/Makefile +++ b/build/Makefile @@ -86,9 +86,7 @@ $(1).edit: $(1).prepare .PHONY: $(1).prepare $(1).prepare: - rm -rf $(1)/patch rm -rf $(1)/script - cp -r ../patch $(1)/patch cp -r ../script $(1)/script DOCKER_BUILDKIT=1 docker build \ @@ -102,7 +100,6 @@ $(1).prepare: --build-arg PACKAGE_NAME=$(1) \ $(1) - rm -r $(1)/patch rm -r $(1)/script .PHONY: $(1).clean diff --git a/build/raspbian-buster_armv6/Dockerfile b/build/raspbian-buster_armv6/Dockerfile index e56380f4..c043c022 100644 --- a/build/raspbian-buster_armv6/Dockerfile +++ b/build/raspbian-buster_armv6/Dockerfile @@ -16,7 +16,7 @@ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache # RootFS の構築 COPY script/init_rootfs_armhf.sh /root/ -COPY patch/rpi-raspbian.conf /root/ +COPY rpi-raspbian.conf /root/ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache,id=$PACKAGE_NAME,target=/var/lib/apt \ /root/init_rootfs_armhf.sh /root/rootfs /root/rpi-raspbian.conf diff --git a/patch/rpi-raspbian.conf b/build/raspbian-buster_armv6/rpi-raspbian.conf similarity index 100% rename from patch/rpi-raspbian.conf rename to build/raspbian-buster_armv6/rpi-raspbian.conf diff --git a/build/raspbian-buster_armv7/Dockerfile b/build/raspbian-buster_armv7/Dockerfile index fc050258..955289d3 100644 --- a/build/raspbian-buster_armv7/Dockerfile +++ b/build/raspbian-buster_armv7/Dockerfile @@ -16,7 +16,7 @@ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache # RootFS の構築 COPY script/init_rootfs_armhf.sh /root/ -COPY patch/rpi-raspbian.conf /root/ +COPY rpi-raspbian.conf /root/ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache,id=$PACKAGE_NAME,target=/var/lib/apt \ /root/init_rootfs_armhf.sh /root/rootfs /root/rpi-raspbian.conf diff --git a/build/raspbian-buster_armv7/rpi-raspbian.conf b/build/raspbian-buster_armv7/rpi-raspbian.conf new file mode 100644 index 00000000..5dc120de --- /dev/null +++ b/build/raspbian-buster_armv7/rpi-raspbian.conf @@ -0,0 +1,16 @@ +[General] +unpack=true +bootstrap=Ports Rasp +aptsources=Ports Rasp + +[Ports] +packages=libc6-dev libstdc++-6-dev libasound2-dev libpulse-dev libudev-dev libexpat1-dev libnss3-dev python-dev libgtk-3-dev libsdl2-dev +source=http://ftp.jaist.ac.jp/raspbian +keyring=raspbian-archive-keyring +suite=buster + +[Rasp] +packages=libraspberrypi-bin libraspberrypi-dev +source=http://archive.raspberrypi.org/debian +keyring=raspbian-archive-keyring +suite=buster diff --git a/build/ubuntu-16.04_armv7_ros/Dockerfile b/build/ubuntu-16.04_armv7_ros/Dockerfile index b8ce9092..9fdc4bb9 100644 --- a/build/ubuntu-16.04_armv7_ros/Dockerfile +++ b/build/ubuntu-16.04_armv7_ros/Dockerfile @@ -16,7 +16,7 @@ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache # RootFS の構築 COPY script/init_rootfs_armhf.sh /root/ -COPY patch/rpi-xenial-ros.conf /root/ +COPY rpi-xenial-ros.conf /root/ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache,id=$PACKAGE_NAME,target=/var/lib/apt \ /root/init_rootfs_armhf.sh /root/rootfs /root/rpi-xenial-ros.conf diff --git a/patch/rpi-xenial-ros.conf b/build/ubuntu-16.04_armv7_ros/rpi-xenial-ros.conf similarity index 100% rename from patch/rpi-xenial-ros.conf rename to build/ubuntu-16.04_armv7_ros/rpi-xenial-ros.conf diff --git a/build/ubuntu-18.04_armv8/Dockerfile b/build/ubuntu-18.04_armv8/Dockerfile index fe7dccd3..344dd449 100644 --- a/build/ubuntu-18.04_armv8/Dockerfile +++ b/build/ubuntu-18.04_armv8/Dockerfile @@ -16,7 +16,7 @@ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache # RootFS の構築 COPY script/init_rootfs_arm64.sh /root/ -COPY patch/arm64.conf /root/ +COPY arm64.conf /root/ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache,id=$PACKAGE_NAME,target=/var/lib/apt \ /root/init_rootfs_arm64.sh /root/rootfs /root/arm64.conf diff --git a/patch/arm64.conf b/build/ubuntu-18.04_armv8/arm64.conf similarity index 100% rename from patch/arm64.conf rename to build/ubuntu-18.04_armv8/arm64.conf diff --git a/build/ubuntu-18.04_armv8_jetson_nano/Dockerfile b/build/ubuntu-18.04_armv8_jetson_nano/Dockerfile index accf89f7..0cc0b9d0 100644 --- a/build/ubuntu-18.04_armv8_jetson_nano/Dockerfile +++ b/build/ubuntu-18.04_armv8_jetson_nano/Dockerfile @@ -16,7 +16,7 @@ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache # RootFS の構築 COPY script/init_rootfs_arm64.sh /root/ -COPY patch/arm64.conf /root/ +COPY arm64.conf /root/ RUN --mount=type=cache,id=$PACKAGE_NAME,target=/var/cache/apt --mount=type=cache,id=$PACKAGE_NAME,target=/var/lib/apt \ /root/init_rootfs_arm64.sh /root/rootfs /root/arm64.conf diff --git a/build/ubuntu-18.04_armv8_jetson_nano/arm64.conf b/build/ubuntu-18.04_armv8_jetson_nano/arm64.conf new file mode 100644 index 00000000..be398120 --- /dev/null +++ b/build/ubuntu-18.04_armv8_jetson_nano/arm64.conf @@ -0,0 +1,12 @@ +[General] +noauth=true +unpack=true +bootstrap=Ports +aptsources=Ports + +[Ports] +packages=libc6-dev libstdc++-dev libasound2-dev libpulse-dev libudev-dev libexpat1-dev libnss3-dev python-dev libgtk-3-dev +source=http://ports.ubuntu.com +keyring=ubuntu-keyring +suite=xenial +components=main From 785cce48e4b59ed5f2442574028ee49288761f6c Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Mon, 23 Dec 2019 17:04:03 +0900 Subject: [PATCH 013/105] =?UTF-8?q?Linux=20=E3=81=A7=E3=81=AF=20V4L2=20vid?= =?UTF-8?q?eo=20capturer=20=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 ++-- src/main.cpp | 4 ++-- src/util.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 0e75c26c..4a8f5eee 100644 --- a/Makefile +++ b/Makefile @@ -351,6 +351,8 @@ ifeq ($(TARGET_OS),linux) CXX = $(CLANG_ROOT)/bin/clang++ AR = $(CLANG_ROOT)/bin/llvm-ar + SOURCES += $(shell find src/v4l2_video_capturer -maxdepth 1 -name '*.cpp') + ifeq ($(TARGET_ARCH),arm) ifeq ($(TARGET_ARCH_ARM),armv8) ARCH_NAME = aarch64-linux-gnu @@ -388,7 +390,6 @@ ifeq ($(TARGET_OS),linux) -lnvrm \ -lnvrm_graphics \ -lnvos - SOURCES += $(shell find src/v4l2_video_capturer -maxdepth 1 -name '*.cpp') SOURCES += $(shell find src/hwenc_jetson -maxdepth 1 -name '*.cpp') JETSON_ADDITIONAL_SOURCES += \ $(SYSROOT)/usr/src/nvidia/tegra_multimedia_api/samples/common/classes/NvBuffer.cpp \ @@ -462,7 +463,6 @@ ifeq ($(TARGET_OS),linux) -lmmal_util \ -lmmal_vc_client \ -lm - SOURCES += $(shell find src/v4l2_video_capturer -maxdepth 1 -name '*.cpp') SOURCES += $(shell find src/hwenc_mmal -maxdepth 1 -name '*.cpp') endif endif diff --git a/src/main.cpp b/src/main.cpp index 1f8b56ef..59b6ff61 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,7 +19,7 @@ #ifdef __APPLE__ #include "mac_helper/mac_capturer.h" #else -#if USE_MMAL_ENCODER | USE_JETSON_ENCODER +#if __linux__ #include "v4l2_video_capturer/v4l2_video_capturer.h" #else #include "rtc/device_video_capturer.h" @@ -84,7 +84,7 @@ int main(int argc, char* argv[]) { rtc::scoped_refptr capturer = MacCapturer::Create( cs.getWidth(), cs.getHeight(), cs.framerate, cs.video_device); #else -#if USE_MMAL_ENCODER || USE_JETSON_ENCODER +#if __linux__ rtc::scoped_refptr capturer = V4L2VideoCapture::Create(cs); #else rtc::scoped_refptr capturer = diff --git a/src/util.cpp b/src/util.cpp index 6200a69b..a72641ce 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -176,7 +176,7 @@ void Util::parseArgs(int argc, "MJPEGのデコードとビデオのリサイズをハードウェアで行う" "(対応デバイスのみ)") ->check(is_valid_use_native); -#if USE_MMAL_ENCODER || USE_JETSON_ENCODER +#if __linux__ app.add_option("--video-device", cs.video_device, "デバイスファイル名。省略時はどれかのビデオデバイスを自動検出") ->check(CLI::ExistingFile); From 390bab2456b8396127ed6d8d9dbd17dedd7b0269 Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Mon, 23 Dec 2019 17:14:30 +0900 Subject: [PATCH 014/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E8=A8=98=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 67a67094..1e815553 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -41,6 +41,9 @@ - @kdxu - [FIX] OpenH264 を明示的にビルドしないようにする - @melpon +- [UPDATE] --video-device を Linux 全般で有効にする + - V4L2 capturer を使うようにした + - @shino ## 19.11.1 From 7e45f383112a11b2b232aab33b5a8fd79f6f13cb Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 24 Dec 2019 09:06:05 +0900 Subject: [PATCH 015/105] =?UTF-8?q?=E6=8E=92=E4=BB=96=E3=81=AE=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E3=81=AB=E3=81=AF=E3=83=8D=E3=82=B9=E3=83=88=E3=81=97?= =?UTF-8?q?=E3=81=9F=20if=20=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F=20elif=20?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 59b6ff61..13bc887e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,14 +18,12 @@ #else #ifdef __APPLE__ #include "mac_helper/mac_capturer.h" -#else -#if __linux__ +#elif __linux__ #include "v4l2_video_capturer/v4l2_video_capturer.h" #else #include "rtc/device_video_capturer.h" #endif #endif -#endif #if USE_SDL2 #include "sdl_renderer/sdl_renderer.h" @@ -83,13 +81,11 @@ int main(int argc, char* argv[]) { #ifdef __APPLE__ rtc::scoped_refptr capturer = MacCapturer::Create( cs.getWidth(), cs.getHeight(), cs.framerate, cs.video_device); -#else -#if __linux__ +#elif __linux__ rtc::scoped_refptr capturer = V4L2VideoCapture::Create(cs); #else rtc::scoped_refptr capturer = DeviceVideoCapturer::Create(cs.getWidth(), cs.getHeight(), cs.framerate); -#endif #endif if (!capturer && !cs.no_video) { std::cerr << "failed to create capturer" << std::endl; From 3b613b429d14b27b84c6cb69379dc907c1ef0e73 Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Thu, 26 Dec 2019 15:14:12 +0900 Subject: [PATCH 016/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=81=AE=E5=A0=B4=E6=89=80=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 1e815553..f21ea510 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,6 +15,9 @@ - @voluntas - [UPDATE] Boost 1.72.0 にアップデートする - @voluntas +- [UPDATE] --video-device を Linux 全般で有効にする + - V4L2 capturer を使うようにした + - @shino ## 19.12.1 @@ -41,9 +44,6 @@ - @kdxu - [FIX] OpenH264 を明示的にビルドしないようにする - @melpon -- [UPDATE] --video-device を Linux 全般で有効にする - - V4L2 capturer を使うようにした - - @shino ## 19.11.1 From 46ceb93e77a4d3e9e8201a4e751dd103053ce1fd Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Thu, 26 Dec 2019 15:38:21 +0900 Subject: [PATCH 017/105] =?UTF-8?q?OS=20=E3=81=AE=E3=83=97=E3=83=AA?= =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=BB=E3=83=83=E3=82=B5=E5=88=86=E5=B2=90?= =?UTF-8?q?=E3=81=AF=20defined=20=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 4 ++-- src/util.cpp | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 13bc887e..d89c3eed 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -78,10 +78,10 @@ int main(int argc, char* argv[]) { return 1; } rtc::LogMessage::AddLogToStream(log_sink.get(), rtc::LS_INFO); -#ifdef __APPLE__ +#if defined(__APPLE__) rtc::scoped_refptr capturer = MacCapturer::Create( cs.getWidth(), cs.getHeight(), cs.framerate, cs.video_device); -#elif __linux__ +#elif defined(__linux__) rtc::scoped_refptr capturer = V4L2VideoCapture::Create(cs); #else rtc::scoped_refptr capturer = diff --git a/src/util.cpp b/src/util.cpp index a72641ce..9f3655ac 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -176,14 +176,14 @@ void Util::parseArgs(int argc, "MJPEGのデコードとビデオのリサイズをハードウェアで行う" "(対応デバイスのみ)") ->check(is_valid_use_native); -#if __linux__ - app.add_option("--video-device", cs.video_device, - "デバイスファイル名。省略時はどれかのビデオデバイスを自動検出") - ->check(CLI::ExistingFile); -#elif __APPLE__ +#if defined(__APPLE__) app.add_option("--video-device", cs.video_device, "デバイス番号、またはデバイス名。省略時はデフォルト(デバイス" "番号が0)のビデオデバイスを自動検出"); +#elif defined(__linux__) + app.add_option("--video-device", cs.video_device, + "デバイスファイル名。省略時はどれかのビデオデバイスを自動検出") + ->check(CLI::ExistingFile); #endif app.add_set("--resolution", cs.resolution, {"QVGA", "VGA", "HD", "FHD", "4K"}, "解像度"); From 4372c83c26eb8a3ef571dec13d5272173f8c398d Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Thu, 26 Dec 2019 15:42:45 +0900 Subject: [PATCH 018/105] =?UTF-8?q?OS=20=E3=81=AE=E3=83=97=E3=83=AA?= =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=BB=E3=83=83=E3=82=B5=E5=88=86=E5=B2=90?= =?UTF-8?q?=E3=81=AF=20defined=20=E3=82=92=E4=BD=BF=E3=81=86=20=E3=81=9D?= =?UTF-8?q?=E3=81=AE2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 4 ++-- src/rtc/manager.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index d89c3eed..7709cfc4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,9 +16,9 @@ #include "ros/ros_video_capture.h" #include "signal_listener.h" #else -#ifdef __APPLE__ +#if defined(__APPLE__) #include "mac_helper/mac_capturer.h" -#elif __linux__ +#elif defined(__linux__) #include "v4l2_video_capturer/v4l2_video_capturer.h" #else #include "rtc/device_video_capturer.h" diff --git a/src/rtc/manager.cpp b/src/rtc/manager.cpp index a5454b2b..1d1174e4 100644 --- a/src/rtc/manager.cpp +++ b/src/rtc/manager.cpp @@ -55,7 +55,7 @@ RTCManager::RTCManager( _signalingThread = rtc::Thread::Create(); _signalingThread->Start(); -#if __linux__ +#if defined(__linux__) webrtc::AudioDeviceModule::AudioLayer audio_layer = webrtc::AudioDeviceModule::kLinuxAlsaAudio; #else From 85cebdb53d097da52d6b843ffaff518a5d86fba4 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sun, 29 Dec 2019 14:50:51 +0900 Subject: [PATCH 019/105] =?UTF-8?q?=E3=82=AA=E3=82=B9=E3=82=B9=E3=83=A1?= =?UTF-8?q?=E3=81=AE=E7=84=A1=E7=B7=9A=20LAN=20=E5=AD=90=E6=A9=9F=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE_JETSON_NANO.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/USE_JETSON_NANO.md b/doc/USE_JETSON_NANO.md index 66d8c534..04c5c0f9 100644 --- a/doc/USE_JETSON_NANO.md +++ b/doc/USE_JETSON_NANO.md @@ -12,6 +12,7 @@ - SD カードはこちらがおすすめ - OLIOSPEC - [Noctua NF-A4x10 5V PWMサイレントファン40 mmプレミアムブラウン/ベージュ](https://amazon.co.jp/dp/B07DXS86G7) + - [NF A4x10 5V PWM](https://noctua.at/en/nf-a4x10-5v-pwm) - ファンはこちらがおすすめ - Amazon - [24W級スイッチングACアダプター5V4A GF24-US0540](http://akizukidenshi.com/catalog/g/gM-09594/) @@ -20,6 +21,12 @@ - [つまみ付ジャンパーピン(緑)(2.54mmピッチ)(20個入)](http://akizukidenshi.com/catalog/g/gP-03894/) - ジャンパーピンを持っていない人はこちら - 秋月電子通商 + - [TP-Link WiFi 無線LAN 子機 AC600 433Mbps + 200Mbps](https://amazon.co.jp/dp/B07MXHJ6KB) + - [Archer T2U Nano \| AC600 ナノ 無線LAN子機 \| TP\-Link Japan](https://www.tp-link.com/jp/home-networking/adapter/archer-t2u-nano/) + - ドライバーのビルドが必要になるが問題なく使える + - [Jetson Nano で TP\-LINK Archer T2U Nano を使う \- Qiita](https://qiita.com/daisuzu_/items/8d6913f3bda1b7434526) + - こちらにかかれている `os_dep/linux/usb_intf.c の 300行番台あたりに以下を追加する` は最新版では不要 + - Amazon ## 4K@30 出るカメラの購入する From b65cd415b7ed1490b61983c3c514e682634107c8 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sun, 29 Dec 2019 14:54:07 +0900 Subject: [PATCH 020/105] =?UTF-8?q?Jetson=20Nano=20=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE_JETSON_NANO.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/USE_JETSON_NANO.md b/doc/USE_JETSON_NANO.md index 04c5c0f9..7eafe9ea 100644 --- a/doc/USE_JETSON_NANO.md +++ b/doc/USE_JETSON_NANO.md @@ -3,6 +3,7 @@ ## Jetson Nano を購入する - [Jetson Nano 開発者キット](https://www.switch-science.com/catalog/5433/) + - [NVIDIA Jetson Nano Developer Kit](https://developer.nvidia.com/embedded/jetson-nano-developer-kit) - Jetson Nano 本体はこちらがおすすめ - スイッチサイエンス - [【OLIOSPECオリジナル】NVIDIA Jetson Nano Developer kit用ケース\(長尾製作所製\)](https://www.oliospec.com/shopdetail/000000008491/) From f6b69e77faee770bcfad4557df548136e55aabde Mon Sep 17 00:00:00 2001 From: melpon Date: Sun, 29 Dec 2019 18:41:07 +0900 Subject: [PATCH 021/105] =?UTF-8?q?--disable-residual-echo-detector=20?= =?UTF-8?q?=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/connection_settings.h | 1 + src/rtc/manager.cpp | 2 ++ src/util.cpp | 6 ++++++ 3 files changed, 9 insertions(+) diff --git a/src/connection_settings.h b/src/connection_settings.h index 7fccff38..2b843510 100644 --- a/src/connection_settings.h +++ b/src/connection_settings.h @@ -57,6 +57,7 @@ struct ConnectionSettings { bool disable_noise_suppression = false; bool disable_highpass_filter = false; bool disable_typing_detection = false; + bool disable_residual_echo_detector = false; int getWidth() { if (resolution == "QVGA") { diff --git a/src/rtc/manager.cpp b/src/rtc/manager.cpp index 1d1174e4..f2c28e52 100644 --- a/src/rtc/manager.cpp +++ b/src/rtc/manager.cpp @@ -144,6 +144,8 @@ RTCManager::RTCManager( ao.highpass_filter = false; if (_conn_settings.disable_typing_detection) ao.typing_detection = false; + if (_conn_settings.disable_residual_echo_detector) + ao.residual_echo_detector = false; RTC_LOG(LS_INFO) << __FUNCTION__ << ": " << ao.ToString(); _audio_track = _factory->CreateAudioTrack(Util::generateRandomChars(), _factory->CreateAudioSource(ao)); diff --git a/src/util.cpp b/src/util.cpp index 9f3655ac..b30c0216 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -91,6 +91,9 @@ void Util::parseArgs(int argc, cs.disable_highpass_filter); local_nh.param("disable_typing_detection", cs.disable_typing_detection, cs.disable_typing_detection); + local_nh.param("disable_residual_echo_detector", + cs.disable_residual_echo_detector, + cs.disable_residual_echo_detector); if (use_sora && local_nh.hasParam("SIGNALING_URL") && local_nh.hasParam("CHANNEL_ID")) { @@ -222,6 +225,9 @@ void Util::parseArgs(int argc, "ハイパスフィルター無効"); app.add_flag("--disable-typing-detection", cs.disable_typing_detection, "タイピングディテクション無効"); + app.add_flag("--disable-residual-echo-detector", + cs.disable_residual_echo_detector, + "残響エコーディテクション無効"); auto test_app = app.add_subcommand("test", "開発向け"); auto ayame_app = app.add_subcommand("ayame", "WebRTC Signaling Server Ayame"); From b06d09e36f24d78c24ec51dd5e77e9080a03a562 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 30 Dec 2019 00:48:11 +0900 Subject: [PATCH 022/105] =?UTF-8?q?Ayame=20=E3=81=AE=E3=83=89=E3=82=AD?= =?UTF-8?q?=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE_AYAME.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/doc/USE_AYAME.md b/doc/USE_AYAME.md index 4fde2aa3..2638ce75 100644 --- a/doc/USE_AYAME.md +++ b/doc/USE_AYAME.md @@ -2,7 +2,7 @@ Ayame は時雨堂が開発し OSS として公開している、 WebRTC シグナリングサーバです。 -`OpenAyame プロジェクト `_ +[OpenAyame プロジェクト](https://gist.github.com/voluntas/90cc9686a11de2f1acca845c6278a824) Momo を利用する場合 Ayame を利用したモードをおすすめします。 @@ -28,24 +28,26 @@ Ayame SDK のオンラインサンプルを利用します。 URL の引数に https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=open-momo ``` - ### サインアップする場合 -Ayame Lite にサインアップした場合はルーム ID に GitHub ID の Prefix を先頭に指定する必要があります +Ayame Lite にサインアップした場合はルーム ID に GitHub ユーザ名 を先頭に指定する必要があります。 -- ルーム ID は GitHub ID を先頭に指定する必要があります -- シグナリングキーを --key にて指定する必要があります +- ルーム ID は GitHub ユーザ名を先頭に指定する必要があります +- シグナリングキーを --signaling-key にて指定する必要があります ```shell $ ./momo --no-audio ayame \ wss://ayame-lite.shiguredo.jp/signaling \ - shiguredo@ayame-lite \ - --key fW7LX2hv4k9AnB-S69L1HpaApcXYSp-mrxBhJgqulEHAr7BK + shiguredo@open-momo \ + --signaling-key fW7LX2hv4k9AnB-S69L1HpaApcXYSp-mrxBhJgqulEHAr7BK ``` Ayame SDK のオンラインサンプルを利用します。 URL の引数にルーム ID とシグナリングキーを指定してアクセスします。 ``` -https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=shiguredo@open-momo&key=fW7LX2hv4k9AnB-S69L1HpaApcXYSp-mrxBhJgqulEHAr7BK - +https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=shiguredo@open-momo&signalingKey=fW7LX2hv4k9AnB-S69L1HpaApcXYSp-mrxBhJgqulEHAr7BK ``` + +## 詳細版 + +[Raspberry Pi 4 と Momo と Ayame Lite でお手軽 WebRTC 配信](https://gist.github.com/voluntas/35b8c9d4b2edf11493632e22d483d4a4) From e14147612c7f6abf994eada486fa6dc1e4117221 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 01:32:55 +0900 Subject: [PATCH 023/105] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=AE=E6=95=B4=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 30 +++++++++++++++++++----------- doc/USE_AYAME.md | 18 ++++++------------ doc/USE_TEST.md | 5 +++-- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/doc/USE.md b/doc/USE.md index 236c837a..917ab718 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -1,5 +1,7 @@ # Momo を使ってみる +Momo を初めて利用する場合 テストモードでの利用をおすすめします。 + ## Raspberry Pi で Momo を使ってみる [USE_RASPBERRY_PI.md](USE_RASPBERRY_PI.md) をお読みください。 @@ -8,28 +10,29 @@ [USE_JETSON_NANO.md](USE_JETSON_NANO.md) をお読みください。 -## Mac で Momo を使ってみる +## macOS で Momo を使ってみる [USE_MAC.md](USE_MAC.md) をお読みください。 -## WebRTC Signaling Server Ayame を使って Momo を動かしてみる +## テストモードを利用して Momo を動かしてみる -時雨堂が開発しているオープンソースのシグナリングサーバ [WebRTC Signaling Server Ayame](https://github.com/OpenAyame/ayame) を利用します。 +[USE_TEST.md](USE_TEST.md) をお読みください。 -[USE_AYAME.md](USE_AYAME.md) をお読みください。 +## Ayame モードを 利用して Momo を動かしてみる -## WebRTC SFU Sora を使って Momo を動かしてみる +Ayame モードでは時雨堂が開発しているオープンソースのシグナリングサーバ [WebRTC Signaling Server Ayame](https://github.com/OpenAyame/ayame) を利用します。 -時雨堂が開発、販売している WebRTC SFU Sora を利用します。 +[Ayame Lite](https://ayame-lite.shiguredo.jp/) を利用することで、 無料で試すことが可能です。 -[Sora Labo](https://sora-labo.shiguredo.jp/) を利用することで、 Sora を購入せずに無料で試すことが可能です。 +[USE_AYAME.md](USE_AYAME.md) をお読みください。 -Sora Labo での使い方も書いてありますので、まずは [USE_SORA.md](USE_SORA.md) をお読みください。 +## Sora モードを 利用して Momo を動かしてみる -## ROS ノードとして Momo を使ってみる +Sora モードでは時雨堂が開発、販売している WebRTC SFU Sora を利用します。 -- Momo を ROS ノードとして使ってみたい人は [USE_ROS.md](USE_ROS.md) をお読みください。 -- ARM 対応版の Momo を ROS ノードとして使ってみたい人は [USE_ARM_ROS.md](USE_ARM_ROS.md) をお読みください。 +[Sora Labo](https://sora-labo.shiguredo.jp/) を利用することで、 Sora を無料で試すことが可能です。 + +[USE_SORA.md](USE_SORA.md) をお読みください。 ## SDL を利用した受信機能を使ってみる @@ -37,6 +40,11 @@ Momo では SDL (Simple DirectMedia Layer) を利用して音声や映像を出 [USE_SDL.md](USE_SDL.md) をお読みください。 +## ROS ノードとして Momo を使ってみる + +- Momo を ROS ノードとして使ってみたい人は [USE_ROS.md](USE_ROS.md) をお読みください。 +- ARM 対応版の Momo を ROS ノードとして使ってみたい人は [USE_ARM_ROS.md](USE_ARM_ROS.md) をお読みください。 + ## コマンド ### バージョン情報 diff --git a/doc/USE_AYAME.md b/doc/USE_AYAME.md index 2638ce75..3ecd893e 100644 --- a/doc/USE_AYAME.md +++ b/doc/USE_AYAME.md @@ -1,11 +1,9 @@ -# Ayame を使って Momo を動かしてみる +# Ayame モードを 利用して Momo を動かしてみる Ayame は時雨堂が開発し OSS として公開している、 WebRTC シグナリングサーバです。 [OpenAyame プロジェクト](https://gist.github.com/voluntas/90cc9686a11de2f1acca845c6278a824) -Momo を利用する場合 Ayame を利用したモードをおすすめします。 - ## Ayame を利用したサービス Ayame Lite を利用する Ayame を利用してシグナリングサーバを立てるのが面倒な人向けに Ayame Lite を提供しています。 @@ -14,7 +12,7 @@ Ayame Lite は時雨堂が提供している Ayame を利用したサービス https://ayame-lite.shiguredo.jp/beta -### サインアップしない場合 +### Ayame Lite にサインアップしない場合 Ayame Lite はサインアップせずにそのままシグナリングサーバだけでも利用可能です。 @@ -28,12 +26,12 @@ Ayame SDK のオンラインサンプルを利用します。 URL の引数に https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=open-momo ``` -### サインアップする場合 +### Ayame Lite にサインアップする場合 -Ayame Lite にサインアップした場合はルーム ID に GitHub ユーザ名 を先頭に指定する必要があります。 +Ayame Lite にサインアップした場合は `ルーム ID` に `GitHub ユーザ名` を先頭に指定する必要があります。 -- ルーム ID は GitHub ユーザ名を先頭に指定する必要があります -- シグナリングキーを --signaling-key にて指定する必要があります +- `ルーム ID` は `GitHub ユーザ名` を先頭に指定する必要があります +- シグナリングキーを `--signaling-key` にて指定する必要があります ```shell $ ./momo --no-audio ayame \ @@ -47,7 +45,3 @@ Ayame SDK のオンラインサンプルを利用します。 URL の引数に ``` https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=shiguredo@open-momo&signalingKey=fW7LX2hv4k9AnB-S69L1HpaApcXYSp-mrxBhJgqulEHAr7BK ``` - -## 詳細版 - -[Raspberry Pi 4 と Momo と Ayame Lite でお手軽 WebRTC 配信](https://gist.github.com/voluntas/35b8c9d4b2edf11493632e22d483d4a4) diff --git a/doc/USE_TEST.md b/doc/USE_TEST.md index 347e3733..b6a1e941 100644 --- a/doc/USE_TEST.md +++ b/doc/USE_TEST.md @@ -1,4 +1,4 @@ -# 動かしてみる +# テストモードで動かしてみる Momo 自体がシグナリングサーバの機能を持つ test モードを利用して動かしてみてください。 @@ -6,7 +6,8 @@ Momo 自体がシグナリングサーバの機能を持つ test モードを利 $ ./momo --no-audio --port 8080 test ``` -http://[momo の IP アドレス]:8080/html/test.html にアクセスして接続してみてください。 +momo の IP アドレスが 192.0.2.100 の場合は、 +http://192.0.2.100:8080/html/test.html にアクセスして接続してみてください。 うまく接続できたら、次は是非 Ayame を利用して動かしてみてください。 From 9b3d282f3e8e76c8dbcd55afdd86fcdc77885838 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 01:41:45 +0900 Subject: [PATCH 024/105] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E6=95=B4=E7=90=86=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...SE_JETSON_NANO.md => SETUP_JETSON_NANO.md} | 21 +++++++++++++++++-- doc/{USE_MAC.md => SETUP_MAC.md} | 0 ..._RASPBERRY_PI.md => SETUP_RASPBERRY_PI.md} | 0 doc/USE.md | 12 +++++------ 4 files changed, 25 insertions(+), 8 deletions(-) rename doc/{USE_JETSON_NANO.md => SETUP_JETSON_NANO.md} (94%) rename doc/{USE_MAC.md => SETUP_MAC.md} (100%) rename doc/{USE_RASPBERRY_PI.md => SETUP_RASPBERRY_PI.md} (100%) diff --git a/doc/USE_JETSON_NANO.md b/doc/SETUP_JETSON_NANO.md similarity index 94% rename from doc/USE_JETSON_NANO.md rename to doc/SETUP_JETSON_NANO.md index 7eafe9ea..ad6936f9 100644 --- a/doc/USE_JETSON_NANO.md +++ b/doc/SETUP_JETSON_NANO.md @@ -43,13 +43,30 @@ 色々 4K@30 が出せるカメラを試してきましたが、このカメラが一番安定しています。 +## JetPack 4.3 以上を必ず利用してください + +`JetPack 4.3 - L4T R32.3.1 released - NVIDIA Developer Forums `_ + ## Jetson Nano 向けのバイナリは以下にて提供しています https://github.com/shiguredo/momo/releases にて最新版のバイナリをダウンロードしてください。 -## JetPack 4.3 以上を必ず利用してください +## ダウンロードしたパッケージ、解凍後の構成 -`JetPack 4.3 - L4T R32.3.1 released - NVIDIA Developer Forums `_ +``` +$ tree +. +├── html +│   ├── test.html +│   └── webrtc.js +├── LICENSE +├── momo +└── NOTICE +``` + +## 動かしてみる + +動かし方について、まずは [USE_TEST.md](USE_TEST.md) をご確認ください。 ## 4K@30 を出すためにやること diff --git a/doc/USE_MAC.md b/doc/SETUP_MAC.md similarity index 100% rename from doc/USE_MAC.md rename to doc/SETUP_MAC.md diff --git a/doc/USE_RASPBERRY_PI.md b/doc/SETUP_RASPBERRY_PI.md similarity index 100% rename from doc/USE_RASPBERRY_PI.md rename to doc/SETUP_RASPBERRY_PI.md diff --git a/doc/USE.md b/doc/USE.md index 917ab718..c8b2c469 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -2,17 +2,17 @@ Momo を初めて利用する場合 テストモードでの利用をおすすめします。 -## Raspberry Pi で Momo を使ってみる +## Raspberry Pi で Momo をセットアップする -[USE_RASPBERRY_PI.md](USE_RASPBERRY_PI.md) をお読みください。 +[SETUP_RASPBERRY_PI.md](SETUP_RASPBERRY_PI.md) をお読みください。 -## NVIDIA Jetson Nano で Momo を使ってみる +## NVIDIA Jetson Nano で Momo をセットアップする -[USE_JETSON_NANO.md](USE_JETSON_NANO.md) をお読みください。 +[SETUP_JETSON_NANO.md](SETUP_JETSON_NANO.md) をお読みください。 -## macOS で Momo を使ってみる +## macOS で Momo をセットアップする -[USE_MAC.md](USE_MAC.md) をお読みください。 +[SETUP_MAC.md](SETUP_MAC.md) をお読みください。 ## テストモードを利用して Momo を動かしてみる From 452315b7b222836f6cce103f92359d1c58afc028 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 01:51:48 +0900 Subject: [PATCH 025/105] =?UTF-8?q?=E3=82=BB=E3=83=83=E3=83=88=E3=82=A2?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=80=81=E5=8B=95=E3=81=8B=E3=81=99=E3=82=92?= =?UTF-8?q?=E3=82=8F=E3=81=91=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/USE.md b/doc/USE.md index c8b2c469..68f8433d 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -1,19 +1,21 @@ # Momo を使ってみる -Momo を初めて利用する場合 テストモードでの利用をおすすめします。 +## セットアップ -## Raspberry Pi で Momo をセットアップする +### Raspberry Pi で Momo をセットアップする [SETUP_RASPBERRY_PI.md](SETUP_RASPBERRY_PI.md) をお読みください。 -## NVIDIA Jetson Nano で Momo をセットアップする +### NVIDIA Jetson Nano で Momo をセットアップする [SETUP_JETSON_NANO.md](SETUP_JETSON_NANO.md) をお読みください。 -## macOS で Momo をセットアップする +### macOS で Momo をセットアップする [SETUP_MAC.md](SETUP_MAC.md) をお読みください。 +## 動かす + ## テストモードを利用して Momo を動かしてみる [USE_TEST.md](USE_TEST.md) をお読みください。 From c4cd52436f9156e824df4bbb1fd535428f7b911f Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 30 Dec 2019 02:45:52 +0900 Subject: [PATCH 026/105] =?UTF-8?q?Sora=20=E3=81=AB=E6=8E=A5=E7=B6=9A?= =?UTF-8?q?=E3=81=99=E3=82=8B=E9=9A=9B=E3=81=AB=E6=A7=98=E3=80=85=E3=81=AA?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E3=82=92=E4=BB=98=E3=81=91=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 31 ++++++++++ VERSION | 2 +- build/Makefile | 8 +-- build/macos/Makefile | 2 + script/docker_run.sh | 19 +++++-- src/mac_helper/macos_version.h | 12 ++++ src/mac_helper/macos_version.mm | 90 ++++++++++++++++++++++++++++++ src/momo_version.h | 30 ++++++++++ src/sora/sora_websocket_client.cpp | 79 ++++++++++++++++++++++++++ src/util.cpp | 11 +--- 10 files changed, 265 insertions(+), 19 deletions(-) create mode 100644 src/mac_helper/macos_version.h create mode 100644 src/mac_helper/macos_version.mm create mode 100644 src/momo_version.h diff --git a/Makefile b/Makefile index 4a8f5eee..2934deae 100644 --- a/Makefile +++ b/Makefile @@ -46,6 +46,8 @@ include VERSION # # WEBRTC_LIBRARY_DIR: WebRTC のライブラリディレクトリ # +# WEBRTC_VERSION_FILE: WebRTC のバージョンファイル +# # CLANG_ROOT: ビルドに使う clang コンパイラのインストール先ディレクトリ # # USE_LIBCXX: libstdc++ の代わりに libc++ を使うかどうか @@ -62,6 +64,8 @@ include VERSION # # MOMO_VERSION: バージョン情報。設定しなければ internal-build になる # +# MOMO_COMMIT_SHORT: Momo のコミットハッシュ。設定しなければ unknown になる +# # MOMO_CFLAGS: C コンパイラに追加で渡すフラグ。最適化フラグやデバッグフラグを入れることを想定している。 # # MOMO_LDFLAGS: C リンカーに追加で渡すフラグ。サニタイズフラグや追加のリンクオブジェクトを入れることを想定している。 @@ -81,6 +85,7 @@ ifeq ($(PACKAGE_NAME),raspbian-buster_armv6) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + WEBRTC_VERSION_FILE ?= /root/webrtc/VERSIONS CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include @@ -100,6 +105,7 @@ else ifeq ($(PACKAGE_NAME),raspbian-buster_armv7) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + WEBRTC_VERSION_FILE ?= /root/webrtc/VERSIONS CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include @@ -119,6 +125,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-16.04_armv7_ros) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + WEBRTC_VERSION_FILE ?= /root/webrtc/VERSIONS CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 0 SYSROOT ?= /root/rootfs @@ -137,6 +144,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-18.04_armv8) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + WEBRTC_VERSION_FILE ?= /root/webrtc/VERSIONS CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include @@ -157,6 +165,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-18.04_armv8_jetson_nano) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + WEBRTC_VERSION_FILE ?= /root/webrtc/VERSIONS CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include @@ -175,6 +184,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-16.04_x86_64_ros) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + WEBRTC_VERSION_FILE ?= /root/webrtc/VERSIONS CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 0 else ifeq ($(PACKAGE_NAME),ubuntu-18.04_x86_64) @@ -191,6 +201,7 @@ else ifeq ($(PACKAGE_NAME),ubuntu-18.04_x86_64) CLI11_ROOT ?= /root/CLI11 WEBRTC_INCLUDE_DIR ?= /root/webrtc/include WEBRTC_LIBRARY_DIR ?= /root/webrtc/lib + WEBRTC_VERSION_FILE ?= /root/webrtc/VERSIONS CLANG_ROOT ?= /root/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= /root/llvm/libcxx/include @@ -208,6 +219,7 @@ else ifeq ($(PACKAGE_NAME),macos) CLI11_ROOT ?= $(CURDIR)/build/macos/CLI11 WEBRTC_INCLUDE_DIR ?= $(CURDIR)/build/macos/webrtc/include WEBRTC_LIBRARY_DIR ?= $(CURDIR)/build/macos/webrtc/lib + WEBRTC_VERSION_FILE ?= $(CURDIR)/build/macos/webrtc/VERSIONS CLANG_ROOT ?= $(CURDIR)/build/macos/llvm/clang USE_LIBCXX ?= 1 LIBCXX_INCLUDE_DIR ?= $(CURDIR)/build/macos/llvm/libcxx/include @@ -323,6 +335,25 @@ LDFLAGS += -L$(WEBRTC_LIBRARY_DIR) -lpthread ifdef MOMO_VERSION CFLAGS += -DMOMO_VERSION='"$(MOMO_VERSION)"' endif +ifdef MOMO_COMMIT_SHORT + CFLAGS += -DMOMO_COMMIT_SHORT='"$(MOMO_COMMIT_SHORT)"' +endif + +# WebRTC のバージョンファイルがある場合、必要な情報を CFLAGS に追加していく +ifdef WEBRTC_VERSION_FILE + WEBRTC_READABLE_VERSION = $(shell . $(WEBRTC_VERSION_FILE) && echo $$WEBRTC_READABLE_VERSION) + WEBRTC_COMMIT_SHORT = $(shell . $(WEBRTC_VERSION_FILE) && echo $$WEBRTC_COMMIT | cut -b 1-8) + WEBRTC_BUILD_VERSION = $(shell . $(WEBRTC_VERSION_FILE) && echo $$WEBRTC_BUILD_VERSION) +endif +ifdef WEBRTC_READABLE_VERSION + CFLAGS += -DWEBRTC_READABLE_VERSION='"$(WEBRTC_READABLE_VERSION)"' +endif +ifdef WEBRTC_COMMIT_SHORT + CFLAGS += -DWEBRTC_COMMIT_SHORT='"$(WEBRTC_COMMIT_SHORT)"' +endif +ifdef WEBRTC_BUILD_VERSION + CFLAGS += -DWEBRTC_BUILD_VERSION='"$(WEBRTC_BUILD_VERSION)"' +endif ifeq ($(USE_LIBCXX),1) LDFLAGS += -lwebrtc diff --git a/VERSION b/VERSION index a89e3d7f..8486446d 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ # 各種ライブラリのバージョン情報 # 項目を変更してビルドすれば各環境へ反映される(ように作る) MOMO_VERSION=2020.1 -WEBRTC_BUILD_VERSION=79.5.3 +WEBRTC_BUILD_VERSION=79.5.4 BOOST_VERSION=1.72.0 JSON_VERSION=3.7.3 CLI11_VERSION=1.8.0 diff --git a/build/Makefile b/build/Makefile index 4a24b60a..3b588a35 100644 --- a/build/Makefile +++ b/build/Makefile @@ -40,7 +40,7 @@ help: @echo "具体的には docker build コマンドに --progress=plain を指定します。" @echo "" -WEBRTC_COMMIT_SHORT=$(shell echo $(WEBRTC_COMMIT) | cut -b 1-8) +MOMO_COMMIT_SHORT=$(shell git rev-parse HEAD | cut -b 1-8) ifeq ($(NOCACHE),1) DOCKER_BUILD_FLAGS += --no-cache @@ -61,12 +61,12 @@ define generateDockerRules .PHONY: $(1) $(1): $(1).prepare - ../script/docker_run.sh `pwd` `pwd`/.. $(DOCKER_MOUNT) $(1) momo/$(1):m$$(WEBRTC_BUILD_VERSION) build ${MOMO_VERSION} $(CLI11_VERSION) $(JSON_VERSION) + ../script/docker_run.sh `pwd` `pwd`/.. $(DOCKER_MOUNT) $(1) momo/$(1):m$$(WEBRTC_BUILD_VERSION) build $(MOMO_VERSION) $(MOMO_COMMIT_SHORT) .PHONY: $(1).package $(1).package: $(1).prepare # momo を package モードでビルドし直す - ../script/docker_run.sh `pwd` `pwd`/.. $(DOCKER_MOUNT) $(1) momo/$(1):m$$(WEBRTC_BUILD_VERSION) package ${MOMO_VERSION} $(CLI11_VERSION) $(JSON_VERSION) + ../script/docker_run.sh `pwd` `pwd`/.. $(DOCKER_MOUNT) $(1) momo/$(1):m$$(WEBRTC_BUILD_VERSION) package $(MOMO_VERSION) $(MOMO_COMMIT_SHORT) rm -rf package/momo-$(MOMO_VERSION)_$(1) rm -f package/momo-$(MOMO_VERSION)_$(1).tar.gz @@ -115,7 +115,7 @@ $(foreach package_name, $(PACKAGE_NAMES), $(eval $(call generateDockerRules,$(pa .PHONY: macos macos: macos.prepare - make -C .. MOMO_CFLAGS="-O2 -fobjc-arc" PACKAGE_NAME=macos MOMO_VERSION=${MOMO_VERSION} momo + make -C .. MOMO_CFLAGS="-O2 -fobjc-arc" PACKAGE_NAME=macos MOMO_VERSION=$(MOMO_VERSION) MOMO_COMMIT_SHORT=$(MOMO_COMMIT_SHORT) momo .PHONY: macos.package macos.package: macos.prepare diff --git a/build/macos/Makefile b/build/macos/Makefile index 3f5e61fc..eee0a6bf 100644 --- a/build/macos/Makefile +++ b/build/macos/Makefile @@ -59,6 +59,7 @@ $(WEBRTC): ../../VERSION $(BOOST): ../../VERSION ../../script/setup_boost.sh $(BOOST_VERSION) $(CURDIR)/boost-source cd $(CURDIR)/boost-source/source && ./b2 visibility=hidden link=static variant=release install -j$(JOBS) --prefix=$(BOOST_PREFIX) --ignore-site-config --with-filesystem + touch $(BOOST) $(SDL2): $(LLVM) ../../script/setup_sdl2.sh $(SDL2_VERSION) $(CURDIR)/sdl2-source @@ -66,3 +67,4 @@ $(SDL2): $(LLVM) mkdir -p $(CURDIR)/sdl2-source/build cd $(CURDIR)/sdl2-source/build && ../source/configure --disable-shared --prefix=$(SDL2_PREFIX) cd $(CURDIR)/sdl2-source/build && make && make install + touch $(SDL2) diff --git a/script/docker_run.sh b/script/docker_run.sh index 5a14975c..bd90459b 100755 --- a/script/docker_run.sh +++ b/script/docker_run.sh @@ -5,12 +5,12 @@ set -e # ヘルプ表示 function show_help() { echo "" - echo "$0 <作業ディレクトリ> <マウントタイプ [mount | nomount]> <パッケージ名> <ビルドモード [build | package]> " + echo "$0 <作業ディレクトリ> <マウントタイプ [mount | nomount]> <パッケージ名> <ビルドモード [build | package]> " echo "" } # 引数のチェック -if [ $# -ne 9 ]; then +if [ $# -ne 8 ]; then show_help exit 1 fi @@ -22,6 +22,7 @@ PACKAGE_NAME="$4" DOCKER_IMAGE="$5" BUILD_MODE="$6" MOMO_VERSION="$7" +MOMO_COMMIT_SHORT="$8" if [ -z "$WORK_DIR" ]; then echo "エラー: <作業ディレクトリ> が空です" @@ -71,15 +72,21 @@ if [ -z "$MOMO_VERSION" ]; then exit 1 fi +if [ -z "$MOMO_COMMIT_SHORT" ]; then + echo "エラー: が空です" + show_help + exit 1 +fi + # マウントするかどうかで大きく分岐する if [ "$MOUNT_TYPE" = "mount" ]; then # マウントする場合は、単純にマウントしてビルドするだけ if [ "$BUILD_MODE" = "build" ]; then # build - docker run -it --rm -v "$WORK_DIR/..:/root/momo" "$DOCKER_IMAGE" /bin/bash -c "cd /root/momo && make MOMO_CFLAGS='-O2' PACKAGE_NAME=$PACKAGE_NAME MOMO_VERSION=$MOMO_VERSION momo" + docker run -it --rm -v "$WORK_DIR/..:/root/momo" "$DOCKER_IMAGE" /bin/bash -c "cd /root/momo && make MOMO_CFLAGS='-O2' PACKAGE_NAME=$PACKAGE_NAME MOMO_VERSION=$MOMO_VERSION MOMO_COMMIT_SHORT=$MOMO_COMMIT_SHORT momo" else # package - docker run -it --rm -v "$WORK_DIR/..:/root/momo" "$DOCKER_IMAGE" /bin/bash -c "cd /root/momo && make PACKAGE_NAME=$PACKAGE_NAME clean && make MOMO_CFLAGS='-O2' PACKAGE_NAME=$PACKAGE_NAME BUILD_MODE=package MOMO_VERSION=$MOMO_VERSION momo" + docker run -it --rm -v "$WORK_DIR/..:/root/momo" "$DOCKER_IMAGE" /bin/bash -c "cd /root/momo && make PACKAGE_NAME=$PACKAGE_NAME clean && make MOMO_CFLAGS='-O2' PACKAGE_NAME=$PACKAGE_NAME BUILD_MODE=package MOMO_VERSION=$MOMO_VERSION MOMO_COMMIT_SHORT=$MOMO_COMMIT_SHORT momo" fi else # マウントしない場合は、コンテナを起動して、コンテナに必要なファイルを転送して、コンテナ上でビルドして、生成されたファイルをコンテナから戻して、コンテナを終了する @@ -144,10 +151,10 @@ else docker container exec momo-$PACKAGE_NAME /bin/bash -c 'cd /root && tar xf momo.tar.gz && rm momo.tar.gz' if [ "$BUILD_MODE" = "build" ]; then # build - docker container exec momo-$PACKAGE_NAME /bin/bash -c "cd /root/momo && make MOMO_CFLAGS='-O2' PACKAGE_NAME=$PACKAGE_NAME MOMO_VERSION=$MOMO_VERSION momo" + docker container exec momo-$PACKAGE_NAME /bin/bash -c "cd /root/momo && make MOMO_CFLAGS='-O2' PACKAGE_NAME=$PACKAGE_NAME MOMO_VERSION=$MOMO_VERSION MOMO_COMMIT_SHORT=$MOMO_COMMIT_SHORT momo" else # package - docker container exec momo-$PACKAGE_NAME /bin/bash -c "cd /root/momo && make PACKAGE_NAME=$PACKAGE_NAME clean && make MOMO_CFLAGS='-O2' PACKAGE_NAME=$PACKAGE_NAME BUILD_MODE=package MOMO_VERSION=$MOMO_VERSION momo" + docker container exec momo-$PACKAGE_NAME /bin/bash -c "cd /root/momo && make PACKAGE_NAME=$PACKAGE_NAME clean && make MOMO_CFLAGS='-O2' PACKAGE_NAME=$PACKAGE_NAME BUILD_MODE=package MOMO_VERSION=$MOMO_VERSION MOMO_COMMIT_SHORT=$MOMO_COMMIT_SHORT momo" fi # 中間ファイル類を取り出す diff --git a/src/mac_helper/macos_version.h b/src/mac_helper/macos_version.h new file mode 100644 index 00000000..78164672 --- /dev/null +++ b/src/mac_helper/macos_version.h @@ -0,0 +1,12 @@ +#ifndef MACOS_VERSION_H_INCLUDED +#define MACOS_VERSION_H_INCLUDED + +#include + +class MacosVersion { + public: + static std::string GetOSName(); + static std::string GetOSVersion(); +}; + +#endif // MACOS_VERSION_H_INCLUDED diff --git a/src/mac_helper/macos_version.mm b/src/mac_helper/macos_version.mm new file mode 100644 index 00000000..15916f86 --- /dev/null +++ b/src/mac_helper/macos_version.mm @@ -0,0 +1,90 @@ +#include "macos_version.h" + +#import +#include + +// TARGET_OS_* から OS 名を調べる。 +// アーキテクチャもマクロから分かるけど、それは実行時に uname を使って調べるので不要 + +// 以下の情報は /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/TargetConditionals.h からのコピペ + +/**************************************************************************************************** + + TARGET_CPU_* + These conditionals specify which microprocessor instruction set is being + generated. At most one of these is true, the rest are false. + + TARGET_CPU_PPC - Compiler is generating PowerPC instructions for 32-bit mode + TARGET_CPU_PPC64 - Compiler is generating PowerPC instructions for 64-bit mode + TARGET_CPU_68K - Compiler is generating 680x0 instructions + TARGET_CPU_X86 - Compiler is generating x86 instructions for 32-bit mode + TARGET_CPU_X86_64 - Compiler is generating x86 instructions for 64-bit mode + TARGET_CPU_ARM - Compiler is generating ARM instructions for 32-bit mode + TARGET_CPU_ARM64 - Compiler is generating ARM instructions for 64-bit mode + TARGET_CPU_MIPS - Compiler is generating MIPS instructions + TARGET_CPU_SPARC - Compiler is generating Sparc instructions + TARGET_CPU_ALPHA - Compiler is generating Dec Alpha instructions + + + TARGET_OS_* + These conditionals specify in which Operating System the generated code will + run. Indention is used to show which conditionals are evolutionary subclasses. + + The MAC/WIN32/UNIX conditionals are mutually exclusive. + The IOS/TV/WATCH conditionals are mutually exclusive. + + + TARGET_OS_WIN32 - Generated code will run under 32-bit Windows + TARGET_OS_UNIX - Generated code will run under some Unix (not OSX) + TARGET_OS_MAC - Generated code will run under Mac OS X variant + TARGET_OS_OSX - Generated code will run under OS X devices + TARGET_OS_IPHONE - Generated code for firmware, devices, or simulator + TARGET_OS_IOS - Generated code will run under iOS + TARGET_OS_TV - Generated code will run under Apple TV OS + TARGET_OS_WATCH - Generated code will run under Apple Watch OS + TARGET_OS_BRIDGE - Generated code will run under Bridge devices + TARGET_OS_MACCATALYST - Generated code will run under macOS + TARGET_OS_SIMULATOR - Generated code will run under a simulator + + TARGET_OS_EMBEDDED - DEPRECATED: Use TARGET_OS_IPHONE and/or TARGET_OS_SIMULATOR instead + TARGET_IPHONE_SIMULATOR - DEPRECATED: Same as TARGET_OS_SIMULATOR + TARGET_OS_NANO - DEPRECATED: Same as TARGET_OS_WATCH + + +----------------------------------------------------------------+ + | TARGET_OS_MAC | + | +---+ +-----------------------------------------------------+ | + | | | | TARGET_OS_IPHONE | | + | |OSX| | +-----+ +----+ +-------+ +--------+ +-------------+ | | + | | | | | IOS | | TV | | WATCH | | BRIDGE | | MACCATALYST | | | + | | | | +-----+ +----+ +-------+ +--------+ +-------------+ | | + | +---+ +-----------------------------------------------------+ | + +----------------------------------------------------------------+ + + TARGET_RT_* + These conditionals specify in which runtime the generated code will + run. This is needed when the OS and CPU support more than one runtime + (e.g. Mac OS X supports CFM and mach-o). + + TARGET_RT_LITTLE_ENDIAN - Generated code uses little endian format for integers + TARGET_RT_BIG_ENDIAN - Generated code uses big endian format for integers + TARGET_RT_64_BIT - Generated code uses 64-bit pointers + TARGET_RT_MAC_CFM - TARGET_OS_MAC is true and CFM68K or PowerPC CFM (TVectors) are used + TARGET_RT_MAC_MACHO - TARGET_OS_MAC is true and Mach-O/dlyd runtime is used + + +****************************************************************************************************/ + +std::string MacosVersion::GetOSName() { +// 今は Mac かどうかだけ分かれば良いだけなので、TARGET_OS_MAC で分ける +#if TARGET_OS_MAC + return "macOS"; +#else + return "Unknown OS"; +#endif +} + +std::string MacosVersion::GetOSVersion() { + // "Version 10.8.2 (Build 12C60)" みたいな文字列を取得できる + NSString* str = NSProcessInfo.processInfo.operatingSystemVersionString; + return [str UTF8String]; +} diff --git a/src/momo_version.h b/src/momo_version.h new file mode 100644 index 00000000..87d464d5 --- /dev/null +++ b/src/momo_version.h @@ -0,0 +1,30 @@ +#ifndef MOMO_VERSION_H_INCLUDED +#define MOMO_VERSION_H_INCLUDED + +// バージョンやコミットハッシュ情報 +// 通常は外から渡すが、渡されていなかった場合の対応 +#ifndef MOMO_VERSION +#define MOMO_VERSION "internal-build" +#endif + +#ifndef MOMO_COMMIT_SHORT +#define MOMO_COMMIT_SHORT "unknown" +#endif + +#define MOMO_NAME \ + "WebRTC Native Client Momo " MOMO_VERSION " (" MOMO_COMMIT_SHORT ")" + +#if defined(WEBRTC_READABLE_VERSION) && defined(WEBRTC_COMMIT_SHORT) && \ + defined(WEBRTC_BUILD_VERSION) + +#define LIBWEBRTC_NAME \ + "Shiguredo-Build " WEBRTC_READABLE_VERSION " (" WEBRTC_BUILD_VERSION \ + " " WEBRTC_COMMIT_SHORT ")" + +#else + +#define LIBWEBRTC_NAME "WebRTC custom build" + +#endif + +#endif // MOMO_VERSION_H_INCLUDED diff --git a/src/sora/sora_websocket_client.cpp b/src/sora/sora_websocket_client.cpp index bd7541ca..77738a5c 100644 --- a/src/sora/sora_websocket_client.cpp +++ b/src/sora/sora_websocket_client.cpp @@ -1,11 +1,28 @@ #include "sora_websocket_client.h" +#include +#include + +// boost +#include // is_any_of +#include +#include #include + +// json #include +#include "momo_version.h" #include "url_parts.h" #include "util.h" +#if defined(__APPLE__) || defined(__linux__) +#include +#endif +#if defined(__APPLE__) +#include "mac_helper/macos_version.h" +#endif + using json = nlohmann::json; bool SoraWebsocketClient::parseURL(URLParts& parts) const { @@ -217,10 +234,72 @@ void SoraWebsocketClient::onHandshake(boost::system::error_code ec) { } void SoraWebsocketClient::doSendConnect() { + std::string environment = "Unknown Environment"; + +#if defined(__APPLE__) || defined(__linux__) + std::string arch = "unknown arch"; + std::string os = "Unknown OS"; + + utsname u; + int r = uname(&u); + if (r == 0) { + arch = u.machine; + } + +#if defined(__APPLE__) + os = MacosVersion::GetOSName() + " " + MacosVersion::GetOSVersion(); +#else + // /etc/os-release ファイルを読んで PRETTY_NAME を利用する + + // /etc/os-release は以下のような内容になっているので、これを適当にパースする + /* + $ docker run -it --rm ubuntu cat /etc/os-release + NAME="Ubuntu" + VERSION="18.04.3 LTS (Bionic Beaver)" + ID=ubuntu + ID_LIKE=debian + PRETTY_NAME="Ubuntu 18.04.3 LTS" + VERSION_ID="18.04" + HOME_URL="https://www.ubuntu.com/" + SUPPORT_URL="https://help.ubuntu.com/" + BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" + PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" + VERSION_CODENAME=bionic + UBUNTU_CODENAME=bionic + */ + // 行ごとに分けたデータを取得 + std::vector lines; + { + std::stringstream ss; + std::ifstream fin("/etc/os-release"); + ss << fin.rdbuf(); + std::string content = ss.str(); + boost::algorithm::split(lines, ss.str(), boost::is_any_of("\n")); + } + const std::string PRETTY_NAME = "PRETTY_NAME="; + for (auto& line : lines) { + // 先頭が PRETTY_NAME= の行を探す + if (line.find(PRETTY_NAME) != 0) { + continue; + } + // PRETTY_NAME= 以降のデータを取り出す + os = line.substr(PRETTY_NAME.size()); + // 左右の " を除ける(in-place バージョン) + boost::algorithm::trim_if(os, [](char c) { return c == '"'; }); + break; + } +#endif + + environment = "[" + arch + "] " + os; +#endif + json json_message = { {"type", "connect"}, {"role", conn_settings_.sora_role}, {"channel_id", conn_settings_.sora_channel_id}, + {"sora_client", MOMO_NAME}, + {"libwebrtc", LIBWEBRTC_NAME}, + {"environment", environment}, }; if (conn_settings_.sora_multistream) { diff --git a/src/util.cpp b/src/util.cpp index b30c0216..26b17060 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -7,17 +7,12 @@ #include #include +#include "momo_version.h" #include "rtc_base/helpers.h" #if USE_ROS #include "ros/ros.h" #endif -// バージョン情報 -// 通常は外から渡すが、渡されていなかった場合の対応 -#ifndef MOMO_VERSION -#define MOMO_VERSION "internal-build" -#endif - // HWA を効かせる場合は 1 になる #if USE_MMAL_ENCODER #define MOMO_USE_MMAL_ENCODER 1 @@ -306,8 +301,8 @@ void Util::parseArgs(int argc, } if (version) { - std::cout << "WebRTC Native Client Momo version " MOMO_VERSION - " USE_MMAL_ENCODER=" BOOST_PP_STRINGIZE(MOMO_USE_MMAL_ENCODER) + std::cout << MOMO_NAME + " USE_MMAL_ENCODER=" BOOST_PP_STRINGIZE(MOMO_USE_MMAL_ENCODER) << std::endl; exit(0); } From 56e2d8d28e1e06f3a5bb35359c0aa413de355112 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 11:38:58 +0900 Subject: [PATCH 027/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index f21ea510..7b4a5bfd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,12 +12,32 @@ ## develop - [UPDATE] Momo 2020.1 にバージョンを上げる + - バージョン番号を <リリース年>.<その年のリリース回数> に変更 - @voluntas - [UPDATE] Boost 1.72.0 にアップデートする - @voluntas - [UPDATE] --video-device を Linux 全般で有効にする - V4L2 capturer を使うようにした - @shino +- [UPDATE] Jetson Nano 用のライブラリを NVIDIA L4T 32.3.1 に上げる + - [L4T \| NVIDIA Developer](https://developer.nvidia.com/embedded/linux-tegra) + - @melpon +- [UPDATE] 音声系オプションの --disable-residual-echo-detector を追加する + - @melpon +- [ADD] Sora 利用時のシグナリング開始情報に enviroment / libwebrtc / sora_client を追加する + - Jetson Nano の場合 + - `"environment": "[aarch64] Ubuntu 18.04.3 LTS"` + - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` + - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` + - macOS の場合 + - `"environment": "[x86_64] macOS Version 10.15.2 (Build 19C57)"` + - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` + - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` + - Ubuntu 18.04 x86_64 の場合 + - `"environment": "[x86_64] Ubuntu 18.04.3 LTS"` + - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` + - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` + - @melpon ## 19.12.1 From a59cf2dac9014b45836533c69873d73ade18c847 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 30 Dec 2019 11:40:29 +0900 Subject: [PATCH 028/105] =?UTF-8?q?=E6=97=A5=E6=9C=AC=E8=AA=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 7b4a5bfd..47c41140 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -24,7 +24,7 @@ - @melpon - [UPDATE] 音声系オプションの --disable-residual-echo-detector を追加する - @melpon -- [ADD] Sora 利用時のシグナリング開始情報に enviroment / libwebrtc / sora_client を追加する +- [ADD] Sora 利用時のシグナリング接続情報に enviroment / libwebrtc / sora_client を追加する - Jetson Nano の場合 - `"environment": "[aarch64] Ubuntu 18.04.3 LTS"` - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` From 4fc855c6ee76ef9201584f3cb3a4cba1acaa0824 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 30 Dec 2019 12:13:50 +0900 Subject: [PATCH 029/105] =?UTF-8?q?Jetson=20Nano=20=E3=81=AE=E5=A0=B4?= =?UTF-8?q?=E5=90=88=E3=80=81=E6=9B=B4=E3=81=AB=E8=A9=B3=E7=B4=B0=E3=81=AA?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E3=82=92=E5=8F=96=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sora/sora_websocket_client.cpp | 37 +++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/sora/sora_websocket_client.cpp b/src/sora/sora_websocket_client.cpp index 77738a5c..5c927f91 100644 --- a/src/sora/sora_websocket_client.cpp +++ b/src/sora/sora_websocket_client.cpp @@ -239,6 +239,7 @@ void SoraWebsocketClient::doSendConnect() { #if defined(__APPLE__) || defined(__linux__) std::string arch = "unknown arch"; std::string os = "Unknown OS"; + std::string info = ""; utsname u; int r = uname(&u); @@ -288,9 +289,43 @@ void SoraWebsocketClient::doSendConnect() { boost::algorithm::trim_if(os, [](char c) { return c == '"'; }); break; } + +#if USE_JETSON_ENCODER + // Jetson Nano の場合、更に詳細な情報を取得する + + // nvidia-l4t-core のバージョンを拾う + // $ dpkg-query --show nvidia-l4t-core + // で取得できるが、外部コマンドは出来るだけ使いたくないので、 + // /var/lib/dpkg/status から該当行を探す + + std::string content; + { + std::stringstream ss; + std::ifstream fin("/var/lib/dpkg/status"); + ss << fin.rdbuf(); + content = ss.str(); + } + std::string l4t_core_version = "unknown"; + auto pos = content.find("Package: nvidia-l4t-core"); + if (pos != std::string::npos) { + const std::string VERSION = "Version: "; + auto pos2 = content.find(VERSION, pos); + if (pos2 != std::string::npos) { + pos2 += VERSION.size(); + auto pos3 = content.find("\n", pos2); + l4t_core_version = pos3 == std::string::npos + ? content.substr(pos2) + : content.substr(pos2, pos3 - pos2); + } + } + + info = " (nvidia-l4t-core " + l4t_core_version + ")"; + +#endif + #endif - environment = "[" + arch + "] " + os; + environment = "[" + arch + "] " + os + info; #endif json json_message = { From d12b7b4b374adc4e7aa042314aff50fa5d11eb32 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 12:16:24 +0900 Subject: [PATCH 030/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 7b4a5bfd..4d4f04b7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -26,7 +26,7 @@ - @melpon - [ADD] Sora 利用時のシグナリング開始情報に enviroment / libwebrtc / sora_client を追加する - Jetson Nano の場合 - - `"environment": "[aarch64] Ubuntu 18.04.3 LTS"` + - `"environment": "[aarch64] Ubuntu 18.04.3 LTS (nvidia-l4t-core 32.2.1-20190812212815)"` - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - macOS の場合 From 8f2af483f2851b30da3477c8d605ce836f1df850 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 30 Dec 2019 14:42:28 +0900 Subject: [PATCH 031/105] =?UTF-8?q?--resolution=20=E3=81=AE=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E3=81=A7=201024x768=20=E3=81=AE=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AA=E6=9B=B8=E3=81=8D=E6=96=B9=E3=82=92=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/connection_settings.h | 35 ++++++++++--------- src/mac_helper/mac_capturer.mm | 5 ++- src/main.cpp | 5 +-- src/rtc/scalable_track_source.cpp | 2 +- src/util.cpp | 26 ++++++++++++-- .../v4l2_video_capturer.cpp | 16 +++++---- 6 files changed, 59 insertions(+), 30 deletions(-) diff --git a/src/connection_settings.h b/src/connection_settings.h index 2b843510..0d334116 100644 --- a/src/connection_settings.h +++ b/src/connection_settings.h @@ -59,30 +59,31 @@ struct ConnectionSettings { bool disable_typing_detection = false; bool disable_residual_echo_detector = false; - int getWidth() { + struct Size { + int width; + int height; + }; + Size getSize() { if (resolution == "QVGA") { - return 320; + return {320, 240}; + } else if (resolution == "VGA") { + return {640, 480}; } else if (resolution == "HD") { - return 1280; + return {1280, 720}; } else if (resolution == "FHD") { - return 1920; + return {1920, 1080}; } else if (resolution == "4K") { - return 3840; + return {3840, 2160}; } - return 640; - } - int getHeight() { - if (resolution == "QVGA") { - return 240; - } else if (resolution == "HD") { - return 720; - } else if (resolution == "FHD") { - return 1080; - } else if (resolution == "4K") { - return 2160; + // 128x96 みたいな感じのフォーマット + auto pos = resolution.find('x'); + if (pos == std::string::npos) { + return {16, 16}; } - return 480; + auto width = std::atoi(resolution.substr(0, pos).c_str()); + auto height = std::atoi(resolution.substr(pos + 1).c_str()); + return {std::max(16, width), std::max(16, height)}; } // FRAMERATE が優先のときは RESOLUTION をデグレさせていく diff --git a/src/mac_helper/mac_capturer.mm b/src/mac_helper/mac_capturer.mm index ff89427f..50f5b025 100644 --- a/src/mac_helper/mac_capturer.mm +++ b/src/mac_helper/mac_capturer.mm @@ -66,6 +66,9 @@ - (void)capturer:(RTCVideoCapturer*)capturer size_t height, size_t target_fps, AVCaptureDevice* device) { + RTC_LOG(LS_INFO) << "MacCapturer width=" << width << ", height=" << height + << ", target_fps=" << target_fps; + adapter_ = [[RTCVideoSourceAdapter alloc] init]; adapter_.capturer = this; @@ -151,4 +154,4 @@ - (void)capturer:(RTCVideoCapturer*)capturer void MacCapturer::OnFrame(const webrtc::VideoFrame& frame) { OnCapturedFrame(frame); -} \ No newline at end of file +} diff --git a/src/main.cpp b/src/main.cpp index 7709cfc4..119f9f75 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -78,14 +78,15 @@ int main(int argc, char* argv[]) { return 1; } rtc::LogMessage::AddLogToStream(log_sink.get(), rtc::LS_INFO); + auto size = cs.getSize(); #if defined(__APPLE__) rtc::scoped_refptr capturer = MacCapturer::Create( - cs.getWidth(), cs.getHeight(), cs.framerate, cs.video_device); + size.width, size.height, cs.framerate, cs.video_device); #elif defined(__linux__) rtc::scoped_refptr capturer = V4L2VideoCapture::Create(cs); #else rtc::scoped_refptr capturer = - DeviceVideoCapturer::Create(cs.getWidth(), cs.getHeight(), cs.framerate); + DeviceVideoCapturer::Create(size.width, size.height, cs.framerate); #endif if (!capturer && !cs.no_video) { std::cerr << "failed to create capturer" << std::endl; diff --git a/src/rtc/scalable_track_source.cpp b/src/rtc/scalable_track_source.cpp index eab2b8d0..cc07d896 100644 --- a/src/rtc/scalable_track_source.cpp +++ b/src/rtc/scalable_track_source.cpp @@ -84,4 +84,4 @@ void ScalableVideoTrackSource::OnCapturedFrame( .set_rotation(frame.rotation()) .set_timestamp_us(translated_timestamp_us) .build()); -} \ No newline at end of file +} diff --git a/src/util.cpp b/src/util.cpp index 26b17060..0ce18aa8 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,5 +1,8 @@ #include "util.h" +#include + +// external libraries #include #include #include @@ -165,6 +168,24 @@ void Util::parseArgs(int argc, }, ""); + auto is_valid_resolution = CLI::Validator( + [](std::string input) -> std::string { + if (input == "QVGA" || input == "VGA" || input == "HD" || + input == "FHD" || input == "4K") { + return std::string(); + } + + // 数値x数値、というフォーマットになっているか確認する + std::regex re("^[1-9][0-9]*x[1-9][0-9]*$"); + if (std::regex_match(input, re)) { + return std::string(); + } + + return "解像度は QVGA, VGA, HD, FHD, 4K, 幅x高さ " + "どれかである必要があります。"; + }, + ""); + app.add_flag("--no-video", cs.no_video, "ビデオを表示しない"); app.add_flag("--no-audio", cs.no_audio, "オーディオを出さない"); app.add_flag("--force-i420", cs.force_i420, @@ -183,8 +204,9 @@ void Util::parseArgs(int argc, "デバイスファイル名。省略時はどれかのビデオデバイスを自動検出") ->check(CLI::ExistingFile); #endif - app.add_set("--resolution", cs.resolution, {"QVGA", "VGA", "HD", "FHD", "4K"}, - "解像度"); + app.add_option("--resolution", cs.resolution, + "解像度(QVGA, VGA, HD, FHD, 4K, 幅x高さ)") + ->check(is_valid_resolution); app.add_option("--framerate", cs.framerate, "フレームレート") ->check(CLI::Range(1, 60)); app.add_flag("--fixed-resolution", cs.fixed_resolution, "固定解像度"); diff --git a/src/v4l2_video_capturer/v4l2_video_capturer.cpp b/src/v4l2_video_capturer/v4l2_video_capturer.cpp index 34352218..c0239c8a 100644 --- a/src/v4l2_video_capturer/v4l2_video_capturer.cpp +++ b/src/v4l2_video_capturer/v4l2_video_capturer.cpp @@ -91,9 +91,10 @@ rtc::scoped_refptr V4L2VideoCapture::Create( return nullptr; } if (v4l2_capturer->StartCapture(cs) < 0) { - RTC_LOG(LS_WARNING) << "Failed to start V4L2VideoCapture(w = " - << cs.getWidth() << ", h = " << cs.getHeight() - << ", fps = " << cs.framerate << ")"; + auto size = cs.getSize(); + RTC_LOG(LS_WARNING) << "Failed to start V4L2VideoCapture(w = " << size.width + << ", h = " << size.height << ", fps = " << cs.framerate + << ")"; return nullptr; } return v4l2_capturer; @@ -172,8 +173,9 @@ V4L2VideoCapture::~V4L2VideoCapture() { } int32_t V4L2VideoCapture::StartCapture(ConnectionSettings cs) { + auto size = cs.getSize(); if (_captureStarted) { - if (cs.getWidth() == _currentWidth && cs.getHeight() == _currentHeight) { + if (size.width == _currentWidth && size.height == _currentHeight) { return 0; } else { StopCapture(); @@ -193,7 +195,7 @@ int32_t V4L2VideoCapture::StartCapture(ConnectionSettings cs) { // I420 otherwise. const int nFormats = 5; unsigned int fmts[nFormats]; - if (!cs.force_i420 && (cs.getWidth() > 640 || cs.getHeight() > 480)) { + if (!cs.force_i420 && (size.width > 640 || size.height > 480)) { fmts[0] = V4L2_PIX_FMT_MJPEG; fmts[1] = V4L2_PIX_FMT_YUV420; fmts[2] = V4L2_PIX_FMT_YUYV; @@ -239,8 +241,8 @@ int32_t V4L2VideoCapture::StartCapture(ConnectionSettings cs) { memset(&video_fmt, 0, sizeof(struct v4l2_format)); video_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; video_fmt.fmt.pix.sizeimage = 0; - video_fmt.fmt.pix.width = cs.getWidth(); - video_fmt.fmt.pix.height = cs.getHeight(); + video_fmt.fmt.pix.width = size.width; + video_fmt.fmt.pix.height = size.height; video_fmt.fmt.pix.pixelformat = fmts[fmtsIdx]; if (video_fmt.fmt.pix.pixelformat == V4L2_PIX_FMT_YUYV) From 851da4ee29effc524b8f87b33a380d8b686f98d9 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 30 Dec 2019 14:48:41 +0900 Subject: [PATCH 032/105] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=AE=20--help=20=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/USE.md b/doc/USE.md index 68f8433d..37a30c8d 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -53,7 +53,7 @@ Momo では SDL (Simple DirectMedia Layer) を利用して音声や映像を出 ``` $ ./momo --version -WebRTC Native Client Momo version 19.11.0 USE_MMAL_ENCODER=0 +WebRTC Native Client Momo 2020.1 (4fc855c6) USE_MMAL_ENCODER=0 ``` ### ヘルプ @@ -70,8 +70,7 @@ Options: --force-i420 強制的にI420にする(対応デバイスのみ) --use-native MJPEGのデコードとビデオのリサイズをハードウェアで行う(対応デバイスのみ) --video-device TEXT デバイス番号、またはデバイス名。省略時はデフォルト(デバイス番号が0)のビデオデバイスを自動検出 - --resolution TEXT:{4K,FHD,HD,QVGA,VGA} - 解像度 + --resolution TEXT 解像度(QVGA, VGA, HD, FHD, 4K, 幅x高さ) --framerate INT:INT in [1 - 60] フレームレート --fixed-resolution 固定解像度 @@ -95,6 +94,8 @@ Options: --disable-noise-suppression ノイズサプレッション無効 --disable-highpass-filter ハイパスフィルター無効 --disable-typing-detection タイピングディテクション無効 + --disable-residual-echo-detector + 残響エコーディテクション無効 Subcommands: test 開発向け @@ -156,7 +157,7 @@ Options: --audio-bitrate INT:INT in [6 - 510] オーディオのビットレート --multistream マルチストリームかどうか - --role TEXT:{downstream,upstream} + --role TEXT:{downstream,recvonly,sendonly,sendrecv,upstream} ロール(デフォルトは upstream) --spotlight INT:INT in [1 - 10] スポットライトの配信数 From 61c65c24523973e6bbe6c5cbdfb3889e76506d5f Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 15:08:33 +0900 Subject: [PATCH 033/105] =?UTF-8?q?=E8=A7=A3=E5=83=8F=E5=BA=A6=E3=81=AE?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 9e9acfe4..c04eff19 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -24,6 +24,10 @@ - @melpon - [UPDATE] 音声系オプションの --disable-residual-echo-detector を追加する - @melpon +- [ADD] 自由に解像度の値を指定できるようにする + - `--resolution 640x480` のように指定できるようになりました + - この機能が有効になるのは、カメラに依存するため動作保証はありません + - @melpon - [ADD] Sora 利用時のシグナリング接続情報に enviroment / libwebrtc / sora_client を追加する - Jetson Nano の場合 - `"environment": "[aarch64] Ubuntu 18.04.3 LTS (nvidia-l4t-core 32.2.1-20190812212815)"` From 127962b2c9ef3ab367732f3b9a919c680310a2bc Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 15:09:12 +0900 Subject: [PATCH 034/105] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E6=95=B4=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/SETUP_RASPBERRY_PI.md | 5 ++++- doc/USE.md | 10 +++++----- doc/USE_AYAME.md | 9 ++++++--- doc/USE_TEST.md | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/doc/SETUP_RASPBERRY_PI.md b/doc/SETUP_RASPBERRY_PI.md index f4948502..253dc3c6 100644 --- a/doc/SETUP_RASPBERRY_PI.md +++ b/doc/SETUP_RASPBERRY_PI.md @@ -1,9 +1,12 @@ -# Raspberry Pi で Momo を使ってみる +# Raspberry Pi (Raspbian) で Momo を使ってみる ## Raspberry Pi 向けのバイナリは以下にて提供しています https://github.com/shiguredo/momo/releases にて最新版のバイナリをダウンロードしてください。 +- Raspberry Pi 2 や 3 を利用する場合は、 `momo-_raspbian-buster_armv7.tar.gz` を利用してください +- Raspberry Pi Zero や 1 を利用する場合は、 `momo-_raspbian-buster_armv6.tar.gz` を利用してください + ## ダウンロードしたパッケージ、解凍後の構成 ``` diff --git a/doc/USE.md b/doc/USE.md index 37a30c8d..3ccd7558 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -1,16 +1,16 @@ # Momo を使ってみる -## セットアップ +## 準備 -### Raspberry Pi で Momo をセットアップする +### Raspberry Pi で Momo を 準備する [SETUP_RASPBERRY_PI.md](SETUP_RASPBERRY_PI.md) をお読みください。 -### NVIDIA Jetson Nano で Momo をセットアップする +### NVIDIA Jetson Nano で Momo を準備する [SETUP_JETSON_NANO.md](SETUP_JETSON_NANO.md) をお読みください。 -### macOS で Momo をセットアップする +### macOS で Momo を準備する [SETUP_MAC.md](SETUP_MAC.md) をお読みください。 @@ -24,7 +24,7 @@ Ayame モードでは時雨堂が開発しているオープンソースのシグナリングサーバ [WebRTC Signaling Server Ayame](https://github.com/OpenAyame/ayame) を利用します。 -[Ayame Lite](https://ayame-lite.shiguredo.jp/) を利用することで、 無料で試すことが可能です。 +[Ayame Lite](https://ayame-lite.shiguredo.jp/) を利用することで、 Ayame を用意することなく Ayame を試すことが可能です。 [USE_AYAME.md](USE_AYAME.md) をお読みください。 diff --git a/doc/USE_AYAME.md b/doc/USE_AYAME.md index 3ecd893e..c1fc1270 100644 --- a/doc/USE_AYAME.md +++ b/doc/USE_AYAME.md @@ -14,13 +14,15 @@ https://ayame-lite.shiguredo.jp/beta ### Ayame Lite にサインアップしない場合 -Ayame Lite はサインアップせずにそのままシグナリングサーバだけでも利用可能です。 +Ayame Lite はサインアップせずにシグナリングサーバを利用可能です。 + +ここでは `ルーム ID` は `open-momo` としておりますが、必ず推測されにくい値に変更してください。 ```shell $ ./momo --no-audio ayame wss://ayame-lite.shiguredo.jp/signaling open-momo ``` -Ayame SDK のオンラインサンプルを利用します。 URL の引数にルーム ID を指定してアクセスします。 +Ayame SDK のオンラインサンプルを利用します。 URL の引数に `ルーム ID` を指定してアクセスします。 ``` https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=open-momo @@ -29,9 +31,10 @@ https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=open-momo ### Ayame Lite にサインアップする場合 Ayame Lite にサインアップした場合は `ルーム ID` に `GitHub ユーザ名` を先頭に指定する必要があります。 +例えば GitHub ユーザ名が `shiguredo` の場合は `shiguredo@open-momo` となります。 - `ルーム ID` は `GitHub ユーザ名` を先頭に指定する必要があります -- シグナリングキーを `--signaling-key` にて指定する必要があります +- `シグナリングキー` を `--signaling-key` にて指定する必要があります ```shell $ ./momo --no-audio ayame \ diff --git a/doc/USE_TEST.md b/doc/USE_TEST.md index b6a1e941..7a6d0b3e 100644 --- a/doc/USE_TEST.md +++ b/doc/USE_TEST.md @@ -9,6 +9,6 @@ $ ./momo --no-audio --port 8080 test momo の IP アドレスが 192.0.2.100 の場合は、 http://192.0.2.100:8080/html/test.html にアクセスして接続してみてください。 -うまく接続できたら、次は是非 Ayame を利用して動かしてみてください。 +うまく接続できたら、次は Ayame を利用して動かしてみてください。 Ayame を利用する場合は [USE_AYAME.md](USE_AYAME.md) をご確認ください。 From 6621a2f9febf26eeb924b4dbdcaafae023548ef8 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 15:34:04 +0900 Subject: [PATCH 035/105] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE_SORA.md | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/doc/USE_SORA.md b/doc/USE_SORA.md index c699ecdf..295ec6f0 100644 --- a/doc/USE_SORA.md +++ b/doc/USE_SORA.md @@ -1,19 +1,32 @@ # WebRTC SFU Sora を使って Momo を動かしてみる -ここでは [Sora Labo](https://sora-labo.shiguredo.jp/) は無料で Sora を試すことのできるサービスである Sora Labo を使った例を載せています。 +ここでは無料で Sora を試すことのできる [Sora Labo](https://sora-labo.shiguredo.jp/) を使います。 ## Sora Labo を使う GitHub アカウントを用意して https://sora-labo.shiguredo.jp/ にサインアップしてください。 -- チャネル ID に `GitHubUsername@好きな文字列` を指定してください -- --metadata を利用し取得したシグナリングキーを signaling_key を指定することで簡単に利用できます +### 配信してみる + +- チャネル ID に `@<好きな文字列(最大255 バイトまで)>` を指定してください + - GitHub ユーザ名が shiguredo とした場合は `shiguredo@sora-labo` のように指定してください + - ここではチャネル ID を `shiguredo@sora-labo` とします +- sora モードのオプションである --metadata を利用し取得したシグナリングキーを `signaling_key` を指定します + - この指定は商用の Sora を利用する場合は不要です。Sora Labo 専用の機能になります + - ここではシグナリングキーを `xyz` とします。 ```shell -$ ./momo --no-audio --port 0 sora --auto --video-codec VP8 --video-bitrate 500 wss://sora-labo.shiguredo.jp/signaling shiguredo@sora-labo-open-momo --metadata '{"signaling_key": "ここにシグナリングキーを指定して下さい"}' +./momo --no-audio --port 0 sora \ + wss://sora-labo.shiguredo.jp/signaling shiguredo@sora-labo \ + --auto --video-codec VP8 --video-bitrate 500 \ + --role sendonly --metadata '{"signaling_key": "xyz"}' ``` -### マルチストリームで使ってみる +ブラウザでの受信は Chrome や Firefox で以下の URL で確認できます。 + +https://sora-labo.shiguredo.jp/recvonly?videoCodecType=VP8&audio=False + +### マルチストリームを使ってみる 以下の OS の環境で GUI で使うことで送受信が可能です。 @@ -21,6 +34,14 @@ $ ./momo --no-audio --port 0 sora --auto --video-codec VP8 --video-bitrate 500 w - Ubuntu 18.04 Jetson Nano - Raspbian +```shell +./momo --resolution VGA --no-audio --port 0 --use-sdl --show-me \ + sora wss://sora-labo.shiguredo.jp/signaling shiguredo@open-momo \ + --auto --video-codec VP8 --video-bitrate 1000 \ + --multistream --role sendrecv --metadata '{"signaling_key": "xyz"}' ``` -./momo --resolution VGA --no-audio --port 0 --use-sdl --show-me sora --auto --video-codec VP8 --video-bitrate 1000 wss://sora-labo.shiguredo.jp/signaling shiguredo@momo-sdl-sora --multistream --role upstream --metadata '{"signaling_key": "ここにシグナリングキーを指定して下さい"}' -``` + +ブラウザでの送受信は Chrome や Firefox で以下の URL で確認できます。 + +https://sora-labo.shiguredo.jp/multi_sendrecv?videoCodecType=VP8&audio=false + From 9dfae9e3674e0dca5b15dda1e7c638c91bd5af7a Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 15:37:17 +0900 Subject: [PATCH 036/105] =?UTF-8?q?Ayame=20=E3=81=AE=E3=83=89=E3=82=AD?= =?UTF-8?q?=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E6=95=B4=E5=82=99?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE_AYAME.md | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/doc/USE_AYAME.md b/doc/USE_AYAME.md index c1fc1270..47fd7bc0 100644 --- a/doc/USE_AYAME.md +++ b/doc/USE_AYAME.md @@ -16,35 +16,33 @@ https://ayame-lite.shiguredo.jp/beta Ayame Lite はサインアップせずにシグナリングサーバを利用可能です。 -ここでは `ルーム ID` は `open-momo` としておりますが、必ず推測されにくい値に変更してください。 +ここではルーム ID は `open-momo` としておりますが、必ず推測されにくい値に変更してください。 ```shell -$ ./momo --no-audio ayame wss://ayame-lite.shiguredo.jp/signaling open-momo +./momo --no-audio ayame wss://ayame-lite.shiguredo.jp/signaling open-momo ``` Ayame SDK のオンラインサンプルを利用します。 URL の引数に `ルーム ID` を指定してアクセスします。 -``` https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=open-momo -``` ### Ayame Lite にサインアップする場合 -Ayame Lite にサインアップした場合は `ルーム ID` に `GitHub ユーザ名` を先頭に指定する必要があります。 +Ayame Lite にサインアップした場合はルーム ID に GitHub ユーザ名を先頭に指定する必要があります。 例えば GitHub ユーザ名が `shiguredo` の場合は `shiguredo@open-momo` となります。 -- `ルーム ID` は `GitHub ユーザ名` を先頭に指定する必要があります -- `シグナリングキー` を `--signaling-key` にて指定する必要があります +- ルーム ID に `GitHub ユーザ名` を先頭に指定する必要があります + - ここでは `shiguredo@open-momo` をルーム ID としています。 +- シグナリングキーを `--signaling-key` にて指定する必要があります + - ここではシグナリングキーを `xyz` としています ```shell -$ ./momo --no-audio ayame \ - wss://ayame-lite.shiguredo.jp/signaling \ - shiguredo@open-momo \ - --signaling-key fW7LX2hv4k9AnB-S69L1HpaApcXYSp-mrxBhJgqulEHAr7BK +./momo --no-audio ayame \ + wss://ayame-lite.shiguredo.jp/signaling \ + shiguredo@open-momo \ + --signaling-key xyz ``` Ayame SDK のオンラインサンプルを利用します。 URL の引数にルーム ID とシグナリングキーを指定してアクセスします。 -``` -https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=shiguredo@open-momo&signalingKey=fW7LX2hv4k9AnB-S69L1HpaApcXYSp-mrxBhJgqulEHAr7BK -``` +https://openayame.github.io/ayame-web-sdk-samples/recvonly.html?roomId=shiguredo@open-momo&signalingKey=xyz From 0ee4238d566b18ea448e6b2920db9392f5e386d1 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 15:42:20 +0900 Subject: [PATCH 037/105] =?UTF-8?q?Jetson=20Nano=20=E3=81=AE=E8=B3=BC?= =?UTF-8?q?=E5=85=A5=E3=81=AF=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=92=E5=88=86=E3=81=91=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/BUY_JETSON_NANO.md | 44 +++++++++++++++++++++++++++++++++++++ doc/SETUP_JETSON_NANO.md | 47 +++------------------------------------- doc/USE_AYAME.md | 5 +---- 3 files changed, 48 insertions(+), 48 deletions(-) create mode 100644 doc/BUY_JETSON_NANO.md diff --git a/doc/BUY_JETSON_NANO.md b/doc/BUY_JETSON_NANO.md new file mode 100644 index 00000000..feea4ba7 --- /dev/null +++ b/doc/BUY_JETSON_NANO.md @@ -0,0 +1,44 @@ +# Jetson Nano を購入する + +NVIDIA Jetson Nano を購入する場合のオススメリンクです。 + +- [Jetson Nano 開発者キット](https://www.switch-science.com/catalog/5433/) + - スイッチサイエンス + - [NVIDIA Jetson Nano Developer Kit](https://developer.nvidia.com/embedded/jetson-nano-developer-kit) + - Jetson Nano 本体はこちらがおすすめです +- [【OLIOSPECオリジナル】NVIDIA Jetson Nano Developer kit用ケース\(長尾製作所製\)](https://www.oliospec.com/shopdetail/000000008491/) + - OLIOSPEC + - ケースはこちらがおすすめです +- [Micron MTSD032AHC6MS\-1WT 32GB 産業用microSDカード](https://www.oliospec.com/shop/shopdetail.html?brandcode=000000007374) + - OLIOSPEC + - SD カードはこちらがおすすめです +- [Noctua NF-A4x10 5V PWMサイレントファン40 mmプレミアムブラウン/ベージュ](https://amazon.co.jp/dp/B07DXS86G7) + - Amazon + - [NF A4x10 5V PWM](https://noctua.at/en/nf-a4x10-5v-pwm) + - ファンはこちらがおすすめです +- [24W級スイッチングACアダプター5V4A GF24-US0540](http://akizukidenshi.com/catalog/g/gM-09594/) + - 秋月電子通商 + - 電源はこちらがおすすめです +- [つまみ付ジャンパーピン(緑)(2.54mmピッチ)(20個入)](http://akizukidenshi.com/catalog/g/gP-03894/) + - ジャンパーピンを持っていない人はこちらです + - 秋月電子通商 + - [TP-Link WiFi 無線LAN 子機 AC600 433Mbps + 200Mbps](https://amazon.co.jp/dp/B07MXHJ6KB) + - Amazon + - [Archer T2U Nano \| AC600 ナノ 無線LAN子機 \| TP\-Link Japan](https://www.tp-link.com/jp/home-networking/adapter/archer-t2u-nano/) + - ドライバーのビルドが必要になるが問題なく使えます + - [Jetson Nano で TP\-LINK Archer T2U Nano を使う \- Qiita](https://qiita.com/daisuzu_/items/8d6913f3bda1b7434526) + - こちらにかかれている `os_dep/linux/usb_intf.c の 300行番台あたりに以下を追加する` は最新版では不要です + +## 4K@30 出るカメラの購入する + +実際に Jetson Nano で検証して 4K で 30fps の出力動作確認が取れているカメラです。 + +- [高解像度 4 18K カメラモジュール 3840 × 2160 ソニー IMX317 Mjpeg 30fps ミニ Usb ウェブカメラ Web カメラ](https://ja.aliexpress.com/item/32999909513.html) + +以下は上のタイプのケースありやレンズが色々選べるタイプです。 + +- https://ja.aliexpress.com/item/33013268769.html +- https://ja.aliexpress.com/item/33016603918.html +- https://ja.aliexpress.com/item/33012473257.html + +色々 4K@30 が出せるカメラを試してきましたが、このカメラが一番安定しています。 diff --git a/doc/SETUP_JETSON_NANO.md b/doc/SETUP_JETSON_NANO.md index ad6936f9..aa4acee5 100644 --- a/doc/SETUP_JETSON_NANO.md +++ b/doc/SETUP_JETSON_NANO.md @@ -1,49 +1,8 @@ # Jetson Nano で Momo を使ってみる -## Jetson Nano を購入する - -- [Jetson Nano 開発者キット](https://www.switch-science.com/catalog/5433/) - - [NVIDIA Jetson Nano Developer Kit](https://developer.nvidia.com/embedded/jetson-nano-developer-kit) - - Jetson Nano 本体はこちらがおすすめ - - スイッチサイエンス -- [【OLIOSPECオリジナル】NVIDIA Jetson Nano Developer kit用ケース\(長尾製作所製\)](https://www.oliospec.com/shopdetail/000000008491/) - - ケースはこちらがおすすめ - - OLIOSPEC -- [Micron MTSD032AHC6MS\-1WT 32GB 産業用microSDカード](https://www.oliospec.com/shop/shopdetail.html?brandcode=000000007374) - - SD カードはこちらがおすすめ - - OLIOSPEC -- [Noctua NF-A4x10 5V PWMサイレントファン40 mmプレミアムブラウン/ベージュ](https://amazon.co.jp/dp/B07DXS86G7) - - [NF A4x10 5V PWM](https://noctua.at/en/nf-a4x10-5v-pwm) - - ファンはこちらがおすすめ - - Amazon -- [24W級スイッチングACアダプター5V4A GF24-US0540](http://akizukidenshi.com/catalog/g/gM-09594/) - - 電源はこちらがおすすめ - - 秋月電子通商 -- [つまみ付ジャンパーピン(緑)(2.54mmピッチ)(20個入)](http://akizukidenshi.com/catalog/g/gP-03894/) - - ジャンパーピンを持っていない人はこちら - - 秋月電子通商 - - [TP-Link WiFi 無線LAN 子機 AC600 433Mbps + 200Mbps](https://amazon.co.jp/dp/B07MXHJ6KB) - - [Archer T2U Nano \| AC600 ナノ 無線LAN子機 \| TP\-Link Japan](https://www.tp-link.com/jp/home-networking/adapter/archer-t2u-nano/) - - ドライバーのビルドが必要になるが問題なく使える - - [Jetson Nano で TP\-LINK Archer T2U Nano を使う \- Qiita](https://qiita.com/daisuzu_/items/8d6913f3bda1b7434526) - - こちらにかかれている `os_dep/linux/usb_intf.c の 300行番台あたりに以下を追加する` は最新版では不要 - - Amazon - -## 4K@30 出るカメラの購入する - -実際に検証して 4K@30 の出力動作確認が取れているカメラです。 - -- [高解像度 4 18K カメラモジュール 3840 × 2160 ソニー IMX317 Mjpeg 30fps ミニ Usb ウェブカメラ Web カメラ](https://ja.aliexpress.com/item/32999909513.html) - -以下は上のタイプのケースありやレンズが色々選べるタイプです。 - -- https://ja.aliexpress.com/item/33013268769.html -- https://ja.aliexpress.com/item/33016603918.html -- https://ja.aliexpress.com/item/33012473257.html - -色々 4K@30 が出せるカメラを試してきましたが、このカメラが一番安定しています。 - -## JetPack 4.3 以上を必ず利用してください +もし Jetson Nano を購入する場合は [BUY_JETSON_NANO.md](BUY_JETSON_NANO.md) を参考にしてください。 + +## Jetson Nano では JetPack 4.3 以上の利用を前提としています `JetPack 4.3 - L4T R32.3.1 released - NVIDIA Developer Forums `_ diff --git a/doc/USE_AYAME.md b/doc/USE_AYAME.md index 47fd7bc0..eb544aca 100644 --- a/doc/USE_AYAME.md +++ b/doc/USE_AYAME.md @@ -37,10 +37,7 @@ Ayame Lite にサインアップした場合はルーム ID に GitHub ユーザ - ここではシグナリングキーを `xyz` としています ```shell -./momo --no-audio ayame \ - wss://ayame-lite.shiguredo.jp/signaling \ - shiguredo@open-momo \ - --signaling-key xyz +./momo --no-audio ayame wss://ayame-lite.shiguredo.jp/signaling shiguredo@open-momo --signaling-key xyz ``` Ayame SDK のオンラインサンプルを利用します。 URL の引数にルーム ID とシグナリングキーを指定してアクセスします。 From 4a6c8afea703868b6d73f046c7626c93aff6713a Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 15:44:43 +0900 Subject: [PATCH 038/105] =?UTF-8?q?Sora=20=E3=81=AB=E3=81=A4=E3=81=84?= =?UTF-8?q?=E3=81=A6=E8=AA=AC=E6=98=8E=E3=82=92=E6=9B=B8=E3=81=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE_SORA.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/USE_SORA.md b/doc/USE_SORA.md index 295ec6f0..e9a334e4 100644 --- a/doc/USE_SORA.md +++ b/doc/USE_SORA.md @@ -1,5 +1,9 @@ # WebRTC SFU Sora を使って Momo を動かしてみる +Sora は時雨堂が開発、販売している商用 WebRTC SFU 製品です。 + +https://sora.shiguredo.jp/ + ここでは無料で Sora を試すことのできる [Sora Labo](https://sora-labo.shiguredo.jp/) を使います。 ## Sora Labo を使う @@ -28,11 +32,7 @@ https://sora-labo.shiguredo.jp/recvonly?videoCodecType=VP8&audio=False ### マルチストリームを使ってみる -以下の OS の環境で GUI で使うことで送受信が可能です。 - -- macOS 15.10 -- Ubuntu 18.04 Jetson Nano -- Raspbian +GUI 環境で Momo を利用すると、 SDL を利用し音声や映像の受信が可能になります。 ```shell ./momo --resolution VGA --no-audio --port 0 --use-sdl --show-me \ From b14d6c9e80daf206f7c751e25570f0dcdf45caa8 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 15:58:05 +0900 Subject: [PATCH 039/105] =?UTF-8?q?Jetson=20Nano=20=E3=81=AE=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E6=96=B9=E6=B3=95=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/BUILD_LINUX.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/doc/BUILD_LINUX.md b/doc/BUILD_LINUX.md index a48dae8a..335e94c2 100644 --- a/doc/BUILD_LINUX.md +++ b/doc/BUILD_LINUX.md @@ -8,9 +8,9 @@ $ git clone git@github.com:shiguredo/momo.git ## Docker の利用について -Linux 版 Momo をビルドする際には Docker 18.09 以降が必要になりますので、事前にインストールしておいてください。 +Linux 版 Momo をビルドする際には Docker 19.03 以降が必要になりますので、事前にインストールしておいてください。 -Windows の docker では未検証です。Linux 版、または macOS 版の Docker をご利用ください。 +Docker for Windows では未検証です。Linux 版、または Docker for Mac をご利用ください。 また、make コマンド実行時に NOMOUNT=1 オプションを指定することで、 マウントを利用しないモードで docker container を動作させることができます。何らかの理由でマウントがうまく動作しない場合に使って下さい。 @@ -47,6 +47,15 @@ $ make ubuntu-18.04_armv8 うまくいかない場合は `make ubuntu-18.04_armv8.clean && make ubuntu-18.04_armv8` を試してみてください。それでもだめな場合は issues にお願いします。 +## Ubuntu 18.04 (armv8) Jetson Nano 向けバイナリを作成する + +build ディレクトリ以下で make ubuntu-18.04_armv8 と打つことで Momo のバイナリが生成されます。 + +```shell +$ make ubuntu-18.04_armv8 +``` + +うまくいかない場合は `make ubuntu-18.04_armv8_jetson_nano.clean && make ubuntu-18.04_armv8_jetson_nano` を試してみてください。それでもだめな場合は issues にお願いします。 ## Ubuntu 18.04 (x86_64) 向けバイナリを作成する From bf51db612f9a72fbd8eb002480c04c99090ca3c3 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 16:17:04 +0900 Subject: [PATCH 040/105] =?UTF-8?q?jetson=5Fnano=20=E3=81=8C=E6=8A=9C?= =?UTF-8?q?=E3=81=91=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/BUILD_LINUX.md | 2 +- doc/BUY_JETSON_NANO.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/BUILD_LINUX.md b/doc/BUILD_LINUX.md index 335e94c2..7c342388 100644 --- a/doc/BUILD_LINUX.md +++ b/doc/BUILD_LINUX.md @@ -52,7 +52,7 @@ $ make ubuntu-18.04_armv8 build ディレクトリ以下で make ubuntu-18.04_armv8 と打つことで Momo のバイナリが生成されます。 ```shell -$ make ubuntu-18.04_armv8 +$ make ubuntu-18.04_armv8_jetson_nano ``` うまくいかない場合は `make ubuntu-18.04_armv8_jetson_nano.clean && make ubuntu-18.04_armv8_jetson_nano` を試してみてください。それでもだめな場合は issues にお願いします。 diff --git a/doc/BUY_JETSON_NANO.md b/doc/BUY_JETSON_NANO.md index feea4ba7..b8c1d800 100644 --- a/doc/BUY_JETSON_NANO.md +++ b/doc/BUY_JETSON_NANO.md @@ -41,4 +41,4 @@ NVIDIA Jetson Nano を購入する場合のオススメリンクです。 - https://ja.aliexpress.com/item/33016603918.html - https://ja.aliexpress.com/item/33012473257.html -色々 4K@30 が出せるカメラを試してきましたが、このカメラが一番安定しています。 +色々 4K で 30fps が出せるカメラを試してきましたが、このカメラが一番安定しています。 From b226c3bf1db32506801c18100266b26bbac07aa3 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 16:18:09 +0900 Subject: [PATCH 041/105] =?UTF-8?q?=E3=83=91=E3=83=83=E3=82=B1=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E4=BD=9C=E6=88=90=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=AB=20Jeson=20Nano=20=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/PACKAGE.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/PACKAGE.md b/doc/PACKAGE.md index 923c670a..5bf6f4bf 100644 --- a/doc/PACKAGE.md +++ b/doc/PACKAGE.md @@ -1,6 +1,6 @@ # パッケージを作成する -## Raspbian June 2018 (armv6) 向けパッケージの作成例 +## Raspbian Buster (armv6) 向けパッケージの作成例 raspbian-buster_armv6 パッケージを作成する場合は raspbian-buster_armv6.package と打つことでパッケージが作成されます。 @@ -15,6 +15,7 @@ $ make raspbian-buster_armv6.package - raspbian-buster_armv6 - raspbian-buster_armv7 - ubuntu-18.04_armv8 +- ubuntu-18.04_armv8_jetson_nano - ubuntu-18.04_x86_64 - macos - ubuntu-16.04_armv7_ros From 1ca7b783d2947ac86b78d209eefc9015f13c41c4 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 16:38:36 +0900 Subject: [PATCH 042/105] =?UTF-8?q?Linux=20=E7=AB=AF=E6=9C=AB=E3=81=AE?= =?UTF-8?q?=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9=E6=8C=87=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E3=81=95=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/LINUX_VIDEO_DEVICE.md | 65 ++++++++++++++++++++++++++++ doc/SETUP_RASPBERRY_PI.md | 90 --------------------------------------- 2 files changed, 65 insertions(+), 90 deletions(-) create mode 100644 doc/LINUX_VIDEO_DEVICE.md diff --git a/doc/LINUX_VIDEO_DEVICE.md b/doc/LINUX_VIDEO_DEVICE.md new file mode 100644 index 00000000..7d666de7 --- /dev/null +++ b/doc/LINUX_VIDEO_DEVICE.md @@ -0,0 +1,65 @@ +# Linux でカメラデバイスを指定する + +## --video-device + +`--video-device` は linux 端末でビデオデバイス(つまりカメラ)を指定する機能です。 1 台の Raspberry Pi で複数の Momo を起動し、ビデオデバイスが複数あり、それぞれここに割り当てたい時に利用できます。 + +```shell +$ ./momo --video-device /dev/video0 test +``` + +### デバイス名の固定 + +Linux 端末で USB カメラを接続した場合に、デバイス名が前回の接続時と異なるデバイス名になることがあります。 +デバイス名が変更された場合は、--video-device に指定するデバイス名も合わせて修正する必要があるため、 +例えば、Linux 端末の起動時に自動で momo を起動させたい場合等に不便です。 + +ここでは、同じデバイス名を使用できるように、USB カメラのデバイス名を接続するカメラごとに固定して、 +同一の USB カメラでは常に同じデバイス名を使用できるように設定します。 + +#### udev ルールの設定 + +udev ルールを設定してデバイス名を固定します。 + +まず、接続した USB カメラの SERIAL を取得します + +``` +$ udevadm info --query=all --name=/dev/video0 | grep ID_SERIAL_SHORT +E: ID_SERIAL_SHORT=8E40F950 +``` + +次に、/etc/udev/rules.d/ 以下にルールファイルを作成(例: /etc/udev/rules.d/70-usb.rules)して下記のように設定します。 + +ATTRS{serial} には上記で取得した SERIAL を指定します。 + +SYMLINK には固定するデバイス名を指定します。 + +``` +KERNEL=="video[0-9]*", MODE="0666", ATTRS{serial}=="8E40F950", SYMLINK+="video_101" +``` + +#### デバイス名が複数ある場合 + +1 つの USB カメラにデバイス名が複数ある場合は、指定するデバイスの ATTR{index} も udev ルールに指定します。 + +ATTR{index} は下記の方法で取得します。 + +``` +$ udevadm info --attribute-walk --path $( udevadm info --query=path --name=/dev/video0 ) | grep index + ATTR{index}=="0" +``` + +ATTR{index}=="0" を含めた場合の設定例は下記の通りです。 + +``` +KERNEL=="video[0-9]*", MODE="0666", ATTRS{serial}=="8E40F950", ATTR{index}=="0", SYMLINK+="video_101" +``` + +### momo の実行 + +設定したデバイス名を使用するために、USB カメラを Linux 端末から外して、 +すぐに再度接続して、上記で SYMLINK に設定したデバイス名を --video-device に指定して momo を実行します。 + +``` +$ ./momo --video-device /dev/video_101 test +``` diff --git a/doc/SETUP_RASPBERRY_PI.md b/doc/SETUP_RASPBERRY_PI.md index 253dc3c6..ec0d10e0 100644 --- a/doc/SETUP_RASPBERRY_PI.md +++ b/doc/SETUP_RASPBERRY_PI.md @@ -56,34 +56,6 @@ bcm2835-v4l2 max_video_width=2592 max_video_height=1944 ## Raspberry Pi 向けの追加のオプション -``` -$ ./momo --help -Momo - WebRTC ネイティブクライアント -Usage: ./momo [OPTIONS] [SUBCOMMAND] -Options: - -h,--help Print this help message and exit - --no-video ビデオを表示しない - --no-audio オーディオを出さない - --force-i420 強制的にI420にする - --use-native MJPEGのデコードとビデオのリサイズをハードウェアで行う - --video-device ビデオデバイス指定 - --resolution STR in [QVGA,VGA,HD,FHD,4K] - 解像度 - --framerate INT in [1 - 60] フレームレート - --fixed-resolution 固定解像度 - --priority STR in [BALANCE,FRAMERATE,RESOLUTION] - 優先設定 (Experimental) - --port INT in [0 - 65535] ポート番号 - --daemon デーモン化する - --version バージョン情報の表示 - --log-level INT in [0 - 5] ログレベル -Subcommands: - test 開発向け - ayame WebRTC Signaling Server Ayame - sora WebRTC SFU Sora -``` - - ### --use-native `--use-native` は ハードウェアによるビデオのリサイズ と USB カメラ用の場合 MJPEG をハードウェアデコードします。 @@ -102,68 +74,6 @@ USBカメラでは逆にフレームレートが落ちるため使わないで $ ./momo --force-i420 --no-audio --port 8080 test ``` -### --video-device - -`--video-device` は Raspberry Pi でビデオデバイス(つまりカメラ)を指定する機能です。 1 台の Raspberry Pi で複数の Momo を起動し、ビデオデバイスが複数あり、それぞれここに割り当てたい時に利用できます。 - - -```shell -$ ./momo --video-device /dev/video0 test -``` - -#### デバイス名の固定 - -Raspberry Pi に USB カメラを接続した場合に、デバイス名が前回の接続時と異なるデバイス名になることがあります。 -デバイス名が変更された場合は、--video-device に指定するデバイス名も合わせて修正する必要があるため、例えば、Raspberry Pi の起動時に自動で momo を起動させたい場合等に不便です。 - -ここでは、同じデバイス名を使用できるように、USB カメラのデバイス名を接続するカメラごとに固定して、同一の USB カメラでは常に同じデバイス名を使用できるように設定します。 - -##### udev ルールの設定 - -udev ルールを設定してデバイス名を固定します。 - -まず、接続した USB カメラの SERIAL を取得します - -``` -$ udevadm info --query=all --name=/dev/video0 | grep ID_SERIAL_SHORT -E: ID_SERIAL_SHORT=8E40F950 -``` - -次に、/etc/udev/rules.d/ 以下にルールファイルを作成(例: /etc/udev/rules.d/70-usb.rules)して下記のように設定します。 - -ATTRS{serial} には上記で取得した SERIAL を指定します。 - -SYMLINK には固定するデバイス名を指定します。 - -``` -KERNEL=="video[0-9]*", MODE="0666", ATTRS{serial}=="8E40F950", SYMLINK+="video_101" -``` - -##### デバイス名が複数ある場合 - -1 つの USB カメラにデバイス名が複数ある場合は、指定するデバイスの ATTR{index} も udev ルールに指定します。 - -ATTR{index} は下記の方法で取得します。 - -``` -$ udevadm info --attribute-walk --path $( udevadm info --query=path --name=/dev/video0 ) | grep index - ATTR{index}=="0" -``` - -ATTR{index}=="0" を含めた場合の設定例は下記の通りです。 - -``` -KERNEL=="video[0-9]*", MODE="0666", ATTRS{serial}=="8E40F950", ATTR{index}=="0", SYMLINK+="video_101" -``` - -##### momo の実行 - -設定したデバイス名を使用するために、USB カメラを Raspberry Pi から外して、すぐに再度接続して、上記で SYMLINK に設定したデバイス名を --video-device に指定して momo を実行します。 - -``` -$ ./momo --video-device /dev/video_101 test -``` - ## Raspberry Pi 専用カメラでパフォーマンスが出ない [Raspbian で Raspberry Pi の Raspberry Pi 用カメラを利用する場合](#raspbian-で-raspberry-pi-の-raspberry-pi-用カメラを利用する場合)通りに設定されているか確認してください。特に `max_video_width=2592 max_video_height=1944` が記載されていなければ高解像度時にフレームレートが出ません。 From fbf21e533bc6d8f4270713ffb5046e26a10b605e Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 16:42:18 +0900 Subject: [PATCH 043/105] =?UTF-8?q?=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/SETUP_JETSON_NANO.md | 14 ++++++++++++++ doc/SETUP_RASPBERRY_PI.md | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/doc/SETUP_JETSON_NANO.md b/doc/SETUP_JETSON_NANO.md index aa4acee5..dffed7f6 100644 --- a/doc/SETUP_JETSON_NANO.md +++ b/doc/SETUP_JETSON_NANO.md @@ -27,6 +27,20 @@ $ tree 動かし方について、まずは [USE_TEST.md](USE_TEST.md) をご確認ください。 +## ビデオデバイスの指定 + +ビデオデバイスの指定については [LINUX_VIDEO_DEVICE.md](LINUX_VIDEO_DEVICE.md) をご確認ください。 + +## Jetson Nano 向けの追加のオプション + +### --use-native + +`--use-native` は ハードウェアによるビデオのリサイズ と USB カメラ用の場合 MJPEG をハードウェアデコードします。 + +```shell +$ ./momo --use-native --no-audio --port 8080 test +``` + ## 4K@30 を出すためにやること ### 実行時のコマンドについて diff --git a/doc/SETUP_RASPBERRY_PI.md b/doc/SETUP_RASPBERRY_PI.md index ec0d10e0..a1b548b8 100644 --- a/doc/SETUP_RASPBERRY_PI.md +++ b/doc/SETUP_RASPBERRY_PI.md @@ -54,6 +54,10 @@ bcm2835-v4l2 max_video_width=2592 max_video_height=1944 動かし方については [USE_TEST.md](USE_TEST.md) をご確認ください。 +## ビデオデバイスの指定 + +ビデオデバイスの指定については [LINUX_VIDEO_DEVICE.md](LINUX_VIDEO_DEVICE.md) をご確認ください。 + ## Raspberry Pi 向けの追加のオプション ### --use-native From 072f316bd88be761d697adafc933b32eabc2ad27 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 16:46:26 +0900 Subject: [PATCH 044/105] =?UTF-8?q?=E3=82=AB=E3=83=A1=E3=83=A9=20->=20?= =?UTF-8?q?=E3=83=93=E3=83=87=E3=82=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/LINUX_VIDEO_DEVICE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/LINUX_VIDEO_DEVICE.md b/doc/LINUX_VIDEO_DEVICE.md index 7d666de7..eb16ef11 100644 --- a/doc/LINUX_VIDEO_DEVICE.md +++ b/doc/LINUX_VIDEO_DEVICE.md @@ -1,4 +1,4 @@ -# Linux でカメラデバイスを指定する +# Linux でビデオデバイスを指定する ## --video-device From dac8dca5265577bceae0956755f72a80f3efb30a Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 30 Dec 2019 17:44:50 +0900 Subject: [PATCH 045/105] =?UTF-8?q?README=20=E3=82=92=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index c0990c4f..12608d9b 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,13 @@ See the License for the specific language governing permissions and limitations under the License. ``` +## Momo についての電子書籍 + +Momo のコントリビュータである @tnoho が書いた Momo のノウハウが沢山詰まった本が販売されています。 + +[WebRTCをブラウザ外で使ってブラウザでできることを増やしてみませんか?\(電子版\) \- でんでんらぼ \- BOOTH](https://tnoho.booth.pm/items/1572872) + + ## サポートについて WebRTC Native Client Momo に関するバグ報告は GitHub Issues へお願いします。 @@ -173,18 +180,6 @@ H.264 ハードウェアエンコーダ **のみ** を利用している Momo - [ラズパイ\+momoでWebRTCで送信するときにマイクの代わりに音声ファイルを使用する \- Qiita](https://qiita.com/tetsu_koba/items/b887c1a0be9f26b795f2) - [ラズパイのmomoでステレオ音声でWebRTCで配信する \- Qiita](https://qiita.com/tetsu_koba/items/6c07129caa5a08d5d172) -## Momo についての電子書籍 - -Momo のコア開発者である @tnoho が書いた Momo のノウハウが沢山詰まった本が販売されています。 - -[WebRTCをブラウザ外で使ってブラウザでできることを増やしてみませんか?\(電子版\) \- でんでんらぼ \- BOOTH](https://tnoho.booth.pm/items/1572872) - -## Windows 版について - -Windows 版 Momo をビルドするツールを販売しております。興味のある方は以下をご確認ください。 - -[Windows 版 WebRTC Native Client Momo](https://gist.github.com/voluntas/7af1596557121796123ac7dee9e3f5a4) - ## カスタマイズなど OSS にて公開可能でさらに弊社が Momo に組み込んでも良いと思える機能開発であれば、お仕事としてお受けすることが可能です。 From a5b6e6f2ae2e81e3322d10840f9fb3205000dbe5 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 30 Dec 2019 18:21:57 +0900 Subject: [PATCH 046/105] =?UTF-8?q?.edit=20=E3=81=AE=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=81=A8=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/Makefile | 10 +--------- doc/PATCH_WEBRTC.md | 20 -------------------- 2 files changed, 1 insertion(+), 29 deletions(-) delete mode 100644 doc/PATCH_WEBRTC.md diff --git a/build/Makefile b/build/Makefile index 3b588a35..aaea9421 100644 --- a/build/Makefile +++ b/build/Makefile @@ -7,12 +7,11 @@ help: @echo "使い方:" @echo " make [オプション] <パッケージ名>" @echo " make [オプション] <パッケージ名>.package" - @echo " make [オプション] <パッケージ名>.edit" @echo " make [オプション] <パッケージ名>.clean" @echo "" @echo "<パッケージ名>:" @for pkg in $(PACKAGE_NAMES); do echo " - $$pkg"; done - @echo " - macos (make macos.edit を除く)" + @echo " - macos" @echo "" @echo "[オプション]:" @echo " - NOCACHE=1" @@ -23,9 +22,6 @@ help: @echo "" @echo "make <パッケージ名>.package は、指定したパッケージ名の環境用の momo バイナリを含んだリリース用パッケージを生成します。" @echo "" - @echo "make <パッケージ名>.edit は、WebRTC のソースを変更して、カスタマイズされた WebRTC を使って momo バイナリを生成するための機能です。" - @echo "詳細は doc/PATCH_WEBRTC.md を参照して下さい。" - @echo "" @echo "make <パッケージ名>.clean は、<パッケージ名> の Docker イメージやビルドキャッシュを削除します。" @echo "" @echo "[オプション] は、make NOCACHE=1 <パッケージ名> のように指定します。" @@ -80,10 +76,6 @@ $(1).package: $(1).prepare @echo "" @echo "パッケージが package/momo-$(MOMO_VERSION)_$(1).tar.gz に生成されました。" -.PHONY: $(1).edit -$(1).edit: $(1).prepare - docker run -it --rm -v `pwd`/..:/root/momo momo/$(1):m$$(WEBRTC_BUILD_VERSION) /bin/bash -c 'export PACKAGE_NAME=$(1); cd /root/momo && exec /bin/bash' - .PHONY: $(1).prepare $(1).prepare: rm -rf $(1)/script diff --git a/doc/PATCH_WEBRTC.md b/doc/PATCH_WEBRTC.md deleted file mode 100644 index cee652e9..00000000 --- a/doc/PATCH_WEBRTC.md +++ /dev/null @@ -1,20 +0,0 @@ -# WebRTC のカスタマイズについて - -WebRTC のソースにパッチを当ててビルドをしたい人向けの資料です。 - -build ディレクトリで `make <パッケージ名>.edit` することで、WebRTC のソースが入った Docker イメージの中に入れます。 - -この時、momo リポジトリは `/root/momo` にマウントされるので、Docker イメージから抜けても保存しておきたいデータはここに置いて下さい。 - -`/root/webrtc/src` の下に WebRTC のソースがあるので、これを編集して `/root/momo` ディレクトリの下で `make momo` を実行すれば -カスタマイズされた WebRTC を利用した momo バイナリが生成されます。 -この momo バイナリを動作させて、意図した動作になっているかを確認して下さい。 - -ただし、この時点でカスタマイズしたソースは Docker イメージから抜けると元に戻ってしまうので、 -パッチファイルを生成して `/root/momo/patch` の中に生成して下さい。 -パッチファイルを保存したら Docker イメージから抜けても構いません。 - -生成したパッチファイルは、`build/<パッケージ名>/Dockerfile` の中の、WebRTC をビルドする手前で適用して下さい。 -既に 4k.patch を適用しているので、それを参考にして下さい。 - -その上で再度 `make <パッケージ名>` を実行すれば、改めてパッチ適用済みの momo バイナリが生成されます。 From 5524a6f07f701ac0db2c8f5750ab5e084fc0c965 Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 31 Dec 2019 14:16:13 +0900 Subject: [PATCH 047/105] =?UTF-8?q?--no-video=20=E3=81=A7=E8=B5=B7?= =?UTF-8?q?=E5=8B=95=E6=99=82=E3=81=AB=E4=B8=80=E7=9E=AC=E3=82=AB=E3=83=A1?= =?UTF-8?q?=E3=83=A9=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9=E3=82=92=E6=8E=B4?= =?UTF-8?q?=E3=82=93=E3=81=A7=E3=81=97=E3=81=BE=E3=81=86=E3=81=AE=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 119f9f75..b1a4864c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -66,8 +66,6 @@ int main(int argc, char* argv[]) { #if USE_ROS std::unique_ptr log_sink(new ROSLogSink()); rtc::LogMessage::AddLogToStream(log_sink.get(), rtc::LS_INFO); - rtc::scoped_refptr capturer( - new rtc::RefCountedObject(cs)); #else std::unique_ptr log_sink( new rtc::FileRotatingLogSink("./", "webrtc_logs", kDefaultMaxLogFileSize, @@ -78,21 +76,36 @@ int main(int argc, char* argv[]) { return 1; } rtc::LogMessage::AddLogToStream(log_sink.get(), rtc::LS_INFO); - auto size = cs.getSize(); +#endif + + auto capturer = ([&]() -> rtc::scoped_refptr { + if (cs.no_video) { + return nullptr; + } + +#if USE_ROS + rtc::scoped_refptr capturer( + new rtc::RefCountedObject(cs)); +#else // USE_ROS + auto size = cs.getSize(); #if defined(__APPLE__) - rtc::scoped_refptr capturer = MacCapturer::Create( - size.width, size.height, cs.framerate, cs.video_device); + rtc::scoped_refptr capturer = MacCapturer::Create( + size.width, size.height, cs.framerate, cs.video_device); #elif defined(__linux__) - rtc::scoped_refptr capturer = V4L2VideoCapture::Create(cs); + rtc::scoped_refptr capturer = + V4L2VideoCapture::Create(cs); #else - rtc::scoped_refptr capturer = - DeviceVideoCapturer::Create(size.width, size.height, cs.framerate); + rtc::scoped_refptr capturer = + DeviceVideoCapturer::Create(size.width, size.height, cs.framerate); #endif +#endif // USE_ROS + return capturer; + })(); + if (!capturer && !cs.no_video) { std::cerr << "failed to create capturer" << std::endl; return 1; } -#endif #if USE_SDL2 std::unique_ptr sdl_renderer = nullptr; From d542f083eed9db42796ee3d80fa59248258d071f Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 31 Dec 2019 14:18:07 +0900 Subject: [PATCH 048/105] =?UTF-8?q?=E7=89=B9=E5=AE=9A=E3=81=AE=20WebRTC=20?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=81=8C=E8=AD=A6=E5=91=8A=E3=82=92?= =?UTF-8?q?=E5=87=BA=E3=81=97=E3=81=A6=E3=81=9F=E3=81=AE=E3=81=A7=E7=84=A1?= =?UTF-8?q?=E5=8A=B9=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2934deae..2244b04b 100644 --- a/Makefile +++ b/Makefile @@ -329,7 +329,7 @@ else BUILD_ROOT ?= _build/local endif -CFLAGS += -Wno-macro-redefined -fno-lto -std=c++14 -pthread -DWEBRTC_POSIX -DOPENSSL_IS_BORINGSSL -Isrc/ +CFLAGS += -Wno-implicit-int-float-conversion -Wno-macro-redefined -fno-lto -std=c++14 -pthread -DWEBRTC_POSIX -DOPENSSL_IS_BORINGSSL -Isrc/ CFLAGS += -I$(WEBRTC_INCLUDE_DIR) -I$(WEBRTC_INCLUDE_DIR)/third_party/libyuv/include -I$(WEBRTC_INCLUDE_DIR)/third_party/abseil-cpp LDFLAGS += -L$(WEBRTC_LIBRARY_DIR) -lpthread ifdef MOMO_VERSION From eaf05fd90c4f0382f585714e27295a14d3f0b969 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Wed, 1 Jan 2020 14:55:37 +0900 Subject: [PATCH 049/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index c04eff19..ae00f672 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -42,6 +42,8 @@ - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - @melpon +- [FIX] --no-video を指定しているにもかかわらずカメラを一瞬だけ掴むのを修正する + - @melpon @mganeko ## 19.12.1 From 61020cb949ce62d3a6272d27e921b3232865481c Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Wed, 1 Jan 2020 14:56:29 +0900 Subject: [PATCH 050/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index ae00f672..e1877fc8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -42,6 +42,8 @@ - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - @melpon +- [CHANGE] .edit の機能とドキュメントを削除 + - @melpon - [FIX] --no-video を指定しているにもかかわらずカメラを一瞬だけ掴むのを修正する - @melpon @mganeko From b328371b2033c30b0ce3b0d5ff95a02081747eb5 Mon Sep 17 00:00:00 2001 From: Yoshida Hiroshi Date: Mon, 6 Jan 2020 16:18:22 +0900 Subject: [PATCH 051/105] =?UTF-8?q?retry=20=E3=81=99=E3=82=8B=E3=81=9F?= =?UTF-8?q?=E3=82=81=E3=81=AB=E3=81=93=E3=81=93=E3=81=A7=20return=20?= =?UTF-8?q?=E3=81=AF=E3=81=97=E3=81=AA=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ayame/ayame_websocket_client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ayame/ayame_websocket_client.cpp b/src/ayame/ayame_websocket_client.cpp index 844df922..710a254e 100644 --- a/src/ayame/ayame_websocket_client.cpp +++ b/src/ayame/ayame_websocket_client.cpp @@ -300,7 +300,7 @@ void AyameWebsocketClient::close() { // WebSocket が閉じられたときのコールバック void AyameWebsocketClient::onClose(boost::system::error_code ec) { if (ec) - return MOMO_BOOST_ERROR(ec, "close"); + MOMO_BOOST_ERROR(ec, "close"); // retry_count_ は reconnectAfter(); が以前に呼ばれている場合はインクリメントされている可能性がある。 // WebSocket につないでいない時間をなるべく短くしたいので、 // WebSocket を閉じたときは一度インクリメントされている可能性のある retry_count_ を0 にして From 69c3b60a455138b916fb887cbbbb29a51c578def Mon Sep 17 00:00:00 2001 From: Yoshida Hiroshi Date: Mon, 6 Jan 2020 16:19:42 +0900 Subject: [PATCH 052/105] =?UTF-8?q?bye=20=E5=8F=97=E4=BF=A1=E6=99=82?= =?UTF-8?q?=E3=81=AE=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ayame/ayame_websocket_client.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ayame/ayame_websocket_client.cpp b/src/ayame/ayame_websocket_client.cpp index 710a254e..dc400ac2 100644 --- a/src/ayame/ayame_websocket_client.cpp +++ b/src/ayame/ayame_websocket_client.cpp @@ -377,6 +377,10 @@ void AyameWebsocketClient::onRead(boost::system::error_code ec, } else if (type == "ping") { watchdog_.reset(); doSendPong(); + } else if (type == "bye") { + RTC_LOG(LS_INFO) << __FUNCTION__ << ": bye"; + connection_ = nullptr; + close(); } } From 5b34376540a10368a564a9700042b1c2bb6e66ff Mon Sep 17 00:00:00 2001 From: Yoshida Hiroshi Date: Mon, 6 Jan 2020 17:16:19 +0900 Subject: [PATCH 053/105] =?UTF-8?q?=E5=88=9D=E5=9B=9E=E3=81=AF=E5=BE=85?= =?UTF-8?q?=E3=81=9F=E3=81=9A=E3=81=AB=E5=86=8D=E6=8E=A5=E7=B6=9A=E3=82=92?= =?UTF-8?q?=E8=A9=A6=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ayame/ayame_websocket_client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ayame/ayame_websocket_client.cpp b/src/ayame/ayame_websocket_client.cpp index dc400ac2..9336846b 100644 --- a/src/ayame/ayame_websocket_client.cpp +++ b/src/ayame/ayame_websocket_client.cpp @@ -121,7 +121,7 @@ bool AyameWebsocketClient::connect() { } void AyameWebsocketClient::reconnectAfter() { - int interval = 5 * (2 * retry_count_ + 1); + int interval = 5 * (2 * retry_count_); RTC_LOG(LS_INFO) << __FUNCTION__ << " reconnect after " << interval << " sec"; watchdog_.enable(interval); From e4352c351d35b1c6242c232bd90ba26b636ea4fc Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 07:12:17 +0900 Subject: [PATCH 054/105] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E6=83=85=E5=A0=B1=E3=81=AE=E5=8F=96=E5=BE=97=E5=91=A8?= =?UTF-8?q?=E3=82=8A=E3=81=AE=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E6=95=B4?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/momo_version.cpp | 150 +++++++++++++++++++++++++++++ src/momo_version.h | 33 ++----- src/sora/sora_websocket_client.cpp | 110 +-------------------- src/util.cpp | 4 +- 4 files changed, 163 insertions(+), 134 deletions(-) create mode 100644 src/momo_version.cpp diff --git a/src/momo_version.cpp b/src/momo_version.cpp new file mode 100644 index 00000000..f1a797e4 --- /dev/null +++ b/src/momo_version.cpp @@ -0,0 +1,150 @@ +#include "momo_version.h" + +#include +#include +#include +#include + +// boost +#include +#include + +#if defined(__APPLE__) || defined(__linux__) +#include +#endif +#if defined(__APPLE__) +#include "mac_helper/macos_version.h" +#endif + +// バージョンやコミットハッシュ情報 +// 通常は外から渡すが、渡されていなかった場合の対応 +#ifndef MOMO_VERSION +#define MOMO_VERSION "internal-build" +#endif + +#ifndef MOMO_COMMIT_SHORT +#define MOMO_COMMIT_SHORT "unknown" +#endif + +#define MOMO_NAME \ + "WebRTC Native Client Momo " MOMO_VERSION " (" MOMO_COMMIT_SHORT ")" + +#if defined(WEBRTC_READABLE_VERSION) && defined(WEBRTC_COMMIT_SHORT) && \ + defined(WEBRTC_BUILD_VERSION) + +#define LIBWEBRTC_NAME \ + "Shiguredo-Build " WEBRTC_READABLE_VERSION " (" WEBRTC_BUILD_VERSION \ + " " WEBRTC_COMMIT_SHORT ")" + +#else + +#define LIBWEBRTC_NAME "WebRTC custom build" + +#endif + +std::string MomoVersion::GetClientName() { + return MOMO_NAME; +} + +std::string MomoVersion::GetLibwebrtcName() { + return LIBWEBRTC_NAME; +} + +std::string MomoVersion::GetEnvironmentName() { + std::string environment = "Unknown Environment"; + +#if defined(__APPLE__) || defined(__linux__) + std::string arch = "unknown arch"; + std::string os = "Unknown OS"; + std::string info = ""; + + utsname u; + int r = uname(&u); + if (r == 0) { + arch = u.machine; + } + +#if defined(__APPLE__) + os = MacosVersion::GetOSName() + " " + MacosVersion::GetOSVersion(); +#else + // /etc/os-release ファイルを読んで PRETTY_NAME を利用する + + // /etc/os-release は以下のような内容になっているので、これを適当にパースする + /* + $ docker run -it --rm ubuntu cat /etc/os-release + NAME="Ubuntu" + VERSION="18.04.3 LTS (Bionic Beaver)" + ID=ubuntu + ID_LIKE=debian + PRETTY_NAME="Ubuntu 18.04.3 LTS" + VERSION_ID="18.04" + HOME_URL="https://www.ubuntu.com/" + SUPPORT_URL="https://help.ubuntu.com/" + BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" + PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" + VERSION_CODENAME=bionic + UBUNTU_CODENAME=bionic + */ + // 行ごとに分けたデータを取得 + std::vector lines; + { + std::stringstream ss; + std::ifstream fin("/etc/os-release"); + ss << fin.rdbuf(); + std::string content = ss.str(); + boost::algorithm::split(lines, ss.str(), boost::is_any_of("\n")); + } + const std::string PRETTY_NAME = "PRETTY_NAME="; + for (auto& line : lines) { + // 先頭が PRETTY_NAME= の行を探す + if (line.find(PRETTY_NAME) != 0) { + continue; + } + // PRETTY_NAME= 以降のデータを取り出す + os = line.substr(PRETTY_NAME.size()); + // 左右の " を除ける(in-place バージョン) + boost::algorithm::trim_if(os, [](char c) { return c == '"'; }); + break; + } + +#if USE_JETSON_ENCODER + // Jetson Nano の場合、更に詳細な情報を取得する + + // nvidia-l4t-core のバージョンを拾う + // $ dpkg-query --show nvidia-l4t-core + // で取得できるが、外部コマンドは出来るだけ使いたくないので、 + // /var/lib/dpkg/status から該当行を探す + + std::string content; + { + std::stringstream ss; + std::ifstream fin("/var/lib/dpkg/status"); + ss << fin.rdbuf(); + content = ss.str(); + } + std::string l4t_core_version = "unknown"; + auto pos = content.find("Package: nvidia-l4t-core"); + if (pos != std::string::npos) { + const std::string VERSION = "Version: "; + auto pos2 = content.find(VERSION, pos); + if (pos2 != std::string::npos) { + pos2 += VERSION.size(); + auto pos3 = content.find("\n", pos2); + l4t_core_version = pos3 == std::string::npos + ? content.substr(pos2) + : content.substr(pos2, pos3 - pos2); + } + } + + info = " (nvidia-l4t-core " + l4t_core_version + ")"; + +#endif + +#endif + + environment = "[" + arch + "] " + os + info; +#endif + + return environment; +} + diff --git a/src/momo_version.h b/src/momo_version.h index 87d464d5..ee3f106c 100644 --- a/src/momo_version.h +++ b/src/momo_version.h @@ -1,30 +1,13 @@ #ifndef MOMO_VERSION_H_INCLUDED #define MOMO_VERSION_H_INCLUDED -// バージョンやコミットハッシュ情報 -// 通常は外から渡すが、渡されていなかった場合の対応 -#ifndef MOMO_VERSION -#define MOMO_VERSION "internal-build" -#endif - -#ifndef MOMO_COMMIT_SHORT -#define MOMO_COMMIT_SHORT "unknown" -#endif - -#define MOMO_NAME \ - "WebRTC Native Client Momo " MOMO_VERSION " (" MOMO_COMMIT_SHORT ")" - -#if defined(WEBRTC_READABLE_VERSION) && defined(WEBRTC_COMMIT_SHORT) && \ - defined(WEBRTC_BUILD_VERSION) - -#define LIBWEBRTC_NAME \ - "Shiguredo-Build " WEBRTC_READABLE_VERSION " (" WEBRTC_BUILD_VERSION \ - " " WEBRTC_COMMIT_SHORT ")" - -#else - -#define LIBWEBRTC_NAME "WebRTC custom build" - -#endif +#include + +class MomoVersion { + public: + static std::string GetClientName(); + static std::string GetLibwebrtcName(); + static std::string GetEnvironmentName(); +}; #endif // MOMO_VERSION_H_INCLUDED diff --git a/src/sora/sora_websocket_client.cpp b/src/sora/sora_websocket_client.cpp index 5c927f91..fdefdee9 100644 --- a/src/sora/sora_websocket_client.cpp +++ b/src/sora/sora_websocket_client.cpp @@ -4,9 +4,6 @@ #include // boost -#include // is_any_of -#include -#include #include // json @@ -16,13 +13,6 @@ #include "url_parts.h" #include "util.h" -#if defined(__APPLE__) || defined(__linux__) -#include -#endif -#if defined(__APPLE__) -#include "mac_helper/macos_version.h" -#endif - using json = nlohmann::json; bool SoraWebsocketClient::parseURL(URLParts& parts) const { @@ -234,107 +224,13 @@ void SoraWebsocketClient::onHandshake(boost::system::error_code ec) { } void SoraWebsocketClient::doSendConnect() { - std::string environment = "Unknown Environment"; - -#if defined(__APPLE__) || defined(__linux__) - std::string arch = "unknown arch"; - std::string os = "Unknown OS"; - std::string info = ""; - - utsname u; - int r = uname(&u); - if (r == 0) { - arch = u.machine; - } - -#if defined(__APPLE__) - os = MacosVersion::GetOSName() + " " + MacosVersion::GetOSVersion(); -#else - // /etc/os-release ファイルを読んで PRETTY_NAME を利用する - - // /etc/os-release は以下のような内容になっているので、これを適当にパースする - /* - $ docker run -it --rm ubuntu cat /etc/os-release - NAME="Ubuntu" - VERSION="18.04.3 LTS (Bionic Beaver)" - ID=ubuntu - ID_LIKE=debian - PRETTY_NAME="Ubuntu 18.04.3 LTS" - VERSION_ID="18.04" - HOME_URL="https://www.ubuntu.com/" - SUPPORT_URL="https://help.ubuntu.com/" - BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" - PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" - VERSION_CODENAME=bionic - UBUNTU_CODENAME=bionic - */ - // 行ごとに分けたデータを取得 - std::vector lines; - { - std::stringstream ss; - std::ifstream fin("/etc/os-release"); - ss << fin.rdbuf(); - std::string content = ss.str(); - boost::algorithm::split(lines, ss.str(), boost::is_any_of("\n")); - } - const std::string PRETTY_NAME = "PRETTY_NAME="; - for (auto& line : lines) { - // 先頭が PRETTY_NAME= の行を探す - if (line.find(PRETTY_NAME) != 0) { - continue; - } - // PRETTY_NAME= 以降のデータを取り出す - os = line.substr(PRETTY_NAME.size()); - // 左右の " を除ける(in-place バージョン) - boost::algorithm::trim_if(os, [](char c) { return c == '"'; }); - break; - } - -#if USE_JETSON_ENCODER - // Jetson Nano の場合、更に詳細な情報を取得する - - // nvidia-l4t-core のバージョンを拾う - // $ dpkg-query --show nvidia-l4t-core - // で取得できるが、外部コマンドは出来るだけ使いたくないので、 - // /var/lib/dpkg/status から該当行を探す - - std::string content; - { - std::stringstream ss; - std::ifstream fin("/var/lib/dpkg/status"); - ss << fin.rdbuf(); - content = ss.str(); - } - std::string l4t_core_version = "unknown"; - auto pos = content.find("Package: nvidia-l4t-core"); - if (pos != std::string::npos) { - const std::string VERSION = "Version: "; - auto pos2 = content.find(VERSION, pos); - if (pos2 != std::string::npos) { - pos2 += VERSION.size(); - auto pos3 = content.find("\n", pos2); - l4t_core_version = pos3 == std::string::npos - ? content.substr(pos2) - : content.substr(pos2, pos3 - pos2); - } - } - - info = " (nvidia-l4t-core " + l4t_core_version + ")"; - -#endif - -#endif - - environment = "[" + arch + "] " + os + info; -#endif - json json_message = { {"type", "connect"}, {"role", conn_settings_.sora_role}, {"channel_id", conn_settings_.sora_channel_id}, - {"sora_client", MOMO_NAME}, - {"libwebrtc", LIBWEBRTC_NAME}, - {"environment", environment}, + {"sora_client", MomoVersion::GetClientName()}, + {"libwebrtc", MomoVersion::GetLibwebrtcName()}, + {"environment", MomoVersion::GetEnvironmentName()}, }; if (conn_settings_.sora_multistream) { diff --git a/src/util.cpp b/src/util.cpp index 0ce18aa8..8319d16a 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -323,8 +323,8 @@ void Util::parseArgs(int argc, } if (version) { - std::cout << MOMO_NAME - " USE_MMAL_ENCODER=" BOOST_PP_STRINGIZE(MOMO_USE_MMAL_ENCODER) + std::cout << MomoVersion::GetClientName() + << " USE_MMAL_ENCODER=" BOOST_PP_STRINGIZE(MOMO_USE_MMAL_ENCODER) << std::endl; exit(0); } From 8c2d88ca7040e478e5cc40eeb49a9c2951a21b60 Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 07:57:08 +0900 Subject: [PATCH 055/105] =?UTF-8?q?GitHub=20Actions=20=E3=81=A7=E3=83=91?= =?UTF-8?q?=E3=83=83=E3=82=B1=E3=83=BC=E3=82=B8=E3=82=92=E4=BD=9C=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=82=A2=E3=83=83=E3=83=97=E3=83=AD=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=AE=E3=82=92=E8=A9=A6=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 69 ++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c44a52a2..a4724764 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,36 +6,57 @@ on: - 'doc/**' jobs: - build_raspbian-buster_armv6: - name: Build momo for raspbian-buster_armv6 - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v1 - - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make raspbian-buster_armv6 - working-directory: build - timeout-minutes: 120 - build_raspbian-buster_armv7: - name: Build momo for raspbian-buster_armv7 - runs-on: ubuntu-18.04 + build_macos: + name: Build momo for macOS 10.15 + runs-on: macos-latest steps: - uses: actions/checkout@v1 - - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make raspbian-buster_armv7 + - run: make macos.package working-directory: build timeout-minutes: 120 - build_ubuntu-18_04_armv8_jetson_nano: - name: Build momo for build_ubuntu-18.04_armv8_jetson_nano + - name: Output package name + shell: bash + run: | + cat VERSION | grep MOMO_VERSION > tmp + source tmp + rm tmp + MACOS_VERSION=`sw_vers -productVersion | cut -d '.' -f-2` + echo "##[set-output name=name;]momo-${MOMO_VERSION}_macos-${MACOS_VERSION}.tar.gz" + id: package_name + - name: Upload Artifact + uses: actions/upload-artifact@v1 + with: + name: ${{ steps.package_name.outputs.name }} + path: build/package/${{ steps.package_name.outputs.name }} + build-linux: + strategy: + fail-fast: false + matrix: + name: + - raspbian-buster_armv6 + - raspbian-buster_armv7 + - ubuntu-16.04_armv7_rom + - ubuntu-16.04_x86_64_rom + - ubuntu-18.04_armv8 + - ubuntu-18.04_armv8_jetson_nano + - ubuntu-18.04_x86_64 + name: Build momo for ${{ matrix.name }} runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ubuntu-18.04_armv8_jetson_nano + - run: DOCKER_BUILDKIT=1 NOTTY=1 NOMOUNT=1 make ${{ matrix.name }}.package working-directory: build timeout-minutes: 120 - build_macos: - name: Build momo for macOS 10.15 - runs-on: macos-latest - steps: - - uses: actions/checkout@v1 - - run: make macos - working-directory: build - timeout-minutes: 120 - + - name: Output package name + shell: bash + run: | + cat VERSION | grep MOMO_VERSION > tmp + source tmp + rm tmp + echo "##[set-output name=name;]momo-${MOMO_VERSION}_${{ matrix.name }}-${MACOS_VERSION}.tar.gz" + id: package_name + - name: Upload Artifact + uses: actions/upload-artifact@v1 + with: + name: ${{ steps.package_name.outputs.name }} + path: build/package/${{ steps.package_name.outputs.name }} From edb3afd640404ea6b2af1214b227bfe645893aac Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 08:12:17 +0900 Subject: [PATCH 056/105] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a4724764..3031e5f7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,8 +35,8 @@ jobs: name: - raspbian-buster_armv6 - raspbian-buster_armv7 - - ubuntu-16.04_armv7_rom - - ubuntu-16.04_x86_64_rom + - ubuntu-16.04_armv7_ros + - ubuntu-16.04_x86_64_ros - ubuntu-18.04_armv8 - ubuntu-18.04_armv8_jetson_nano - ubuntu-18.04_x86_64 @@ -53,7 +53,7 @@ jobs: cat VERSION | grep MOMO_VERSION > tmp source tmp rm tmp - echo "##[set-output name=name;]momo-${MOMO_VERSION}_${{ matrix.name }}-${MACOS_VERSION}.tar.gz" + echo "##[set-output name=name;]momo-${MOMO_VERSION}_${{ matrix.name }}.tar.gz" id: package_name - name: Upload Artifact uses: actions/upload-artifact@v1 From ffee779667c11a8c934e120f550b0a5e0f71296a Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 09:27:07 +0900 Subject: [PATCH 057/105] =?UTF-8?q?=E3=82=BF=E3=82=B0=E3=82=92=20push=20?= =?UTF-8?q?=E3=81=97=E3=81=9F=E6=99=82=E3=81=AB=E3=83=AA=E3=83=AA=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=82=92=E4=BD=9C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 87 +++++++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3031e5f7..fab65386 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,7 +6,7 @@ on: - 'doc/**' jobs: - build_macos: + build-macos: name: Build momo for macOS 10.15 runs-on: macos-latest steps: @@ -21,13 +21,19 @@ jobs: source tmp rm tmp MACOS_VERSION=`sw_vers -productVersion | cut -d '.' -f-2` - echo "##[set-output name=name;]momo-${MOMO_VERSION}_macos-${MACOS_VERSION}.tar.gz" + echo "PACKAGE_NAME=momo-${MOMO_VERSION}_macos-${MACOS_VERSION}.tar.gz" > macos.env + echo "::set-output name=name::momo-${MOMO_VERSION}_macos-${MACOS_VERSION}.tar.gz" id: package_name - name: Upload Artifact uses: actions/upload-artifact@v1 with: name: ${{ steps.package_name.outputs.name }} path: build/package/${{ steps.package_name.outputs.name }} + - name: Upload Environment + uses: actions/upload-artifact@v1 + with: + name: macos.env + path: macos.env build-linux: strategy: fail-fast: false @@ -53,10 +59,85 @@ jobs: cat VERSION | grep MOMO_VERSION > tmp source tmp rm tmp - echo "##[set-output name=name;]momo-${MOMO_VERSION}_${{ matrix.name }}.tar.gz" + echo "PACKAGE_NAME=momo-${MOMO_VERSION}_${{ matrix.name }}.tar.gz" > ${{ matrix.name }}.env + echo "::set-output name=name::momo-${MOMO_VERSION}_${{ matrix.name }}.tar.gz" id: package_name - name: Upload Artifact uses: actions/upload-artifact@v1 with: name: ${{ steps.package_name.outputs.name }} path: build/package/${{ steps.package_name.outputs.name }} + - name: Upload Environment + uses: actions/upload-artifact@v1 + with: + name: ${{ matrix.name }}.env + path: ${{ matrix.name }}.env + create-release: + name: Create Release + if: contains(github.ref, 'tags/v') + needs: + - build-macos + - build-linux + runs-on: ubuntu-latest + steps: + - name: Create Release + id: create_release + uses: actions/create-release@v1.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + draft: true + prerelease: false + - name: Output upload url + shell: bash + run: echo "UPLOAD_URL=steps.create_release.outputs.upload_url" > create-release.env + - name: Upload create-release Environment + uses: actions/upload-artifact@v1 + with: + name: create-release.env + path: create-release.env + upload-assets: + name: Upload Assets to Release + needs: + - create-release + strategy: + fail-fast: true + matrix: + name: + - macos + - raspbian-buster_armv6 + - raspbian-buster_armv7 + - ubuntu-16.04_armv7_ros + - ubuntu-16.04_x86_64_ros + - ubuntu-18.04_armv8 + - ubuntu-18.04_armv8_jetson_nano + - ubuntu-18.04_x86_64 + steps: + - uses: actions/download-artifact@v1 + with: + name: ${{ matrix.name }}.env + - uses: actions/download-artifact@v1 + with: + name: create-release.env + - name: Env to output + shell: bash + run: | + source ${{ matrix.name }}.env + source create-release.env + echo "::set-output package_name=name::$PACKAGE_NAME" + echo "::set-output upload_url=name::$UPLOAD_URL" + id: env + - uses: actions/download-artifact@v1 + with: + name: ${{ steps.env.outputs.package_name }} + - name: Upload ${{ matrix.name }} Release Asset + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.env.outputs.upload_url }} + asset_path: ${{ steps.env.outputs.package_name }} + asset_name: ${{ steps.env.outputs.package_name }} + asset_content_type: application/gzip From 9580184105958aef93f676e3fbeed25e86119f81 Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 09:28:29 +0900 Subject: [PATCH 058/105] runs-on --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fab65386..8e97f432 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -102,6 +102,7 @@ jobs: name: Upload Assets to Release needs: - create-release + runs-on: ubuntu-latest strategy: fail-fast: true matrix: From b381c3c50f8aae3826928fe6eb525842e0381b94 Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 09:54:17 +0900 Subject: [PATCH 059/105] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8e97f432..0849161b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -125,8 +125,8 @@ jobs: - name: Env to output shell: bash run: | - source ${{ matrix.name }}.env - source create-release.env + source ${{ matrix.name }}.env/${{ matrix.name }}.env + source create-release.env/create-release.env echo "::set-output package_name=name::$PACKAGE_NAME" echo "::set-output upload_url=name::$UPLOAD_URL" id: env From 20712ffe48e764749e356d58973b9d50556e3977 Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 10:23:07 +0900 Subject: [PATCH 060/105] =?UTF-8?q?=E9=80=86=E3=81=A0=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0849161b..866b8e46 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -127,8 +127,8 @@ jobs: run: | source ${{ matrix.name }}.env/${{ matrix.name }}.env source create-release.env/create-release.env - echo "::set-output package_name=name::$PACKAGE_NAME" - echo "::set-output upload_url=name::$UPLOAD_URL" + echo "::set-output name=package_name::$PACKAGE_NAME" + echo "::set-output name=upload_url::$UPLOAD_URL" id: env - uses: actions/download-artifact@v1 with: From 8dbee02214bd379ec362698e3e1eb4119cff0579 Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 10:54:14 +0900 Subject: [PATCH 061/105] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 866b8e46..37c808cf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -139,6 +139,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.env.outputs.upload_url }} - asset_path: ${{ steps.env.outputs.package_name }} + asset_path: ${{ steps.env.outputs.package_name }}/${{ steps.env.outputs.package_name }} asset_name: ${{ steps.env.outputs.package_name }} asset_content_type: application/gzip From 4196af68e144907d564bde3d79178d6463121a2f Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 11:04:36 +0900 Subject: [PATCH 062/105] =?UTF-8?q?Ayame=20=E3=81=AB=E6=8E=A5=E7=B6=9A?= =?UTF-8?q?=E3=81=99=E3=82=8B=E6=99=82=E3=81=AB=20Momo=20=E3=82=84=20WebRT?= =?UTF-8?q?C=20=E3=81=AA=E3=81=A9=E3=81=AE=E3=83=90=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E6=83=85=E5=A0=B1=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ayame/ayame_websocket_client.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ayame/ayame_websocket_client.cpp b/src/ayame/ayame_websocket_client.cpp index 844df922..11c80993 100644 --- a/src/ayame/ayame_websocket_client.cpp +++ b/src/ayame/ayame_websocket_client.cpp @@ -3,6 +3,7 @@ #include #include +#include "../momo_version.h" #include "url_parts.h" #include "util.h" @@ -224,6 +225,9 @@ void AyameWebsocketClient::doRegister() { {"type", "register"}, {"clientId", Util::generateRandomChars()}, {"roomId", conn_settings_.ayame_room_id}, + {"ayameClient", MomoVersion::GetClientName()}, + {"libwebrtc", MomoVersion::GetLibwebrtcName()}, + {"environment", MomoVersion::GetEnvironmentName()}, }; if (conn_settings_.ayame_client_id != "") { json_message["clientId"] = conn_settings_.ayame_client_id; From a3dabaf5347bd204bd3348d41e308a158fe5fc7a Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 11:19:46 +0900 Subject: [PATCH 063/105] =?UTF-8?q?${{}}=E3=81=A7=E5=9B=B2=E3=82=80?= =?UTF-8?q?=E3=81=AE=E3=82=92=E5=BF=98=E3=82=8C=E3=81=A6=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 37c808cf..fb48232e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,7 +92,7 @@ jobs: prerelease: false - name: Output upload url shell: bash - run: echo "UPLOAD_URL=steps.create_release.outputs.upload_url" > create-release.env + run: echo "UPLOAD_URL='${{ steps.create_release.outputs.upload_url }}'" > create-release.env - name: Upload create-release Environment uses: actions/upload-artifact@v1 with: From 8432693247bb654e7bed0cd42c24d6d1fcd48c1d Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 11:45:46 +0900 Subject: [PATCH 064/105] =?UTF-8?q?draft=20=E3=82=92=E5=A4=96=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fb48232e..cef03131 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -88,7 +88,7 @@ jobs: with: tag_name: ${{ github.ref }} release_name: Release ${{ github.ref }} - draft: true + draft: false prerelease: false - name: Output upload url shell: bash From 2f95d34d239544e867bef815da92e4f3713ab6ec Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 12:20:05 +0900 Subject: [PATCH 065/105] =?UTF-8?q?202X=E5=B9=B4=E4=BB=A3=E3=81=AA?= =?UTF-8?q?=E3=82=89=E3=83=AA=E3=83=AA=E3=83=BC=E3=82=B9=E3=82=92=E4=BD=9C?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cef03131..9b340c52 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -74,7 +74,7 @@ jobs: path: ${{ matrix.name }}.env create-release: name: Create Release - if: contains(github.ref, 'tags/v') + if: contains(github.ref, 'tags/202') needs: - build-macos - build-linux From 54a82ec8c4d8efa9a651bff530230d54de8e3d15 Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 7 Jan 2020 12:43:03 +0900 Subject: [PATCH 066/105] =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=83=A1?= =?UTF-8?q?=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E8=8B=B1=E8=AA=9E=E5=8C=96?= =?UTF-8?q?=201/N?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 66 ++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 8319d16a..bc3b04dd 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -132,7 +132,7 @@ void Util::parseArgs(int argc, bool& use_sora, int& log_level, ConnectionSettings& cs) { - CLI::App app("Momo - WebRTC ネイティブクライアント"); + CLI::App app("Momo - WebRTC Native Client"); bool version = false; @@ -141,7 +141,7 @@ void Util::parseArgs(int argc, #if USE_MMAL_ENCODER || USE_JETSON_ENCODER return std::string(); #else - return "このデバイスは --force-i420 に対応していません。"; + return "This hardware does NOT suppport --force-i420 option."; #endif }, ""); @@ -150,7 +150,7 @@ void Util::parseArgs(int argc, #if USE_MMAL_ENCODER || USE_JETSON_ENCODER return std::string(); #else - return "このデバイスは --use-native に対応していません。"; + return "This hardware does NOT suppport --use-native option."; #endif }, ""); @@ -161,7 +161,7 @@ void Util::parseArgs(int argc, return std::string(); #else if (input == "H264") { - return "このデバイスは --video-codec=H264 に対応していません。"; + return "This hardware does NOT support --video-codec=H264 option."; } return std::string(); #endif @@ -181,70 +181,70 @@ void Util::parseArgs(int argc, return std::string(); } - return "解像度は QVGA, VGA, HD, FHD, 4K, 幅x高さ " - "どれかである必要があります。"; + return "A resolution value must be one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT]." }, ""); - app.add_flag("--no-video", cs.no_video, "ビデオを表示しない"); - app.add_flag("--no-audio", cs.no_audio, "オーディオを出さない"); + app.add_flag("--no-video", cs.no_video, "do not use video"); + app.add_flag("--no-audio", cs.no_audio, "do not use audio"); app.add_flag("--force-i420", cs.force_i420, - "強制的にI420にする(対応デバイスのみ)") + "use I420 format (only on supported hardwares)") ->check(is_valid_force_i420); app.add_flag("--use-native", cs.use_native, - "MJPEGのデコードとビデオのリサイズをハードウェアで行う" - "(対応デバイスのみ)") + "perform MJPEG deoode and video resize by hardware acceleration " + "(only on supported hardwares)") ->check(is_valid_use_native); #if defined(__APPLE__) app.add_option("--video-device", cs.video_device, - "デバイス番号、またはデバイス名。省略時はデフォルト(デバイス" - "番号が0)のビデオデバイスを自動検出"); + "use specified video device, by an id or a name" + "(device with id 0 will be used without this option)"); #elif defined(__linux__) app.add_option("--video-device", cs.video_device, - "デバイスファイル名。省略時はどれかのビデオデバイスを自動検出") + "use specifide video device by name " + "(some device will be used without this option)") ->check(CLI::ExistingFile); #endif app.add_option("--resolution", cs.resolution, - "解像度(QVGA, VGA, HD, FHD, 4K, 幅x高さ)") + "specify video resolution (one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT])") ->check(is_valid_resolution); - app.add_option("--framerate", cs.framerate, "フレームレート") + app.add_option("--framerate", cs.framerate, "specify video framerate") ->check(CLI::Range(1, 60)); - app.add_flag("--fixed-resolution", cs.fixed_resolution, "固定解像度"); + app.add_flag("--fixed-resolution", cs.fixed_resolution, "maintain video resolution in degradation"); app.add_set("--priority", cs.priority, {"BALANCE", "FRAMERATE", "RESOLUTION"}, - "優先設定 (Experimental)"); - app.add_option("--port", cs.port, "ポート番号(デフォルト:8080)") + "specify preference in video degradation (experimental)"); + app.add_option("--port", cs.port, "specify port number (default: 8080)") ->check(CLI::Range(0, 65535)); - app.add_flag("--use-sdl", cs.use_sdl, "SDLを使い映像を表示する"); - app.add_flag("--show-me", cs.show_me, "自分のカメラも表示する"); + app.add_flag("--use-sdl", cs.use_sdl, "show video using SDL"); + app.add_flag("--show-me", cs.show_me, "show self video"); app.add_option("--window-width", cs.window_width, - "映像を表示するウィンドウの横幅") + "specify window width for videos") ->check(CLI::Range(180, 16384)); app.add_option("--window-height", cs.window_height, - "映像を表示するウィンドウの縦幅") + "specify window height for videos") ->check(CLI::Range(180, 16384)); app.add_flag("--fullscreen", cs.fullscreen, - "映像を表示するウィンドウをフルスクリーンにする"); - app.add_flag("--daemon", is_daemon, "デーモン化する"); - app.add_flag("--version", version, "バージョン情報の表示"); + "use fullscreen window for videos"); + app.add_flag("--daemon", is_daemon, "run as a daemon process"); + app.add_flag("--version", version, "show version information"); auto log_level_map = std::vector >( {{"verbose", 0}, {"info", 1}, {"warning", 2}, {"error", 3}, {"none", 4}}); - app.add_option("--log-level", log_level, "ログレベル") + app.add_option("--log-level", log_level, "specify log severity level threshold") ->transform(CLI::CheckedTransformer(log_level_map, CLI::ignore_case)); // オーディオフラグ app.add_flag("--disable-echo-cancellation", cs.disable_echo_cancellation, - "エコーキャンセルを無効"); + "disable echo cancellation for audio"); app.add_flag("--disable-auto-gain-control", cs.disable_auto_gain_control, - "オートゲインコントロール無効"); + "disable auto gain control for audio"); app.add_flag("--disable-noise-suppression", cs.disable_noise_suppression, - "ノイズサプレッション無効"); + "disable noise supression for audio"); app.add_flag("--disable-highpass-filter", cs.disable_highpass_filter, - "ハイパスフィルター無効"); + "disable highpass filter for audio"); app.add_flag("--disable-typing-detection", cs.disable_typing_detection, - "タイピングディテクション無効"); + "disable typing detection for audio"); app.add_flag("--disable-residual-echo-detector", cs.disable_residual_echo_detector, - "残響エコーディテクション無効"); + "disable residual echo detector for audio"); auto test_app = app.add_subcommand("test", "開発向け"); auto ayame_app = app.add_subcommand("ayame", "WebRTC Signaling Server Ayame"); From 7d92a525b7274fc99f58bde4ad993bdba2e53ecd Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 7 Jan 2020 13:02:20 +0900 Subject: [PATCH 067/105] =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=83=A1?= =?UTF-8?q?=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E8=8B=B1=E8=AA=9E=E5=8C=96?= =?UTF-8?q?=202/N?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index bc3b04dd..6b7baa1f 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -246,45 +246,45 @@ void Util::parseArgs(int argc, cs.disable_residual_echo_detector, "disable residual echo detector for audio"); - auto test_app = app.add_subcommand("test", "開発向け"); - auto ayame_app = app.add_subcommand("ayame", "WebRTC Signaling Server Ayame"); - auto sora_app = app.add_subcommand("sora", "WebRTC SFU Sora"); + auto test_app = app.add_subcommand("test", "Mode for momo developer with simple http server"); + auto ayame_app = app.add_subcommand("ayame", "Mode for working with WebRTC Signaling Server Ayame"); + auto sora_app = app.add_subcommand("sora", "Mode for working with WebRTC SFU Sora"); test_app - ->add_option("--document-root", cs.test_document_root, "配信ディレクトリ") + ->add_option("--document-root", cs.test_document_root, "specify http document root directory") ->check(CLI::ExistingDirectory); ayame_app ->add_option("SIGNALING-URL", cs.ayame_signaling_host, - "シグナリングホスト") + "specify signaling URL") ->required(); - ayame_app->add_option("ROOM-ID", cs.ayame_room_id, "ルームID")->required(); - ayame_app->add_option("--client-id", cs.ayame_client_id, "クライアントID"); + ayame_app->add_option("ROOM-ID", cs.ayame_room_id, "specify room ID")->required(); + ayame_app->add_option("--client-id", cs.ayame_client_id, "specify client ID"); ayame_app->add_option("--signaling-key", cs.ayame_signaling_key, - "シグナリングキー"); + "specify signaling key"); sora_app ->add_option("SIGNALING-URL", cs.sora_signaling_host, - "シグナリングホスト") + "specify signaling URL") ->required(); - sora_app->add_option("CHANNEL-ID", cs.sora_channel_id, "チャンネルID") + sora_app->add_option("CHANNEL-ID", cs.sora_channel_id, "specify channel ID") ->required(); - sora_app->add_flag("--auto", cs.sora_auto_connect, "自動接続する"); + sora_app->add_flag("--auto", cs.sora_auto_connect, "connect to Sora automatically"); sora_app ->add_set("--video-codec", cs.video_codec, {"VP8", "VP9", "H264"}, - "ビデオコーデック") + "specify video codec") ->check(is_valid_h264); sora_app->add_set("--audio-codec", cs.audio_codec, {"OPUS", "PCMU"}, - "オーディオコーデック"); + "specify audio codec") sora_app - ->add_option("--video-bitrate", cs.video_bitrate, "ビデオのビットレート") + ->add_option("--video-bitrate", cs.video_bitrate, "specify video bitrate") ->check(CLI::Range(1, 30000)); sora_app ->add_option("--audio-bitrate", cs.audio_bitrate, - "オーディオのビットレート") + "specify audio bitrate") ->check(CLI::Range(6, 510)); sora_app->add_flag("--multistream", cs.sora_multistream, - "マルチストリームかどうか"); + "use multistream"); sora_app->add_set( "--role", cs.sora_role, {"upstream", "downstream", "sendonly", "recvonly", "sendrecv"}, From d390e50f5c90c8c041522488f4db5e175fad57c6 Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 7 Jan 2020 13:52:56 +0900 Subject: [PATCH 068/105] =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=83=A1?= =?UTF-8?q?=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E8=8B=B1=E8=AA=9E=E5=8C=96?= =?UTF-8?q?=203/N?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 6b7baa1f..22528aff 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -288,9 +288,9 @@ void Util::parseArgs(int argc, sora_app->add_set( "--role", cs.sora_role, {"upstream", "downstream", "sendonly", "recvonly", "sendrecv"}, - "ロール(デフォルトは upstream)"); + "specify role (default: upstream)"); sora_app - ->add_option("--spotlight", cs.sora_spotlight, "スポットライトの配信数") + ->add_option("--spotlight", cs.sora_spotlight, "specify transmitted stream count in spotlight") ->check(CLI::Range(1, 10)); auto is_json = CLI::Validator( @@ -304,7 +304,7 @@ void Util::parseArgs(int argc, }, "JSON Value"); std::string sora_metadata; - sora_app->add_option("--metadata", sora_metadata, "メタデータ") + sora_app->add_option("--metadata", sora_metadata, "specify metadata for signaling connect") ->check(is_json); try { From 1fae3198f8ebd6e30a70802fe62aecc94d990baa Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 7 Jan 2020 14:04:00 +0900 Subject: [PATCH 069/105] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=82=A8=E3=83=A9=E3=83=BC=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 22528aff..f00a4374 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -181,7 +181,7 @@ void Util::parseArgs(int argc, return std::string(); } - return "A resolution value must be one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT]." + return "A resolution value must be one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT]."; }, ""); @@ -275,7 +275,7 @@ void Util::parseArgs(int argc, "specify video codec") ->check(is_valid_h264); sora_app->add_set("--audio-codec", cs.audio_codec, {"OPUS", "PCMU"}, - "specify audio codec") + "specify audio codec"); sora_app ->add_option("--video-bitrate", cs.video_bitrate, "specify video bitrate") ->check(CLI::Range(1, 30000)); @@ -290,7 +290,7 @@ void Util::parseArgs(int argc, {"upstream", "downstream", "sendonly", "recvonly", "sendrecv"}, "specify role (default: upstream)"); sora_app - ->add_option("--spotlight", cs.sora_spotlight, "specify transmitted stream count in spotlight") + ->add_option("--spotlight", cs.sora_spotlight, "specify stream count delivered in spotlight") ->check(CLI::Range(1, 10)); auto is_json = CLI::Validator( From 8c3a7da9de2bc35f7cb529da74c081e6c50edc21 Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 7 Jan 2020 14:09:37 +0900 Subject: [PATCH 070/105] typo fix --- src/util.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index f00a4374..db1bc01e 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -141,7 +141,7 @@ void Util::parseArgs(int argc, #if USE_MMAL_ENCODER || USE_JETSON_ENCODER return std::string(); #else - return "This hardware does NOT suppport --force-i420 option."; + return "This hardware does NOT support --force-i420 option."; #endif }, ""); @@ -150,7 +150,7 @@ void Util::parseArgs(int argc, #if USE_MMAL_ENCODER || USE_JETSON_ENCODER return std::string(); #else - return "This hardware does NOT suppport --use-native option."; + return "This hardware does NOT support --use-native option."; #endif }, ""); From 512d3f5dd22409be67ebf5efb2ee18d620f35d70 Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 7 Jan 2020 14:19:54 +0900 Subject: [PATCH 071/105] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=82=BF=E3=82=92=E6=8E=9B=E3=81=91=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mac_helper/macos_version.h | 2 +- src/momo_version.cpp | 1 - src/util.cpp | 43 +++++++++++++++++++++------------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/mac_helper/macos_version.h b/src/mac_helper/macos_version.h index 78164672..51241249 100644 --- a/src/mac_helper/macos_version.h +++ b/src/mac_helper/macos_version.h @@ -9,4 +9,4 @@ class MacosVersion { static std::string GetOSVersion(); }; -#endif // MACOS_VERSION_H_INCLUDED +#endif // MACOS_VERSION_H_INCLUDED diff --git a/src/momo_version.cpp b/src/momo_version.cpp index f1a797e4..8392bfce 100644 --- a/src/momo_version.cpp +++ b/src/momo_version.cpp @@ -147,4 +147,3 @@ std::string MomoVersion::GetEnvironmentName() { return environment; } - diff --git a/src/util.cpp b/src/util.cpp index db1bc01e..b49ababf 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -181,7 +181,8 @@ void Util::parseArgs(int argc, return std::string(); } - return "A resolution value must be one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT]."; + return "A resolution value must be one of QVGA, VGA, HD, FHD, 4K, or " + "[WIDTH]x[HEIGHT]."; }, ""); @@ -205,11 +206,13 @@ void Util::parseArgs(int argc, ->check(CLI::ExistingFile); #endif app.add_option("--resolution", cs.resolution, - "specify video resolution (one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT])") + "specify video resolution (one of QVGA, VGA, HD, FHD, 4K, or " + "[WIDTH]x[HEIGHT])") ->check(is_valid_resolution); app.add_option("--framerate", cs.framerate, "specify video framerate") ->check(CLI::Range(1, 60)); - app.add_flag("--fixed-resolution", cs.fixed_resolution, "maintain video resolution in degradation"); + app.add_flag("--fixed-resolution", cs.fixed_resolution, + "maintain video resolution in degradation"); app.add_set("--priority", cs.priority, {"BALANCE", "FRAMERATE", "RESOLUTION"}, "specify preference in video degradation (experimental)"); app.add_option("--port", cs.port, "specify port number (default: 8080)") @@ -228,7 +231,8 @@ void Util::parseArgs(int argc, app.add_flag("--version", version, "show version information"); auto log_level_map = std::vector >( {{"verbose", 0}, {"info", 1}, {"warning", 2}, {"error", 3}, {"none", 4}}); - app.add_option("--log-level", log_level, "specify log severity level threshold") + app.add_option("--log-level", log_level, + "specify log severity level threshold") ->transform(CLI::CheckedTransformer(log_level_map, CLI::ignore_case)); // オーディオフラグ @@ -246,19 +250,24 @@ void Util::parseArgs(int argc, cs.disable_residual_echo_detector, "disable residual echo detector for audio"); - auto test_app = app.add_subcommand("test", "Mode for momo developer with simple http server"); - auto ayame_app = app.add_subcommand("ayame", "Mode for working with WebRTC Signaling Server Ayame"); - auto sora_app = app.add_subcommand("sora", "Mode for working with WebRTC SFU Sora"); + auto test_app = app.add_subcommand( + "test", "Mode for momo developer with simple http server"); + auto ayame_app = app.add_subcommand( + "ayame", "Mode for working with WebRTC Signaling Server Ayame"); + auto sora_app = + app.add_subcommand("sora", "Mode for working with WebRTC SFU Sora"); test_app - ->add_option("--document-root", cs.test_document_root, "specify http document root directory") + ->add_option("--document-root", cs.test_document_root, + "specify http document root directory") ->check(CLI::ExistingDirectory); ayame_app ->add_option("SIGNALING-URL", cs.ayame_signaling_host, "specify signaling URL") ->required(); - ayame_app->add_option("ROOM-ID", cs.ayame_room_id, "specify room ID")->required(); + ayame_app->add_option("ROOM-ID", cs.ayame_room_id, "specify room ID") + ->required(); ayame_app->add_option("--client-id", cs.ayame_client_id, "specify client ID"); ayame_app->add_option("--signaling-key", cs.ayame_signaling_key, "specify signaling key"); @@ -269,7 +278,8 @@ void Util::parseArgs(int argc, ->required(); sora_app->add_option("CHANNEL-ID", cs.sora_channel_id, "specify channel ID") ->required(); - sora_app->add_flag("--auto", cs.sora_auto_connect, "connect to Sora automatically"); + sora_app->add_flag("--auto", cs.sora_auto_connect, + "connect to Sora automatically"); sora_app ->add_set("--video-codec", cs.video_codec, {"VP8", "VP9", "H264"}, "specify video codec") @@ -280,17 +290,16 @@ void Util::parseArgs(int argc, ->add_option("--video-bitrate", cs.video_bitrate, "specify video bitrate") ->check(CLI::Range(1, 30000)); sora_app - ->add_option("--audio-bitrate", cs.audio_bitrate, - "specify audio bitrate") + ->add_option("--audio-bitrate", cs.audio_bitrate, "specify audio bitrate") ->check(CLI::Range(6, 510)); - sora_app->add_flag("--multistream", cs.sora_multistream, - "use multistream"); + sora_app->add_flag("--multistream", cs.sora_multistream, "use multistream"); sora_app->add_set( "--role", cs.sora_role, {"upstream", "downstream", "sendonly", "recvonly", "sendrecv"}, "specify role (default: upstream)"); sora_app - ->add_option("--spotlight", cs.sora_spotlight, "specify stream count delivered in spotlight") + ->add_option("--spotlight", cs.sora_spotlight, + "specify stream count delivered in spotlight") ->check(CLI::Range(1, 10)); auto is_json = CLI::Validator( @@ -304,7 +313,9 @@ void Util::parseArgs(int argc, }, "JSON Value"); std::string sora_metadata; - sora_app->add_option("--metadata", sora_metadata, "specify metadata for signaling connect") + sora_app + ->add_option("--metadata", sora_metadata, + "specify metadata for signaling connect") ->check(is_json); try { From c037ed2c15d2e4775157bd2d571da8c7189d3a41 Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 7 Jan 2020 14:25:11 +0900 Subject: [PATCH 072/105] fix aspell check --- src/util.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index db1bc01e..1073f5af 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -200,7 +200,7 @@ void Util::parseArgs(int argc, "(device with id 0 will be used without this option)"); #elif defined(__linux__) app.add_option("--video-device", cs.video_device, - "use specifide video device by name " + "use specified video device by name " "(some device will be used without this option)") ->check(CLI::ExistingFile); #endif @@ -237,7 +237,7 @@ void Util::parseArgs(int argc, app.add_flag("--disable-auto-gain-control", cs.disable_auto_gain_control, "disable auto gain control for audio"); app.add_flag("--disable-noise-suppression", cs.disable_noise_suppression, - "disable noise supression for audio"); + "disable noise suppression for audio"); app.add_flag("--disable-highpass-filter", cs.disable_highpass_filter, "disable highpass filter for audio"); app.add_flag("--disable-typing-detection", cs.disable_typing_detection, @@ -246,12 +246,12 @@ void Util::parseArgs(int argc, cs.disable_residual_echo_detector, "disable residual echo detector for audio"); - auto test_app = app.add_subcommand("test", "Mode for momo developer with simple http server"); + auto test_app = app.add_subcommand("test", "Mode for momo developer with simple HTTP server"); auto ayame_app = app.add_subcommand("ayame", "Mode for working with WebRTC Signaling Server Ayame"); auto sora_app = app.add_subcommand("sora", "Mode for working with WebRTC SFU Sora"); test_app - ->add_option("--document-root", cs.test_document_root, "specify http document root directory") + ->add_option("--document-root", cs.test_document_root, "specify HTTP document root directory") ->check(CLI::ExistingDirectory); ayame_app From 4e8685ac0378b3e6c61102c579db4f7e8643c4e1 Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 7 Jan 2020 14:30:12 +0900 Subject: [PATCH 073/105] uncountable --- src/util.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index a46abbd0..2894caca 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -189,11 +189,11 @@ void Util::parseArgs(int argc, app.add_flag("--no-video", cs.no_video, "do not use video"); app.add_flag("--no-audio", cs.no_audio, "do not use audio"); app.add_flag("--force-i420", cs.force_i420, - "use I420 format (only on supported hardwares)") + "use I420 format (only on supported hardware)") ->check(is_valid_force_i420); app.add_flag("--use-native", cs.use_native, "perform MJPEG deoode and video resize by hardware acceleration " - "(only on supported hardwares)") + "(only on supported hardware)") ->check(is_valid_use_native); #if defined(__APPLE__) app.add_option("--video-device", cs.video_device, From 7edca322c20d04e7f136a6b890de8f82e0cd23ae Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 7 Jan 2020 14:47:55 +0900 Subject: [PATCH 074/105] =?UTF-8?q?=E3=81=BE=E3=81=97=E3=83=BC=E3=83=BC?= =?UTF-8?q?=E3=83=BC=E3=82=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 2894caca..64abd6b0 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -141,7 +141,7 @@ void Util::parseArgs(int argc, #if USE_MMAL_ENCODER || USE_JETSON_ENCODER return std::string(); #else - return "This hardware does NOT support --force-i420 option."; + return "This machine does NOT support --force-i420 option."; #endif }, ""); @@ -150,7 +150,7 @@ void Util::parseArgs(int argc, #if USE_MMAL_ENCODER || USE_JETSON_ENCODER return std::string(); #else - return "This hardware does NOT support --use-native option."; + return "This machine does NOT support --use-native option."; #endif }, ""); @@ -161,7 +161,7 @@ void Util::parseArgs(int argc, return std::string(); #else if (input == "H264") { - return "This hardware does NOT support --video-codec=H264 option."; + return "This machine does NOT support --video-codec=H264 option."; } return std::string(); #endif @@ -189,11 +189,11 @@ void Util::parseArgs(int argc, app.add_flag("--no-video", cs.no_video, "do not use video"); app.add_flag("--no-audio", cs.no_audio, "do not use audio"); app.add_flag("--force-i420", cs.force_i420, - "use I420 format (only on supported hardware)") + "use I420 format (only on supported machines)") ->check(is_valid_force_i420); app.add_flag("--use-native", cs.use_native, "perform MJPEG deoode and video resize by hardware acceleration " - "(only on supported hardware)") + "(only on supported machines)") ->check(is_valid_use_native); #if defined(__APPLE__) app.add_option("--video-device", cs.video_device, From e76999d2e3a5ccaae6578347fb22e7822c3d87df Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Tue, 7 Jan 2020 15:04:54 +0900 Subject: [PATCH 075/105] =?UTF-8?q?help=20=E3=81=AE=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E3=81=AE=E5=B0=8F=E6=96=87=E5=AD=97=E5=8C=96=E3=81=A8=20--help?= =?UTF-8?q?-all=20=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/util.cpp b/src/util.cpp index 64abd6b0..fb011c9d 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -133,6 +133,8 @@ void Util::parseArgs(int argc, int& log_level, ConnectionSettings& cs) { CLI::App app("Momo - WebRTC Native Client"); + app.set_help_flag("-h,--help", "print this help message and exit"); + app.set_help_all_flag("--help-all", "print help message for all modes and exit"); bool version = false; From 60f45bf19cd5036d3c85a728728fa8f69a9ecb4f Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Wed, 8 Jan 2020 11:27:01 +0900 Subject: [PATCH 076/105] cosmetics --- src/util.cpp | 89 ++++++++++++++++++++++++++-------------------------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index fb011c9d..77269355 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -133,8 +133,7 @@ void Util::parseArgs(int argc, int& log_level, ConnectionSettings& cs) { CLI::App app("Momo - WebRTC Native Client"); - app.set_help_flag("-h,--help", "print this help message and exit"); - app.set_help_all_flag("--help-all", "print help message for all modes and exit"); + app.set_help_all_flag("--help-all", "Print help message for all modes and exit"); bool version = false; @@ -188,72 +187,72 @@ void Util::parseArgs(int argc, }, ""); - app.add_flag("--no-video", cs.no_video, "do not use video"); - app.add_flag("--no-audio", cs.no_audio, "do not use audio"); + app.add_flag("--no-video", cs.no_video, "Do not send video"); + app.add_flag("--no-audio", cs.no_audio, "Do not send audio"); app.add_flag("--force-i420", cs.force_i420, - "use I420 format (only on supported machines)") + "Use I420 format (only on supported devices)") ->check(is_valid_force_i420); app.add_flag("--use-native", cs.use_native, - "perform MJPEG deoode and video resize by hardware acceleration " - "(only on supported machines)") + "Perform MJPEG deoode and video resize by hardware acceleration " + "(only on supported devices)") ->check(is_valid_use_native); #if defined(__APPLE__) app.add_option("--video-device", cs.video_device, - "use specified video device, by an id or a name" + "Use specified video device, by an id or a name" "(device with id 0 will be used without this option)"); #elif defined(__linux__) app.add_option("--video-device", cs.video_device, - "use specified video device by name " + "Use specified video device by name " "(some device will be used without this option)") ->check(CLI::ExistingFile); #endif app.add_option("--resolution", cs.resolution, - "specify video resolution (one of QVGA, VGA, HD, FHD, 4K, or " + "Video resolution (one of QVGA, VGA, HD, FHD, 4K, or " "[WIDTH]x[HEIGHT])") ->check(is_valid_resolution); - app.add_option("--framerate", cs.framerate, "specify video framerate") + app.add_option("--framerate", cs.framerate, "Video framerate") ->check(CLI::Range(1, 60)); app.add_flag("--fixed-resolution", cs.fixed_resolution, - "maintain video resolution in degradation"); + "Maintain video resolution in degradation"); app.add_set("--priority", cs.priority, {"BALANCE", "FRAMERATE", "RESOLUTION"}, - "specify preference in video degradation (experimental)"); - app.add_option("--port", cs.port, "specify port number (default: 8080)") + "Preference in video degradation (experimental)"); + app.add_option("--port", cs.port, "Port number (default: 8080)") ->check(CLI::Range(0, 65535)); - app.add_flag("--use-sdl", cs.use_sdl, "show video using SDL"); - app.add_flag("--show-me", cs.show_me, "show self video"); + app.add_flag("--use-sdl", cs.use_sdl, "Show video using SDL"); + app.add_flag("--show-me", cs.show_me, "Show self video"); app.add_option("--window-width", cs.window_width, - "specify window width for videos") + "Window width for videos") ->check(CLI::Range(180, 16384)); app.add_option("--window-height", cs.window_height, - "specify window height for videos") + "Window height for videos") ->check(CLI::Range(180, 16384)); app.add_flag("--fullscreen", cs.fullscreen, - "use fullscreen window for videos"); - app.add_flag("--daemon", is_daemon, "run as a daemon process"); - app.add_flag("--version", version, "show version information"); + "Use fullscreen window for videos"); + app.add_flag("--daemon", is_daemon, "Run as a daemon process"); + app.add_flag("--version", version, "Show version information"); auto log_level_map = std::vector >( {{"verbose", 0}, {"info", 1}, {"warning", 2}, {"error", 3}, {"none", 4}}); app.add_option("--log-level", log_level, - "specify log severity level threshold") + "Log severity level threshold") ->transform(CLI::CheckedTransformer(log_level_map, CLI::ignore_case)); // オーディオフラグ app.add_flag("--disable-echo-cancellation", cs.disable_echo_cancellation, - "disable echo cancellation for audio"); + "Disable echo cancellation for audio"); app.add_flag("--disable-auto-gain-control", cs.disable_auto_gain_control, - "disable auto gain control for audio"); + "Disable auto gain control for audio"); app.add_flag("--disable-noise-suppression", cs.disable_noise_suppression, - "disable noise suppression for audio"); + "Disable noise suppression for audio"); app.add_flag("--disable-highpass-filter", cs.disable_highpass_filter, - "disable highpass filter for audio"); + "Disable highpass filter for audio"); app.add_flag("--disable-typing-detection", cs.disable_typing_detection, - "disable typing detection for audio"); + "Disable typing detection for audio"); app.add_flag("--disable-residual-echo-detector", cs.disable_residual_echo_detector, - "disable residual echo detector for audio"); + "Disable residual echo detector for audio"); auto test_app = app.add_subcommand( - "test", "Mode for momo developer with simple HTTP server"); + "test", "Mode for momo development with simple HTTP server"); auto ayame_app = app.add_subcommand( "ayame", "Mode for working with WebRTC Signaling Server Ayame"); auto sora_app = @@ -261,47 +260,47 @@ void Util::parseArgs(int argc, test_app ->add_option("--document-root", cs.test_document_root, - "specify HTTP document root directory") + "HTTP document root directory") ->check(CLI::ExistingDirectory); ayame_app ->add_option("SIGNALING-URL", cs.ayame_signaling_host, - "specify signaling URL") + "Signaling URL") ->required(); - ayame_app->add_option("ROOM-ID", cs.ayame_room_id, "specify room ID") + ayame_app->add_option("ROOM-ID", cs.ayame_room_id, "Room ID") ->required(); - ayame_app->add_option("--client-id", cs.ayame_client_id, "specify client ID"); + ayame_app->add_option("--client-id", cs.ayame_client_id, "Client ID"); ayame_app->add_option("--signaling-key", cs.ayame_signaling_key, - "specify signaling key"); + "Signaling key"); sora_app ->add_option("SIGNALING-URL", cs.sora_signaling_host, - "specify signaling URL") + "Signaling URL") ->required(); - sora_app->add_option("CHANNEL-ID", cs.sora_channel_id, "specify channel ID") + sora_app->add_option("CHANNEL-ID", cs.sora_channel_id, "Channel ID") ->required(); sora_app->add_flag("--auto", cs.sora_auto_connect, - "connect to Sora automatically"); + "Connect to Sora automatically"); sora_app ->add_set("--video-codec", cs.video_codec, {"VP8", "VP9", "H264"}, - "specify video codec") + "Video codec for send") ->check(is_valid_h264); sora_app->add_set("--audio-codec", cs.audio_codec, {"OPUS", "PCMU"}, - "specify audio codec"); + "Audio codec for send"); sora_app - ->add_option("--video-bitrate", cs.video_bitrate, "specify video bitrate") + ->add_option("--video-bitrate", cs.video_bitrate, "Video bitrate") ->check(CLI::Range(1, 30000)); sora_app - ->add_option("--audio-bitrate", cs.audio_bitrate, "specify audio bitrate") + ->add_option("--audio-bitrate", cs.audio_bitrate, "Audio bitrate") ->check(CLI::Range(6, 510)); - sora_app->add_flag("--multistream", cs.sora_multistream, "use multistream"); + sora_app->add_flag("--multistream", cs.sora_multistream, "Use multistream"); sora_app->add_set( "--role", cs.sora_role, {"upstream", "downstream", "sendonly", "recvonly", "sendrecv"}, - "specify role (default: upstream)"); + "Role (default: upstream)"); sora_app ->add_option("--spotlight", cs.sora_spotlight, - "specify stream count delivered in spotlight") + "Stream count delivered in spotlight") ->check(CLI::Range(1, 10)); auto is_json = CLI::Validator( @@ -317,7 +316,7 @@ void Util::parseArgs(int argc, std::string sora_metadata; sora_app ->add_option("--metadata", sora_metadata, - "specify metadata for signaling connect") + "Signaling metadata used in connect message") ->check(is_json); try { From 02ddf0cc0e1c80dba31aea2ae0192132a5fbdfbb Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Wed, 8 Jan 2020 11:46:11 +0900 Subject: [PATCH 077/105] =?UTF-8?q?=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E6=8C=87=E5=AE=9A=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 77269355..559a36fc 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -142,7 +142,7 @@ void Util::parseArgs(int argc, #if USE_MMAL_ENCODER || USE_JETSON_ENCODER return std::string(); #else - return "This machine does NOT support --force-i420 option."; + return "Not available because your device does not have this feature."; #endif }, ""); @@ -151,7 +151,7 @@ void Util::parseArgs(int argc, #if USE_MMAL_ENCODER || USE_JETSON_ENCODER return std::string(); #else - return "This machine does NOT support --use-native option."; + return "Not available because your device does not have this feature."; #endif }, ""); @@ -162,7 +162,7 @@ void Util::parseArgs(int argc, return std::string(); #else if (input == "H264") { - return "This machine does NOT support --video-codec=H264 option."; + return "Not available because your device does not have this feature."; } return std::string(); #endif From 50ecfb2fc0f6d0364d6046846047f5717896981e Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Wed, 8 Jan 2020 14:37:12 +0900 Subject: [PATCH 078/105] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E3=82=92=E5=8F=8D=E6=98=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 559a36fc..58e64ebc 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -182,7 +182,7 @@ void Util::parseArgs(int argc, return std::string(); } - return "A resolution value must be one of QVGA, VGA, HD, FHD, 4K, or " + return "Must be one of QVGA, VGA, HD, FHD, 4K, or " "[WIDTH]x[HEIGHT]."; }, ""); @@ -190,7 +190,7 @@ void Util::parseArgs(int argc, app.add_flag("--no-video", cs.no_video, "Do not send video"); app.add_flag("--no-audio", cs.no_audio, "Do not send audio"); app.add_flag("--force-i420", cs.force_i420, - "Use I420 format (only on supported devices)") + "Prefer I420 format for video capture (only on supported devices)") ->check(is_valid_force_i420); app.add_flag("--use-native", cs.use_native, "Perform MJPEG deoode and video resize by hardware acceleration " @@ -198,12 +198,12 @@ void Util::parseArgs(int argc, ->check(is_valid_use_native); #if defined(__APPLE__) app.add_option("--video-device", cs.video_device, - "Use specified video device, by an id or a name" - "(device with id 0 will be used without this option)"); + "Use the video device specified by an index or a name " + "(use the first one if not specified)"); #elif defined(__linux__) app.add_option("--video-device", cs.video_device, - "Use specified video device by name " - "(some device will be used without this option)") + "Use the video input device specified by a name " + "(some device will be used if not specified)") ->check(CLI::ExistingFile); #endif app.add_option("--resolution", cs.resolution, From 1b7766e4b94d0b8e7b735147dce62473e447df07 Mon Sep 17 00:00:00 2001 From: Shunichi Shinohara Date: Wed, 8 Jan 2020 14:37:51 +0900 Subject: [PATCH 079/105] =?UTF-8?q?format.sh=20=E3=82=92=E3=81=8B=E3=81=91?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 58e64ebc..dc4536a6 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -133,7 +133,8 @@ void Util::parseArgs(int argc, int& log_level, ConnectionSettings& cs) { CLI::App app("Momo - WebRTC Native Client"); - app.set_help_all_flag("--help-all", "Print help message for all modes and exit"); + app.set_help_all_flag("--help-all", + "Print help message for all modes and exit"); bool version = false; @@ -162,7 +163,8 @@ void Util::parseArgs(int argc, return std::string(); #else if (input == "H264") { - return "Not available because your device does not have this feature."; + return "Not available because your device does not have this " + "feature."; } return std::string(); #endif @@ -189,8 +191,9 @@ void Util::parseArgs(int argc, app.add_flag("--no-video", cs.no_video, "Do not send video"); app.add_flag("--no-audio", cs.no_audio, "Do not send audio"); - app.add_flag("--force-i420", cs.force_i420, - "Prefer I420 format for video capture (only on supported devices)") + app.add_flag( + "--force-i420", cs.force_i420, + "Prefer I420 format for video capture (only on supported devices)") ->check(is_valid_force_i420); app.add_flag("--use-native", cs.use_native, "Perform MJPEG deoode and video resize by hardware acceleration " @@ -220,8 +223,7 @@ void Util::parseArgs(int argc, ->check(CLI::Range(0, 65535)); app.add_flag("--use-sdl", cs.use_sdl, "Show video using SDL"); app.add_flag("--show-me", cs.show_me, "Show self video"); - app.add_option("--window-width", cs.window_width, - "Window width for videos") + app.add_option("--window-width", cs.window_width, "Window width for videos") ->check(CLI::Range(180, 16384)); app.add_option("--window-height", cs.window_height, "Window height for videos") @@ -232,8 +234,7 @@ void Util::parseArgs(int argc, app.add_flag("--version", version, "Show version information"); auto log_level_map = std::vector >( {{"verbose", 0}, {"info", 1}, {"warning", 2}, {"error", 3}, {"none", 4}}); - app.add_option("--log-level", log_level, - "Log severity level threshold") + app.add_option("--log-level", log_level, "Log severity level threshold") ->transform(CLI::CheckedTransformer(log_level_map, CLI::ignore_case)); // オーディオフラグ @@ -264,18 +265,14 @@ void Util::parseArgs(int argc, ->check(CLI::ExistingDirectory); ayame_app - ->add_option("SIGNALING-URL", cs.ayame_signaling_host, - "Signaling URL") - ->required(); - ayame_app->add_option("ROOM-ID", cs.ayame_room_id, "Room ID") + ->add_option("SIGNALING-URL", cs.ayame_signaling_host, "Signaling URL") ->required(); + ayame_app->add_option("ROOM-ID", cs.ayame_room_id, "Room ID")->required(); ayame_app->add_option("--client-id", cs.ayame_client_id, "Client ID"); ayame_app->add_option("--signaling-key", cs.ayame_signaling_key, "Signaling key"); - sora_app - ->add_option("SIGNALING-URL", cs.sora_signaling_host, - "Signaling URL") + sora_app->add_option("SIGNALING-URL", cs.sora_signaling_host, "Signaling URL") ->required(); sora_app->add_option("CHANNEL-ID", cs.sora_channel_id, "Channel ID") ->required(); @@ -287,11 +284,9 @@ void Util::parseArgs(int argc, ->check(is_valid_h264); sora_app->add_set("--audio-codec", cs.audio_codec, {"OPUS", "PCMU"}, "Audio codec for send"); - sora_app - ->add_option("--video-bitrate", cs.video_bitrate, "Video bitrate") + sora_app->add_option("--video-bitrate", cs.video_bitrate, "Video bitrate") ->check(CLI::Range(1, 30000)); - sora_app - ->add_option("--audio-bitrate", cs.audio_bitrate, "Audio bitrate") + sora_app->add_option("--audio-bitrate", cs.audio_bitrate, "Audio bitrate") ->check(CLI::Range(6, 510)); sora_app->add_flag("--multistream", cs.sora_multistream, "Use multistream"); sora_app->add_set( From 7a01f3c68271246833b635a2b3310e34090aa04d Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Wed, 15 Jan 2020 15:58:32 +0900 Subject: [PATCH 080/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index e1877fc8..2efbb553 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -28,7 +28,7 @@ - `--resolution 640x480` のように指定できるようになりました - この機能が有効になるのは、カメラに依存するため動作保証はありません - @melpon -- [ADD] Sora 利用時のシグナリング接続情報に enviroment / libwebrtc / sora_client を追加する +- [ADD] Sora モード利用時のシグナリング接続情報に enviroment / libwebrtc / sora_client を追加する - Jetson Nano の場合 - `"environment": "[aarch64] Ubuntu 18.04.3 LTS (nvidia-l4t-core 32.2.1-20190812212815)"` - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` @@ -42,6 +42,20 @@ - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - @melpon +- [ADD] Ayame モード利用時のシグナリング接続情報に enviroment / libwebrtc / ayameClient を追加する + - Jetson Nano の場合 + - `"environment": "[aarch64] Ubuntu 18.04.3 LTS (nvidia-l4t-core 32.2.1-20190812212815)"` + - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` + - `"ayameClient": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` + - macOS の場合 + - `"environment": "[x86_64] macOS Version 10.15.2 (Build 19C57)"` + - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` + - `"ayameClient": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` + - Ubuntu 18.04 x86_64 の場合 + - `"environment": "[x86_64] Ubuntu 18.04.3 LTS"` + - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` + - `"ayameClient": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` + - @melpon - [CHANGE] .edit の機能とドキュメントを削除 - @melpon - [FIX] --no-video を指定しているにもかかわらずカメラを一瞬だけ掴むのを修正する From 99b2a90dbadde6d3cf1521179259b3caec5951d7 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Wed, 15 Jan 2020 16:01:59 +0900 Subject: [PATCH 081/105] =?UTF-8?q?=E8=8B=B1=E8=AA=9E=E5=8C=96=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 2efbb553..0195567c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -56,6 +56,8 @@ - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` - `"ayameClient": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - @melpon +- [CHANGE] momo --help の英語化 + - @shino msnoigrs - [CHANGE] .edit の機能とドキュメントを削除 - @melpon - [FIX] --no-video を指定しているにもかかわらずカメラを一瞬だけ掴むのを修正する From a09b8fdcfe5245ffdcd58920369f7e825d8af7c3 Mon Sep 17 00:00:00 2001 From: melpon Date: Thu, 16 Jan 2020 14:47:52 +0900 Subject: [PATCH 082/105] =?UTF-8?q?WebRTC=20=E3=81=AE=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=83=A7=E3=83=B3=E3=82=92=E6=9B=B4=E6=96=B0=20M80.39?= =?UTF-8?q?87@{#2}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 3 +++ VERSION | 2 +- script/get_llvm.sh | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 0195567c..dfb0232a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,9 @@ ## develop +- [UPDATE] libwebrtc を M80.3987@{#2} に上げる + - libwebrtc のハッシュは fba51dc69b97f6f170d9c325a38e05ddd69c8b28 + - @melpon - [UPDATE] Momo 2020.1 にバージョンを上げる - バージョン番号を <リリース年>.<その年のリリース回数> に変更 - @voluntas diff --git a/VERSION b/VERSION index 8486446d..867f0788 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ # 各種ライブラリのバージョン情報 # 項目を変更してビルドすれば各環境へ反映される(ように作る) MOMO_VERSION=2020.1 -WEBRTC_BUILD_VERSION=79.5.4 +WEBRTC_BUILD_VERSION=80.3987.2.0 BOOST_VERSION=1.72.0 JSON_VERSION=3.7.3 CLI11_VERSION=1.8.0 diff --git a/script/get_llvm.sh b/script/get_llvm.sh index e742472c..182a77c8 100755 --- a/script/get_llvm.sh +++ b/script/get_llvm.sh @@ -25,7 +25,7 @@ pushd $OUTPUT_DIR/llvm git clone https://chromium.googlesource.com/chromium/src/tools pushd tools git reset --hard $WEBRTC_SRC_TOOLS_COMMIT - python clang/scripts/update.py --clang-dir=$OUTPUT_DIR/llvm/clang + python clang/scripts/update.py --output-dir=$OUTPUT_DIR/llvm/clang popd popd From 10737aa0c53b5df10a1de545bfc7ca1af45b5dda Mon Sep 17 00:00:00 2001 From: melpon Date: Fri, 17 Jan 2020 15:15:19 +0900 Subject: [PATCH 083/105] =?UTF-8?q?webrtc-build=20=E3=81=AE=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E3=82=92=2080.3987.2.1=20?= =?UTF-8?q?=E3=81=AB=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 867f0788..3bc74731 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ # 各種ライブラリのバージョン情報 # 項目を変更してビルドすれば各環境へ反映される(ように作る) MOMO_VERSION=2020.1 -WEBRTC_BUILD_VERSION=80.3987.2.0 +WEBRTC_BUILD_VERSION=80.3987.2.1 BOOST_VERSION=1.72.0 JSON_VERSION=3.7.3 CLI11_VERSION=1.8.0 From 9067d739150e6b6517974a6cfec8cde066afd92b Mon Sep 17 00:00:00 2001 From: melpon Date: Sat, 18 Jan 2020 11:46:41 +0900 Subject: [PATCH 084/105] =?UTF-8?q?armv6=20=E3=81=A7=20SDL=20=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=88=E3=81=AA=E3=81=8F=E3=81=97=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A8=E3=80=81SDL=20=E3=81=8C=E6=9C=89=E5=8A=B9=E3=81=A7?= =?UTF-8?q?=E3=81=AA=E3=81=84=E6=99=82=E3=81=AB=20SDL=20=E9=96=A2=E9=80=A3?= =?UTF-8?q?=E3=81=AE=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E3=81=A8=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- src/util.cpp | 28 +++++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 2244b04b..1ab0f69f 100644 --- a/Makefile +++ b/Makefile @@ -79,7 +79,7 @@ ifeq ($(PACKAGE_NAME),raspbian-buster_armv6) USE_MMAL_ENCODER ?= 1 USE_JETSON_ENCODER ?= 0 USE_H264 ?= 1 - USE_SDL2 ?= 1 + USE_SDL2 ?= 0 BOOST_ROOT ?= /root/boost JSON_ROOT ?= /root/json CLI11_ROOT ?= /root/CLI11 diff --git a/src/util.cpp b/src/util.cpp index dc4536a6..059df741 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -171,6 +171,17 @@ void Util::parseArgs(int argc, }, ""); + auto is_sdl_available = CLI::Validator( + [](std::string input) -> std::string { +#if USE_SDL + return std::string(); +#else + return "Not available because your device does not have this " + "feature."; +#endif + }, + ""); + auto is_valid_resolution = CLI::Validator( [](std::string input) -> std::string { if (input == "QVGA" || input == "VGA" || input == "HD" || @@ -221,15 +232,22 @@ void Util::parseArgs(int argc, "Preference in video degradation (experimental)"); app.add_option("--port", cs.port, "Port number (default: 8080)") ->check(CLI::Range(0, 65535)); - app.add_flag("--use-sdl", cs.use_sdl, "Show video using SDL"); - app.add_flag("--show-me", cs.show_me, "Show self video"); - app.add_option("--window-width", cs.window_width, "Window width for videos") + app.add_flag("--use-sdl", cs.use_sdl, + "Show video using SDL (if SDL is available)") + ->check(is_sdl_available); + app.add_flag("--show-me", cs.show_me, "Show self video (if SDL is available)") + ->check(is_sdl_available); + app.add_option("--window-width", cs.window_width, + "Window width for videos (if SDL is available)") + ->check(is_sdl_available) ->check(CLI::Range(180, 16384)); app.add_option("--window-height", cs.window_height, - "Window height for videos") + "Window height for videos (if SDL is available)") + ->check(is_sdl_available) ->check(CLI::Range(180, 16384)); app.add_flag("--fullscreen", cs.fullscreen, - "Use fullscreen window for videos"); + "Use fullscreen window for videos (if SDL is available)") + ->check(is_sdl_available); app.add_flag("--daemon", is_daemon, "Run as a daemon process"); app.add_flag("--version", version, "Show version information"); auto log_level_map = std::vector >( From 861d182b839d00b52001de1f37a21c760669e327 Mon Sep 17 00:00:00 2001 From: tnoho Date: Sat, 18 Jan 2020 07:03:40 +0000 Subject: [PATCH 085/105] =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E3=83=81?= =?UTF-8?q?=E3=83=A3=E3=83=B3=E3=83=8D=E3=83=AB=E5=AF=BE=E5=BF=9C=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 1 + html/test.html | 2 + html/webrtc.js | 19 +++ src/connection_settings.h | 2 + src/mac_helper/mac_capturer.mm | 2 +- src/main.cpp | 17 +- src/rtc/data_manager.h | 14 ++ src/rtc/manager.cpp | 9 +- src/rtc/manager.h | 5 +- src/rtc/observer.cpp | 16 +- src/rtc/observer.h | 10 +- .../serial_data_channel.cpp | 33 ++++ src/serial_data_channel/serial_data_channel.h | 27 +++ .../serial_data_manager.cpp | 159 ++++++++++++++++++ src/serial_data_channel/serial_data_manager.h | 47 ++++++ src/util.cpp | 29 ++++ 16 files changed, 377 insertions(+), 15 deletions(-) create mode 100644 src/rtc/data_manager.h create mode 100644 src/serial_data_channel/serial_data_channel.cpp create mode 100644 src/serial_data_channel/serial_data_channel.h create mode 100644 src/serial_data_channel/serial_data_manager.cpp create mode 100644 src/serial_data_channel/serial_data_manager.h diff --git a/Makefile b/Makefile index 2244b04b..b07d1063 100644 --- a/Makefile +++ b/Makefile @@ -569,6 +569,7 @@ SOURCES += $(shell find src/rtc -name '*.cpp') SOURCES += $(shell find src/ayame -name '*.cpp') SOURCES += $(shell find src/sora -name '*.cpp') SOURCES += $(shell find src/ws -name '*.cpp') +SOURCES += $(shell find src/serial_data_channel -maxdepth 1 -name '*.cpp') ifeq ($(USE_ROS),1) CFLAGS += -DHAVE_JPEG=1 -DUSE_ROS=1 -I$(SYSROOT)/opt/ros/$(ROS_VERSION)/include diff --git a/html/test.html b/html/test.html index 411de2ff..8e543342 100644 --- a/html/test.html +++ b/html/test.html @@ -16,6 +16,8 @@

Momo P2P

+ +
diff --git a/html/webrtc.js b/html/webrtc.js index 2297f075..4e6fd80e 100644 --- a/html/webrtc.js +++ b/html/webrtc.js @@ -1,6 +1,8 @@ const remoteVideo = document.getElementById('remote_video'); +const dataTextInput = document.getElementById('data_text'); remoteVideo.controls = true; let peerConnection = null; +let dataChannel = null; let candidates = []; let hasReceivedSdp = false; // iceServer を定義 @@ -117,6 +119,7 @@ function playVideo(element, stream) { function prepareNewConnection() { const peer = new RTCPeerConnection(peerConnectionConfig); + dataChannel = peer.createDataChannel("serial"); if ('ontrack' in peer) { if (isSafari()) { let tracks = []; @@ -167,6 +170,10 @@ function prepareNewConnection() { peer.addTransceiver('video', {direction: 'recvonly'}); peer.addTransceiver('audio', {direction: 'recvonly'}); + dataChannel.onmessage = function (event) { + console.log("Got Data Channel Message:", new TextDecoder().decode(event.data)); + }; + return peer; } @@ -362,3 +369,15 @@ function removeCodec(orgsdp, codec) { function play() { remoteVideo.play(); } + +function sendDataChannel() { + let textData = dataTextInput.value; + if (textData.length == 0) { + return; + } + if (dataChannel == null || dataChannel.readyState != "open") { + return; + } + dataChannel.send(new TextEncoder().encode(textData)); + dataTextInput.value = ""; +} \ No newline at end of file diff --git a/src/connection_settings.h b/src/connection_settings.h index 0d334116..de3e7249 100644 --- a/src/connection_settings.h +++ b/src/connection_settings.h @@ -35,6 +35,8 @@ struct ConnectionSettings { int window_width = 640; int window_height = 480; bool fullscreen = false; + std::string serial_device = ""; + unsigned int serial_rate = 9600; std::string sora_signaling_host = "wss://example.com/signaling"; std::string sora_channel_id; diff --git a/src/mac_helper/mac_capturer.mm b/src/mac_helper/mac_capturer.mm index 50f5b025..dd006238 100644 --- a/src/mac_helper/mac_capturer.mm +++ b/src/mac_helper/mac_capturer.mm @@ -17,7 +17,7 @@ #import "sdk/objc/native/api/video_capturer.h" #import "sdk/objc/native/src/objc_frame_buffer.h" -@interface RTCVideoSourceAdapter : NSObject +@interface RTCVideoSourceAdapter : NSObject @property(nonatomic) MacCapturer* capturer; @end diff --git a/src/main.cpp b/src/main.cpp index b1a4864c..924c2963 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -25,6 +25,10 @@ #endif #endif +#ifndef _MSC_VER +#include "serial_data_channel/serial_data_manager.h" +#endif + #if USE_SDL2 #include "sdl_renderer/sdl_renderer.h" #endif @@ -107,6 +111,13 @@ int main(int argc, char* argv[]) { return 1; } + std::unique_ptr data_manager = nullptr; +#ifndef _MSC_VER + if (!cs.serial_device.empty()) { + data_manager.reset(new SerialDataManager(cs.serial_device, cs.serial_rate)); + } +#endif + #if USE_SDL2 std::unique_ptr sdl_renderer = nullptr; if (cs.use_sdl) { @@ -114,11 +125,11 @@ int main(int argc, char* argv[]) { new SDLRenderer(cs.window_width, cs.window_height, cs.fullscreen)); } - std::unique_ptr rtc_manager( - new RTCManager(cs, std::move(capturer), sdl_renderer.get())); + std::unique_ptr rtc_manager(new RTCManager( + cs, std::move(capturer), sdl_renderer.get(), data_manager.get())); #else std::unique_ptr rtc_manager( - new RTCManager(cs, std::move(capturer), nullptr)); + new RTCManager(cs, std::move(capturer), nullptr, data_manager.get())); #endif { diff --git a/src/rtc/data_manager.h b/src/rtc/data_manager.h new file mode 100644 index 00000000..2d4a7930 --- /dev/null +++ b/src/rtc/data_manager.h @@ -0,0 +1,14 @@ +#ifndef DATA_MANAGER_H_ +#define DATA_MANAGER_H_ + +#include "api/data_channel_interface.h" + +class RTCDataManager { + public: + virtual ~RTCDataManager() = default; + // DataChannel は 必ず kClosed にステートが遷移するので OnRemove は不要 + virtual void OnDataChannel( + rtc::scoped_refptr data_channel) = 0; +}; + +#endif \ No newline at end of file diff --git a/src/rtc/manager.cpp b/src/rtc/manager.cpp index f2c28e52..e100051d 100644 --- a/src/rtc/manager.cpp +++ b/src/rtc/manager.cpp @@ -44,8 +44,11 @@ RTCManager::RTCManager( ConnectionSettings conn_settings, rtc::scoped_refptr video_track_source, - VideoTrackReceiver* receiver) - : _conn_settings(conn_settings), _receiver(receiver) { + VideoTrackReceiver* receiver, + RTCDataManager* data_manager) + : _conn_settings(conn_settings), + _receiver(receiver), + _data_manager(data_manager) { rtc::InitializeSSL(); _networkThread = rtc::Thread::CreateWithSocketServer(); @@ -191,7 +194,7 @@ std::shared_ptr RTCManager::createConnection( rtc_config.enable_dtls_srtp = true; rtc_config.sdp_semantics = webrtc::SdpSemantics::kUnifiedPlan; std::unique_ptr observer( - new PeerConnectionObserver(sender, _receiver)); + new PeerConnectionObserver(sender, _receiver, _data_manager)); rtc::scoped_refptr connection = _factory->CreatePeerConnection(rtc_config, nullptr, nullptr, observer.get()); diff --git a/src/rtc/manager.h b/src/rtc/manager.h index e3c5a2fb..9bb204ab 100644 --- a/src/rtc/manager.h +++ b/src/rtc/manager.h @@ -3,6 +3,7 @@ #include "api/peer_connection_interface.h" #include "connection.h" #include "connection_settings.h" +#include "data_manager.h" #include "pc/video_track_source.h" #include "scalable_track_source.h" #include "video_track_receiver.h" @@ -11,7 +12,8 @@ class RTCManager { public: RTCManager(ConnectionSettings conn_settings, rtc::scoped_refptr video_track_source, - VideoTrackReceiver* receiver); + VideoTrackReceiver* receiver, + RTCDataManager* data_manager); ~RTCManager(); std::shared_ptr createConnection( webrtc::PeerConnectionInterface::RTCConfiguration rtc_config, @@ -26,5 +28,6 @@ class RTCManager { std::unique_ptr _signalingThread; ConnectionSettings _conn_settings; VideoTrackReceiver* _receiver; + RTCDataManager* _data_manager; }; #endif diff --git a/src/rtc/observer.cpp b/src/rtc/observer.cpp index da78cd37..747f088d 100644 --- a/src/rtc/observer.cpp +++ b/src/rtc/observer.cpp @@ -9,11 +9,17 @@ PeerConnectionObserver::~PeerConnectionObserver() { ClearAllRegisteredTracks(); } +void PeerConnectionObserver::OnDataChannel( + rtc::scoped_refptr data_channel) { + if (_data_manager != nullptr) { + _data_manager->OnDataChannel(data_channel); + } +} + void PeerConnectionObserver::OnStandardizedIceConnectionChange( webrtc::PeerConnectionInterface::IceConnectionState new_state) { RTC_LOG(LS_INFO) << __FUNCTION__ << " :" << new_state; - if (_receiver != nullptr && - new_state == webrtc::PeerConnectionInterface::IceConnectionState:: + if (new_state == webrtc::PeerConnectionInterface::IceConnectionState:: kIceConnectionDisconnected) { ClearAllRegisteredTracks(); } @@ -69,8 +75,10 @@ void PeerConnectionObserver::OnRemoveTrack( } void PeerConnectionObserver::ClearAllRegisteredTracks() { - for (webrtc::VideoTrackInterface* video_track : _video_tracks) { - _receiver->RemoveTrack(video_track); + if (_receiver != nullptr) { + for (webrtc::VideoTrackInterface* video_track : _video_tracks) { + _receiver->RemoveTrack(video_track); + } } _video_tracks.clear(); } diff --git a/src/rtc/observer.h b/src/rtc/observer.h index 12dafaec..6fe51fed 100644 --- a/src/rtc/observer.h +++ b/src/rtc/observer.h @@ -2,20 +2,23 @@ #define PEERCONNECTIONOBSERVER_H_ #include "api/peer_connection_interface.h" +#include "data_manager.h" #include "messagesender.h" #include "video_track_receiver.h" class PeerConnectionObserver : public webrtc::PeerConnectionObserver { public: - PeerConnectionObserver(RTCMessageSender* sender, VideoTrackReceiver* receiver) - : _sender(sender), _receiver(receiver){}; + PeerConnectionObserver(RTCMessageSender* sender, + VideoTrackReceiver* receiver, + RTCDataManager* data_manager) + : _sender(sender), _receiver(receiver), _data_manager(data_manager){}; ~PeerConnectionObserver(); protected: void OnSignalingChange( webrtc::PeerConnectionInterface::SignalingState new_state) override {} void OnDataChannel( - rtc::scoped_refptr data_channel) override {} + rtc::scoped_refptr data_channel) override; void OnRenegotiationNeeded() override {} void OnStandardizedIceConnectionChange( webrtc::PeerConnectionInterface::IceConnectionState new_state) override; @@ -32,6 +35,7 @@ class PeerConnectionObserver : public webrtc::PeerConnectionObserver { RTCMessageSender* _sender; VideoTrackReceiver* _receiver; + RTCDataManager* _data_manager; std::vector _video_tracks; }; diff --git a/src/serial_data_channel/serial_data_channel.cpp b/src/serial_data_channel/serial_data_channel.cpp new file mode 100644 index 00000000..6fe9fd07 --- /dev/null +++ b/src/serial_data_channel/serial_data_channel.cpp @@ -0,0 +1,33 @@ +#include "serial_data_channel.h" + +#include "rtc_base/logging.h" + +SerialDataChannel::SerialDataChannel( + SerialDataManager* serial_data_manager, + rtc::scoped_refptr data_channel) + : serial_data_manager_(serial_data_manager), data_channel_(data_channel) { + data_channel_->RegisterObserver(this); +} + +void SerialDataChannel::OnStateChange() { + webrtc::DataChannelInterface::DataState state = data_channel_->state(); + if (state == webrtc::DataChannelInterface::kClosed) { + serial_data_manager_->OnClosed(this); + } +} + +void SerialDataChannel::OnMessage(const webrtc::DataBuffer& buffer) { + const uint8_t* data = buffer.data.data(); + size_t lenght = buffer.data.size(); + + serial_data_manager_->send(data, lenght); +} + +void SerialDataChannel::send(uint8_t* data, size_t length) { + if (data_channel_->state() != webrtc::DataChannelInterface::kOpen) { + return; + } + rtc::CopyOnWriteBuffer buffer(data, length); + webrtc::DataBuffer data_buffer(buffer, true); + data_channel_->Send(data_buffer); +} \ No newline at end of file diff --git a/src/serial_data_channel/serial_data_channel.h b/src/serial_data_channel/serial_data_channel.h new file mode 100644 index 00000000..cc32750d --- /dev/null +++ b/src/serial_data_channel/serial_data_channel.h @@ -0,0 +1,27 @@ +#ifndef SERIAL_DATA_CHANNEL_H_ +#define SERIAL_DATA_CHANNEL_H_ + +#include "api/data_channel_interface.h" + +#include "serial_data_manager.h" + +class SerialDataManager; + +class SerialDataChannel : public webrtc::DataChannelObserver { + public: + SerialDataChannel( + SerialDataManager* serial_data_manager, + rtc::scoped_refptr data_channel); + + void OnStateChange() override; + void OnMessage(const webrtc::DataBuffer& buffer) override; + void OnBufferedAmountChange(uint64_t previous_amount) override {} + + void send(uint8_t* data, size_t length); + + private: + SerialDataManager* serial_data_manager_; + rtc::scoped_refptr data_channel_; +}; + +#endif \ No newline at end of file diff --git a/src/serial_data_channel/serial_data_manager.cpp b/src/serial_data_channel/serial_data_manager.cpp new file mode 100644 index 00000000..4d415d1b --- /dev/null +++ b/src/serial_data_channel/serial_data_manager.cpp @@ -0,0 +1,159 @@ +// こちらを参考にさせていただきました +// https://github.com/fedetft/serial-port/blob/master/4_callback/AsyncSerial.cpp + +#include "serial_data_manager.h" + +#include + +#include "rtc_base/log_sinks.h" + +#define SERIAL_TX_BUFFER_SIZE 16 +#define SERIAL_RX_BUFFER_SIZE 256 + +SerialDataManager::SerialDataManager(std::string device, unsigned int rate) + : serial_port_(io_service_), + read_buffer_size_(SERIAL_RX_BUFFER_SIZE), + writting_(false) { + boost::system::error_code error; + serial_port_.open(device, error); + if (error) { + RTC_LOG(LS_ERROR) << __FUNCTION__ + << " open serial failed device : " << device; + return; + } + + serial_port_.set_option(boost::asio::serial_port_base::baud_rate(rate), + error); + serial_port_.set_option(boost::asio::serial_port_base::character_size(8), + error); + serial_port_.set_option( + boost::asio::serial_port_base::flow_control( + boost::asio::serial_port_base::flow_control::none), + error); + serial_port_.set_option(boost::asio::serial_port_base::parity( + boost::asio::serial_port_base::parity::none), + error); + serial_port_.set_option(boost::asio::serial_port_base::stop_bits( + boost::asio::serial_port_base::stop_bits::one), + error); + + read_buffer_.reset(new uint8_t[read_buffer_size_]); + io_service_.post(boost::bind(&SerialDataManager::doRead, this)); + read_thread_ = + std::thread(boost::bind(&boost::asio::io_service::run, &io_service_)); +} + +SerialDataManager::~SerialDataManager() { + for (SerialDataChannel* serial_data_channel : _serial_data_channels) { + delete serial_data_channel; + } + + io_service_.post(boost::bind(&SerialDataManager::doCloseSerial, this)); + read_thread_.join(); + io_service_.reset(); +} + +void SerialDataManager::OnDataChannel( + rtc::scoped_refptr data_channel) { + _serial_data_channels.push_back(new SerialDataChannel(this, data_channel)); +} + +void SerialDataManager::OnClosed(SerialDataChannel* serial_data_channel) { + _serial_data_channels.erase( + std::remove(_serial_data_channels.begin(), _serial_data_channels.end(), + serial_data_channel), + _serial_data_channels.end()); + delete serial_data_channel; +} + +void SerialDataManager::send(const uint8_t* data, size_t length) { + if (!serial_port_.is_open()) { + return; + } + { + rtc::CritScope lock(&write_buffer_lock_); + write_buffer_.insert(write_buffer_.end(), data, data + length); + } + io_service_.post(boost::bind(&SerialDataManager::startWrite, this)); +} + +void SerialDataManager::doCloseSerial() { + if (!serial_port_.is_open()) { + return; + } + boost::system::error_code error; + serial_port_.cancel(error); + serial_port_.close(error); +} + +void SerialDataManager::doRead() { + if (!serial_port_.is_open()) { + return; + } + serial_port_.async_read_some( + boost::asio::buffer(read_buffer_.get(), read_buffer_size_), + boost::bind(&SerialDataManager::onRead, this, + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred)); +} + +void SerialDataManager::onRead(const boost::system::error_code& error, + size_t bytes_transferred) { + if (error) { + RTC_LOG(LS_ERROR) << __FUNCTION__ + << " async_read_some failed error :" << error; + doCloseSerial(); + return; + } + read_line_buffer_.insert(read_line_buffer_.end(), read_buffer_.get(), + read_buffer_.get() + bytes_transferred); + auto delimiter_iterator = + std::find(read_line_buffer_.begin(), read_line_buffer_.end(), '\n'); + if (delimiter_iterator != read_line_buffer_.end()) { + size_t delimiter_index = + std::distance(read_line_buffer_.begin(), delimiter_iterator); + for (SerialDataChannel* serial_data_channel : _serial_data_channels) { + serial_data_channel->send(read_line_buffer_.data(), delimiter_index); + } + read_line_buffer_.erase(read_line_buffer_.begin(), delimiter_iterator + 1); + } + doRead(); +} + +void SerialDataManager::startWrite() { + rtc::CritScope lock(&write_buffer_lock_); + if (writting_ || write_buffer_.size() == 0) { + return; + } + writting_ = true; + doWrite(); +} + +void SerialDataManager::doWrite() { + if (write_buffer_.size() < SERIAL_TX_BUFFER_SIZE) { + write_length_ = write_buffer_.size(); + } else { + write_length_ = SERIAL_TX_BUFFER_SIZE; + } + async_write(serial_port_, + boost::asio::buffer(write_buffer_.data(), write_length_), + boost::bind(&SerialDataManager::onWrite, this, + boost::asio::placeholders::error)); +} + +void SerialDataManager::onWrite(const boost::system::error_code& error) { + if (error) { + RTC_LOG(LS_ERROR) << __FUNCTION__ + << " async_write failed error :" << error; + doCloseSerial(); + return; + } + rtc::CritScope lock(&write_buffer_lock_); + write_buffer_.erase(write_buffer_.begin(), + write_buffer_.begin() + write_length_); + if (write_buffer_.size() == 0) { + writting_ = false; + return; + } + doWrite(); +} \ No newline at end of file diff --git a/src/serial_data_channel/serial_data_manager.h b/src/serial_data_channel/serial_data_manager.h new file mode 100644 index 00000000..ae4acd50 --- /dev/null +++ b/src/serial_data_channel/serial_data_manager.h @@ -0,0 +1,47 @@ +#ifndef SERIAL_DATA_MANAGER_H_ +#define SERIAL_DATA_MANAGER_H_ +#include + +#include + +#include "rtc/data_manager.h" +#include "rtc_base/critical_section.h" +#include "serial_data_channel.h" + +class SerialDataChannel; + +class SerialDataManager : public RTCDataManager { + public: + SerialDataManager(std::string device, unsigned int rate); + ~SerialDataManager(); + + void OnDataChannel( + rtc::scoped_refptr data_channel) override; + void OnClosed(SerialDataChannel* serial_data_channel); + + void send(const uint8_t* data, size_t length); + + private: + void doCloseSerial(); + void doRead(); + void onRead(const boost::system::error_code& error, size_t bytes_transferred); + void startWrite(); + void doWrite(); + void onWrite(const boost::system::error_code& error); + + std::vector _serial_data_channels; + boost::asio::io_service io_service_; + boost::asio::serial_port serial_port_; + + std::unique_ptr read_buffer_; + size_t read_buffer_size_; + std::vector read_line_buffer_; + + rtc::CriticalSection write_buffer_lock_; + bool writting_; + std::vector write_buffer_; + size_t write_length_; + std::thread read_thread_; +}; + +#endif \ No newline at end of file diff --git a/src/util.cpp b/src/util.cpp index dc4536a6..8d10398e 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -252,6 +252,28 @@ void Util::parseArgs(int argc, cs.disable_residual_echo_detector, "Disable residual echo detector for audio"); + auto is_serial_setting_format = CLI::Validator( + [](std::string input) -> std::string { + try { + auto separater_pos = input.find(','); + std::string bandrate_str = input.substr(separater_pos + 1); + unsigned int _ = std::stoi(bandrate_str); + return std::string(); + } catch (std::invalid_argument& e) { + return "Value " + input + + " is not serial setting format [DEVICE],[BAUDRATE]"; + } catch (std::out_of_range& e) { + return "Value " + input + + " is not serial setting format [DEVICE],[BAUDRATE]"; + } + }, + "serial setting format"); + std::string serial_setting; + app.add_option( + "--serial", serial_setting, + "Serial port settings for datachannel passthrough [DEVICE],[BAUDRATE]") + ->check(is_serial_setting_format); + auto test_app = app.add_subcommand( "test", "Mode for momo development with simple HTTP server"); auto ayame_app = app.add_subcommand( @@ -320,6 +342,13 @@ void Util::parseArgs(int argc, exit(app.exit(e)); } + if (!serial_setting.empty()) { + auto separater_pos = serial_setting.find(','); + std::string bandrate_str = serial_setting.substr(separater_pos + 1); + cs.serial_device = serial_setting.substr(0, separater_pos); + cs.serial_rate = std::stoi(bandrate_str); + } + // メタデータのパース if (!sora_metadata.empty()) { cs.sora_metadata = json::parse(sora_metadata); From 3a3a92a1aa50838cb77c8daf016c2eb3a5c56ac6 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sat, 18 Jan 2020 18:29:07 +0900 Subject: [PATCH 086/105] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++ doc/USE.md | 100 ++++++++++++++++++++++++++++------------------------- 2 files changed, 57 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 12608d9b..e21f213b 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,10 @@ WebRTC Native Client Momo は libwebrtc を利用しブラウザなしで様々 - macOS に積まれている [VideoToolbox](https://developer.apple.com/documentation/videotoolbox) の H.264 ハードウェアエンコーダー機能を利用することが可能です - Jetson Nano に搭載されている H.264 ハードウェアエンコーダー機能を利用することで H.264 を 4K@30 での配信が可能です。 +### データチャネル経由でのシリアルの読み書き + +Momo はデータチャネルを利用しシリアルに直接読み書きが可能です。信頼性より低遅延を優先したい場合の利用を想定しています。 + ### SDL を利用した音声や映像の受信 Momo を GUI 環境で利用した場合、[Simple DirectMedia Layer](https://www.libsdl.org/) を利用して音声や映像の受信を行うことができます。 diff --git a/doc/USE.md b/doc/USE.md index 3ccd7558..45df37e7 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -60,47 +60,50 @@ WebRTC Native Client Momo 2020.1 (4fc855c6) USE_MMAL_ENCODER=0 ``` $ ./momo --help -Momo - WebRTC ネイティブクライアント +Momo - WebRTC Native Client Usage: ./momo [OPTIONS] [SUBCOMMAND] Options: -h,--help Print this help message and exit - --no-video ビデオを表示しない - --no-audio オーディオを出さない - --force-i420 強制的にI420にする(対応デバイスのみ) - --use-native MJPEGのデコードとビデオのリサイズをハードウェアで行う(対応デバイスのみ) - --video-device TEXT デバイス番号、またはデバイス名。省略時はデフォルト(デバイス番号が0)のビデオデバイスを自動検出 - --resolution TEXT 解像度(QVGA, VGA, HD, FHD, 4K, 幅x高さ) + --help-all Print help message for all modes and exit + --no-video Do not send video + --no-audio Do not send audio + --force-i420 Prefer I420 format for video capture (only on supported devices) + --use-native Perform MJPEG deoode and video resize by hardware acceleration (only on supported devices) + --video-device TEXT Use the video device specified by an index or a name (use the first one if not specified) + --resolution TEXT Video resolution (one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT]) --framerate INT:INT in [1 - 60] - フレームレート - --fixed-resolution 固定解像度 + Video framerate + --fixed-resolution Maintain video resolution in degradation --priority TEXT:{BALANCE,FRAMERATE,RESOLUTION} - 優先設定 (Experimental) + Preference in video degradation (experimental) --port INT:INT in [0 - 65535] - ポート番号(デフォルト:8080) - --use-sdl SDLを使い映像を表示する - --show-me 自分のカメラも表示する + Port number (default: 8080) + --use-sdl Show video using SDL + --show-me Show self video --window-width INT:INT in [180 - 16384] - 映像を表示するウィンドウの横幅 + Window width for videos --window-height INT:INT in [180 - 16384] - 映像を表示するウィンドウの縦幅 - --fullscreen 映像を表示するウィンドウをフルスクリーンにする - --daemon デーモン化する - --version バージョン情報の表示 + Window height for videos + --fullscreen Use fullscreen window for videos + --daemon Run as a daemon process + --version Show version information --log-level INT:value in {verbose->0,info->1,warning->2,error->3,none->4} OR {0,1,2,3,4} - ログレベル - --disable-echo-cancellation エコーキャンセルを無効 - --disable-auto-gain-control オートゲインコントロール無効 - --disable-noise-suppression ノイズサプレッション無効 - --disable-highpass-filter ハイパスフィルター無効 - --disable-typing-detection タイピングディテクション無効 + Log severity level threshold + --disable-echo-cancellation Disable echo cancellation for audio + --disable-auto-gain-control Disable auto gain control for audio + --disable-noise-suppression Disable noise suppression for audio + --disable-highpass-filter Disable highpass filter for audio + --disable-typing-detection Disable typing detection for audio --disable-residual-echo-detector - 残響エコーディテクション無効 + Disable residual echo detector for audio + --serial TEXT:serial setting format + Serial port settings for datachannel passthrough [DEVICE],[BAUDRATE] Subcommands: - test 開発向け - ayame WebRTC Signaling Server Ayame - sora WebRTC SFU Sora + test Mode for momo development with simple HTTP server + ayame Mode for working with WebRTC Signaling Server Ayame + sora Mode for working with WebRTC SFU Sora ``` ### test モードヘルプ @@ -108,12 +111,13 @@ Subcommands: ``` $ ./momo test --help -開発向け +Mode for momo development with simple HTTP server Usage: ./momo test [OPTIONS] Options: -h,--help Print this help message and exit - --document-root TEXT:DIR 配信ディレクトリ + --help-all Print help message for all modes and exit + --document-root TEXT:DIR HTTP document root directory ``` ### ayame モードヘルプ @@ -121,47 +125,49 @@ Options: ``` $ ./momo ayame --help -WebRTC Signaling Server Ayame +Mode for working with WebRTC Signaling Server Ayame Usage: ./momo ayame [OPTIONS] SIGNALING-URL ROOM-ID Positionals: - SIGNALING-URL TEXT REQUIRED シグナリングホスト - ROOM-ID TEXT REQUIRED ルームID + SIGNALING-URL TEXT REQUIRED Signaling URL + ROOM-ID TEXT REQUIRED Room ID Options: -h,--help Print this help message and exit - --client-id TEXT クライアントID - --signaling-key TEXT シグナリングキー + --help-all Print help message for all modes and exit + --client-id TEXT Client ID + --signaling-key TEXT Signaling key ``` ### sora モードヘルプ ``` $ ./momo sora --help -WebRTC SFU Sora +Mode for working with WebRTC SFU Sora Usage: ./momo sora [OPTIONS] SIGNALING-URL CHANNEL-ID Positionals: - SIGNALING-URL TEXT REQUIRED シグナリングホスト - CHANNEL-ID TEXT REQUIRED チャンネルID + SIGNALING-URL TEXT REQUIRED Signaling URL + CHANNEL-ID TEXT REQUIRED Channel ID Options: -h,--help Print this help message and exit - --auto 自動接続する + --help-all Print help message for all modes and exit + --auto Connect to Sora automatically --video-codec TEXT:{H264,VP8,VP9} - ビデオコーデック + Video codec for send --audio-codec TEXT:{OPUS,PCMU} - オーディオコーデック + Audio codec for send --video-bitrate INT:INT in [1 - 30000] - ビデオのビットレート + Video bitrate --audio-bitrate INT:INT in [6 - 510] - オーディオのビットレート - --multistream マルチストリームかどうか + Audio bitrate + --multistream Use multistream --role TEXT:{downstream,recvonly,sendonly,sendrecv,upstream} - ロール(デフォルトは upstream) + Role (default: upstream) --spotlight INT:INT in [1 - 10] - スポットライトの配信数 - --metadata TEXT:JSON Value メタデータ + Stream count delivered in spotlight + --metadata TEXT:JSON Value Signaling metadata used in connect message ``` ## うまく動作しない時 From 6fae8ea37117626b7f23dca7e2cc39e95f4f9eea Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sat, 18 Jan 2020 18:51:10 +0900 Subject: [PATCH 087/105] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E3=81=96=E3=81=A3=E3=81=8F=E3=82=8A?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 4 ++++ doc/USE_SERIAL.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 doc/USE_SERIAL.md diff --git a/doc/USE.md b/doc/USE.md index 45df37e7..18a32f04 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -36,6 +36,10 @@ Sora モードでは時雨堂が開発、販売している WebRTC SFU Sora を [USE_SORA.md](USE_SORA.md) をお読みください。 +## データチャネル経由でのシリアル読み書きを使ってみる + +[USE_SERIAL.md](USE_SERIAL.md) + ## SDL を利用した受信機能を使ってみる Momo では SDL (Simple DirectMedia Layer) を利用して音声や映像を出力することが可能になります。 diff --git a/doc/USE_SERIAL.md b/doc/USE_SERIAL.md new file mode 100644 index 00000000..619154dc --- /dev/null +++ b/doc/USE_SERIAL.md @@ -0,0 +1,43 @@ +# データチャネル経由でのシリアル読み書きを使ってみる + +**この機能は現在 test と ayame モードでしか利用できません** + +ここでは [socat](http://www.dest-unreach.org/socat/) を利用して試してみます。 + +[socatで仮想シリアルポートを作る \- Qiita](https://qiita.com/uhey22e/items/dc41d7fa1075970e66a1) + +socat はインストールされている前提です。 + +内部的につながっている仮想シリアルポートを作成します。 + +``` +$ socat -d -d pty,raw,echo=0 pty,raw,echo=0 +2020/01/18 18:47:21 socat[71342] N PTY is /dev/ttys003 +2020/01/18 18:47:21 socat[71342] N PTY is /dev/ttys004 +2020/01/18 18:47:21 socat[71342] N starting data transfer loop with FDs [5,5] and [7,7] +``` + +これで /dev/ttys003 と /dev/ttys004 が内部的につながっていることになります。 + +ttys003 に Momo を繋ぎます。 + +``` +$ ./momo --serial /dev/ttys003,9600 test +``` + +/dev/ttys004 に書かれたデータ表示するようにします。 + +``` +$ cat < /dev/ttys004 +``` + +http://127.0.0.1:8080/html/test.html にアクセスします。 + +send のところでなにか文字列を送って無事 ttys004 経由で表示される事を確認してください。 + +## 参考動画 + +[![Image from Gyazo](https://i.gyazo.com/c1fb6696963e044a44576b1ddeffd0cb.gif)](https://gyazo.com/c1fb6696963e044a44576b1ddeffd0cb) + + +[![Image from Gyazo](https://i.gyazo.com/269ccc2290b43809a0e67e35c03e8601.gif)](https://gyazo.com/269ccc2290b43809a0e67e35c03e8601) From 83cfcdf7c5ae7872de619df8ded8fade9cf365e2 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sat, 18 Jan 2020 18:53:54 +0900 Subject: [PATCH 088/105] =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=82=82=E8=BF=BD?= =?UTF-8?q?=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE_SERIAL.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/doc/USE_SERIAL.md b/doc/USE_SERIAL.md index 619154dc..7bfba8d3 100644 --- a/doc/USE_SERIAL.md +++ b/doc/USE_SERIAL.md @@ -8,7 +8,7 @@ socat はインストールされている前提です。 -内部的につながっている仮想シリアルポートを作成します。 +仮想シリアルポートを2つ作成します。 ``` $ socat -d -d pty,raw,echo=0 pty,raw,echo=0 @@ -17,9 +17,9 @@ $ socat -d -d pty,raw,echo=0 pty,raw,echo=0 2020/01/18 18:47:21 socat[71342] N starting data transfer loop with FDs [5,5] and [7,7] ``` -これで /dev/ttys003 と /dev/ttys004 が内部的につながっていることになります。 +内部的に繋がった /dev/ttys003 と /dev/ttys004 の2つの仮想シリアルポートができました。 -ttys003 に Momo を繋ぎます。 +次に /dev/ttys003 に Momo を繋ぎます。 ``` $ ./momo --serial /dev/ttys003,9600 test @@ -35,6 +35,14 @@ http://127.0.0.1:8080/html/test.html にアクセスします。 send のところでなにか文字列を送って無事 ttys004 経由で表示される事を確認してください。 +次に /dev/ttys004 に書き込んだら + +``` +$ echo "Hello, world!" > /dev/ttys004 +``` + +http://127.0.0.1:8080/html/test.html の JavaScript Console に表示される事を確認してください。 + ## 参考動画 [![Image from Gyazo](https://i.gyazo.com/c1fb6696963e044a44576b1ddeffd0cb.gif)](https://gyazo.com/c1fb6696963e044a44576b1ddeffd0cb) From 47ee7ac1768f7ef0c02d0d191d522e59185937cf Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sat, 18 Jan 2020 18:58:25 +0900 Subject: [PATCH 089/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index dfb0232a..ecbee7f6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -27,6 +27,11 @@ - @melpon - [UPDATE] 音声系オプションの --disable-residual-echo-detector を追加する - @melpon +- [ADD] データチャネルを利用したシリアルポートへの読み書き機能を追加する + + - --serial を指定することでデータチャネル経由でのシリアル読み書きが可能になる + - test と ayame モードでのみ利用可能 + - @tnoho - [ADD] 自由に解像度の値を指定できるようにする - `--resolution 640x480` のように指定できるようになりました - この機能が有効になるのは、カメラに依存するため動作保証はありません From 12d30e18114e7dd40274035d8256a2ab7a0b1e87 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sat, 18 Jan 2020 18:59:33 +0900 Subject: [PATCH 090/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index dfb0232a..4575e479 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -63,8 +63,12 @@ - @shino msnoigrs - [CHANGE] .edit の機能とドキュメントを削除 - @melpon +- [CHANGE] armv6 で SDL を使えなくする + - @melpon - [FIX] --no-video を指定しているにもかかわらずカメラを一瞬だけ掴むのを修正する - @melpon @mganeko +- [FIX] SDL が有効でない時に SDL 関連のオプションを指定するとエラーにする + - @melpon ## 19.12.1 From dc46e2c16dbde867a720036929b28d23d444dbc3 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sat, 18 Jan 2020 19:11:06 +0900 Subject: [PATCH 091/105] =?UTF-8?q?=E8=AA=AC=E6=98=8E=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/USE.md b/doc/USE.md index 18a32f04..0aac8caa 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -36,9 +36,11 @@ Sora モードでは時雨堂が開発、販売している WebRTC SFU Sora を [USE_SORA.md](USE_SORA.md) をお読みください。 -## データチャネル経由でのシリアル読み書きを使ってみる +## データチャネルを利用したシリアル読み書きを使ってみる -[USE_SERIAL.md](USE_SERIAL.md) +Test と Ayame モードではデータチャネルを利用して指定したシリアルポートに対して送受信が可能です。 + +[USE_SERIAL.md](USE_SERIAL.md) をお読みください。 ## SDL を利用した受信機能を使ってみる From b9ceb91e8d453acc27289356dced89db95262e67 Mon Sep 17 00:00:00 2001 From: tnoho Date: Sun, 19 Jan 2020 02:04:49 +0000 Subject: [PATCH 092/105] =?UTF-8?q?#128=20=20=E3=81=A7=E5=8F=97=E3=81=91?= =?UTF-8?q?=E3=81=9F=E6=8C=87=E6=91=98=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 24 ++-- src/rtc/manager.cpp | 10 +- src/rtc/manager.h | 4 +- .../serial_data_channel.cpp | 11 +- src/serial_data_channel/serial_data_channel.h | 5 +- .../serial_data_manager.cpp | 117 ++++++++++-------- src/serial_data_channel/serial_data_manager.h | 27 ++-- 7 files changed, 116 insertions(+), 82 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 924c2963..a056dc54 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -111,13 +111,6 @@ int main(int argc, char* argv[]) { return 1; } - std::unique_ptr data_manager = nullptr; -#ifndef _MSC_VER - if (!cs.serial_device.empty()) { - data_manager.reset(new SerialDataManager(cs.serial_device, cs.serial_rate)); - } -#endif - #if USE_SDL2 std::unique_ptr sdl_renderer = nullptr; if (cs.use_sdl) { @@ -126,15 +119,28 @@ int main(int argc, char* argv[]) { } std::unique_ptr rtc_manager(new RTCManager( - cs, std::move(capturer), sdl_renderer.get(), data_manager.get())); + cs, std::move(capturer), sdl_renderer.get())); #else std::unique_ptr rtc_manager( - new RTCManager(cs, std::move(capturer), nullptr, data_manager.get())); + new RTCManager(cs, std::move(capturer), nullptr)); #endif { boost::asio::io_context ioc{1}; + std::unique_ptr data_manager = nullptr; + if (!cs.serial_device.empty()) { + data_manager.reset( + SerialDataManager::Create(ioc, cs.serial_device, cs.serial_rate)); + if (!data_manager) { + RTC_LOG(LS_ERROR) << "failed to connect serial device : " + << cs.serial_device + << " bundrate : " << cs.serial_rate; + return 1; + } + rtc_manager->SetDataManager(data_manager.get()); + } + boost::asio::signal_set signals(ioc, SIGINT, SIGTERM); signals.async_wait( [&](const boost::system::error_code&, int) { ioc.stop(); }); diff --git a/src/rtc/manager.cpp b/src/rtc/manager.cpp index e100051d..a24c7b9b 100644 --- a/src/rtc/manager.cpp +++ b/src/rtc/manager.cpp @@ -44,11 +44,9 @@ RTCManager::RTCManager( ConnectionSettings conn_settings, rtc::scoped_refptr video_track_source, - VideoTrackReceiver* receiver, - RTCDataManager* data_manager) + VideoTrackReceiver* receiver) : _conn_settings(conn_settings), - _receiver(receiver), - _data_manager(data_manager) { + _receiver(receiver) { rtc::InitializeSSL(); _networkThread = rtc::Thread::CreateWithSocketServer(); @@ -188,6 +186,10 @@ RTCManager::~RTCManager() { rtc::CleanupSSL(); } +void RTCManager::SetDataManager(RTCDataManager* data_manager) { + _data_manager = data_manager; +} + std::shared_ptr RTCManager::createConnection( webrtc::PeerConnectionInterface::RTCConfiguration rtc_config, RTCMessageSender* sender) { diff --git a/src/rtc/manager.h b/src/rtc/manager.h index 9bb204ab..d2f9cd1f 100644 --- a/src/rtc/manager.h +++ b/src/rtc/manager.h @@ -12,9 +12,9 @@ class RTCManager { public: RTCManager(ConnectionSettings conn_settings, rtc::scoped_refptr video_track_source, - VideoTrackReceiver* receiver, - RTCDataManager* data_manager); + VideoTrackReceiver* receiver); ~RTCManager(); + void SetDataManager(RTCDataManager* data_manager); std::shared_ptr createConnection( webrtc::PeerConnectionInterface::RTCConfiguration rtc_config, RTCMessageSender* sender); diff --git a/src/serial_data_channel/serial_data_channel.cpp b/src/serial_data_channel/serial_data_channel.cpp index 6fe9fd07..db5cabf6 100644 --- a/src/serial_data_channel/serial_data_channel.cpp +++ b/src/serial_data_channel/serial_data_channel.cpp @@ -9,6 +9,11 @@ SerialDataChannel::SerialDataChannel( data_channel_->RegisterObserver(this); } + +SerialDataChannel::~SerialDataChannel() { + data_channel_->UnregisterObserver(); +} + void SerialDataChannel::OnStateChange() { webrtc::DataChannelInterface::DataState state = data_channel_->state(); if (state == webrtc::DataChannelInterface::kClosed) { @@ -18,12 +23,12 @@ void SerialDataChannel::OnStateChange() { void SerialDataChannel::OnMessage(const webrtc::DataBuffer& buffer) { const uint8_t* data = buffer.data.data(); - size_t lenght = buffer.data.size(); + size_t length = buffer.data.size(); - serial_data_manager_->send(data, lenght); + serial_data_manager_->Send(data, length); } -void SerialDataChannel::send(uint8_t* data, size_t length) { +void SerialDataChannel::Send(uint8_t* data, size_t length) { if (data_channel_->state() != webrtc::DataChannelInterface::kOpen) { return; } diff --git a/src/serial_data_channel/serial_data_channel.h b/src/serial_data_channel/serial_data_channel.h index cc32750d..73eb50bc 100644 --- a/src/serial_data_channel/serial_data_channel.h +++ b/src/serial_data_channel/serial_data_channel.h @@ -12,13 +12,14 @@ class SerialDataChannel : public webrtc::DataChannelObserver { SerialDataChannel( SerialDataManager* serial_data_manager, rtc::scoped_refptr data_channel); + ~SerialDataChannel(); + + void Send(uint8_t* data, size_t length); void OnStateChange() override; void OnMessage(const webrtc::DataBuffer& buffer) override; void OnBufferedAmountChange(uint64_t previous_amount) override {} - void send(uint8_t* data, size_t length); - private: SerialDataManager* serial_data_manager_; rtc::scoped_refptr data_channel_; diff --git a/src/serial_data_channel/serial_data_manager.cpp b/src/serial_data_channel/serial_data_manager.cpp index 4d415d1b..c39fe6aa 100644 --- a/src/serial_data_channel/serial_data_manager.cpp +++ b/src/serial_data_channel/serial_data_manager.cpp @@ -10,20 +10,53 @@ #define SERIAL_TX_BUFFER_SIZE 16 #define SERIAL_RX_BUFFER_SIZE 256 -SerialDataManager::SerialDataManager(std::string device, unsigned int rate) - : serial_port_(io_service_), - read_buffer_size_(SERIAL_RX_BUFFER_SIZE), - writting_(false) { +SerialDataManager::SerialDataManager(boost::asio::io_context& ioc) + : serial_port_(ioc), read_buffer_size_(SERIAL_RX_BUFFER_SIZE) { + post_ = [&ioc](std::function f) { + if (ioc.stopped()) + return; + ioc.post(f); + }; +} + +SerialDataManager::~SerialDataManager() { + { + rtc::CritScope lock(&channels_lock_); + for (SerialDataChannel* serial_data_channel : serial_data_channels_) { + delete serial_data_channel; + } + } + + doCloseSerial(); +} + +void SerialDataManager::OnDataChannel( + rtc::scoped_refptr data_channel) { + rtc::CritScope lock(&channels_lock_); + serial_data_channels_.push_back(new SerialDataChannel(this, data_channel)); +} + +void SerialDataManager::OnClosed(SerialDataChannel* serial_data_channel) { + rtc::CritScope lock(&channels_lock_); + serial_data_channels_.erase( + std::remove(serial_data_channels_.begin(), serial_data_channels_.end(), + serial_data_channel), + serial_data_channels_.end()); + delete serial_data_channel; +} + +bool SerialDataManager::Connect(std::string device, unsigned int rate) { boost::system::error_code error; serial_port_.open(device, error); if (error) { - RTC_LOG(LS_ERROR) << __FUNCTION__ - << " open serial failed device : " << device; - return; + return false; } serial_port_.set_option(boost::asio::serial_port_base::baud_rate(rate), error); + if (error) { + return false; + } serial_port_.set_option(boost::asio::serial_port_base::character_size(8), error); serial_port_.set_option( @@ -38,43 +71,13 @@ SerialDataManager::SerialDataManager(std::string device, unsigned int rate) error); read_buffer_.reset(new uint8_t[read_buffer_size_]); - io_service_.post(boost::bind(&SerialDataManager::doRead, this)); - read_thread_ = - std::thread(boost::bind(&boost::asio::io_service::run, &io_service_)); -} - -SerialDataManager::~SerialDataManager() { - for (SerialDataChannel* serial_data_channel : _serial_data_channels) { - delete serial_data_channel; - } - - io_service_.post(boost::bind(&SerialDataManager::doCloseSerial, this)); - read_thread_.join(); - io_service_.reset(); + post_(std::bind(&SerialDataManager::doRead, this)); + return true; } -void SerialDataManager::OnDataChannel( - rtc::scoped_refptr data_channel) { - _serial_data_channels.push_back(new SerialDataChannel(this, data_channel)); -} - -void SerialDataManager::OnClosed(SerialDataChannel* serial_data_channel) { - _serial_data_channels.erase( - std::remove(_serial_data_channels.begin(), _serial_data_channels.end(), - serial_data_channel), - _serial_data_channels.end()); - delete serial_data_channel; -} - -void SerialDataManager::send(const uint8_t* data, size_t length) { - if (!serial_port_.is_open()) { - return; - } - { - rtc::CritScope lock(&write_buffer_lock_); - write_buffer_.insert(write_buffer_.end(), data, data + length); - } - io_service_.post(boost::bind(&SerialDataManager::startWrite, this)); +void SerialDataManager::Send(const uint8_t* data, size_t length) { + std::vector v(data, data + length); + post_(std::bind(&SerialDataManager::startWrite, this, std::move(v))); } void SerialDataManager::doCloseSerial() { @@ -107,26 +110,36 @@ void SerialDataManager::onRead(const boost::system::error_code& error, } read_line_buffer_.insert(read_line_buffer_.end(), read_buffer_.get(), read_buffer_.get() + bytes_transferred); + { + rtc::CritScope lock(&channels_lock_); + sendLineFromSerial(); + } + doRead(); +} + +void SerialDataManager::sendLineFromSerial() { auto delimiter_iterator = std::find(read_line_buffer_.begin(), read_line_buffer_.end(), '\n'); if (delimiter_iterator != read_line_buffer_.end()) { size_t delimiter_index = std::distance(read_line_buffer_.begin(), delimiter_iterator); - for (SerialDataChannel* serial_data_channel : _serial_data_channels) { - serial_data_channel->send(read_line_buffer_.data(), delimiter_index); + for (SerialDataChannel* serial_data_channel : serial_data_channels_) { + serial_data_channel->Send(read_line_buffer_.data(), delimiter_index); } read_line_buffer_.erase(read_line_buffer_.begin(), delimiter_iterator + 1); + sendLineFromSerial(); } - doRead(); } -void SerialDataManager::startWrite() { - rtc::CritScope lock(&write_buffer_lock_); - if (writting_ || write_buffer_.size() == 0) { +void SerialDataManager::startWrite(std::vector v) { + if (!serial_port_.is_open()) { return; } - writting_ = true; - doWrite(); + bool empty = write_buffer_.empty(); + write_buffer_.insert(write_buffer_.end(), v.begin(), v.end()); + if (empty && !write_buffer_.empty()) { + doWrite(); + } } void SerialDataManager::doWrite() { @@ -148,11 +161,9 @@ void SerialDataManager::onWrite(const boost::system::error_code& error) { doCloseSerial(); return; } - rtc::CritScope lock(&write_buffer_lock_); write_buffer_.erase(write_buffer_.begin(), write_buffer_.begin() + write_length_); - if (write_buffer_.size() == 0) { - writting_ = false; + if (write_buffer_.empty()) { return; } doWrite(); diff --git a/src/serial_data_channel/serial_data_manager.h b/src/serial_data_channel/serial_data_manager.h index ae4acd50..5e162ae3 100644 --- a/src/serial_data_channel/serial_data_manager.h +++ b/src/serial_data_channel/serial_data_manager.h @@ -12,36 +12,45 @@ class SerialDataChannel; class SerialDataManager : public RTCDataManager { public: - SerialDataManager(std::string device, unsigned int rate); + static SerialDataManager* Create(boost::asio::io_context& ioc, + std::string device, + unsigned int rate) { + std::unique_ptr data_manager(new SerialDataManager(ioc)); + if (!data_manager->Connect(device, rate)) { + return nullptr; + } + return data_manager.release(); + } ~SerialDataManager(); + void Send(const uint8_t* data, size_t length); + void OnDataChannel( rtc::scoped_refptr data_channel) override; void OnClosed(SerialDataChannel* serial_data_channel); - void send(const uint8_t* data, size_t length); - private: + SerialDataManager(boost::asio::io_context& ioc); + bool Connect(std::string device, unsigned int rate); void doCloseSerial(); void doRead(); void onRead(const boost::system::error_code& error, size_t bytes_transferred); - void startWrite(); + void sendLineFromSerial(); + void startWrite(std::vector v); void doWrite(); void onWrite(const boost::system::error_code& error); - std::vector _serial_data_channels; - boost::asio::io_service io_service_; boost::asio::serial_port serial_port_; + std::function)> post_; + rtc::CriticalSection channels_lock_; + std::vector serial_data_channels_; std::unique_ptr read_buffer_; size_t read_buffer_size_; std::vector read_line_buffer_; - rtc::CriticalSection write_buffer_lock_; - bool writting_; std::vector write_buffer_; size_t write_length_; - std::thread read_thread_; }; #endif \ No newline at end of file From 5b2e6884836ca611943cf9c9bb5893a71f8eece1 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sun, 19 Jan 2020 13:24:48 +0900 Subject: [PATCH 093/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2734b22a..36394ce6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -39,30 +39,19 @@ - [ADD] Sora モード利用時のシグナリング接続情報に enviroment / libwebrtc / sora_client を追加する - Jetson Nano の場合 - `"environment": "[aarch64] Ubuntu 18.04.3 LTS (nvidia-l4t-core 32.2.1-20190812212815)"` - - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` + - `"libwebrtc": "Shiguredo-Build M80.3987@{#2} (80.3987.2.1 15b26e4)"` - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - macOS の場合 - `"environment": "[x86_64] macOS Version 10.15.2 (Build 19C57)"` - - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` + - `"libwebrtc": "Shiguredo-Build M80.3987@{#2} (80.3987.2.1 15b26e4)"` - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - Ubuntu 18.04 x86_64 の場合 - `"environment": "[x86_64] Ubuntu 18.04.3 LTS"` - - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` + - `"libwebrtc": "Shiguredo-Build M80.3987@{#2} (80.3987.2.1 15b26e4)"` - `"sora_client": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - @melpon - [ADD] Ayame モード利用時のシグナリング接続情報に enviroment / libwebrtc / ayameClient を追加する - - Jetson Nano の場合 - - `"environment": "[aarch64] Ubuntu 18.04.3 LTS (nvidia-l4t-core 32.2.1-20190812212815)"` - - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` - - `"ayameClient": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - - macOS の場合 - - `"environment": "[x86_64] macOS Version 10.15.2 (Build 19C57)"` - - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` - - `"ayameClient": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` - - Ubuntu 18.04 x86_64 の場合 - - `"environment": "[x86_64] Ubuntu 18.04.3 LTS"` - - `"libwebrtc": "Shiguredo-Build M79@{#5} (79.5.4 b484ec00)"` - - `"ayameClient": "WebRTC Native Client Momo 2020.1 (f6b69e77)"` + - Sora 時の sora_client が ayameClient に変わります - @melpon - [CHANGE] momo --help の英語化 - @shino msnoigrs From 3da2cae77d331c05df6a26d02ea7908c68f6e96b Mon Sep 17 00:00:00 2001 From: melpon Date: Sun, 19 Jan 2020 13:24:50 +0900 Subject: [PATCH 094/105] =?UTF-8?q?WebRTC=20=E3=81=AE=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=82=92=E3=81=97=E3=81=AA=E3=81=84=E3=81=AE=E3=81=A7?= =?UTF-8?q?=20Python3=20=E3=81=AE=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/macos/Makefile | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/build/macos/Makefile b/build/macos/Makefile index eee0a6bf..7d9c8d6a 100644 --- a/build/macos/Makefile +++ b/build/macos/Makefile @@ -19,7 +19,7 @@ ifeq ($(JOBS),) endif .PHONY: all -all: check $(WEBRTC) $(BOOST) $(SDL2) $(LLVM) $(CLI11) $(JSON) +all: $(WEBRTC) $(BOOST) $(SDL2) $(LLVM) $(CLI11) $(JSON) .PHONY: clean clean: @@ -30,16 +30,6 @@ clean: rm -rf sdl2 rm -rf llvm -.PHONY: check -check: - @if [ "`python --version 2>&1 | cut -d' ' -f2 | cut -b1-3`" != "2.7" ]; then \ - echo ""; \ - echo "Python 3 では WebRTC をビルドできません。Python 2.7 を利用して下さい。"; \ - echo "macOS でのビルド方法については doc/BUILD.md を確認して下さい。"; \ - echo ""; \ - exit 1; \ - fi - $(CLI11): ../../VERSION rm -rf CLI11 git clone --branch v$(CLI11_VERSION) --depth 1 https://github.com/CLIUtils/CLI11.git From f594f53abf704df2be1fee0a08c6affafafa4aed Mon Sep 17 00:00:00 2001 From: melpon Date: Sun, 19 Jan 2020 13:31:20 +0900 Subject: [PATCH 095/105] =?UTF-8?q?BUILD=5FMACOS.md=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/BUILD_MACOS.md | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/doc/BUILD_MACOS.md b/doc/BUILD_MACOS.md index e076a487..e4bf7b96 100644 --- a/doc/BUILD_MACOS.md +++ b/doc/BUILD_MACOS.md @@ -1,6 +1,6 @@ # macOS 版 Momo をビルドする -まずは momo のリポジトリをダウンロードします。 +まずは Momo のリポジトリをダウンロードします。 ```shell $ git clone git@github.com:shiguredo/momo.git @@ -10,22 +10,22 @@ $ git clone git@github.com:shiguredo/momo.git ### 事前確認 -libwebrtc をビルドするためには、XCode をインストールし、最低1回は起動してライセンスに同意しておく必要があります。 +Momo をビルドするためには、Xcode をインストールし、最低1回は起動してライセンスに同意しておく必要があります。 現時点では、開発ツールのスタンドアローンインストール(`/Library/Developer/CommandLineTools` にインストールされるもの)はサポートされていません。 詳細は、次のリンク先をご覧ください。 https://bugs.chromium.org/p/chromium/issues/detail?id=729990#c1 開発マシンがどちらを使っているかは xcode-select --print-path で確かめることができます。 -XCode のものが利用されている場合は、次のような出力になります。 +Xcode のものが利用されている場合は、次のような出力になります。 ```shell $ xcode-select --print-path /Applications/Xcode.app/Contents/Developer ``` -ここでは AppStore から XCode をインストールしたケースを想定しています。 -もし XCode の beta 版をインストールしている場合は、`/Applications/Xcode.app` の部分を適宜読み替えてください。 +ここでは AppStore から Xcode をインストールしたケースを想定しています。 +もし Xcode の beta 版をインストールしている場合は、`/Applications/Xcode.app` の部分を適宜読み替えてください。 スタンドアローンインストールされたものが利用されている場合は、次のような出力になります。 @@ -40,16 +40,6 @@ $ xcode-select --print-path $ sudo xcode-select -s /Applications/Xcode.app ``` -また、libwebrtc のビルド中にいくつかの Python スクリプトが呼び出されますが、そこでは Python 2 系が入っていることが期待されています。 -macOS に同梱されている Python 以外の python を入れている場合は、バージョンを確認して、必要に応じてバージョンを切り替えておいてください。 -例えば `pyenv` を利用している場合は、ビルド前に system を利用するように指定し、Python 2 が利用されること確認してください。 - -```shell -$ pyenv local system -$ python --version -Python 2.7.16 -``` - ### ビルド方法 build ディレクトリ以下で make macos と打つことで Momo の macOS 向けバイナリが生成されます。 From 542b10fe076f4abc0d15d2e3359d50b3a860c709 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sun, 19 Jan 2020 13:55:34 +0900 Subject: [PATCH 096/105] =?UTF-8?q?Chrome=20=E3=81=A7=E3=81=AE=E7=A2=BA?= =?UTF-8?q?=E8=AA=8D=E3=82=92=E6=8A=BC=E3=81=97=E4=BB=98=E3=81=91=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE_TEST.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/USE_TEST.md b/doc/USE_TEST.md index 7a6d0b3e..c2936141 100644 --- a/doc/USE_TEST.md +++ b/doc/USE_TEST.md @@ -1,5 +1,6 @@ # テストモードで動かしてみる + Momo 自体がシグナリングサーバの機能を持つ test モードを利用して動かしてみてください。 ```shell @@ -7,7 +8,7 @@ $ ./momo --no-audio --port 8080 test ``` momo の IP アドレスが 192.0.2.100 の場合は、 -http://192.0.2.100:8080/html/test.html にアクセスして接続してみてください。 +http://192.0.2.100:8080/html/test.html に Chrome でアクセスして接続してみてください。 うまく接続できたら、次は Ayame を利用して動かしてみてください。 From 7af13629dae2c215d61c1a94bf413f7c0110017c Mon Sep 17 00:00:00 2001 From: tnoho Date: Sun, 19 Jan 2020 05:17:35 +0000 Subject: [PATCH 097/105] =?UTF-8?q?#128=20=E3=81=A7=E5=86=8D=E5=BA=A6?= =?UTF-8?q?=E6=8C=87=E6=91=98=E3=82=92=E5=8F=97=E3=81=91=E3=81=9F=E9=83=A8?= =?UTF-8?q?=E5=88=86=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 6 +----- .../serial_data_manager.cpp | 20 +++++++++++++++++++ src/serial_data_channel/serial_data_manager.h | 4 ++-- src/util.cpp | 8 ++++---- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index a056dc54..52253a53 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -130,12 +130,8 @@ int main(int argc, char* argv[]) { std::unique_ptr data_manager = nullptr; if (!cs.serial_device.empty()) { - data_manager.reset( - SerialDataManager::Create(ioc, cs.serial_device, cs.serial_rate)); + data_manager = SerialDataManager::Create(ioc, cs.serial_device, cs.serial_rate); if (!data_manager) { - RTC_LOG(LS_ERROR) << "failed to connect serial device : " - << cs.serial_device - << " bundrate : " << cs.serial_rate; return 1; } rtc_manager->SetDataManager(data_manager.get()); diff --git a/src/serial_data_channel/serial_data_manager.cpp b/src/serial_data_channel/serial_data_manager.cpp index c39fe6aa..91363eea 100644 --- a/src/serial_data_channel/serial_data_manager.cpp +++ b/src/serial_data_channel/serial_data_manager.cpp @@ -3,6 +3,7 @@ #include "serial_data_manager.h" +#include #include #include "rtc_base/log_sinks.h" @@ -49,26 +50,45 @@ bool SerialDataManager::Connect(std::string device, unsigned int rate) { boost::system::error_code error; serial_port_.open(device, error); if (error) { + std::cerr << "failed to connect serial port device : " + << device << std::endl; return false; } serial_port_.set_option(boost::asio::serial_port_base::baud_rate(rate), error); if (error) { + std::cerr << "failed to set serial port baudrate : " << rate << std::endl; return false; } serial_port_.set_option(boost::asio::serial_port_base::character_size(8), error); + if (error) { + std::cerr << "failed to set serial port character size : 8" << std::endl; + return false; + } serial_port_.set_option( boost::asio::serial_port_base::flow_control( boost::asio::serial_port_base::flow_control::none), error); + if (error) { + std::cerr << "failed to set serial port flow control : none" << std::endl; + return false; + } serial_port_.set_option(boost::asio::serial_port_base::parity( boost::asio::serial_port_base::parity::none), error); + if (error) { + std::cerr << "failed to set serial port parity : none" << std::endl; + return false; + } serial_port_.set_option(boost::asio::serial_port_base::stop_bits( boost::asio::serial_port_base::stop_bits::one), error); + if (error) { + std::cerr << "failed to set serial port stop bit : one" << std::endl; + return false; + } read_buffer_.reset(new uint8_t[read_buffer_size_]); post_(std::bind(&SerialDataManager::doRead, this)); diff --git a/src/serial_data_channel/serial_data_manager.h b/src/serial_data_channel/serial_data_manager.h index 5e162ae3..eea3b5d8 100644 --- a/src/serial_data_channel/serial_data_manager.h +++ b/src/serial_data_channel/serial_data_manager.h @@ -12,14 +12,14 @@ class SerialDataChannel; class SerialDataManager : public RTCDataManager { public: - static SerialDataManager* Create(boost::asio::io_context& ioc, + static std::unique_ptr Create(boost::asio::io_context& ioc, std::string device, unsigned int rate) { std::unique_ptr data_manager(new SerialDataManager(ioc)); if (!data_manager->Connect(device, rate)) { return nullptr; } - return data_manager.release(); + return data_manager; } ~SerialDataManager(); diff --git a/src/util.cpp b/src/util.cpp index a487298b..176c7914 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -274,8 +274,8 @@ void Util::parseArgs(int argc, [](std::string input) -> std::string { try { auto separater_pos = input.find(','); - std::string bandrate_str = input.substr(separater_pos + 1); - unsigned int _ = std::stoi(bandrate_str); + std::string baudrate_str = input.substr(separater_pos + 1); + unsigned int _ = std::stoi(baudrate_str); return std::string(); } catch (std::invalid_argument& e) { return "Value " + input + @@ -362,9 +362,9 @@ void Util::parseArgs(int argc, if (!serial_setting.empty()) { auto separater_pos = serial_setting.find(','); - std::string bandrate_str = serial_setting.substr(separater_pos + 1); + std::string baudrate_str = serial_setting.substr(separater_pos + 1); cs.serial_device = serial_setting.substr(0, separater_pos); - cs.serial_rate = std::stoi(bandrate_str); + cs.serial_rate = std::stoi(baudrate_str); } // メタデータのパース From fc6747c8ed0e4f98f3de51ab06db7f5689e572ce Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sun, 19 Jan 2020 15:58:32 +0900 Subject: [PATCH 098/105] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3?= =?UTF-8?q?=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 36394ce6..90b3db59 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -28,7 +28,6 @@ - [UPDATE] 音声系オプションの --disable-residual-echo-detector を追加する - @melpon - [ADD] データチャネルを利用したシリアルポートへの読み書き機能を追加する - - --serial を指定することでデータチャネル経由でのシリアル読み書きが可能になる - test と ayame モードでのみ利用可能 - @tnoho From a3fbd636e705467e70c11c4ea5f63a7c9f2b183e Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sun, 19 Jan 2020 16:02:33 +0900 Subject: [PATCH 099/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 90b3db59..db6f701c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -53,7 +53,7 @@ - Sora 時の sora_client が ayameClient に変わります - @melpon - [CHANGE] momo --help の英語化 - - @shino msnoigrs + - @shino @msnoigrs - [CHANGE] .edit の機能とドキュメントを削除 - @melpon - [CHANGE] armv6 で SDL を使えなくする @@ -62,6 +62,14 @@ - @melpon @mganeko - [FIX] SDL が有効でない時に SDL 関連のオプションを指定するとエラーにする - @melpon +- [FIX] macOS のビルドで Python 2.7 必須を外す + - @melpon +- [FIX] Ayame モードで WebSocket が閉じられた際に再接続処理に進まない箇所を修正 + - @Hexa +- [FIX] Ayame モードで シグナリングで bye を受信した際処理として、各 close 処理を追加する + - @Hexa +- [FIX] Ayame モードで 再接続処理の 1 回目を、5 秒後からすぐに実行されるように変更する + - @Hexa ## 19.12.1 From 53caabb4ba0adbe684fdd971340830fcb38326f9 Mon Sep 17 00:00:00 2001 From: tnoho Date: Sun, 19 Jan 2020 07:52:16 +0000 Subject: [PATCH 100/105] =?UTF-8?q?=E3=82=B7=E3=83=AA=E3=82=A2=E3=83=AB?= =?UTF-8?q?=E3=83=9D=E3=83=BC=E3=83=88=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=81=8C?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=81=A8=E3=82=AF=E3=83=A9=E3=83=83=E3=82=B7?= =?UTF-8?q?=E3=83=A5=E3=81=99=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rtc/manager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rtc/manager.cpp b/src/rtc/manager.cpp index a24c7b9b..3242ead0 100644 --- a/src/rtc/manager.cpp +++ b/src/rtc/manager.cpp @@ -46,7 +46,8 @@ RTCManager::RTCManager( rtc::scoped_refptr video_track_source, VideoTrackReceiver* receiver) : _conn_settings(conn_settings), - _receiver(receiver) { + _receiver(receiver), + _data_manager(nullptr) { rtc::InitializeSSL(); _networkThread = rtc::Thread::CreateWithSocketServer(); From 7ee029dd9802b881e9eed7916c73eea0149640f9 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Sun, 19 Jan 2020 17:59:29 +0900 Subject: [PATCH 101/105] =?UTF-8?q?2020=20=E5=B9=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e21f213b..2b858675 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ YYYY.<その年にリリースした回数> Apache License 2.0 ``` -Copyright 2018-2019, Shiguredo Inc, tnoho and melpon and kdxu +Copyright 2018-2020, Shiguredo Inc, tnoho and melpon and kdxu Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From 83a835a53abc5819b46444c13b39f67db404e5a1 Mon Sep 17 00:00:00 2001 From: melpon Date: Sun, 19 Jan 2020 20:03:32 +0900 Subject: [PATCH 102/105] =?UTF-8?q?USE=5FSDL=20=E2=86=92=20USE=5FSDL2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util.cpp b/src/util.cpp index 176c7914..9f170175 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -173,7 +173,7 @@ void Util::parseArgs(int argc, auto is_sdl_available = CLI::Validator( [](std::string input) -> std::string { -#if USE_SDL +#if USE_SDL2 return std::string(); #else return "Not available because your device does not have this " From 995d4b473c19e7163cede19770b6a3132036c08b Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 20 Jan 2020 11:42:39 +0900 Subject: [PATCH 103/105] =?UTF-8?q?jaist=20=E3=81=8C=E8=90=BD=E3=81=A1?= =?UTF-8?q?=E3=81=A6=E3=82=8B=E6=99=82=E3=81=AE=E3=83=95=E3=82=A9=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=83=90=E3=83=83=E3=82=AF=E5=85=88=E3=81=A8=E3=81=97?= =?UTF-8?q?=E3=81=A6=20tsukuba.wide=20=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/raspbian-buster_armv6/rpi-raspbian.conf | 10 ++++++++-- build/raspbian-buster_armv7/rpi-raspbian.conf | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/build/raspbian-buster_armv6/rpi-raspbian.conf b/build/raspbian-buster_armv6/rpi-raspbian.conf index 5dc120de..51cf74bf 100644 --- a/build/raspbian-buster_armv6/rpi-raspbian.conf +++ b/build/raspbian-buster_armv6/rpi-raspbian.conf @@ -1,7 +1,7 @@ [General] unpack=true -bootstrap=Ports Rasp -aptsources=Ports Rasp +bootstrap=Ports Ports2 Rasp +aptsources=Ports Ports2 Rasp [Ports] packages=libc6-dev libstdc++-6-dev libasound2-dev libpulse-dev libudev-dev libexpat1-dev libnss3-dev python-dev libgtk-3-dev libsdl2-dev @@ -9,6 +9,12 @@ source=http://ftp.jaist.ac.jp/raspbian keyring=raspbian-archive-keyring suite=buster +[Ports2] +packages=libc6-dev libstdc++-6-dev libasound2-dev libpulse-dev libudev-dev libexpat1-dev libnss3-dev python-dev libgtk-3-dev libsdl2-dev +source=http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian +keyring=raspbian-archive-keyring +suite=buster + [Rasp] packages=libraspberrypi-bin libraspberrypi-dev source=http://archive.raspberrypi.org/debian diff --git a/build/raspbian-buster_armv7/rpi-raspbian.conf b/build/raspbian-buster_armv7/rpi-raspbian.conf index 5dc120de..51cf74bf 100644 --- a/build/raspbian-buster_armv7/rpi-raspbian.conf +++ b/build/raspbian-buster_armv7/rpi-raspbian.conf @@ -1,7 +1,7 @@ [General] unpack=true -bootstrap=Ports Rasp -aptsources=Ports Rasp +bootstrap=Ports Ports2 Rasp +aptsources=Ports Ports2 Rasp [Ports] packages=libc6-dev libstdc++-6-dev libasound2-dev libpulse-dev libudev-dev libexpat1-dev libnss3-dev python-dev libgtk-3-dev libsdl2-dev @@ -9,6 +9,12 @@ source=http://ftp.jaist.ac.jp/raspbian keyring=raspbian-archive-keyring suite=buster +[Ports2] +packages=libc6-dev libstdc++-6-dev libasound2-dev libpulse-dev libudev-dev libexpat1-dev libnss3-dev python-dev libgtk-3-dev libsdl2-dev +source=http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian +keyring=raspbian-archive-keyring +suite=buster + [Rasp] packages=libraspberrypi-bin libraspberrypi-dev source=http://archive.raspberrypi.org/debian From a4ccee8b17bee2781f3032e927d7f077337055df Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 20 Jan 2020 12:14:56 +0900 Subject: [PATCH 104/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index db6f701c..42cd9fed 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -52,6 +52,8 @@ - [ADD] Ayame モード利用時のシグナリング接続情報に enviroment / libwebrtc / ayameClient を追加する - Sora 時の sora_client が ayameClient に変わります - @melpon +- [ADD] Raspbian ミラーを追加する + - @melpon - [CHANGE] momo --help の英語化 - @shino @msnoigrs - [CHANGE] .edit の機能とドキュメントを削除 From 15e952b50e378c2022c81bcd70db4454c457ca46 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 20 Jan 2020 12:16:04 +0900 Subject: [PATCH 105/105] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 42cd9fed..772d8486 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,9 @@ ## develop +## 2020.1 + + - [UPDATE] libwebrtc を M80.3987@{#2} に上げる - libwebrtc のハッシュは fba51dc69b97f6f170d9c325a38e05ddd69c8b28 - @melpon