Skip to content

Commit

Permalink
Merge branch 'develop' into feature/update-sdl-2.30.6
Browse files Browse the repository at this point in the history
  • Loading branch information
voluntas committed Sep 16, 2024
2 parents e00cd9e + 11c2dec commit 485f604
Show file tree
Hide file tree
Showing 23 changed files with 239 additions and 127 deletions.
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: build-workflow

on:
workflow_dispatch:
push:
paths-ignore:
- "doc/**"
Expand Down
57 changes: 44 additions & 13 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@

## develop

- [CHANGE] `--video-device` の指定を `/dev/video0` のようなファイル名ではなく `MX Brio` のようなデバイス名を指定するようにする
- @melpon
- [CHANGE] ビルド周りを完全にリニューアルする
- @melpon
- [CHANGE] raspberry-pi-os_armv6 と raspberry-pi-os_armv7 を削除
Expand All @@ -19,30 +21,46 @@
- @melpon
- [CHANGE] ubuntu-20.04_armv8_jetson_xavier のパッケージを削除
- @melpon
- [UPDATE] CLI11 を 2.4.2 に上げる
- @voluntas @torikizi
- [UPDATE] SDL を 2.30.3 に上げる
- @voluntas @torikizi
- [UPDATE] Boost を 1.85.0 に上げる
- @torikizi
- [CHANGE] JetPack 5.1.2 に対応
- JetPack 5.1.1, 5.1.2 で動作を確認
- JetPack 5.1 では、互換性の問題で JetsonJpegDecoder がエラーになることを確認
- @enm10k
- [UPDATE] WebRTC を m125.6422.2.5 に上げる
- [CHANGE] libwebrtc に定義されている継承元クラスが変更されたため `CreateVideoEncoder``CreateVideoDecoder``Create` に変更
- @melpon
- [CHANGE] hwenc_nvcodec 部分を Sora C++ SDK から移植
- @melpon
- [UPDATE] CLI11 を 2.4.2 に上げる
- @voluntas @torikizi
- [UPDATE] SDL を 2.30.5 に上げる
- @voluntas @torikizi
- [UPDATE] Boost を 1.86.0 に上げる
- @torikizi @voluntas
- [UPDATE] WebRTC を m128.6613.2.0 に上げる
- m128.6613.2.0 での変更点は以下の通り
- libwebrtc から helpers が削除され `crypto_random` に分割されたため、`rtc::CreateRandomString` を利用するために `crypto_random.h` を追加
- 参考 : <https://source.chromium.org/chromium/_/webrtc/src/+/4158678b468135a017aa582f038731b5f7851c82>
- libwebrtc から削除されたために webrtc-build で復活させた `proxy_info_revive.h``crypt_string_revive.h` を利用するように修正
- `init_allocator` の引数変更に追従
- webrtc-build の H.265 パッチの変更に追従し、`packetization_mode` とヘッダーを削除
- m128 以降は新規追加された ScreenCaptureKit の framework が必要となったため、`CMakeLists.txt` に追加
- 参考 : <https://source.chromium.org/chromium/_/webrtc/src/+/d4a6c3f76fc3b187115d1cd65f4d1fffd7bebb7c>
- @torikizi @melpon
- [UPDATE] WebRTC を m119 に上げたことで必要になった関連するライブラリもバージョンを上げる
- CMAKE_VERSION を 3.27.7 に上げる
- CMAKE_VERSION を 3.30.3 に上げる
- clang や CXX_STANDARD のバージョンアップに合わせ最新のバージョンに上げる
- すべてのプラットフォームで set_target_properties の CXX_STANDARD を 20 にアップデート
- Ubuntu で使用する clang のバージョンを 15 にアップデート
- @torikizi
- [UPDATE] パッケージディレクトリ変更に追従する
- WebRTC を m118 に上げた際にパッケージディレクトリが変更されたのでそれに追従する
- @torikizi
- [UPDATE] Github Actions の actions/download-artifact をアップデート
- Node.js 16 の Deprecated に伴うアップデート
- actions/download-artifact@v3 から actions/download-artifact@v4 にアップデート
- [UPDATE] Raspberry Pi OS のビルドを bullseye から bookworm にアップデート
- multistrap の suite を bullseye から bookworm に修正
- libstdc++-11-dev をインストールするように修正
- @torikizi
- [UPDATE] CMakeList.txt の修正
- STL が要求する CUDA のバージョンが 12.4 以上であるため、他のプラットフォームに影響が出ないように無視するように修正
- 参考: <https://stackoverflow.com/questions/78515942/cuda-compatibility-with-visual-studio-2022-version-17-10>
- @torikizi
- [ADD] ubuntu-22.04_armv8_jetson のパッケージを追加
- @melpon
Expand All @@ -58,12 +76,25 @@
- @melpon
- [ADD] Ubuntu 24.04 対応
- @melpon
- [ADD] Intel VPL の AV1 ハードウェアエンコーダに対応する
- @tnoho
- [ADD] Intel VPL の VP9 ハードウェアエンコーダに対応する
- @tnoho
- [FIX] macOS で USB 接続されたカメラが取得できなくなっていたのを修正
- macOS で USB デバイスが取得できなくなっていたため、取得するように修正
- macOS 14 以降では従来の API では取得できなくなっていたため API を新たに用意し、macOS 14 以降で新しい API を利用する
- @torikizi
- [ADD] Intel VPL の AV1 ハードウェアエンコーダに対応する
- @tnoho

