Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/feature/update-webrtc-m128' into…
Browse files Browse the repository at this point in the history
… feature/multi-codec-simulcast
  • Loading branch information
melpon committed Aug 23, 2024
2 parents 5b0350d + 416ef6c commit c5ae810
Show file tree
Hide file tree
Showing 20 changed files with 80 additions and 65 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,8 @@ jobs:
TEST_MATRIX_NAME: ${{ matrix.name }}
steps:
- uses: actions/checkout@v4
- name: Select Xcode 14.3.1
run: sudo xcode-select --switch /Applications/Xcode_14.3.1.app/Contents/Developer
- name: Select Xcode 15.4
run: sudo xcode-select --switch /Applications/Xcode_15.4.app/Contents/Developer
- name: Env to output
run: |
echo "user=`users`" >> $GITHUB_OUTPUT
Expand Down
37 changes: 29 additions & 8 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@

## develop

- [ADD] Intel VPL で AV1 エンコーダを動くようにする
- @tnoho

## 2024.7.0

**リリース日**: 2024-07-29

- [CHANGE] `--sora-dir`, `--sora-args``--local-sora-cpp-sdk-dir``--local-sora-cpp-sdk-args` に変更する
- @melpon
- [CHANGE] `--webrtc-build-dir`, `--webrtc-build-args``--local-webrtc-build-dir``--local-webrtc-build-args` に変更する
Expand All @@ -27,11 +34,13 @@
- @melpon
- [UPDATE] Boost を 1.85.0 にあげる
- @enm10k
- [UPDATE] SDL2 を 2.30.3 にあげる
- [UPDATE] SDL2 を 2.30.5 にあげる
- @enm10k
- [UPDATE] CMake を 3.29.6 にあげる
- @voluntas
- [UPDATE] CLI11 を 2.4.2 にあげる
- @enm10k
- [UPDATE] libwebrtc を m126.6478.1.1 にあげる
- [UPDATE] libwebrtc を m127.6533.1.1 にあげる
- Android の test アプリがリンクできなくなったため、リンカーを Android NDK のものから libwebrtc のものに変更
- リンカーのバージョンの違いによる互換性の問題でエラーが発生していた
- @melpon @enm10k @torikizi
Expand All @@ -54,21 +63,27 @@
- [ADD] sumomo に --simulcast-multicodec オプションを追加
- @melpon

## 2024.6.1 (2024-04-16)
## 2024.6.1

**リリース日**: 2024-04-16

- [CHANGE] テストモジュールについて `SoraSignalingConfig``sora_client` に値を設定しないようにする
- @enm10k
- [FIX] VPL デコーダで遅延が起きたりセグフォすることがあるのを修正
- @melpon

## 2024.6.0 (2024-04-01)
## 2024.6.0

**リリース日**: 2024-04-01

- [CHANGE] `VplVideoDecoderImpl``ImplementationName``oneVPL` から `libvpl` に変更する
- @enm10k
- [FIX] `VplVideoEncoderImpl``implementation_name` の値が誤っていたため `libvpl` に修正する
- @enm10k

## 2024.5.0 (2024-03-29)
## 2024.5.0

**リリース日**: 2024-03-29

- [CHANGE] 別リポジトリに分かれていた Sora C++ SDK のサンプル集を examples/ 以下のディレクトリに統合する
- @melpon
Expand All @@ -86,7 +101,9 @@
- [FIX] HWA 利用の判定を `#if defined(USE_*_ENCODER)` という使い方で統一するように修正
- @melpon

## 2024.4.0 (2024-03-13)
## 2024.4.0

**リリース日**: 2024-03-13

- [ADD] test/hello.cpp に video, audio フラグを追加
- @melpon
Expand Down Expand Up @@ -569,12 +586,16 @@
- [FIX] Jetson の AV1 HWA のデコーダがうまく動いてなかったのを修正
- @melpon

## 2022.6.0 (2022-06-30)
## 2022.6.0

**リリース日**: 2022-06-30

- [ADD] Jetson の AV1 HWA に対応
- @melpon

## 2022.5.0 (2022-06-22)
## 2022.5.0

**リリース日**: 2022-06-22

- [ADD] bundle_id を追加
- @melpon
Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ elseif (SORA_TARGET_OS STREQUAL "macos")
"-framework MetalKit"
"-framework OpenGL"
"-framework IOSurface"
"-framework ScreenCaptureKit"
)

elseif (SORA_TARGET_OS STREQUAL "ios")
Expand Down
22 changes: 12 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,16 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
## 特徴