### misc

- [CHANGE] SDL2 のダウンロード先を GitHub に変更する
- @voluntas
- [UPDATE] Github Actions の actions/download-artifact をアップデート
- Node.js 16 の Deprecated に伴うアップデート
- actions/download-artifact@v3 から actions/download-artifact@v4 にアップデート
- @torikizi
- [UPDATE] Github Actions で使用する Windows を 2022 にアップデート
- @melpon

## 2023.1.0

Expand Down
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,9 @@ if ("${TARGET_OS}" STREQUAL "windows")
# VS のバージョンと _MSC_VER のリストは以下を参照:
# https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/
-allow-unsupported-compiler
# 更に STL が CUDA 12.4 以上のバージョンを要求するため、STL のバージョンも無視する
# ref: https://stackoverflow.com/questions/78515942/cuda-compatibility-with-visual-studio-2022-version-17-10
-Xcompiler /D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
-Xcompiler /utf-8
-Xcompiler /I${CMAKE_CURRENT_SOURCE_DIR}/third_party/NvCodec/include
-Xcompiler /I${CMAKE_CURRENT_SOURCE_DIR}/third_party/NvCodec/NvCodec
Expand Down Expand Up @@ -408,6 +411,7 @@ elseif (TARGET_OS STREQUAL "macos")
"-framework MetalKit"
"-framework OpenGL"
"-framework IOSurface"
"-framework ScreenCaptureKit"
)

elseif (TARGET_OS STREQUAL "linux")
Expand Down
81 changes: 43 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,32 @@ WebRTC Native Client Momo は libwebrtc を利用しブラウザなしで様々

<https://momo.shiguredo.jp/>

### ハードウェアエンコーダーへの対応
### ハードウェアアクセラレーターへの対応