- 各プラットフォームで利用可能な HWA への対応
- NVIDIA Video Codec SDK (NVENC / NVDEC)
- VP9 / H.264
- NVIDIA Jetson Video HWA
- VP9 / AV1 / H.264
- Apple macOS / iOS Video Toolbox
- [Intel VPL](https://github.com/intel/libvpl)
- VP9 / AV1 / H.264 / H.265
- [NVIDIA Video Codec SDK](https://developer.nvidia.com/video-codec-sdk)
- VP9 / H.264 / H.265
- [NVIDIA JetPack SDK](https://developer.nvidia.com/embedded/jetpack) (JetPack 6)
- VP9 / AV1 / H.264 / H.265
- [Apple Video Toolbox](https://developer.apple.com/documentation/videotoolbox)
- H.264 / H.265
- Google Android HWA
- VP8 / VP9 / H.264 / H.265
- [Intel VPL](https://github.com/intel/libvpl) (Intel Media SDK の後継)
- H.264 / H.265 / AV1
- AV1 は デコードのみ
- H.265 は Windows と Ubuntu 22.04 のみ

## ライブラリのバイナリ提供について

Expand All @@ -53,10 +51,14 @@ _hololens2 は無視してください_

- Windows 10.1809 x86_64 以降
- macOS 13.5 arm64 以降
- Ubuntu 22.04 ARMv8 Jetson (JetPack 6.0.0 以降)
- Ubuntu 22.04 ARMv8 Jetson (JetPack 6.0 以降)
- Jetson AGX Orin
- Jetson Orin NX
- 動作未検証です
- Ubuntu 20.04 x86_64
- 動作未検証です
- Ubuntu 22.04 x86_64
- Ubuntu 24.04 x86_64
- Android 7 arm64 以降
- iOS 13 arm64 以降

Expand Down
4 changes: 2 additions & 2 deletions VERSION
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
SORA_CPP_SDK_VERSION=2024.7.0-canary.8
WEBRTC_BUILD_VERSION=m127.6533.1.1
SORA_CPP_SDK_VERSION=2024.7.0
WEBRTC_BUILD_VERSION=m128.6613.2.0
BOOST_VERSION=1.85.0
CMAKE_VERSION=3.29.6
CUDA_VERSION=11.8.0-1
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion doc/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ GitHub Actions でビルドを行い確認していますので、まずは GitH
GitHub Actions のビルドが失敗していたり、
ビルド済みバイナリがうまく動作しない場合は Discord へご連絡ください。

## NVIDIA Jetson Orin (Ubuntu 20.04 arm64) でビルドできません
## NVIDIA Jetson Orin (Ubuntu 22.04 arm64) でビルドできません

Ubuntu 20.04 x86_64 でクロスコンパイルしたバイナリを利用するようにしてください。

Expand Down
13 changes: 1 addition & 12 deletions doc/known_issues.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,3 @@
# 既知の問題

## Intel VPL で H.264 の映像をデコードすると正常に動作しない

Intel VPL で H.264 の映像をデコードすると、以下の事象が発生することを確認しています。

- 受信した映像が止まる

調査の結果、IntelVPL に問題がある可能性が高く、現在問題報告を行なって対応をしております。
https://community.intel.com/t5/Media-Intel-Video-Processing/Issue-with-Decoding-H-264-Video-Encoded-in-macOS-Safari/m-p/1587647

こちらの問題が解消すると改善する見込みです。

Intel VPL を利用して映像をデコードする場合は、 H.264 を避けて他のコーデックを利用してください。
現在は既知の問題は存在しません。
13 changes: 6 additions & 7 deletions doc/vpl.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,13 @@ Intel Media SDK は既に開発が終了しており、後継の Intel VPL ラ

### Windows

Intel VPL を利用するためには Intel のディスプレイドライバーがインストールされている必要があります。
Windows では環境によってドライバーの有無が異なるため、以下のいずれかの手順でインストールされているドライバーを確認してください。
Windows 11 では Intel の公式サイトからドライバーをインストールすることで VPL を利用することができます。

- デバイスマネージャー > ディスプレイアダプター > インストールされているドライバーを確認
- Win + R キーを押下 > `ファイル名を指定して実行` のダイアログが開くので `dxdiag` と入力して `OK` ボタンを押下 > DirectX 診断ツールが起動するので、 `ディスプレイ` のタブからインストールされているドライバーを確認

Intel のドライバーが確認できない場合は、以下のページから適切なドライバーをインストールしてください。
<https://www.intel.co.jp/content/www/jp/ja/download-center/home.html>
- Intel の公式サイトからドライバーをダウンロードします。
- Intel ドライバーおよびソフトウェアのダウンロード
- <https://www.intel.co.jp/content/www/jp/ja/download-center/home.html>
- インストーラーに従ってインストールを行います。
- インストール後に再起動を行います。

### Ubuntu 22.04

Expand Down
4 changes: 2 additions & 2 deletions examples/VERSION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
SORA_CPP_SDK_VERSION=2024.7.0-canary.8
SORA_CPP_SDK_VERSION=2024.7.0
WEBRTC_BUILD_VERSION=m127.6533.1.1
BOOST_VERSION=1.85.0
CMAKE_VERSION=3.28.1
CMAKE_VERSION=3.29.6
SDL2_VERSION=2.30.5
CLI11_VERSION=v2.4.2
4 changes: 2 additions & 2 deletions examples/messaging_recvonly_sample/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ cd sora-cpp-sdk/examples

以下のツールを準備してください。

- [Visual Studio 2019](https://visualstudio.microsoft.com/ja/downloads/)
- [Visual Studio 2022](https://visualstudio.microsoft.com/ja/downloads/)
- C++ をビルドするためのコンポーネントを入れてください。
- Python 3.10.5

Expand All @@ -60,7 +60,7 @@ cd sora-cpp-sdk/examples

以下のツールを準備してください。

- Python 3.9.13
- Python 3.12.4

##### ビルド

Expand Down
4 changes: 2 additions & 2 deletions examples/sdl_sample/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ cd sora-cpp-sdk/examples

以下のツールを準備してください。

- [Visual Studio 2019](https://visualstudio.microsoft.com/ja/downloads/)
- [Visual Studio 2022](https://visualstudio.microsoft.com/ja/downloads/)
- C++ をビルドするためのコンポーネントを入れてください。
- Python 3.10.5

Expand All @@ -60,7 +60,7 @@ cd sora-cpp-sdk/examples

以下のツールを準備してください。

- Python 3.9.13
- Python 3.12.4

##### ビルド

Expand Down
3 changes: 3 additions & 0 deletions examples/sdl_sample/src/sdl_sample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
// Boost
#include <boost/optional/optional.hpp>

// WebRTC
#include <rtc_base/crypto_random.h>

#include "sdl_renderer.h"

#ifdef _WIN32
Expand Down
12 changes: 9 additions & 3 deletions examples/sumomo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ cd sora-cpp-sdk/examples

以下のツールを準備してください。

- [Visual Studio 2019](https://visualstudio.microsoft.com/ja/downloads/)
- [Visual Studio 2022](https://visualstudio.microsoft.com/ja/downloads/)
- C++ をビルドするためのコンポーネントを入れてください。
- Python 3.10.5

Expand All @@ -60,7 +60,7 @@ cd sora-cpp-sdk/examples

以下のツールを準備してください。

- Python 3.9.13
- Python 3.12.4

##### ビルド

Expand Down Expand Up @@ -157,7 +157,7 @@ Windows 以外の場合
- `--role` : [role](https://sora-doc.shiguredo.jp/SIGNALING#6d21b9) (必須)
- sendrecv / sendonly / recvonly のいずれかを指定

#### Momo Sample 実行に関するオプション
#### Sumomo 実行に関するオプション

- `--log-level` : 実行時にターミナルに出力するログのレベル
- `verbose->0,info->1,warning->2,error->3,none->4` の値が指定可能です
Expand All @@ -167,6 +167,10 @@ Windows 以外の場合
- `--hw-mjpeg-decoder` : HW MJPEG デコーダーの利用 (true/false)
- 未指定の場合は false が設定されます
- NVIDIA Jetson のみで利用できます
- `--use-hardware-encoder` : ハードウェアエンコーダーの利用 (true/false)
- `--openh264` : openh264 ライブラリのパスをフルパスで指定します
- デコードには対応していません


#### Sora に関するオプション

Expand All @@ -186,6 +190,8 @@ Windows 以外の場合
- `--video-bit-rate` : [ビデオビットレート指定](https://sora-doc.shiguredo.jp/SIGNALING#5667cf)
- 0 - 30000 の値が指定可能です
- 0 は未指定と見なされます
- `--video-h264-params` : [ビデオの H.264 設定指定](https://sora-doc.shiguredo.jp/SIGNALING#ffc4cb)
- `--video-h265-params` : [ビデオの H.265 設定指定](https://sora-doc.shiguredo.jp/SIGNALING#bfe45b)
- `--audio-bit-rate` : [オーディオビットレート指定](https://sora-doc.shiguredo.jp/SIGNALING#414142)
- 0 - 510 の値が指定可能です
- 0 は未指定と見なされます
Expand Down
3 changes: 3 additions & 0 deletions examples/sumomo/src/sumomo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
// Boost
#include <boost/optional/optional.hpp>

// WebRTC
#include <rtc_base/crypto_random.h>

#include "sdl_renderer.h"

#ifdef _WIN32
Expand Down
2 changes: 0 additions & 2 deletions src/hwenc_nvcodec/nvcodec_video_encoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -387,8 +387,6 @@ int32_t NvCodecVideoEncoderImpl::Encode(
encoded_image_.qp_ = h264_bitstream_parser_.GetLastSliceQp().value_or(-1);
} else if (codec_ == CudaVideoCodec::H265) {
codec_specific.codecType = webrtc::kVideoCodecH265;
codec_specific.codecSpecific.H265.packetization_mode =
webrtc::H265PacketizationMode::NonInterleaved;

h265_bitstream_parser_.ParseBitstream(encoded_image_);
encoded_image_.qp_ = h265_bitstream_parser_.GetLastSliceQp().value_or(-1);
Expand Down
14 changes: 2 additions & 12 deletions src/hwenc_vpl/vpl_video_encoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
#include <common_video/h265/h265_bitstream_parser.h>
#include <common_video/include/bitrate_adjuster.h>
#include <modules/video_coding/codecs/h264/include/h264.h>
#include <modules/video_coding/codecs/h265/include/h265_globals.h>
#include <modules/video_coding/include/video_codec_interface.h>
#include <modules/video_coding/include/video_error_codes.h>
#include <rtc_base/logging.h>
Expand Down Expand Up @@ -525,8 +524,8 @@ int32_t VplVideoEncoderImpl::Encode(
encoded_image_.capture_time_ms_ = frame.render_time_ms();
encoded_image_.rotation_ = frame.rotation();
encoded_image_.SetColorSpace(frame.color_space());
if (bitstream_.FrameType == MFX_FRAMETYPE_I ||
bitstream_.FrameType == MFX_FRAMETYPE_IDR) {
if (bitstream_.FrameType & MFX_FRAMETYPE_I ||
bitstream_.FrameType & MFX_FRAMETYPE_IDR) {
encoded_image_._frameType = webrtc::VideoFrameType::kVideoFrameKey;
} else {
encoded_image_._frameType = webrtc::VideoFrameType::kVideoFrameDelta;
Expand All @@ -542,8 +541,6 @@ int32_t VplVideoEncoderImpl::Encode(
encoded_image_.qp_ = h264_bitstream_parser_.GetLastSliceQp().value_or(-1);
} else if (codec_ == MFX_CODEC_HEVC) {
codec_specific.codecType = webrtc::kVideoCodecH265;
codec_specific.codecSpecific.H265.packetization_mode =
webrtc::H265PacketizationMode::NonInterleaved;

h265_bitstream_parser_.ParseBitstream(encoded_image_);
encoded_image_.qp_ = h265_bitstream_parser_.GetLastSliceQp().value_or(-1);
Expand Down Expand Up @@ -676,13 +673,6 @@ bool VplVideoEncoder::IsSupported(std::shared_ptr<VplSession> session,
return false;
}

// FIXME(miosakuma): Intel Core Ultra 7 では IsSupported(AV1) == true となるが、
// 実際に使ってみると映像が送信されないため、一時的に AV1 だったら未サポートとして返す。
// (VPL の問題なのか使い方の問題なのかは不明)
if (codec == webrtc::kVideoCodecAV1) {
return false;
}

auto encoder = VplVideoEncoderImpl::CreateEncoder(
session, ToMfxCodec(codec), 1920, 1080, 30, 10, 20, false);
bool result = encoder != nullptr;
Expand Down
1 change: 1 addition & 0 deletions test/connect_disconnect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <iostream>

// WebRTC
#include <rtc_base/crypto_random.h>
#include <rtc_base/logging.h>

#ifdef _WIN32
Expand Down
1 change: 1 addition & 0 deletions test/e2e.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <iostream>

// WebRTC
#include <rtc_base/crypto_random.h>
#include <rtc_base/logging.h>

#ifdef _WIN32
Expand Down
1 change: 1 addition & 0 deletions test/hello.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <iostream>

// WebRTC
#include <rtc_base/crypto_random.h>
#include <rtc_base/logging.h>

#ifdef _WIN32
Expand Down

0 comments on commit c5ae810

Please sign in to comment.