- [Raspberry Pi](https://www.raspberrypi.org/) の GPU に積まれている H.264 ハードウェアエンコーダー機能を利用することが可能です
- [NVIDIA Jetson](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/) に搭載されている VP8 や VP9 や H.264 ハードウェアエンコーダー機能を利用することで 4K@30 での配信が可能です
- Apple macOS に搭載されている H.264 ハードウェアアクセラレーター機能を [VideoToolbox](https://developer.apple.com/documentation/videotoolbox) 経由で利用することが可能です
- NVIDIA グラフィックスカードに搭載されているハードウェアアクセラレーター機能を [NVIDIA VIDEO CODEC SDK](https://developer.nvidia.com/nvidia-video-codec-sdk) 経由で利用することが可能です
- Intel グラフィックスカードに搭載されているハードウェアアクセラレーター機能を [oneVPL](https://www.intel.com/content/www/us/en/developer/tools/vpl/overview.html) 経由で Windows x86_64 と Ubuntu x86_64 にて VP9 / H.264 ハードウェアアクセラレーター機能を利用することが可能です
- Intel グラフィックスチップに搭載されているハードウェアアクセラレーター機能を [Intel VPL](https://www.intel.com/content/www/us/en/developer/tools/vpl/overview.html) 経由で Windows x86_64 と Ubuntu x86_64 にてハードウェアアクセラレーター機能を利用することが可能です
- VP9 /AV1 の送信時、[既知の問題](https://github.com/shiguredo/momo/issues/357) がありますのでご確認ください
- ハードウェアエンコーダー: VP9 / AV1 / H.264 / H.265
- ハードウェアデコーダー: VP9 / AV1 / H.264 / H.265
- Apple macOS に搭載されているハードウェアアクセラレーター機能を [Apple VideoToolbox](https://developer.apple.com/documentation/videotoolbox) 経由で利用することができます
- ハードウェアエンコーダー: H.264 / H.265
- ハードウェアデコーダー: H.264 / H.265
- NVIDIA グラフィックスカードに搭載されているハードウェアアクセラレーター機能を [NVIDIA Video Codec SDK](https://developer.nvidia.com/nvidia-video-codec-sdk) 経由で利用することができます
- ハードウェアエンコーダー: VP9 / AV1 / H.264 / H.265
- ハードウェアデコーダー: VP9 / AV1 / H.264 / H.265
- [NVIDIA Jetson](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/) に搭載されているハードウェアアクセラレーター機能を [Jetson JetPack SDK](https://developer.nvidia.com/embedded/jetpack) 経由で利用することができます
- ハードウェアエンコーダー: VP9 / AV1 / H.264 / H.265
- ハードウェアデコーダー: VP9 / AV1 / H.264 / H.265
- [Raspberry Pi](https://www.raspberrypi.org/) の GPU に積まれているハードウェアアクセラレーター機能を利用することができます
- ハードウェアエンコーダー: H.264
- ハードウェアデコーダー: H.264

### 4K 30fps での配信
### 4K の配信

Momo はハードウェアエンコーダーを利用することで WebRTC で 4K 60fps の配信を実現可能です
Momo はハードウェアエンコーダーを利用することで WebRTC で 4K の配信を実現可能です

### 4K の視聴

Momo はハードウェアデコーダーを利用することで WebRTC で 4K の配信を実現可能です

### サイマルキャストへの対応

Expand All @@ -53,6 +68,10 @@ AV1 の送受信に対応済みです。

Momo は Sora モード利用時にクライアント証明書に対応しています。

### OpenH264 の利用

Momo は OpenH264 を利用して H.264 のソフトウェアのエンコード/デコードを行うことができます。

## 動画

[WebRTC Native Client Momo と Jetson Nano で 4K@30 配信](https://www.youtube.com/watch?v=z05bWtsgDPY)
Expand Down Expand Up @@ -82,32 +101,33 @@ OpenMomo は WebRTC Native Client Momo をオープンソースとして公開

## 動作環境

- Windows 11 x86_64
- macOS 14 arm64
- Ubuntu 24.04 x86_64
- Ubuntu 22.04 x86_64
- Ubuntu 22.04 ARMv8 (NVIDIA Jetson JetPack 6)
- [NVIDIA Jetson AGX Orin](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-orin/)
- [NVIDIA Jetson Orin NX](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-orin/)
- Raspberry Pi OS (64bit)
- Raspberry Pi 4
- Raspberry Pi 3
- Raspberry Pi 2 Model B v1.2
- Raspberry Pi Zero 2 W
- Ubuntu 22.04 x86_64
- Ubuntu 20.04 ARMv8 Jetson JetPack 6
- [NVIDIA Jetson AGX Orin](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-orin/)
- macOS 12 arm64 以降
- Windows 10.1809 x86_64 以降

### 対応終了

**優先実装にて、対応継続することができます**
**優先実装にて対応することができます**

- macOS x86_64
- Raspberry Pi OS (32bit)
- Ubuntu 20.04 ARMv8 Jetson JetPack 5
- Ubuntu 20.04 ARMv8 (NVIDIA Jetson JetPack 5)
- [NVIDIA Jetson AGX Orin](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-orin/)
- [NVIDIA Jetson AGX Xavier](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-agx-xavier/)
- [NVIDIA Jetson Xavier NX](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-xavier-nx/)
- Jetson Orin Nano は HWA を詰んでいないので対応はしません
- Ubuntu 18.04 ARMv8 Jetson JetPack 4
- Ubuntu 18.04 ARMv8 (NVIDIA Jetson JetPack 4)
- [NVIDIA Jetson Nano](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-nano/)
- [NVIDIA Jetson Xavier NX](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-xavier-nx/)
- [NVIDIA Jetson AGX Xavier](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-agx-xavier/)
- Raspberry Pi OS (32bit)

## 使ってみる

Expand Down Expand Up @@ -146,7 +166,7 @@ limitations under the License.

<https://www.openh264.org/BINARY_LICENSE.txt>

```
```text
"OpenH264 Video Codec provided by Cisco Systems, Inc."
```

Expand All @@ -158,7 +178,7 @@ limitations under the License.
- [スロースネットワークス株式会社](http://www.sloth-networks.co.jp)
- WebRTC's Statistics 対応
- 現時点では企業名非公開
- Windows 版 Momo NVIDIA VIDEO CODEC SDK 対応
- Windows 版 Momo NVIDIA Video Codec SDK 対応
- [スロースネットワークス株式会社](http://www.sloth-networks.co.jp)
- Linux 版 Momo NVIDIA Video Codec SDK 対応
- [株式会社オプティム](https://www.optim.co.jp/)
Expand All @@ -167,25 +187,10 @@ limitations under the License.

### 優先実装が可能な機能一覧

**詳細は Discord やメールなどでお気軽にお問い合わせください**
**こちらに掲載していない機能でも対応できる場合がありますのでまずはお問い合わせください**

- リリース
- Ubuntu 24.04 x86_64
- Ubuntu 22.04 ARMv8 Jetson JetPack 6
- Ubuntu 22.04 ARMv8 Jetson JetPack 5
- H.265 (HEVC) HWA 対応
- macOS Video Toolbox
- NVIDIA Jetson
- Ubuntu 22.04 JetPack 6
- Ubuntu 22.04 JetPack 5
- NVIDIA Video Codec SDK
- Windows
- OpenH264 対応
- Windows
- Ubuntu
- AV1 対応
- Windows
- Windows / macOS 署名対応
- Windows 11 arm64
- Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack 5)

## Momo についての電子書籍

Expand Down
10 changes: 5 additions & 5 deletions VERSION
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
MOMO_VERSION=2023.1.0
WEBRTC_BUILD_VERSION=m125.6422.2.5
BOOST_VERSION=1.85.0
MOMO_VERSION=2024.1.0-canary.1
WEBRTC_BUILD_VERSION=m128.6613.2.0
BOOST_VERSION=1.86.0
CLI11_VERSION=v2.4.2
SDL2_VERSION=2.30.6
CMAKE_VERSION=3.29.6
SDL2_VERSION=2.30.7
CMAKE_VERSION=3.30.3
CUDA_VERSION=11.8.0-1
VPL_VERSION=v2.10.1
OPENH264_VERSION=v2.4.1
5 changes: 4 additions & 1 deletion buildbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -690,6 +690,7 @@ def build_and_install_boost(
):
version_underscore = version.replace(".", "_")
archive = download(
# XXX: ここ GitHub Releases に変更するのはダメなのだろうか?
f"https://boostorg.jfrog.io/artifactory/main/release/{version}/source/boost_{version_underscore}.tar.gz",
source_dir,
)
Expand Down Expand Up @@ -1091,7 +1092,9 @@ def install_cmake(version, source_dir, install_dir, platform: str, ext):
def install_sdl2(
version, source_dir, build_dir, install_dir, debug: bool, platform: str, cmake_args: List[str]
):
url = f"http://www.libsdl.org/release/SDL2-{version}.zip"
url = (
f"https://github.com/libsdl-org/SDL/releases/download/release-{version}/SDL2-{version}.zip"
)
path = download(url, source_dir)
sdl2_source_dir = os.path.join(source_dir, "sdl2")
sdl2_build_dir = os.path.join(build_dir, "sdl2")
Expand Down
12 changes: 5 additions & 7 deletions doc/BUY_JETSON.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,18 @@

NVIDIA Jetson を購入する場合のオススメリンクです。

## Momo の Jetson シリーズへの対応について
## Momo の NVIDIA Jetson シリーズへの対応について

- Jetpack 5 系のみの対応とします
- Jetpack 4 系への対応を終了しました
- 上記に伴い Jetpack 4 系のみに対応している Jetson Nano の対応を終了しました。
- Jetpack 6 系のみの対応とします
- Jetpack 5 と 4 系への対応を終了しました
- 優先実装にて対応できます
- ハードウェアエンコードに対応しない Jetson Orin Nano への対応は行いません
- Jetson Orin NX への対応は優先実装とします。
- Xavier と同じパターンだと Jetson Orin Nano より JPEG のハードウェア処理が劣る可能性があるため

## Jetson AGX Orin

**以下で買われることをオススメします**

- [NVIDIA JETSON AGX ORIN 64GB 開発者キット 商品・個数選択](https://ryoyo-direct.jp/shopping/jetson-orin/jetson-orin64)
[NVIDIA JETSON AGX ORIN 64GB 開発者キット 商品・個数選択](https://ryoyo-direct.jp/shopping/jetson-orin/jetson-orin64)

## 4K@30 のカメラを購入する

Expand Down
6 changes: 3 additions & 3 deletions doc/FAQ.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# FAQ

## 商用利用はできますk
## 商用利用はできますか

Momo のライセンスは [Apache License, Version 2\.0](http://www.apache.org/licenses/LICENSE-2.0) で公開しております。

Expand All @@ -10,7 +10,7 @@ Momo 側からの指定は WebRTC SFU Sora を利用したときだけ利用で

## サイマルキャストは利用できますか?

Sora モードでのみ利用できます。利用できる映像コーデックは VP8 / VP9 / H.264 / AV1 です。
Sora モードでのみ利用できます。利用できる映像コーデックは VP8 / VP9 / AV1 / H.264 / H.265 です。
利用する場合は `--simulcast` を指定してください。

## AV1 は利用できますか?
Expand Down Expand Up @@ -42,7 +42,7 @@ export SSL_CERT_FILE=/path/to/cert.pem

## NVIDIA ビデオカードに搭載されている NVENC を利用できますか?

Windows と Linux で利用できます。
Windows と Ubuntu で利用できます。
NVIDIA ビデオカードドライバーは最新版にしてください。

NVENC が利用できるビデオカードは以下で確認してください。
Expand Down
11 changes: 7 additions & 4 deletions doc/LINUX_VIDEO_DEVICE.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
# Linux でビデオデバイスを指定する

Momo ではデバイスを指定する際、デバイスファイルではなくデバイス名を指定します。

## --video-device

`--video-device` は linux 端末でビデオデバイス(つまりカメラ)を指定する機能です。 1 台の Raspberry Pi で複数の Momo を起動し、ビデオデバイスが複数あり、それぞれここに割り当てたい時に利用できます。
`--video-device` は linux 端末でビデオデバイス(つまりカメラ)を指定する機能です。
1 台の Raspberry Pi で複数の Momo を起動し、ビデオデバイスが複数あり、それぞれここに割り当てたい時に利用できます。

```bash
./momo --video-device /dev/video0 test
./momo --video-device "MX Brio" test
```

### デバイス名の固定

Linux 端末で USB カメラを接続した場合に、デバイス名が前回の接続時と異なるデバイス名になることがあります。
デバイス名が変更された場合は、--video-device に指定するデバイス名も合わせて修正する必要があるため、
デバイス名が変更された場合は、 `--video-device` に指定するデバイス名も合わせて修正する必要があるため、
例えば、Linux 端末の起動時に自動で momo を起動させたい場合等に不便です。

ここでは、同じデバイス名を使用できるように、USB カメラのデバイス名を接続するカメラごとに固定して、
Expand Down Expand Up @@ -60,5 +63,5 @@ KERNEL=="video[0-9]*", MODE="0666", ATTRS{serial}=="8E40F950", ATTR{index}=="0",
すぐに再度接続して、上記で SYMLINK に設定したデバイス名を --video-device に指定して momo を実行します。

```bash
./momo --video-device /dev/video_101 test
./momo --video-device "MX Brio" test
```
Loading

0 comments on commit 485f604

Please sign in to comment.