From 99b5c438502ba5b48cd53b635398976f1d317e07 Mon Sep 17 00:00:00 2001 From: voluntas Date: Thu, 6 Oct 2022 16:05:43 +0900 Subject: [PATCH 01/68] =?UTF-8?q?CLI11=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=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 3 +++ VERSION | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index e9fa18d..2989724 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,9 @@ ## develop +- [UPDATE] `CLI11` を `2.3.0` に上げる + - @voluntas + ## 2022.7.0 (2022-10-06) - [UPDATE] Sora C++ SDK を利用するように変更 diff --git a/VERSION b/VERSION index 82f6a93..a5d28b1 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ ZAKURO_VERSION=2022.7.0 SORA_CPP_SDK_VERSION=2022.14.0 WEBRTC_BUILD_VERSION=m105.5195.0.0 BOOST_VERSION=1.80.0 -CLI11_VERSION=v2.2.0 +CLI11_VERSION=v2.3.0 CMAKE_VERSION=3.24.1 BLEND2D_VERSION=a84dfdbd1d03f9b203e18b9158387af32b6ce41e ASMJIT_VERSION=5c469e3f7c307da939d38d72e09f08db7ca076ef From aaf74f18e3fa8a5bc9693073849958f3a5dcb4d3 Mon Sep 17 00:00:00 2001 From: Takeru Ohta Date: Fri, 7 Oct 2022 15:00:00 +0900 Subject: [PATCH 02/68] Fix typo --- CHANGES.md | 2 ++ src/zakuro.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 2989724..7abbb84 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,8 @@ ## develop +- [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 + - @sile - [UPDATE] `CLI11` を `2.3.0` に上げる - @voluntas diff --git a/src/zakuro.cpp b/src/zakuro.cpp index afb26ed..353a93d 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -148,7 +148,7 @@ static bool ParseDataChannels(boost::json::value data_channels, // boost::optional ordered; { - auto it = obj.find("interval"); + auto it = obj.find("ordered"); if (it != obj.end()) { sch.ordered = boost::json::value_to(it->value()); } From 042244d66f6af4ca79a581a5cec0c7736248ff60 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 17 Oct 2022 16:38:19 +0900 Subject: [PATCH 03/68] =?UTF-8?q?set-output=20=E3=81=AF=20deprecated=20?= =?UTF-8?q?=E3=81=AA=E3=81=AE=E3=81=A7=20$GITHUB=5FOUTPUT=20=E3=82=92?= =?UTF-8?q?=E5=88=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 948ed28..7320d36 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: shell: bash run: | source _package/${{ matrix.name }}/release/zakuro.env - echo "::set-output name=name::${PACKAGE_NAME}" + echo "name=${PACKAGE_NAME}" >> $GITHUB_OUTPUT id: package_name - name: Upload Artifact uses: actions/upload-artifact@v3 @@ -90,9 +90,9 @@ jobs: run: | source ${{ matrix.name }}.env/zakuro.env source create-release.env/create-release.env - echo "::set-output name=package_name::$PACKAGE_NAME" - echo "::set-output name=content_type::$CONTENT_TYPE" - echo "::set-output name=upload_url::$UPLOAD_URL" + echo "package_name=$PACKAGE_NAME" >> $GITHUB_OUTPUT + echo "content_type=$CONTENT_TYPE" >> $GITHUB_OUTPUT + echo "upload_url=$UPLOAD_URL" >> $GITHUB_OUTPUT id: env - uses: actions/download-artifact@v3 with: From 270742458e0b6dadd1e5078a11e23278d1e09c0f Mon Sep 17 00:00:00 2001 From: torikizi Date: Wed, 19 Oct 2022 14:41:23 +0900 Subject: [PATCH 04/68] =?UTF-8?q?=E5=BB=83=E6=AD=A2=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=9F=20`--sora-audio-opus-params-clock-rate`=20?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ README.md | 2 -- src/util.cpp | 4 ---- src/zakuro.cpp | 2 -- src/zakuro.h | 2 -- 5 files changed, 2 insertions(+), 10 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 7abbb84..6f7120e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,8 @@ ## develop +- [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する + - @torikizi - [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 - @sile - [UPDATE] `CLI11` を `2.3.0` に上げる diff --git a/README.md b/README.md index 8410893..a461022 100644 --- a/README.md +++ b/README.md @@ -106,8 +106,6 @@ Options: Video bit rate --sora-audio-bit-rate INT:INT in [0 - 510] Audio bit rate - --sora-audio-opus-params-clock-rate INT:INT in [1600 - 48000] - OPUS clock rate --sora-multistream BOOLEAN:value in {false->0,true->1} OR {0,1} Use multistream (default: false) --sora-simulcast BOOLEAN:value in {false->0,true->1} OR {0,1} diff --git a/src/util.cpp b/src/util.cpp index 7f93f9b..c662bdb 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -180,9 +180,6 @@ void Util::ParseArgs(const std::vector& cargs, app.add_option("--sora-audio-bit-rate", config.sora_audio_bit_rate, "Audio bit rate") ->check(CLI::Range(0, 510)); - app.add_option("--sora-audio-opus-params-clock-rate", - config.sora_audio_opus_params_clock_rate, "OPUS clock rate") - ->check(CLI::Range(1600, 48000)); app.add_option("--sora-multistream", config.sora_multistream, "Use multistream (default: false)") ->transform(CLI::CheckedTransformer(bool_map, CLI::ignore_case)); @@ -525,7 +522,6 @@ std::vector> Util::NodeToArgs(const YAML::Node& inst) { DEF_STRING(sora, "sora-", "audio-codec-type"); DEF_INTEGER(sora, "sora-", "video-bit-rate"); DEF_INTEGER(sora, "sora-", "audio-bit-rate"); - DEF_INTEGER(sora, "sora-", "audio-opus-params-clock-rate"); DEF_BOOLEAN(sora, "sora-", "multistream"); DEF_BOOLEAN(sora, "sora-", "simulcast"); DEF_STRING(sora, "sora-", "simulcast-rid"); diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 353a93d..07fc55b 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -316,8 +316,6 @@ int Zakuro::Run() { sora_config.audio_codec_type = config_.sora_audio_codec_type; sora_config.video_bit_rate = config_.sora_video_bit_rate; sora_config.audio_bit_rate = config_.sora_audio_bit_rate; - sora_config.audio_opus_params_clock_rate = - config_.sora_audio_opus_params_clock_rate; sora_config.metadata = config_.sora_metadata; sora_config.signaling_notify_metadata = config_.sora_signaling_notify_metadata; diff --git a/src/zakuro.h b/src/zakuro.h index 59acb7d..b72512b 100644 --- a/src/zakuro.h +++ b/src/zakuro.h @@ -54,8 +54,6 @@ struct ZakuroConfig { // 0 の場合ビットレートは Sora 側で決める int sora_video_bit_rate = 0; int sora_audio_bit_rate = 0; - // opus の設定 - int sora_audio_opus_params_clock_rate = 0; std::string sora_role = ""; bool sora_multistream = false; bool sora_simulcast = false; From db383a5a35bbbe468fc00a87cdfaaf64ab35650b Mon Sep 17 00:00:00 2001 From: torikizi Date: Wed, 19 Oct 2022 14:50:00 +0900 Subject: [PATCH 05/68] =?UTF-8?q?CHANGES=20=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 6f7120e..72099e7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,12 +11,12 @@ ## develop +- [UPDATE] `CLI11` を `2.3.0` に上げる + - @voluntas - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する - @torikizi - [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 - @sile -- [UPDATE] `CLI11` を `2.3.0` に上げる - - @voluntas ## 2022.7.0 (2022-10-06) From 5763da0f6baca93f70bb7898c6e561a11a1f4b3a Mon Sep 17 00:00:00 2001 From: melpon Date: Wed, 7 Dec 2022 04:30:30 +0900 Subject: [PATCH 06/68] =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=A4=E3=82=A2?= =?UTF-8?q?=E3=83=B3=E3=83=88=E5=90=8D=E3=81=8C=E6=B6=88=E3=81=88=E3=81=A6?= =?UTF-8?q?=E3=81=9F=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/zakuro.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 07fc55b..015ebb1 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -20,6 +20,7 @@ #include "wav_reader.h" #include "zakuro.h" #include "zakuro_stats.h" +#include "zakuro_version.h" Zakuro::Zakuro(ZakuroConfig config) : config_(std::move(config)) {} @@ -303,6 +304,7 @@ int Zakuro::Run() { vc_config.audio_type = VirtualClientConfig::AudioType::AutoGenerateFakeAudio; } + sora_config.sora_client = ZakuroVersion::GetClientName(); sora_config.insecure = config_.insecure; sora_config.client_cert = config_.client_cert; sora_config.client_key = config_.client_key; From 7289fce27a2e54ad7f110889a32a553f7d6de387 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Mon, 12 Dec 2022 22:56:24 +0900 Subject: [PATCH 07/68] =?UTF-8?q?CLI11=20=E3=82=92=202.3.1=20=E3=81=AB?= =?UTF-8?q?=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 +++- VERSION | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e87b87d..e30107b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,12 +11,14 @@ ## develop -- [UPDATE] `CLI11` を `2.3.0` に上げる +- [UPDATE] `CLI11` を `2.3.1` に上げる - @voluntas - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する - @torikizi - [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 - @sile +- [FIX] クライアント名が消えてたのを修正 + - @melpon ## 2022.7.1 (2022-10-31) diff --git a/VERSION b/VERSION index 720a534..a23fbb7 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ ZAKURO_VERSION=2022.7.1 SORA_CPP_SDK_VERSION=2022.14.0 WEBRTC_BUILD_VERSION=m105.5195.0.0 BOOST_VERSION=1.80.0 -CLI11_VERSION=v2.3.0 +CLI11_VERSION=v2.3.1 CMAKE_VERSION=3.24.1 BLEND2D_VERSION=a84dfdbd1d03f9b203e18b9158387af32b6ce41e ASMJIT_VERSION=5c469e3f7c307da939d38d72e09f08db7ca076ef From f3d2072c959a5fbfc0c1359e6c2e5d893153fa45 Mon Sep 17 00:00:00 2001 From: NAKAI Ryosuke Date: Thu, 15 Dec 2022 09:00:34 +0900 Subject: [PATCH 08/68] =?UTF-8?q?=E3=81=84=E3=82=8D=E3=81=84=E3=82=8D?= =?UTF-8?q?=E3=81=AA=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E3=82=92?= =?UTF-8?q?=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 ++++ VERSION | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e30107b..2db4517 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,10 @@ ## develop +- [UPDATE] `CMake` を `3.25.1` に上げる + - @voluntas +- [UPDATE] `OpenH264` を `2.3.1` に上げる + - @voluntas - [UPDATE] `CLI11` を `2.3.1` に上げる - @voluntas - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する diff --git a/VERSION b/VERSION index a23fbb7..6579c16 100644 --- a/VERSION +++ b/VERSION @@ -3,8 +3,8 @@ SORA_CPP_SDK_VERSION=2022.14.0 WEBRTC_BUILD_VERSION=m105.5195.0.0 BOOST_VERSION=1.80.0 CLI11_VERSION=v2.3.1 -CMAKE_VERSION=3.24.1 +CMAKE_VERSION=3.25.1 BLEND2D_VERSION=a84dfdbd1d03f9b203e18b9158387af32b6ce41e ASMJIT_VERSION=5c469e3f7c307da939d38d72e09f08db7ca076ef -OPENH264_VERSION=v2.3.0 +OPENH264_VERSION=v2.3.1 YAML_CPP_VERSION=yaml-cpp-0.7.0 From 4782c973a150b7d06beb852022ca9d3bb8753a1a Mon Sep 17 00:00:00 2001 From: voluntas Date: Fri, 16 Dec 2022 16:10:22 +0900 Subject: [PATCH 09/68] =?UTF-8?q?C++=20SDK=20=E5=8C=96=E3=81=97=E3=81=9F?= =?UTF-8?q?=E9=9A=9B=E3=81=AB=E5=BF=85=E8=A6=81=E3=81=AA=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=83=96=E3=83=A9=E3=83=AA=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/USE.md b/doc/USE.md index 80da749..eee0cfb 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -14,7 +14,7 @@ https://github.com/shiguredo/zakuro/releases ```shell $ sudo apt update -$ sudo apt install libnspr4 libnss3 +$ sudo apt install libnspr4 libnss3 libxext-dev libx11-dev libdrm-dev libva-dev pkg-config ``` ## 負荷をかけてみる From ca7e946f95e89a17364c32dfc123dc67e58c2830 Mon Sep 17 00:00:00 2001 From: voluntas Date: Fri, 16 Dec 2022 17:22:56 +0900 Subject: [PATCH 10/68] =?UTF-8?q?=E5=88=A9=E7=94=A8=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/USE.md b/doc/USE.md index eee0cfb..064c89f 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -14,7 +14,7 @@ https://github.com/shiguredo/zakuro/releases ```shell $ sudo apt update -$ sudo apt install libnspr4 libnss3 libxext-dev libx11-dev libdrm-dev libva-dev pkg-config +$ sudo apt install libnspr4 libnss3 libxext6 libx11-6 libdrm2 libva2 libva-drm2 ``` ## 負荷をかけてみる From 232087d16549725d60726d451e6f7d556176d28a Mon Sep 17 00:00:00 2001 From: melpon Date: Sun, 18 Dec 2022 02:45:55 +0900 Subject: [PATCH 11/68] =?UTF-8?q?=E3=83=91=E3=83=83=E3=82=B1=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=82=92=E5=B1=95=E9=96=8B=E3=81=97=E3=81=9F=E9=9A=9B?= =?UTF-8?q?=E3=81=AE=E5=90=8D=E5=89=8D=E3=81=8C=20`zakuro`=20=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=97=E3=81=BE=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=20`zakuro-{version}=5F{pla?= =?UTF-8?q?tform}`=20=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ run.py | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2db4517..711d746 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -23,6 +23,8 @@ - @sile - [FIX] クライアント名が消えてたのを修正 - @melpon +- [FIX] パッケージを展開した際の名前が `zakuro` になってしまっていたのを `zakuro-{version}_{platform}` にする + - @melpon ## 2022.7.1 (2022-10-31) diff --git a/run.py b/run.py index e417d22..1976665 100644 --- a/run.py +++ b/run.py @@ -725,15 +725,16 @@ def main(): if args.package: mkdir_p(package_dir) - rm_rf(os.path.join(package_dir, 'zakuro')) + zakuro_package_dir = os.path.join(package_dir, f'zakuro-{zakuro_version}_{args.target}') + rm_rf(zakuro_package_dir) rm_rf(os.path.join(package_dir, 'zakuro.env')) with cd(BASE_DIR): version = read_version_file('VERSION') zakuro_version = version['ZAKURO_VERSION'] - mkdir_p(os.path.join(package_dir, 'zakuro')) - with cd(os.path.join(package_dir, 'zakuro')): + mkdir_p(zakuro_package_dir) + with cd(zakuro_package_dir): shutil.copyfile(os.path.join(build_dir, 'zakuro', 'zakuro'), 'zakuro') shutil.copyfile(os.path.join(BASE_DIR, 'LICENSE'), 'LICENSE') with open('NOTICE', 'w') as f: @@ -750,7 +751,7 @@ def main(): archive_name = f'zakuro-{zakuro_version}_{args.target}.tar.gz' archive_path = os.path.join(package_dir, archive_name) with tarfile.open(archive_path, 'w:gz') as f: - for file in enum_all_files('zakuro', '.'): + for file in enum_all_files(f'zakuro-{zakuro_version}_{args.target}', '.'): f.add(name=file, arcname=file) with open(os.path.join(package_dir, 'zakuro.env'), 'w') as f: f.write("CONTENT_TYPE=application/gzip\n") From fca7fbbe0583c53a8c28ceae7f77afb753a4cb4d Mon Sep 17 00:00:00 2001 From: melpon Date: Thu, 19 Jan 2023 18:34:10 +0900 Subject: [PATCH 12/68] =?UTF-8?q?Ubuntu=2022.04=20=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 36 ++++++++++++++++++++++++++++++++++-- CMakeLists.txt | 6 +++--- run.py | 8 ++++---- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7320d36..fffb856 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ on: pull_request: jobs: - build-linux: + build-linux-2004: strategy: fail-fast: false matrix: @@ -41,11 +41,42 @@ jobs: with: name: ${{ matrix.name }}.env path: _package/${{ matrix.name }}/release/zakuro.env + build-linux-2204: + strategy: + fail-fast: false + matrix: + name: + - ubuntu-22.04_x86_64 + name: Build zakuro for ${{ matrix.name }} + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v2 + - name: Install deps + run: | + DEBIAN_FRONTEND=noninteractive sudo apt-get -y install libva-dev libdrm-dev + - run: python3 run.py ${{ matrix.name }} --package + - name: Get package name + shell: bash + run: | + source _package/${{ matrix.name }}/release/zakuro.env + echo "name=${PACKAGE_NAME}" >> $GITHUB_OUTPUT + id: package_name + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ steps.package_name.outputs.name }} + path: _package/${{ matrix.name }}/release/${{ steps.package_name.outputs.name }} + - name: Upload Environment + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.name }}.env + path: _package/${{ matrix.name }}/release/zakuro.env create-release: name: Create Release if: contains(github.ref, 'tags/202') needs: - - build-linux + - build-linux-2004 + - build-linux-2204 runs-on: ubuntu-latest steps: - name: Create Release @@ -76,6 +107,7 @@ jobs: matrix: name: - ubuntu-20.04_x86_64 + - ubuntu-22.04_x86_64 steps: - uses: actions/download-artifact@v3 with: diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c18cbc..01a40b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ find_package(Blend2D REQUIRED) find_package(CLI11 REQUIRED) find_package(yaml-cpp REQUIRED) -if (ZAKURO_PLATFORM STREQUAL "ubuntu-20.04_x86_64") +if (ZAKURO_PLATFORM STREQUAL "ubuntu-20.04_x86_64" OR ZAKURO_PLATFORM STREQUAL "ubuntu-22.04_x86_64") find_package(Libva REQUIRED) find_package(Libdrm REQUIRED) endif() @@ -150,7 +150,7 @@ foreach(n RANGE ${RESOURCE_FILES_LENGTH_MINUS_ONE}) # バイナリの組み込み if (ZAKURO_PLATFORM STREQUAL "macos_arm64") target_link_options(zakuro PRIVATE "SHELL:-sectcreate __DATA ${file_name_macos} ${CMAKE_CURRENT_SOURCE_DIR}/resource/${file}") - elseif (ZAKURO_PLATFORM STREQUAL "ubuntu-20.04_x86_64") + elseif (ZAKURO_PLATFORM STREQUAL "ubuntu-20.04_x86_64" OR ZAKURO_PLATFORM STREQUAL "ubuntu-22.04_x86_64") set(objfile ${file}.o) add_custom_command(OUTPUT ${objfile} COMMAND ld @@ -187,5 +187,5 @@ if (ZAKURO_PLATFORM STREQUAL "macos_arm64") target_link_options(zakuro PRIVATE -ObjC) set_target_properties(zakuro PROPERTIES CXX_VISIBILITY_PRESET hidden) -elseif (ZAKURO_PLATFORM STREQUAL "ubuntu-20.04_x86_64") +elseif (ZAKURO_PLATFORM STREQUAL "ubuntu-20.04_x86_64" OR ZAKURO_PLATFORM STREQUAL "ubuntu-22.04_x86_64") endif() diff --git a/run.py b/run.py index 1976665..f43557c 100644 --- a/run.py +++ b/run.py @@ -520,7 +520,7 @@ def install_yaml(version, source_dir, build_dir, install_dir, cmake_args): def get_common_cmake_args(install_dir, platform): # クロスコンパイルの設定。 # 本来は toolchain ファイルに書く内容 - if platform == 'ubuntu-20.04_x86_64': + if platform in ('ubuntu-20.04_x86_64', 'ubuntu-22.04_x86_64'): return [ f'-DCMAKE_C_COMPILER={install_dir}/llvm/clang/bin/clang', f'-DCMAKE_CXX_COMPILER={install_dir}/llvm/clang/bin/clang++', @@ -564,7 +564,7 @@ def install_deps(source_dir, build_dir, install_dir, debug, platform): } install_webrtc(**install_webrtc_args) - if platform == 'ubuntu-20.04_x86_64': + if platform in ('ubuntu-20.04_x86_64', 'ubuntu-22.04_x86_64'): webrtc_info = get_webrtc_info(False, source_dir, build_dir, install_dir) webrtc_version = read_version_file(webrtc_info.version_file) @@ -611,7 +611,7 @@ def install_deps(source_dir, build_dir, install_dir, debug, platform): 'platform': '', 'ext': 'tar.gz' } - if platform == 'ubuntu-20.04_x86_64': + if platform in ('ubuntu-20.04_x86_64', 'ubuntu-22.04_x86_64'): install_cmake_args['platform'] = 'linux-x86_64' elif platform == 'macos_arm64': install_cmake_args['platform'] = 'macos-universal' @@ -677,7 +677,7 @@ def install_deps(source_dir, build_dir, install_dir, debug, platform): def main(): parser = argparse.ArgumentParser() - parser.add_argument("target", choices=['macos_arm64', 'ubuntu-20.04_x86_64']) + parser.add_argument("target", choices=['macos_arm64', 'ubuntu-20.04_x86_64', 'ubuntu-22.04_x86_64']) parser.add_argument("--debug", action='store_true') parser.add_argument("--package", action='store_true') From 3d35877cf1f2ef9eb9d43cff210f92e87b3bf760 Mon Sep 17 00:00:00 2001 From: melpon Date: Thu, 19 Jan 2023 18:59:47 +0900 Subject: [PATCH 13/68] =?UTF-8?q?CUDA=20=E3=83=AA=E3=83=9D=E3=82=B8?= =?UTF-8?q?=E3=83=88=E3=83=AA=E3=82=92=E8=BF=BD=E5=8A=A0=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 | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fffb856..494b059 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,6 +53,16 @@ jobs: - uses: actions/checkout@v2 - name: Install deps run: | + # 標準のリポジトリだと mesa-va-drivers パッケージが無い(404 NotFound)というエラーを出されてしまうので、 + # CUDA のリポジトリを追加してインストール可能にする + sudo apt-get update + sudo apt-get install -y software-properties-common + # CUDA 10 なので ubuntu1804 で正しい + wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin + sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 + sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub + sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /" + sudo apt-get update DEBIAN_FRONTEND=noninteractive sudo apt-get -y install libva-dev libdrm-dev - run: python3 run.py ${{ matrix.name }} --package - name: Get package name From 6aabefc59a0a117122c9ec2da8996308e217e2c1 Mon Sep 17 00:00:00 2001 From: melpon Date: Thu, 19 Jan 2023 20:42:23 +0900 Subject: [PATCH 14/68] =?UTF-8?q?CHANGES=20=E6=9B=B4=E6=96=B0?= 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 711d746..6f26d50 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,8 @@ - @voluntas - [UPDATE] `CLI11` を `2.3.1` に上げる - @voluntas +- [ADD] Ubuntu 22.04 x86_64 のビルドを追加 + - @melpon - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する - @torikizi - [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 From 1d88c6d323401f4ac73e80daa510ba6af23378d8 Mon Sep 17 00:00:00 2001 From: melpon Date: Fri, 27 Jan 2023 03:09:39 +0900 Subject: [PATCH 15/68] =?UTF-8?q?softprops/action-gh-release=20=E3=82=92?= =?UTF-8?q?=E5=88=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/actions/download/action.yml | 28 ++++++++ .github/workflows/build.yml | 108 +++++----------------------- CHANGES.md | 2 + 3 files changed, 49 insertions(+), 89 deletions(-) create mode 100644 .github/actions/download/action.yml diff --git a/.github/actions/download/action.yml b/.github/actions/download/action.yml new file mode 100644 index 0000000..4cee2a5 --- /dev/null +++ b/.github/actions/download/action.yml @@ -0,0 +1,28 @@ +name: download-artifact + +description: Download Artifact + +inputs: + platform: + description: Platform + required: true + +runs: + using: composite + steps: + - uses: actions/download-artifact@v3 + with: + name: ${{ inputs.platform }}.env + path: ${{ inputs.platform }}.env + - name: Env to output + shell: bash + run: | + sed -i 's/\r//g' ${{ inputs.platform }}.env/zakuro.env + source ${{ inputs.platform }}.env/zakuro.env + echo "package_name=$PACKAGE_NAME" >> $GITHUB_OUTPUT + echo "$PACKAGE_NAME/$PACKAGE_NAME" >> package_paths.env + id: env + - uses: actions/download-artifact@v3 + with: + name: ${{ steps.env.outputs.package_name }} + path: ${{ steps.env.outputs.package_name }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 494b059..c0e8b3c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,47 +11,19 @@ on: pull_request: jobs: - build-linux-2004: + build-linux: strategy: fail-fast: false matrix: name: - ubuntu-20.04_x86_64 - name: Build zakuro for ${{ matrix.name }} - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - - name: Install deps - run: | - DEBIAN_FRONTEND=noninteractive sudo apt-get -y install libva-dev libdrm-dev - - run: python3 run.py ${{ matrix.name }} --package - - name: Get package name - shell: bash - run: | - source _package/${{ matrix.name }}/release/zakuro.env - echo "name=${PACKAGE_NAME}" >> $GITHUB_OUTPUT - id: package_name - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: ${{ steps.package_name.outputs.name }} - path: _package/${{ matrix.name }}/release/${{ steps.package_name.outputs.name }} - - name: Upload Environment - uses: actions/upload-artifact@v3 - with: - name: ${{ matrix.name }}.env - path: _package/${{ matrix.name }}/release/zakuro.env - build-linux-2204: - strategy: - fail-fast: false - matrix: - name: - ubuntu-22.04_x86_64 name: Build zakuro for ${{ matrix.name }} - runs-on: ubuntu-22.04 + runs-on: ${{ matrix.name == 'ubuntu-22.04_x86_64' && 'ubuntu-22.04' || 'ubuntu-20.04' }} steps: - uses: actions/checkout@v2 - - name: Install deps + - name: Update repo + if: matrix.name == 'ubuntu-22.04_x86_64' run: | # 標準のリポジトリだと mesa-va-drivers パッケージが無い(404 NotFound)というエラーを出されてしまうので、 # CUDA のリポジトリを追加してインストール可能にする @@ -63,6 +35,8 @@ jobs: sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /" sudo apt-get update + - name: Install deps + run: | DEBIAN_FRONTEND=noninteractive sudo apt-get -y install libva-dev libdrm-dev - run: python3 run.py ${{ matrix.name }} --package - name: Get package name @@ -85,67 +59,23 @@ jobs: name: Create Release if: contains(github.ref, 'tags/202') needs: - - build-linux-2004 - - build-linux-2204 - runs-on: ubuntu-latest - steps: - - name: Create Release - id: create_release - uses: actions/create-release@v1.1.4 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} - draft: false - 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@v3 - with: - name: create-release.env - path: create-release.env - upload-assets: - name: Upload Assets to Release - needs: - - create-release + - build-linux runs-on: ubuntu-latest - strategy: - fail-fast: true - matrix: - name: - - ubuntu-20.04_x86_64 - - ubuntu-22.04_x86_64 steps: - - uses: actions/download-artifact@v3 + - uses: actions/checkout@v3 + - uses: ./.github/actions/download with: - name: ${{ matrix.name }}.env - path: ${{ matrix.name }}.env - - uses: actions/download-artifact@v3 + platform: ubuntu-20.04_x86_64 + - uses: ./.github/actions/download with: - name: create-release.env - path: create-release.env + platform: ubuntu-22.04_x86_64 - name: Env to output - shell: bash run: | - source ${{ matrix.name }}.env/zakuro.env - source create-release.env/create-release.env - echo "package_name=$PACKAGE_NAME" >> $GITHUB_OUTPUT - echo "content_type=$CONTENT_TYPE" >> $GITHUB_OUTPUT - echo "upload_url=$UPLOAD_URL" >> $GITHUB_OUTPUT - id: env - - uses: actions/download-artifact@v3 - with: - name: ${{ steps.env.outputs.package_name }} - path: ${{ steps.env.outputs.package_name }} - - name: Upload ${{ matrix.name }} Release Asset - uses: actions/upload-release-asset@v1.0.2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + echo "package_paths<> $GITHUB_OUTPUT + cat package_paths.env >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + - name: Release + uses: softprops/action-gh-release@v1 with: - upload_url: ${{ steps.env.outputs.upload_url }} - asset_path: ${{ steps.env.outputs.package_name }}/${{ steps.env.outputs.package_name }} - asset_name: ${{ steps.env.outputs.package_name }} - asset_content_type: ${{ steps.env.outputs.content_type }} + files: + ${{ steps.env.outputs.package_paths }} diff --git a/CHANGES.md b/CHANGES.md index 6f26d50..8e22e21 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,8 @@ - @voluntas - [UPDATE] `CLI11` を `2.3.1` に上げる - @voluntas +- [UPDATE] actions/create-release と actions/upload-release を softprops/action-gh-release に変更する + - @melpon - [ADD] Ubuntu 22.04 x86_64 のビルドを追加 - @melpon - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する From 083e25f05d5f6a2454b3c3025ee364798c8a53ce Mon Sep 17 00:00:00 2001 From: melpon Date: Fri, 27 Jan 2023 03:14:51 +0900 Subject: [PATCH 16/68] =?UTF-8?q?actions/checkout@v2=20=E3=82=92=E4=BD=BF?= =?UTF-8?q?=E3=81=A3=E3=81=A6=E3=81=97=E3=81=BE=E3=81=A3=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=82=92=20v3=20=E3=81=AB=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 c0e8b3c..2769107 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,7 @@ jobs: name: Build zakuro for ${{ matrix.name }} runs-on: ${{ matrix.name == 'ubuntu-22.04_x86_64' && 'ubuntu-22.04' || 'ubuntu-20.04' }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Update repo if: matrix.name == 'ubuntu-22.04_x86_64' run: | From 06626f0945f1228b55710e71bd61d4e8efa7cdca Mon Sep 17 00:00:00 2001 From: melpon Date: Fri, 27 Jan 2023 03:25:38 +0900 Subject: [PATCH 17/68] =?UTF-8?q?id=20=E3=81=8C=E6=8A=9C=E3=81=91=E3=81=A6?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2769107..4ae6654 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -74,6 +74,7 @@ jobs: echo "package_paths<> $GITHUB_OUTPUT cat package_paths.env >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT + id: env - name: Release uses: softprops/action-gh-release@v1 with: From 2de9fd34dca7e021e2b16c6c580f64b71a5c347a Mon Sep 17 00:00:00 2001 From: voluntas Date: Wed, 1 Feb 2023 16:39:17 +0900 Subject: [PATCH 18/68] Ubuntu 22.04 --- doc/BUILD.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/doc/BUILD.md b/doc/BUILD.md index 3b10405..3712aec 100644 --- a/doc/BUILD.md +++ b/doc/BUILD.md @@ -14,4 +14,15 @@ build ディレクトリ以下で `python3 run.py ubuntu-20.04_x86_64` と打つ $ python3 run.py ubuntu-20.04_x86_64 ``` -うまくいかない場合は `rm -rf _source _build _install && python3 run.py ubuntu-20.04_x86_64` を試してみてください。 \ No newline at end of file +うまくいかない場合は `rm -rf _source _build _install && python3 run.py ubuntu-20.04_x86_64` を試してみてください。 + + +## Ubuntu 22.04 (x86_64) 向けバイナリを作成する + +build ディレクトリ以下で `python3 run.py ubuntu-20.04_x86_64` と打つことで Zakuro の Ubuntu 22.04 x86_64 向けバイナリが生成されます。 + +```shell +$ python3 run.py ubuntu-22.04_x86_64 +``` + +うまくいかない場合は `rm -rf _source _build _install && python3 run.py ubuntu-22.04_x86_64` を試してみてください。 From 9bd84ddc2545f8c594f8c8a0a3faa9fe296bcea7 Mon Sep 17 00:00:00 2001 From: voluntas Date: Wed, 1 Feb 2023 16:50:30 +0900 Subject: [PATCH 19/68] =?UTF-8?q?=E3=81=9F=E3=81=84=E3=81=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/BUILD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/BUILD.md b/doc/BUILD.md index 3712aec..7e836b1 100644 --- a/doc/BUILD.md +++ b/doc/BUILD.md @@ -19,7 +19,7 @@ $ python3 run.py ubuntu-20.04_x86_64 ## Ubuntu 22.04 (x86_64) 向けバイナリを作成する -build ディレクトリ以下で `python3 run.py ubuntu-20.04_x86_64` と打つことで Zakuro の Ubuntu 22.04 x86_64 向けバイナリが生成されます。 +build ディレクトリ以下で `python3 run.py ubuntu-22.04_x86_64` と打つことで Zakuro の Ubuntu 22.04 x86_64 向けバイナリが生成されます。 ```shell $ python3 run.py ubuntu-22.04_x86_64 From 2196fd900e8856b5767b26c142b32c9580997524 Mon Sep 17 00:00:00 2001 From: voluntas Date: Wed, 1 Feb 2023 17:07:32 +0900 Subject: [PATCH 20/68] Update BUILD.md --- doc/BUILD.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/BUILD.md b/doc/BUILD.md index 7e836b1..b9041b0 100644 --- a/doc/BUILD.md +++ b/doc/BUILD.md @@ -6,6 +6,12 @@ $ git clone git@github.com:shiguredo/zakuro.git ``` +## 必要なライブラリのインストール + +```console +$ sudo apt install libxext-dev libx11-dev libdrm-dev libva-dev pkg-config python3 +``` + ## Ubuntu 20.04 (x86_64) 向けバイナリを作成する build ディレクトリ以下で `python3 run.py ubuntu-20.04_x86_64` と打つことで Zakuro の Ubuntu 20.04 x86_64 向けバイナリが生成されます。 From 37b6258f81731c26485d3644a77ac659d1f47e2f Mon Sep 17 00:00:00 2001 From: melpon Date: Wed, 8 Mar 2023 17:30:54 +0900 Subject: [PATCH 21/68] =?UTF-8?q?Sora=20C++=20SDK=20=E3=82=92=202023.2.0?= =?UTF-8?q?=20=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 --- CHANGES.md | 6 ++++ CMakeLists.txt | 1 + VERSION | 7 ++-- run.py | 24 ++++++++++++++ src/util.cpp | 14 ++------ src/virtual_client.cpp | 75 +++++++++++++++++++----------------------- 6 files changed, 72 insertions(+), 55 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 8e22e21..ce7b9f7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,12 @@ ## develop +- [CHANGE] `--fake-network-send-codel-active-queue-management` と `--fake-network-receive-codel-active-queue-management` オプションを削除 + - @melpon +- [UPDATE] WebRTC を m111.5563.4.3 に上げる + - @melpon +- [UPDATE] Sora C++ SDK を 2023.2.0 に上げる + - @melpon - [UPDATE] `CMake` を `3.25.1` に上げる - @voluntas - [UPDATE] `OpenH264` を `2.3.1` に上げる diff --git a/CMakeLists.txt b/CMakeLists.txt index 01a40b1..4d94241 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,7 @@ set(Boost_USE_STATIC_LIBS ON) set(WEBRTC_LIBRARY_NAME webrtc) find_package(Boost REQUIRED COMPONENTS json filesystem) +find_package(Lyra REQUIRED) find_package(WebRTC REQUIRED) find_package(Sora REQUIRED) find_package(Threads REQUIRED) diff --git a/VERSION b/VERSION index 6579c16..3e966d2 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,8 @@ ZAKURO_VERSION=2022.7.1 -SORA_CPP_SDK_VERSION=2022.14.0 -WEBRTC_BUILD_VERSION=m105.5195.0.0 -BOOST_VERSION=1.80.0 +SORA_CPP_SDK_VERSION=2023.2.0 +WEBRTC_BUILD_VERSION=m111.5563.4.3 +BOOST_VERSION=1.81.0 +LYRA_VERSION=1.3.0 CLI11_VERSION=v2.3.1 CMAKE_VERSION=3.25.1 BLEND2D_VERSION=a84dfdbd1d03f9b203e18b9158387af32b6ce41e diff --git a/run.py b/run.py index f43557c..456e1fd 100644 --- a/run.py +++ b/run.py @@ -433,6 +433,18 @@ def install_boost(version, source_dir, install_dir, sora_version, platform: str) extract(archive, output_dir=install_dir, output_dirname='boost') +@versioned +def install_lyra(version, source_dir, install_dir, sora_version, platform: str): + win = platform.startswith("windows_") + filename = f'lyra-{version}_sora-cpp-sdk-{sora_version}_{platform}.{"zip" if win else "tar.gz"}' + rm_rf(os.path.join(source_dir, filename)) + archive = download( + f'https://github.com/shiguredo/sora-cpp-sdk/releases/download/{sora_version}/{filename}', + output_dir=source_dir) + rm_rf(os.path.join(install_dir, 'lyra')) + extract(archive, output_dir=install_dir, output_dirname='lyra') + + def cmake_path(path: str) -> str: return path.replace('\\', '/') @@ -602,6 +614,17 @@ def install_deps(source_dir, build_dir, install_dir, debug, platform): } install_boost(**install_boost_args) + # Lyra + install_lyra_args = { + 'version': version['LYRA_VERSION'], + 'version_file': os.path.join(install_dir, 'lyra.version'), + 'source_dir': source_dir, + 'install_dir': install_dir, + 'sora_version': version['SORA_CPP_SDK_VERSION'], + 'platform': platform, + } + install_lyra(**install_lyra_args) + # CMake install_cmake_args = { 'version': version['CMAKE_VERSION'], @@ -712,6 +735,7 @@ def main(): cmake_args.append(f'-DZAKURO_COMMIT={zakuro_commit}') cmake_args.append(f"-DSORA_DIR={cmake_path(os.path.join(install_dir, 'sora'))}") cmake_args.append(f"-DBOOST_ROOT={cmake_path(os.path.join(install_dir, 'boost'))}") + cmake_args.append(f"-DLYRA_DIR={cmake_path(os.path.join(install_dir, 'lyra'))}") cmake_args.append(f"-DWEBRTC_INCLUDE_DIR={cmake_path(webrtc_info.webrtc_include_dir)}") cmake_args.append(f"-DWEBRTC_LIBRARY_DIR={cmake_path(webrtc_info.webrtc_library_dir)}") cmake_args.append(f"-DCLI11_ROOT_DIR={cmake_path(os.path.join(install_dir, 'cli11'))}") diff --git a/src/util.cpp b/src/util.cpp index c662bdb..c5a4fe1 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -266,10 +266,6 @@ void Util::ParseArgs(const std::vector& cargs, app.add_option("--fake-network-send-packet-overhead", config.fake_network_send.packet_overhead, "Additional bytes to add to packet size for sending"); - app.add_option("--fake-network-send-codel-active-queue-management", - config.fake_network_send.codel_active_queue_management, - "Enable CoDel active queue management for sending") - ->transform(CLI::CheckedTransformer(bool_map, CLI::ignore_case)); app.add_option("--fake-network-receive-queue-length-packets", config.fake_network_receive.queue_length_packets, "Queue length in number of packets for receiving"); @@ -295,10 +291,6 @@ void Util::ParseArgs(const std::vector& cargs, app.add_option("--fake-network-receive-packet-overhead", config.fake_network_receive.packet_overhead, "Additional bytes to add to packet size for receiving"); - app.add_option("--fake-network-receive-codel-active-queue-management", - config.fake_network_receive.codel_active_queue_management, - "Enable CoDel active queue management for receiving") - ->transform(CLI::CheckedTransformer(bool_map, CLI::ignore_case)); try { app.parse(args); @@ -746,7 +738,7 @@ http::response Util::BadRequest( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = why.to_string(); + res.body() = std::string(why); res.prepare_payload(); return res; } @@ -758,7 +750,7 @@ http::response Util::NotFound( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "The resource '" + target.to_string() + "' was not found."; + res.body() = "The resource '" + std::string(target) + "' was not found."; res.prepare_payload(); return res; } @@ -771,7 +763,7 @@ http::response Util::ServerError( res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/html"); res.keep_alive(req.keep_alive()); - res.body() = "An error occurred: '" + what.to_string() + "'"; + res.body() = "An error occurred: '" + std::string(what) + "'"; res.prepare_payload(); return res; } diff --git a/src/virtual_client.cpp b/src/virtual_client.cpp index b93872d..3ed8028 100644 --- a/src/virtual_client.cpp +++ b/src/virtual_client.cpp @@ -64,11 +64,9 @@ void VirtualClient::Connect() { sora::SoraSignalingConfig config = config_.sora_config; config.pc_factory = factory(); config.observer = shared_from_this(); - config.network_manager = signaling_thread()->Invoke( - RTC_FROM_HERE, + config.network_manager = signaling_thread()->BlockingCall( [this]() { return connection_context()->default_network_manager(); }); - config.socket_factory = signaling_thread()->Invoke( - RTC_FROM_HERE, + config.socket_factory = signaling_thread()->BlockingCall( [this]() { return connection_context()->default_socket_factory(); }); signaling_ = sora::SoraSignaling::Create(config); @@ -115,46 +113,41 @@ void VirtualClient::ConfigureDependencies( cricket::MediaEngineDependencies media_dependencies; media_dependencies.task_queue_factory = dependencies.task_queue_factory.get(); - media_dependencies.adm = - worker_thread()->Invoke>( - RTC_FROM_HERE, [&] { - ZakuroAudioDeviceModuleConfig admconfig; - admconfig.task_queue_factory = - dependencies.task_queue_factory.get(); - if (config_.audio_type == VirtualClientConfig::AudioType::Device) { + media_dependencies.adm = worker_thread()->BlockingCall([&] { + ZakuroAudioDeviceModuleConfig admconfig; + admconfig.task_queue_factory = dependencies.task_queue_factory.get(); + if (config_.audio_type == VirtualClientConfig::AudioType::Device) { #if defined(__linux__) - webrtc::AudioDeviceModule::AudioLayer audio_layer = - webrtc::AudioDeviceModule::kLinuxAlsaAudio; + webrtc::AudioDeviceModule::AudioLayer audio_layer = + webrtc::AudioDeviceModule::kLinuxAlsaAudio; #else - webrtc::AudioDeviceModule::AudioLayer audio_layer = - webrtc::AudioDeviceModule::kPlatformDefaultAudio; + webrtc::AudioDeviceModule::AudioLayer audio_layer = + webrtc::AudioDeviceModule::kPlatformDefaultAudio; #endif - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; - admconfig.adm = webrtc::AudioDeviceModule::Create( - audio_layer, dependencies.task_queue_factory.get()); - } else if (config_.audio_type == - VirtualClientConfig::AudioType::NoAudio) { - webrtc::AudioDeviceModule::AudioLayer audio_layer = - webrtc::AudioDeviceModule::kDummyAudio; - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; - admconfig.adm = webrtc::AudioDeviceModule::Create( - audio_layer, dependencies.task_queue_factory.get()); - } else if (config_.audio_type == - VirtualClientConfig::AudioType::SpecifiedFakeAudio) { - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::FakeAudio; - admconfig.fake_audio = config_.fake_audio; - } else if (config_.audio_type == - VirtualClientConfig::AudioType::AutoGenerateFakeAudio) { - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::Safari; - } else if (config_.audio_type == - VirtualClientConfig::AudioType::External) { - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::External; - admconfig.render = config_.render_audio; - admconfig.sample_rate = config_.sample_rate; - admconfig.channels = config_.channels; - } - return ZakuroAudioDeviceModule::Create(std::move(admconfig)); - }); + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; + admconfig.adm = webrtc::AudioDeviceModule::Create( + audio_layer, dependencies.task_queue_factory.get()); + } else if (config_.audio_type == VirtualClientConfig::AudioType::NoAudio) { + webrtc::AudioDeviceModule::AudioLayer audio_layer = + webrtc::AudioDeviceModule::kDummyAudio; + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; + admconfig.adm = webrtc::AudioDeviceModule::Create( + audio_layer, dependencies.task_queue_factory.get()); + } else if (config_.audio_type == + VirtualClientConfig::AudioType::SpecifiedFakeAudio) { + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::FakeAudio; + admconfig.fake_audio = config_.fake_audio; + } else if (config_.audio_type == + VirtualClientConfig::AudioType::AutoGenerateFakeAudio) { + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::Safari; + } else if (config_.audio_type == VirtualClientConfig::AudioType::External) { + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::External; + admconfig.render = config_.render_audio; + admconfig.sample_rate = config_.sample_rate; + admconfig.channels = config_.channels; + } + return ZakuroAudioDeviceModule::Create(std::move(admconfig)); + }); media_dependencies.audio_encoder_factory = webrtc::CreateBuiltinAudioEncoderFactory(); media_dependencies.audio_decoder_factory = From 47f18e1cd854387f431ad17ff65b2e13365a82e6 Mon Sep 17 00:00:00 2001 From: Mio Sakuma Date: Mon, 20 Mar 2023 15:29:48 +0900 Subject: [PATCH 22/68] =?UTF-8?q?=E3=83=91=E3=83=83=E3=82=B1=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=AE=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E5=90=8D?= =?UTF-8?q?=E3=82=92=20zakuro-{version}=20=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 3 ++- run.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index ce7b9f7..b614946 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -33,8 +33,9 @@ - @sile - [FIX] クライアント名が消えてたのを修正 - @melpon -- [FIX] パッケージを展開した際の名前が `zakuro` になってしまっていたのを `zakuro-{version}_{platform}` にする +- [FIX] パッケージを展開した際の名前が `zakuro` になってしまっていたのを `zakuro-{version}` にする - @melpon + - @miosakuma ## 2022.7.1 (2022-10-31) diff --git a/run.py b/run.py index 456e1fd..d3251e5 100644 --- a/run.py +++ b/run.py @@ -749,7 +749,7 @@ def main(): if args.package: mkdir_p(package_dir) - zakuro_package_dir = os.path.join(package_dir, f'zakuro-{zakuro_version}_{args.target}') + zakuro_package_dir = os.path.join(package_dir, f'zakuro-{zakuro_version}') rm_rf(zakuro_package_dir) rm_rf(os.path.join(package_dir, 'zakuro.env')) @@ -775,7 +775,7 @@ def main(): archive_name = f'zakuro-{zakuro_version}_{args.target}.tar.gz' archive_path = os.path.join(package_dir, archive_name) with tarfile.open(archive_path, 'w:gz') as f: - for file in enum_all_files(f'zakuro-{zakuro_version}_{args.target}', '.'): + for file in enum_all_files(f'zakuro-{zakuro_version}', '.'): f.add(name=file, arcname=file) with open(os.path.join(package_dir, 'zakuro.env'), 'w') as f: f.write("CONTENT_TYPE=application/gzip\n") From 5b56fe015f8769a5e68213986d5056dd2b80a56b Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 4 Apr 2023 09:40:00 +0900 Subject: [PATCH 23/68] =?UTF-8?q?Sora=20C++=20SDK=20=E3=81=AE=20feature/ge?= =?UTF-8?q?n-client=20=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 +- VERSION | 4 +- src/virtual_client.cpp | 172 ++++++++++++++++++++++------------------- src/virtual_client.h | 29 ++++--- src/zakuro.cpp | 4 +- 5 files changed, 110 insertions(+), 103 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b614946..99a27da 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,9 +13,9 @@ - [CHANGE] `--fake-network-send-codel-active-queue-management` と `--fake-network-receive-codel-active-queue-management` オプションを削除 - @melpon -- [UPDATE] WebRTC を m111.5563.4.3 に上げる +- [UPDATE] WebRTC を m111.5563.4.4 に上げる - @melpon -- [UPDATE] Sora C++ SDK を 2023.2.0 に上げる +- [UPDATE] Sora C++ SDK を 2023.3.0 に上げる - @melpon - [UPDATE] `CMake` を `3.25.1` に上げる - @voluntas diff --git a/VERSION b/VERSION index 3e966d2..8ab27ed 100644 --- a/VERSION +++ b/VERSION @@ -1,6 +1,6 @@ ZAKURO_VERSION=2022.7.1 -SORA_CPP_SDK_VERSION=2023.2.0 -WEBRTC_BUILD_VERSION=m111.5563.4.3 +SORA_CPP_SDK_VERSION=2023.3.0 +WEBRTC_BUILD_VERSION=m111.5563.4.4 BOOST_VERSION=1.81.0 LYRA_VERSION=1.3.0 CLI11_VERSION=v2.3.1 diff --git a/src/virtual_client.cpp b/src/virtual_client.cpp index 3ed8028..59cdb57 100644 --- a/src/virtual_client.cpp +++ b/src/virtual_client.cpp @@ -21,8 +21,85 @@ #include "nop_video_decoder.h" #include "sctp_transport_factory.h" -VirtualClient::VirtualClient(VirtualClientConfig config) - : sora::SoraDefaultClient(config_), config_(config) {} +std::shared_ptr VirtualClient::Create( + VirtualClientConfig config) { + auto vc = std::make_shared(); + vc->config_ = std::move(config); + + sora::SoraClientContextConfig context_config; + context_config.use_hardware_encoder = false; + context_config.use_audio_device = false; + + context_config.configure_media_dependencies = + [vc](const webrtc::PeerConnectionFactoryDependencies& dependencies, + cricket::MediaEngineDependencies& media_dependencies) { + media_dependencies.adm = dependencies.worker_thread->BlockingCall([&] { + ZakuroAudioDeviceModuleConfig admconfig; + admconfig.task_queue_factory = dependencies.task_queue_factory.get(); + if (vc->config_.audio_type == + VirtualClientConfig::AudioType::Device) { +#if defined(__linux__) + webrtc::AudioDeviceModule::AudioLayer audio_layer = + webrtc::AudioDeviceModule::kLinuxAlsaAudio; +#else + webrtc::AudioDeviceModule::AudioLayer audio_layer = + webrtc::AudioDeviceModule::kPlatformDefaultAudio; +#endif + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; + admconfig.adm = webrtc::AudioDeviceModule::Create( + audio_layer, dependencies.task_queue_factory.get()); + } else if (vc->config_.audio_type == + VirtualClientConfig::AudioType::NoAudio) { + webrtc::AudioDeviceModule::AudioLayer audio_layer = + webrtc::AudioDeviceModule::kDummyAudio; + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; + admconfig.adm = webrtc::AudioDeviceModule::Create( + audio_layer, dependencies.task_queue_factory.get()); + } else if (vc->config_.audio_type == + VirtualClientConfig::AudioType::SpecifiedFakeAudio) { + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::FakeAudio; + admconfig.fake_audio = vc->config_.fake_audio; + } else if (vc->config_.audio_type == + VirtualClientConfig::AudioType::AutoGenerateFakeAudio) { + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::Safari; + } else if (vc->config_.audio_type == + VirtualClientConfig::AudioType::External) { + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::External; + admconfig.render = vc->config_.render_audio; + admconfig.sample_rate = vc->config_.sample_rate; + admconfig.channels = vc->config_.channels; + } + return ZakuroAudioDeviceModule::Create(std::move(admconfig)); + }); + + auto sw_config = sora::GetSoftwareOnlyVideoEncoderFactoryConfig(); + sw_config.use_simulcast_adapter = true; + sw_config.encoders.push_back(sora::VideoEncoderConfig( + webrtc::kVideoCodecH264, + [openh264 = vc->config_.openh264]( + auto format) -> std::unique_ptr { + return webrtc::DynamicH264VideoEncoder::Create( + cricket::VideoCodec(format), openh264); + })); + media_dependencies.video_encoder_factory = + absl::make_unique( + std::move(sw_config)); + media_dependencies.video_decoder_factory.reset( + new NopVideoDecoderFactory()); + }; + + context_config.configure_dependencies = + [vc](webrtc::PeerConnectionFactoryDependencies& dependencies) { + dependencies.call_factory = CreateFakeNetworkCallFactory( + vc->config_.fake_network_send, vc->config_.fake_network_receive); + dependencies.sctp_factory.reset( + new SctpTransportFactory(dependencies.network_thread)); + }; + + vc->context_ = sora::SoraClientContext::Create(context_config); + + return vc; +} void VirtualClient::Connect() { if (closing_) { @@ -47,13 +124,14 @@ void VirtualClient::Connect() { if (config_.disable_highpass_filter) ao.highpass_filter = false; std::string audio_track_id = rtc::CreateRandomString(16); - audio_track_ = factory()->CreateAudioTrack( - audio_track_id, factory()->CreateAudioSource(ao).get()); + audio_track_ = context_->peer_connection_factory()->CreateAudioTrack( + audio_track_id, + context_->peer_connection_factory()->CreateAudioSource(ao).get()); } if (!config_.no_video_device) { std::string video_track_id = rtc::CreateRandomString(16); - video_track_ = - factory()->CreateVideoTrack(video_track_id, config_.capturer.get()); + video_track_ = context_->peer_connection_factory()->CreateVideoTrack( + video_track_id, config_.capturer.get()); if (config_.fixed_resolution) { video_track_->set_content_hint( @@ -62,12 +140,14 @@ void VirtualClient::Connect() { } sora::SoraSignalingConfig config = config_.sora_config; - config.pc_factory = factory(); + config.pc_factory = context_->peer_connection_factory(); config.observer = shared_from_this(); - config.network_manager = signaling_thread()->BlockingCall( - [this]() { return connection_context()->default_network_manager(); }); - config.socket_factory = signaling_thread()->BlockingCall( - [this]() { return connection_context()->default_socket_factory(); }); + config.network_manager = context_->signaling_thread()->BlockingCall([this]() { + return context_->connection_context()->default_network_manager(); + }); + config.socket_factory = context_->signaling_thread()->BlockingCall([this]() { + return context_->connection_context()->default_socket_factory(); + }); signaling_ = sora::SoraSignaling::Create(config); signaling_->Connect(); @@ -108,76 +188,6 @@ VirtualClientStats VirtualClient::GetStats() const { return st; } -void VirtualClient::ConfigureDependencies( - webrtc::PeerConnectionFactoryDependencies& dependencies) { - cricket::MediaEngineDependencies media_dependencies; - - media_dependencies.task_queue_factory = dependencies.task_queue_factory.get(); - media_dependencies.adm = worker_thread()->BlockingCall([&] { - ZakuroAudioDeviceModuleConfig admconfig; - admconfig.task_queue_factory = dependencies.task_queue_factory.get(); - if (config_.audio_type == VirtualClientConfig::AudioType::Device) { -#if defined(__linux__) - webrtc::AudioDeviceModule::AudioLayer audio_layer = - webrtc::AudioDeviceModule::kLinuxAlsaAudio; -#else - webrtc::AudioDeviceModule::AudioLayer audio_layer = - webrtc::AudioDeviceModule::kPlatformDefaultAudio; -#endif - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; - admconfig.adm = webrtc::AudioDeviceModule::Create( - audio_layer, dependencies.task_queue_factory.get()); - } else if (config_.audio_type == VirtualClientConfig::AudioType::NoAudio) { - webrtc::AudioDeviceModule::AudioLayer audio_layer = - webrtc::AudioDeviceModule::kDummyAudio; - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; - admconfig.adm = webrtc::AudioDeviceModule::Create( - audio_layer, dependencies.task_queue_factory.get()); - } else if (config_.audio_type == - VirtualClientConfig::AudioType::SpecifiedFakeAudio) { - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::FakeAudio; - admconfig.fake_audio = config_.fake_audio; - } else if (config_.audio_type == - VirtualClientConfig::AudioType::AutoGenerateFakeAudio) { - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::Safari; - } else if (config_.audio_type == VirtualClientConfig::AudioType::External) { - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::External; - admconfig.render = config_.render_audio; - admconfig.sample_rate = config_.sample_rate; - admconfig.channels = config_.channels; - } - return ZakuroAudioDeviceModule::Create(std::move(admconfig)); - }); - media_dependencies.audio_encoder_factory = - webrtc::CreateBuiltinAudioEncoderFactory(); - media_dependencies.audio_decoder_factory = - webrtc::CreateBuiltinAudioDecoderFactory(); - - auto sw_config = sora::GetSoftwareOnlyVideoEncoderFactoryConfig(); - sw_config.use_simulcast_adapter = true; - sw_config.encoders.push_back(sora::VideoEncoderConfig( - webrtc::kVideoCodecH264, - [openh264 = config_.openh264]( - auto format) -> std::unique_ptr { - return webrtc::DynamicH264VideoEncoder::Create( - cricket::VideoCodec(format), openh264); - })); - media_dependencies.video_encoder_factory = - absl::make_unique(std::move(sw_config)); - media_dependencies.video_decoder_factory.reset(new NopVideoDecoderFactory()); - - media_dependencies.audio_mixer = nullptr; - media_dependencies.audio_processing = - webrtc::AudioProcessingBuilder().Create(); - - dependencies.media_engine = - cricket::CreateMediaEngine(std::move(media_dependencies)); - - dependencies.call_factory = CreateFakeNetworkCallFactory( - config_.fake_network_send, config_.fake_network_receive); - dependencies.sctp_factory.reset(new SctpTransportFactory(network_thread())); -} - void VirtualClient::OnSetOffer(std::string offer) { std::string stream_id = rtc::CreateRandomString(16); if (audio_track_ != nullptr) { diff --git a/src/virtual_client.h b/src/virtual_client.h index 41dc865..56ef672 100644 --- a/src/virtual_client.h +++ b/src/virtual_client.h @@ -4,7 +4,7 @@ #include // Sora C++ SDK -#include +#include // WebRTC #include @@ -22,7 +22,7 @@ struct VirtualClientStats { bool datachannel_connected = false; }; -struct VirtualClientConfig : sora::SoraDefaultClientConfig { +struct VirtualClientConfig { rtc::scoped_refptr capturer; sora::SoraSignalingConfig sora_config; @@ -59,9 +59,9 @@ struct VirtualClientConfig : sora::SoraDefaultClientConfig { }; class VirtualClient : public std::enable_shared_from_this, - public sora::SoraDefaultClient { + public sora::SoraSignalingObserver { public: - VirtualClient(VirtualClientConfig config); + static std::shared_ptr Create(VirtualClientConfig config); void Connect(); void Close(); @@ -70,22 +70,19 @@ class VirtualClient : public std::enable_shared_from_this, VirtualClientStats GetStats() const; - void ConfigureDependencies( - webrtc::PeerConnectionFactoryDependencies& dependencies) override; - void OnSetOffer(std::string offer) override; void OnDisconnect(sora::SoraSignalingErrorCode ec, std::string message) override; - //void OnNotify(std::string text); - //void OnPush(std::string text); - //void OnMessage(std::string label, std::string data); + void OnNotify(std::string text) override {} + void OnPush(std::string text) override {} + void OnMessage(std::string label, std::string data) override {} - //virtual void OnTrack( - // rtc::scoped_refptr transceiver); - //virtual void OnRemoveTrack( - // rtc::scoped_refptr receiver); + void OnTrack(rtc::scoped_refptr transceiver) + override {} + void OnRemoveTrack( + rtc::scoped_refptr receiver) override {} - //virtual void OnDataChannel(std::string label); + void OnDataChannel(std::string label) override {} private: VirtualClientConfig config_; @@ -94,6 +91,8 @@ class VirtualClient : public std::enable_shared_from_this, std::shared_ptr signaling_; rtc::scoped_refptr audio_track_; rtc::scoped_refptr video_track_; + // 最後に解放したいので、最後に宣言する + std::shared_ptr context_; }; #endif diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 015ebb1..45b36c1 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -270,8 +270,6 @@ int Zakuro::Run() { VirtualClientConfig vc_config; sora::SoraSignalingConfig& sora_config = vc_config.sora_config; - vc_config.use_hardware_encoder = false; - vc_config.use_audio_device = false; vc_config.capturer = capturer; vc_config.no_video_device = config_.no_video_device; vc_config.fixed_resolution = config_.fixed_resolution; @@ -364,7 +362,7 @@ int Zakuro::Run() { } for (int i = 0; i < config_.vcs; i++) { - auto vc = sora::CreateSoraClient(vc_configs[i]); + auto vc = VirtualClient::Create(vc_configs[i]); vcs.push_back(std::move(vc)); } From 4e715e6fc0c0e9d8a9f1bbf7925682216ea48a8c Mon Sep 17 00:00:00 2001 From: melpon Date: Sat, 8 Apr 2023 10:26:12 +0900 Subject: [PATCH 24/68] =?UTF-8?q?Sora=20C++=20SDK=20=E3=82=92=202023.4.0?= =?UTF-8?q?=20=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 --- CHANGES.md | 2 +- VERSION | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 99a27da..a10abd8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,7 +15,7 @@ - @melpon - [UPDATE] WebRTC を m111.5563.4.4 に上げる - @melpon -- [UPDATE] Sora C++ SDK を 2023.3.0 に上げる +- [UPDATE] Sora C++ SDK を 2023.4.0 に上げる - @melpon - [UPDATE] `CMake` を `3.25.1` に上げる - @voluntas diff --git a/VERSION b/VERSION index 8ab27ed..9c7a4be 100644 --- a/VERSION +++ b/VERSION @@ -1,5 +1,5 @@ ZAKURO_VERSION=2022.7.1 -SORA_CPP_SDK_VERSION=2023.3.0 +SORA_CPP_SDK_VERSION=2023.4.0 WEBRTC_BUILD_VERSION=m111.5563.4.4 BOOST_VERSION=1.81.0 LYRA_VERSION=1.3.0 From a55df64ad7019fa8a0b7cb59d5da6a2fcf8c5a39 Mon Sep 17 00:00:00 2001 From: torikizi Date: Sun, 9 Apr 2023 12:18:27 +0900 Subject: [PATCH 25/68] =?UTF-8?q?Lyra=20=E3=81=AE=E3=83=91=E3=83=A9?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=82=BF=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/util.cpp | 9 ++++++++- src/zakuro.cpp | 3 +++ src/zakuro.h | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/util.cpp b/src/util.cpp index c5a4fe1..8208f17 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -173,7 +173,14 @@ void Util::ParseArgs(const std::vector& cargs, ->check(CLI::IsMember({"", "VP8", "VP9", "AV1", "H264"})); app.add_option("--sora-audio-codec-type", config.sora_audio_codec_type, "Audio codec for send") - ->check(CLI::IsMember({"", "OPUS"})); + ->check(CLI::IsMember({"", "OPUS", "LYRA"})); + app.add_option("--sora-audio-codec-lyra-bitrate", config.sora_audio_codec_lyra_bit_rate, + "Lyra audio codec bitrate") + ->check(CLI::Range(0, 9200)); + app.add_option("--sora-audio-codec-lyra-usedtx", config.sora_audio_codec_lyra_dtx, + "Lyra usedtx"); + app.add_option("--sora-check_lyra_version", config.sora_audio_codec_lyra_dtx, + "Lyra version check"); app.add_option("--sora-video-bit-rate", config.sora_video_bit_rate, "Video bit rate") ->check(CLI::Range(0, 30000)); diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 45b36c1..36b9c0f 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -314,6 +314,9 @@ int Zakuro::Run() { sora_config.audio = config_.sora_audio; sora_config.video_codec_type = config_.sora_video_codec_type; sora_config.audio_codec_type = config_.sora_audio_codec_type; + sora_config.audio_codec_lyra_bitrate = config_.sora_audio_codec_lyra_bit_rate; + sora_config.audio_codec_lyra_usedtx = config_.sora_audio_codec_lyra_dtx; + sora_config.check_lyra_version = config_.sora_check_lyra_version; sora_config.video_bit_rate = config_.sora_video_bit_rate; sora_config.audio_bit_rate = config_.sora_audio_bit_rate; sora_config.metadata = config_.sora_metadata; diff --git a/src/zakuro.h b/src/zakuro.h index b72512b..45c233c 100644 --- a/src/zakuro.h +++ b/src/zakuro.h @@ -51,6 +51,10 @@ struct ZakuroConfig { // 空文字の場合コーデックは Sora 側で決める std::string sora_video_codec_type = ""; std::string sora_audio_codec_type = ""; + // Lyra 用の設定 + int sora_audio_codec_lyra_bit_rate = 0; + bool sora_audio_codec_lyra_dtx = false; + bool sora_check_lyra_version = false; // 0 の場合ビットレートは Sora 側で決める int sora_video_bit_rate = 0; int sora_audio_bit_rate = 0; From fc51abb66a634ba091dd55d5b5c6967fadcbd3f5 Mon Sep 17 00:00:00 2001 From: torikizi Date: Sun, 9 Apr 2023 20:03:26 +0900 Subject: [PATCH 26/68] =?UTF-8?q?Lyra=20=E3=81=AB=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E3=81=AA=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E5=90=AB?= =?UTF-8?q?=E3=82=81=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- run.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/run.py b/run.py index d3251e5..1319bb3 100644 --- a/run.py +++ b/run.py @@ -746,6 +746,8 @@ def main(): cmd(['cmake', BASE_DIR, *cmake_args]) cmd(['cmake', '--build', '.', f'-j{multiprocessing.cpu_count()}', '--config', configuration]) + # Lyra の model_coeffs をコピー + shutil.copytree(os.path.join(install_dir, 'lyra/share', 'model_coeffs'), os.path.join(build_dir, 'zakuro', 'model_coeffs')) if args.package: mkdir_p(package_dir) @@ -760,6 +762,7 @@ def main(): mkdir_p(zakuro_package_dir) with cd(zakuro_package_dir): shutil.copyfile(os.path.join(build_dir, 'zakuro', 'zakuro'), 'zakuro') + shutil.copytree(os.path.join(install_dir, 'lyra/share', 'model_coeffs'), 'model_coeffs') shutil.copyfile(os.path.join(BASE_DIR, 'LICENSE'), 'LICENSE') with open('NOTICE', 'w') as f: f.write(open(os.path.join(BASE_DIR, 'NOTICE')).read()) From 4c10680c98c834387532ded5c175de8a7254ed3b Mon Sep 17 00:00:00 2001 From: torikizi Date: Mon, 10 Apr 2023 15:55:47 +0900 Subject: [PATCH 27/68] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F=20Ly?= =?UTF-8?q?ra=20=E3=81=AE=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=81=A8=20run.py=20=E3=82=92=E4=BF=AE=E6=AD=A3=20-=20usedtx?= =?UTF-8?q?=20=E3=82=92=E4=BB=96=E3=81=A8=E5=90=88=E3=82=8F=E3=81=9B?= =?UTF-8?q?=E3=81=9F=E5=90=8D=E7=A7=B0=E3=81=AB=E4=BF=AE=E6=AD=A3=20-=20us?= =?UTF-8?q?edrx=20=E3=82=92=20optional=5Fbool=5Fmap=20=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=20-=20Lyra=20=E3=81=AE=E3=83=A2=E3=83=87=E3=83=AB?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E3=81=AE=E3=82=B3=E3=83=94=E3=83=BC?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- run.py | 3 ++- src/util.cpp | 8 +++++--- src/zakuro.cpp | 2 +- src/zakuro.h | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/run.py b/run.py index 1319bb3..8892040 100644 --- a/run.py +++ b/run.py @@ -747,7 +747,8 @@ def main(): cmd(['cmake', BASE_DIR, *cmake_args]) cmd(['cmake', '--build', '.', f'-j{multiprocessing.cpu_count()}', '--config', configuration]) # Lyra の model_coeffs をコピー - shutil.copytree(os.path.join(install_dir, 'lyra/share', 'model_coeffs'), os.path.join(build_dir, 'zakuro', 'model_coeffs')) + if not os.path.join(build_dir, 'zakuro', 'model_coeffs'): + shutil.copytree(os.path.join(install_dir, 'lyra/share', 'model_coeffs'), os.path.join(build_dir, 'zakuro', 'model_coeffs')) if args.package: mkdir_p(package_dir) diff --git a/src/util.cpp b/src/util.cpp index 8208f17..99f18c6 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -177,9 +177,11 @@ void Util::ParseArgs(const std::vector& cargs, app.add_option("--sora-audio-codec-lyra-bitrate", config.sora_audio_codec_lyra_bit_rate, "Lyra audio codec bitrate") ->check(CLI::Range(0, 9200)); - app.add_option("--sora-audio-codec-lyra-usedtx", config.sora_audio_codec_lyra_dtx, - "Lyra usedtx"); - app.add_option("--sora-check_lyra_version", config.sora_audio_codec_lyra_dtx, + app.add_option("--sora-audio-codec-lyra-usedtx", config.sora_audio_codec_lyra_usedtx, + "Lyra usedtx (default: none)") + ->type_name("TEXT") + ->transform(CLI::CheckedTransformer(optional_bool_map, CLI::ignore_case)); + app.add_option("--sora-check_lyra_version", config.sora_check_lyra_version, "Lyra version check"); app.add_option("--sora-video-bit-rate", config.sora_video_bit_rate, "Video bit rate") diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 36b9c0f..f86ad0b 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -315,7 +315,7 @@ int Zakuro::Run() { sora_config.video_codec_type = config_.sora_video_codec_type; sora_config.audio_codec_type = config_.sora_audio_codec_type; sora_config.audio_codec_lyra_bitrate = config_.sora_audio_codec_lyra_bit_rate; - sora_config.audio_codec_lyra_usedtx = config_.sora_audio_codec_lyra_dtx; + sora_config.audio_codec_lyra_usedtx = config_.sora_audio_codec_lyra_usedtx; sora_config.check_lyra_version = config_.sora_check_lyra_version; sora_config.video_bit_rate = config_.sora_video_bit_rate; sora_config.audio_bit_rate = config_.sora_audio_bit_rate; diff --git a/src/zakuro.h b/src/zakuro.h index 45c233c..ebb010a 100644 --- a/src/zakuro.h +++ b/src/zakuro.h @@ -53,7 +53,7 @@ struct ZakuroConfig { std::string sora_audio_codec_type = ""; // Lyra 用の設定 int sora_audio_codec_lyra_bit_rate = 0; - bool sora_audio_codec_lyra_dtx = false; + bool sora_audio_codec_lyra_usedtx = false; bool sora_check_lyra_version = false; // 0 の場合ビットレートは Sora 側で決める int sora_video_bit_rate = 0; From 1b3be82a3cc93083c478b499ff509728de84ec3d Mon Sep 17 00:00:00 2001 From: torikizi Date: Mon, 10 Apr 2023 17:01:09 +0900 Subject: [PATCH 28/68] =?UTF-8?q?model=5Fcoeffs=20=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=94=E3=83=BC=E3=81=AE=E6=9D=A1=E4=BB=B6=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 --- run.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/run.py b/run.py index 8892040..37e2242 100644 --- a/run.py +++ b/run.py @@ -747,8 +747,7 @@ def main(): cmd(['cmake', BASE_DIR, *cmake_args]) cmd(['cmake', '--build', '.', f'-j{multiprocessing.cpu_count()}', '--config', configuration]) # Lyra の model_coeffs をコピー - if not os.path.join(build_dir, 'zakuro', 'model_coeffs'): - shutil.copytree(os.path.join(install_dir, 'lyra/share', 'model_coeffs'), os.path.join(build_dir, 'zakuro', 'model_coeffs')) + shutil.copytree(os.path.join(install_dir, 'lyra/share', 'model_coeffs'), os.path.join(build_dir, 'zakuro', 'model_coeffs'),dirs_exist_ok=True) if args.package: mkdir_p(package_dir) From 07fb1d6d86502c48ca399d63cb0a2278930c3443 Mon Sep 17 00:00:00 2001 From: torikizi Date: Wed, 12 Apr 2023 22:47:30 +0900 Subject: [PATCH 29/68] =?UTF-8?q?run.py=20=E3=81=AB=20autopep8=20=E3=82=92?= =?UTF-8?q?=E6=8E=9B=E3=81=91=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- run.py | 93 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 31 deletions(-) diff --git a/run.py b/run.py index 37e2242..1bbf173 100644 --- a/run.py +++ b/run.py @@ -342,13 +342,16 @@ def install_rootfs(version, install_dir, conf): continue # 相対パスに置き換える relpath = os.path.relpath(targetpath, dir) - logging.debug(f'{linkpath[len(rootfs_dir):]} targets {target} to {relpath}') + logging.debug( + f'{linkpath[len(rootfs_dir):]} targets {target} to {relpath}') os.remove(linkpath) os.symlink(relpath, linkpath) # なぜかシンボリックリンクが登録されていないので作っておく - link = os.path.join(rootfs_dir, 'usr', 'lib', 'aarch64-linux-gnu', 'tegra', 'libnvbuf_fdmap.so') - file = os.path.join(rootfs_dir, 'usr', 'lib', 'aarch64-linux-gnu', 'tegra', 'libnvbuf_fdmap.so.1.0.0') + link = os.path.join(rootfs_dir, 'usr', 'lib', + 'aarch64-linux-gnu', 'tegra', 'libnvbuf_fdmap.so') + file = os.path.join(rootfs_dir, 'usr', 'lib', + 'aarch64-linux-gnu', 'tegra', 'libnvbuf_fdmap.so.1.0.0') if os.path.exists(file) and not os.path.exists(link): os.symlink(os.path.basename(file), link) @@ -477,7 +480,8 @@ def install_sora(version, source_dir, install_dir, platform: str): def install_cli11(version, install_dir): cli11_install_dir = os.path.join(install_dir, 'cli11') rm_rf(cli11_install_dir) - git_clone_shallow('https://github.com/CLIUtils/CLI11.git', version, cli11_install_dir) + git_clone_shallow('https://github.com/CLIUtils/CLI11.git', + version, cli11_install_dir) @versioned @@ -486,9 +490,11 @@ def install_blend2d(version, source_dir, build_dir, install_dir, blend2d_version rm_rf(os.path.join(build_dir, 'blend2d')) rm_rf(os.path.join(install_dir, 'blend2d')) - git_clone_shallow('https://github.com/blend2d/blend2d', blend2d_version, os.path.join(source_dir, 'blend2d')) + git_clone_shallow('https://github.com/blend2d/blend2d', + blend2d_version, os.path.join(source_dir, 'blend2d')) mkdir_p(os.path.join(source_dir, 'blend2d', '3rdparty')) - git_clone_shallow('https://github.com/asmjit/asmjit', asmjit_version, os.path.join(source_dir, 'blend2d', '3rdparty', 'asmjit')) + git_clone_shallow('https://github.com/asmjit/asmjit', asmjit_version, + os.path.join(source_dir, 'blend2d', '3rdparty', 'asmjit')) mkdir_p(os.path.join(build_dir, 'blend2d')) with cd(os.path.join(build_dir, 'blend2d')): @@ -505,9 +511,11 @@ def install_blend2d(version, source_dir, build_dir, install_dir, blend2d_version def install_openh264(version, source_dir, install_dir): rm_rf(os.path.join(source_dir, 'openh264')) rm_rf(os.path.join(install_dir, 'openh264')) - git_clone_shallow('https://github.com/cisco/openh264.git', version, os.path.join(source_dir, 'openh264')) + git_clone_shallow('https://github.com/cisco/openh264.git', + version, os.path.join(source_dir, 'openh264')) with cd(os.path.join(source_dir, 'openh264')): - cmd(['make', f'PREFIX={os.path.join(install_dir, "openh264")}', 'install-headers']) + cmd([ + 'make', f'PREFIX={os.path.join(install_dir, "openh264")}', 'install-headers']) @versioned @@ -515,7 +523,8 @@ def install_yaml(version, source_dir, build_dir, install_dir, cmake_args): rm_rf(os.path.join(source_dir, 'yaml')) rm_rf(os.path.join(install_dir, 'yaml')) rm_rf(os.path.join(build_dir, 'yaml')) - git_clone_shallow('https://github.com/jbeder/yaml-cpp.git', version, os.path.join(source_dir, 'yaml')) + git_clone_shallow('https://github.com/jbeder/yaml-cpp.git', + version, os.path.join(source_dir, 'yaml')) mkdir_p(os.path.join(build_dir, 'yaml')) with cd(os.path.join(build_dir, 'yaml')): @@ -577,7 +586,8 @@ def install_deps(source_dir, build_dir, install_dir, debug, platform): install_webrtc(**install_webrtc_args) if platform in ('ubuntu-20.04_x86_64', 'ubuntu-22.04_x86_64'): - webrtc_info = get_webrtc_info(False, source_dir, build_dir, install_dir) + webrtc_info = get_webrtc_info( + False, source_dir, build_dir, install_dir) webrtc_version = read_version_file(webrtc_info.version_file) # LLVM @@ -640,7 +650,8 @@ def install_deps(source_dir, build_dir, install_dir, debug, platform): install_cmake_args['platform'] = 'macos-universal' install_cmake(**install_cmake_args) if platform == 'macos_arm64': - add_path(os.path.join(install_dir, 'cmake', 'CMake.app', 'Contents', 'bin')) + add_path(os.path.join(install_dir, 'cmake', + 'CMake.app', 'Contents', 'bin')) else: add_path(os.path.join(install_dir, 'cmake', 'bin')) @@ -700,17 +711,22 @@ def install_deps(source_dir, build_dir, install_dir, debug, platform): def main(): parser = argparse.ArgumentParser() - parser.add_argument("target", choices=['macos_arm64', 'ubuntu-20.04_x86_64', 'ubuntu-22.04_x86_64']) + parser.add_argument("target", choices=[ + 'macos_arm64', 'ubuntu-20.04_x86_64', 'ubuntu-22.04_x86_64']) parser.add_argument("--debug", action='store_true') parser.add_argument("--package", action='store_true') args = parser.parse_args() configuration_dir = 'debug' if args.debug else 'release' - source_dir = os.path.join(BASE_DIR, '_source', args.target, configuration_dir) - build_dir = os.path.join(BASE_DIR, '_build', args.target, configuration_dir) - install_dir = os.path.join(BASE_DIR, '_install', args.target, configuration_dir) - package_dir = os.path.join(BASE_DIR, '_package', args.target, configuration_dir) + source_dir = os.path.join( + BASE_DIR, '_source', args.target, configuration_dir) + build_dir = os.path.join( + BASE_DIR, '_build', args.target, configuration_dir) + install_dir = os.path.join( + BASE_DIR, '_install', args.target, configuration_dir) + package_dir = os.path.join( + BASE_DIR, '_package', args.target, configuration_dir) mkdir_p(source_dir) mkdir_p(build_dir) mkdir_p(install_dir) @@ -721,7 +737,8 @@ def main(): mkdir_p(os.path.join(build_dir, 'zakuro')) with cd(os.path.join(build_dir, 'zakuro')): - webrtc_info = get_webrtc_info(False, source_dir, build_dir, install_dir) + webrtc_info = get_webrtc_info( + False, source_dir, build_dir, install_dir) with cd(BASE_DIR): version = read_version_file('VERSION') @@ -733,25 +750,37 @@ def main(): cmake_args.append(f'-DZAKURO_PLATFORM={args.target}') cmake_args.append(f'-DZAKURO_VERSION={zakuro_version}') cmake_args.append(f'-DZAKURO_COMMIT={zakuro_commit}') - cmake_args.append(f"-DSORA_DIR={cmake_path(os.path.join(install_dir, 'sora'))}") - cmake_args.append(f"-DBOOST_ROOT={cmake_path(os.path.join(install_dir, 'boost'))}") - cmake_args.append(f"-DLYRA_DIR={cmake_path(os.path.join(install_dir, 'lyra'))}") - cmake_args.append(f"-DWEBRTC_INCLUDE_DIR={cmake_path(webrtc_info.webrtc_include_dir)}") - cmake_args.append(f"-DWEBRTC_LIBRARY_DIR={cmake_path(webrtc_info.webrtc_library_dir)}") - cmake_args.append(f"-DCLI11_ROOT_DIR={cmake_path(os.path.join(install_dir, 'cli11'))}") - cmake_args.append(f"-DBLEND2D_ROOT_DIR={cmake_path(os.path.join(install_dir, 'blend2d'))}") - cmake_args.append(f"-DOPENH264_ROOT_DIR={cmake_path(os.path.join(install_dir, 'openh264'))}") - cmake_args.append(f"-DYAML_ROOT_DIR={cmake_path(os.path.join(install_dir, 'yaml'))}") + cmake_args.append( + f"-DSORA_DIR={cmake_path(os.path.join(install_dir, 'sora'))}") + cmake_args.append( + f"-DBOOST_ROOT={cmake_path(os.path.join(install_dir, 'boost'))}") + cmake_args.append( + f"-DLYRA_DIR={cmake_path(os.path.join(install_dir, 'lyra'))}") + cmake_args.append( + f"-DWEBRTC_INCLUDE_DIR={cmake_path(webrtc_info.webrtc_include_dir)}") + cmake_args.append( + f"-DWEBRTC_LIBRARY_DIR={cmake_path(webrtc_info.webrtc_library_dir)}") + cmake_args.append( + f"-DCLI11_ROOT_DIR={cmake_path(os.path.join(install_dir, 'cli11'))}") + cmake_args.append( + f"-DBLEND2D_ROOT_DIR={cmake_path(os.path.join(install_dir, 'blend2d'))}") + cmake_args.append( + f"-DOPENH264_ROOT_DIR={cmake_path(os.path.join(install_dir, 'openh264'))}") + cmake_args.append( + f"-DYAML_ROOT_DIR={cmake_path(os.path.join(install_dir, 'yaml'))}") cmake_args += get_common_cmake_args(install_dir, args.target) cmd(['cmake', BASE_DIR, *cmake_args]) - cmd(['cmake', '--build', '.', f'-j{multiprocessing.cpu_count()}', '--config', configuration]) + cmd(['cmake', '--build', '.', + f'-j{multiprocessing.cpu_count()}', '--config', configuration]) # Lyra の model_coeffs をコピー - shutil.copytree(os.path.join(install_dir, 'lyra/share', 'model_coeffs'), os.path.join(build_dir, 'zakuro', 'model_coeffs'),dirs_exist_ok=True) + shutil.copytree(os.path.join(install_dir, 'lyra/share', 'model_coeffs'), + os.path.join(build_dir, 'zakuro', 'model_coeffs'), dirs_exist_ok=True) if args.package: mkdir_p(package_dir) - zakuro_package_dir = os.path.join(package_dir, f'zakuro-{zakuro_version}') + zakuro_package_dir = os.path.join( + package_dir, f'zakuro-{zakuro_version}') rm_rf(zakuro_package_dir) rm_rf(os.path.join(package_dir, 'zakuro.env')) @@ -761,8 +790,10 @@ def main(): mkdir_p(zakuro_package_dir) with cd(zakuro_package_dir): - shutil.copyfile(os.path.join(build_dir, 'zakuro', 'zakuro'), 'zakuro') - shutil.copytree(os.path.join(install_dir, 'lyra/share', 'model_coeffs'), 'model_coeffs') + shutil.copyfile(os.path.join( + build_dir, 'zakuro', 'zakuro'), 'zakuro') + shutil.copytree(os.path.join( + install_dir, 'lyra/share', 'model_coeffs'), 'model_coeffs') shutil.copyfile(os.path.join(BASE_DIR, 'LICENSE'), 'LICENSE') with open('NOTICE', 'w') as f: f.write(open(os.path.join(BASE_DIR, 'NOTICE')).read()) From 24550ef7ddaac443e2d081f26ff4416b6c2d08b3 Mon Sep 17 00:00:00 2001 From: torikizi Date: Wed, 12 Apr 2023 22:48:58 +0900 Subject: [PATCH 30/68] =?UTF-8?q?=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E3=81=AE=E5=87=BA=E5=8A=9B=E3=82=92=E4=BB=96=E3=81=AB?= =?UTF-8?q?=E5=90=88=E3=82=8F=E3=81=9B=E3=81=A6=20`-`=20=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= 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 99f18c6..1f438ab 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -181,7 +181,7 @@ void Util::ParseArgs(const std::vector& cargs, "Lyra usedtx (default: none)") ->type_name("TEXT") ->transform(CLI::CheckedTransformer(optional_bool_map, CLI::ignore_case)); - app.add_option("--sora-check_lyra_version", config.sora_check_lyra_version, + app.add_option("--sora-check-lyra-version", config.sora_check_lyra_version, "Lyra version check"); app.add_option("--sora-video-bit-rate", config.sora_video_bit_rate, "Video bit rate") From a2b27e56d9f6159bff88c6d145ecc65c1a4e87df Mon Sep 17 00:00:00 2001 From: torikizi Date: Wed, 12 Apr 2023 22:50:22 +0900 Subject: [PATCH 31/68] =?UTF-8?q?sora=5Faudio=5Fcodec=5Flyra=5Fusedtx=20?= =?UTF-8?q?=E3=82=92=20`boost::optional`=20=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/zakuro.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zakuro.h b/src/zakuro.h index ebb010a..d5ab2a4 100644 --- a/src/zakuro.h +++ b/src/zakuro.h @@ -53,7 +53,7 @@ struct ZakuroConfig { std::string sora_audio_codec_type = ""; // Lyra 用の設定 int sora_audio_codec_lyra_bit_rate = 0; - bool sora_audio_codec_lyra_usedtx = false; + boost::optional sora_audio_codec_lyra_usedtx; bool sora_check_lyra_version = false; // 0 の場合ビットレートは Sora 側で決める int sora_video_bit_rate = 0; From 3e275bc68d2a6c618202bff5aa9aa7c6ec913b0b Mon Sep 17 00:00:00 2001 From: melpon Date: Fri, 21 Apr 2023 16:53:22 +0900 Subject: [PATCH 32/68] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E3=81=8C=E6=AD=A3=E3=81=97=E3=81=8F=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B=E3=81=A3?= =?UTF-8?q?=E3=81=9F=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 --- run.py | 31 +++++++++++++------------------ src/zakuro_version.cpp | 2 ++ 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/run.py b/run.py index 1bbf173..a8746c3 100644 --- a/run.py +++ b/run.py @@ -739,6 +739,7 @@ def main(): with cd(os.path.join(build_dir, 'zakuro')): webrtc_info = get_webrtc_info( False, source_dir, build_dir, install_dir) + webrtc_version = read_version_file(webrtc_info.version_file) with cd(BASE_DIR): version = read_version_file('VERSION') @@ -750,24 +751,18 @@ def main(): cmake_args.append(f'-DZAKURO_PLATFORM={args.target}') cmake_args.append(f'-DZAKURO_VERSION={zakuro_version}') cmake_args.append(f'-DZAKURO_COMMIT={zakuro_commit}') - cmake_args.append( - f"-DSORA_DIR={cmake_path(os.path.join(install_dir, 'sora'))}") - cmake_args.append( - f"-DBOOST_ROOT={cmake_path(os.path.join(install_dir, 'boost'))}") - cmake_args.append( - f"-DLYRA_DIR={cmake_path(os.path.join(install_dir, 'lyra'))}") - cmake_args.append( - f"-DWEBRTC_INCLUDE_DIR={cmake_path(webrtc_info.webrtc_include_dir)}") - cmake_args.append( - f"-DWEBRTC_LIBRARY_DIR={cmake_path(webrtc_info.webrtc_library_dir)}") - cmake_args.append( - f"-DCLI11_ROOT_DIR={cmake_path(os.path.join(install_dir, 'cli11'))}") - cmake_args.append( - f"-DBLEND2D_ROOT_DIR={cmake_path(os.path.join(install_dir, 'blend2d'))}") - cmake_args.append( - f"-DOPENH264_ROOT_DIR={cmake_path(os.path.join(install_dir, 'openh264'))}") - cmake_args.append( - f"-DYAML_ROOT_DIR={cmake_path(os.path.join(install_dir, 'yaml'))}") + cmake_args.append(f"-DWEBRTC_BUILD_VERSION={webrtc_version['WEBRTC_BUILD_VERSION']}") + cmake_args.append(f"-DWEBRTC_READABLE_VERSION={webrtc_version['WEBRTC_READABLE_VERSION']}") + cmake_args.append(f"-DWEBRTC_COMMIT={webrtc_version['WEBRTC_COMMIT']}") + cmake_args.append(f"-DSORA_DIR={cmake_path(os.path.join(install_dir, 'sora'))}") + cmake_args.append(f"-DBOOST_ROOT={cmake_path(os.path.join(install_dir, 'boost'))}") + cmake_args.append(f"-DLYRA_DIR={cmake_path(os.path.join(install_dir, 'lyra'))}") + cmake_args.append(f"-DWEBRTC_INCLUDE_DIR={cmake_path(webrtc_info.webrtc_include_dir)}") + cmake_args.append(f"-DWEBRTC_LIBRARY_DIR={cmake_path(webrtc_info.webrtc_library_dir)}") + cmake_args.append(f"-DCLI11_ROOT_DIR={cmake_path(os.path.join(install_dir, 'cli11'))}") + cmake_args.append(f"-DBLEND2D_ROOT_DIR={cmake_path(os.path.join(install_dir, 'blend2d'))}") + cmake_args.append(f"-DOPENH264_ROOT_DIR={cmake_path(os.path.join(install_dir, 'openh264'))}") + cmake_args.append(f"-DYAML_ROOT_DIR={cmake_path(os.path.join(install_dir, 'yaml'))}") cmake_args += get_common_cmake_args(install_dir, args.target) cmd(['cmake', BASE_DIR, *cmake_args]) diff --git a/src/zakuro_version.cpp b/src/zakuro_version.cpp index d4566ab..c0b2e7d 100644 --- a/src/zakuro_version.cpp +++ b/src/zakuro_version.cpp @@ -7,6 +7,8 @@ #include +#include "zakuro_version.gen.h" + // バージョンやコミットハッシュ情報 // 通常は外から渡すが、渡されていなかった場合の対応 #ifndef ZAKURO_VERSION From 85b65cb1328442bfdb213ae1da23c63e2c037c44 Mon Sep 17 00:00:00 2001 From: melpon Date: Fri, 21 Apr 2023 17:08:33 +0900 Subject: [PATCH 33/68] =?UTF-8?q?Sora=20=E3=81=AB=20client=5Fid,=20bundle?= =?UTF-8?q?=5Fid=20=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E3=82=AA?= =?UTF-8?q?=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3=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 ++ src/util.cpp | 4 ++++ src/zakuro.cpp | 2 ++ src/zakuro.h | 2 ++ 4 files changed, 10 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index a10abd8..7f940ff 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -27,6 +27,8 @@ - @melpon - [ADD] Ubuntu 22.04 x86_64 のビルドを追加 - @melpon +- [ADD] `--sora-client-id` および `--sora-bundle-id` オプションを追加 + - @melpon - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する - @torikizi - [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 diff --git a/src/util.cpp b/src/util.cpp index 1f438ab..f277664 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -159,6 +159,8 @@ void Util::ParseArgs(const std::vector& cargs, app.add_flag("--sora-disable-signaling-url-randomization", config.sora_disable_signaling_url_randomization); app.add_option("--sora-channel-id", config.sora_channel_id, "Channel ID"); + app.add_option("--sora-client-id", config.sora_client_id, "Client ID"); + app.add_option("--sora-bundle-id", config.sora_bundle_id, "Bundle ID"); app.add_option("--sora-role", config.sora_role, "Role") ->check(CLI::IsMember({"sendonly", "recvonly", "sendrecv"})); @@ -516,6 +518,8 @@ std::vector> Util::NodeToArgs(const YAML::Node& inst) { DEF_BOOLEAN(sora, "sora-", "disable-signaling-url-randomization"); DEF_STRING(sora, "sora-", "channel-id"); + DEF_STRING(sora, "sora-", "client-id"); + DEF_STRING(sora, "sora-", "bundle-id"); DEF_STRING(sora, "sora-", "role"); DEF_BOOLEAN(sora, "sora-", "video"); DEF_BOOLEAN(sora, "sora-", "audio"); diff --git a/src/zakuro.cpp b/src/zakuro.cpp index f86ad0b..4f6d4d7 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -308,6 +308,8 @@ int Zakuro::Run() { sora_config.client_key = config_.client_key; sora_config.signaling_urls = config_.sora_signaling_urls; sora_config.channel_id = config_.sora_channel_id; + sora_config.client_id = config_.sora_client_id; + sora_config.bundle_id = config_.sora_bundle_id; sora_config.disable_signaling_url_randomization = config_.sora_disable_signaling_url_randomization; sora_config.video = config_.sora_video; diff --git a/src/zakuro.h b/src/zakuro.h index d5ab2a4..73bfaed 100644 --- a/src/zakuro.h +++ b/src/zakuro.h @@ -45,6 +45,8 @@ struct ZakuroConfig { std::vector sora_signaling_urls; std::string sora_channel_id; + std::string sora_client_id; + std::string sora_bundle_id; bool sora_disable_signaling_url_randomization = false; bool sora_video = true; bool sora_audio = true; From 445e375a198af313d6d387fde64761e3cc7dbdd5 Mon Sep 17 00:00:00 2001 From: miosakuma Date: Thu, 27 Apr 2023 15:49:21 +0900 Subject: [PATCH 34/68] =?UTF-8?q?README.mde=20=E3=81=AE=20zakuro=20--help?= =?UTF-8?q?=20=E3=81=AE=E5=86=85=E5=AE=B9=E3=82=92=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E5=8C=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a461022..9d7b12f 100644 --- a/README.md +++ b/README.md @@ -60,9 +60,11 @@ Options: Port number (default: -1) --output-file-connection-id TEXT Output to specified file with connection IDs + --instance-hatch-rate FLOAT:FLOAT in [0.1 - 100] + Spawned instance per seconds --name TEXT Client Name - --vcs INT:INT in [1 - 100] Virtual Clients - --hatch-rate FLOAT:FLOAT in [0.1 - 100] + --vcs INT:INT in [1 - 1000] Virtual Clients + --vcs-hatch-rate FLOAT:FLOAT in [0.1 - 100] Spawned virtual clients per seconds --no-video-device Do not use video device --no-audio-device Do not use audio device @@ -91,7 +93,10 @@ Options: Mute audio initialy --sora-signaling-url TEXT ... Signaling URLs + --sora-disable-signaling-url-randomization --sora-channel-id TEXT Channel ID + --sora-client-id TEXT Client ID + --sora-bundle-id TEXT Bundle ID --sora-role TEXT:{sendonly,recvonly,sendrecv} Role --sora-video BOOLEAN:value in {false->0,true->1} OR {0,1} @@ -100,8 +105,14 @@ Options: Send audio to sora (default: true) --sora-video-codec-type TEXT:{VP8,VP9,AV1,H264} Video codec for send - --sora-audio-codec-type TEXT:{OPUS} + --sora-audio-codec-type TEXT:{OPUS,LYRA} Audio codec for send + --sora-audio-codec-lyra-bitrate INT:INT in [0 - 9200] + Lyra audio codec bitrate + --sora-audio-codec-lyra-usedtx TEXT:value in {false-> 0,true-> 1,none->--} OR { 0, 1,--} + Lyra usedtx (default: none) + --sora-check-lyra-version BOOLEAN + Lyra version check --sora-video-bit-rate INT:INT in [0 - 30000] Video bit rate --sora-audio-bit-rate INT:INT in [0 - 510] @@ -149,8 +160,6 @@ Options: The average length of a burst of lost packets for sending --fake-network-send-packet-overhead INT Additional bytes to add to packet size for sending - --fake-network-send-codel-active-queue-management BOOLEAN:value in {false->0,true->1} OR {0,1} - Enable CoDel active queue management for sending --fake-network-receive-queue-length-packets UINT Queue length in number of packets for receiving --fake-network-receive-queue-delay-ms INT @@ -167,8 +176,6 @@ Options: The average length of a burst of lost packets for receiving --fake-network-receive-packet-overhead INT Additional bytes to add to packet size for receiving - --fake-network-receive-codel-active-queue-management BOOLEAN:value in {false->0,true->1} OR {0,1} - Enable CoDel active queue management for receiving ``` From b3a1c11f730cafcc1a312f2cb920939d11926d79 Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 7 May 2023 17:13:04 +0900 Subject: [PATCH 35/68] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9d7b12f..4716bde 100644 --- a/README.md +++ b/README.md @@ -184,8 +184,8 @@ Options: Apache License 2.0 ``` -Copyright 2020-2022, Wandbox LLC (Original Author) -Copyright 2020-2022, Shiguredo Inc. +Copyright 2020-2023, Wandbox LLC (Original Author) +Copyright 2020-2023, Shiguredo Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From 5ad28750630cf0886c0cbc833dab6d555361b9fc Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 7 May 2023 18:14:27 +0900 Subject: [PATCH 36/68] =?UTF-8?q?=E3=83=8F=E3=83=83=E3=83=81=E3=83=AC?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=81=AE=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/USE.md b/doc/USE.md index 064c89f..9358f86 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -69,9 +69,13 @@ Zakuro ではエンコーダとデコーダに負荷をかけるために砂嵐 砂嵐は VGA でも 30fps 利用する場合相当なビットレートと CPU が必要になるので注意してください。 -### ハッチレート +### インスタンスハッチレート -`--hatch-rate 1` +`--instance-hatch-rate 1` + +### VCS ハッチレート + +`--vcs-hatch-rate 1` Zakuro では 1 秒間に起動する仮想クライアント数を指定できます。デフォルトは 1 秒 1 仮想クライアントです。 基本的にはデフォルトで問題ありません。 From 6653abe83f7b5cb0c3632774ddc018fddaf72a1c Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 7 May 2023 18:16:02 +0900 Subject: [PATCH 37/68] =?UTF-8?q?=E6=B6=88=E3=81=88=E3=81=A6=E3=81=97?= =?UTF-8?q?=E3=81=BE=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/USE.md b/doc/USE.md index 9358f86..024e053 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -71,7 +71,7 @@ Zakuro ではエンコーダとデコーダに負荷をかけるために砂嵐 ### インスタンスハッチレート -`--instance-hatch-rate 1` +`--vcs-hatch-rate 1` ### VCS ハッチレート From 1c4f9f8db2573bdc29122fcf49708b9f378e862d Mon Sep 17 00:00:00 2001 From: voluntas Date: Sun, 7 May 2023 18:16:28 +0900 Subject: [PATCH 38/68] =?UTF-8?q?=E8=A3=9C=E8=B6=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/USE.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/USE.md b/doc/USE.md index 024e053..33d6866 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -73,6 +73,9 @@ Zakuro ではエンコーダとデコーダに負荷をかけるために砂嵐 `--vcs-hatch-rate 1` +Zakuro では 1 秒間に起動するインスタンス数を指定できます。デフォルトは 1 秒 1 インスタンスです。 +基本的にはデフォルトで問題ありません。 + ### VCS ハッチレート `--vcs-hatch-rate 1` From b1164acf316fed4952acf226bf9b4175202716a3 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 8 May 2023 06:22:43 +0900 Subject: [PATCH 39/68] =?UTF-8?q?stats=20=E3=81=AE=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=81=8C=E3=81=8A=E3=81=8B=E3=81=97=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=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/main.cpp | 2 +- src/zakuro_stats.h | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index cf96005..3585536 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -221,7 +221,7 @@ int main(int argc, char* argv[]) { break; } // ファイルに書き込む - const auto& m = stats->Get(); + auto m = stats->Get(); /* { "wss://hoge1.jp/signaling": { diff --git a/src/zakuro_stats.h b/src/zakuro_stats.h index 9d7f844..fcd6f3e 100644 --- a/src/zakuro_stats.h +++ b/src/zakuro_stats.h @@ -27,11 +27,14 @@ class ZakuroStats { std::chrono::steady_clock::time_point last_updated_at; }; - const std::map& Get() const { return data_; } + std::map Get() const { + std::lock_guard guard(m_); + return data_; + } private: std::map data_; - std::mutex m_; + mutable std::mutex m_; }; #endif From 21531829113b4408073dd95d4fb487f7404ef088 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 8 May 2023 06:24:56 +0900 Subject: [PATCH 40/68] =?UTF-8?q?stats=5Fth=20=E3=81=AE=E7=B5=82=E4=BA=86?= =?UTF-8?q?=E3=82=92=E5=BE=85=E3=81=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.cpp b/src/main.cpp index 3585536..a4c23bd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -285,6 +285,7 @@ int main(int argc, char* argv[]) { for (auto& th : ths) { th->join(); } + stats_th->join(); return 0; } From 788d2b76333e9d31bde29594c0775b8d956329f9 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 8 May 2023 06:44:44 +0900 Subject: [PATCH 41/68] =?UTF-8?q?=E8=A9=A6=E3=81=97=E3=81=AB=20PCFactory?= =?UTF-8?q?=20=E3=82=92=E5=85=B1=E6=9C=89=E3=81=97=E3=81=A6=E3=81=BF?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/virtual_client.cpp | 102 ++++++----------------------------------- src/virtual_client.h | 4 +- src/zakuro.cpp | 80 ++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 90 deletions(-) diff --git a/src/virtual_client.cpp b/src/virtual_client.cpp index 59cdb57..3705669 100644 --- a/src/virtual_client.cpp +++ b/src/virtual_client.cpp @@ -16,88 +16,11 @@ #include #include -#include "dynamic_h264_video_encoder.h" -#include "fake_network_call_factory.h" -#include "nop_video_decoder.h" -#include "sctp_transport_factory.h" - std::shared_ptr VirtualClient::Create( VirtualClientConfig config) { auto vc = std::make_shared(); vc->config_ = std::move(config); - sora::SoraClientContextConfig context_config; - context_config.use_hardware_encoder = false; - context_config.use_audio_device = false; - - context_config.configure_media_dependencies = - [vc](const webrtc::PeerConnectionFactoryDependencies& dependencies, - cricket::MediaEngineDependencies& media_dependencies) { - media_dependencies.adm = dependencies.worker_thread->BlockingCall([&] { - ZakuroAudioDeviceModuleConfig admconfig; - admconfig.task_queue_factory = dependencies.task_queue_factory.get(); - if (vc->config_.audio_type == - VirtualClientConfig::AudioType::Device) { -#if defined(__linux__) - webrtc::AudioDeviceModule::AudioLayer audio_layer = - webrtc::AudioDeviceModule::kLinuxAlsaAudio; -#else - webrtc::AudioDeviceModule::AudioLayer audio_layer = - webrtc::AudioDeviceModule::kPlatformDefaultAudio; -#endif - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; - admconfig.adm = webrtc::AudioDeviceModule::Create( - audio_layer, dependencies.task_queue_factory.get()); - } else if (vc->config_.audio_type == - VirtualClientConfig::AudioType::NoAudio) { - webrtc::AudioDeviceModule::AudioLayer audio_layer = - webrtc::AudioDeviceModule::kDummyAudio; - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; - admconfig.adm = webrtc::AudioDeviceModule::Create( - audio_layer, dependencies.task_queue_factory.get()); - } else if (vc->config_.audio_type == - VirtualClientConfig::AudioType::SpecifiedFakeAudio) { - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::FakeAudio; - admconfig.fake_audio = vc->config_.fake_audio; - } else if (vc->config_.audio_type == - VirtualClientConfig::AudioType::AutoGenerateFakeAudio) { - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::Safari; - } else if (vc->config_.audio_type == - VirtualClientConfig::AudioType::External) { - admconfig.type = ZakuroAudioDeviceModuleConfig::Type::External; - admconfig.render = vc->config_.render_audio; - admconfig.sample_rate = vc->config_.sample_rate; - admconfig.channels = vc->config_.channels; - } - return ZakuroAudioDeviceModule::Create(std::move(admconfig)); - }); - - auto sw_config = sora::GetSoftwareOnlyVideoEncoderFactoryConfig(); - sw_config.use_simulcast_adapter = true; - sw_config.encoders.push_back(sora::VideoEncoderConfig( - webrtc::kVideoCodecH264, - [openh264 = vc->config_.openh264]( - auto format) -> std::unique_ptr { - return webrtc::DynamicH264VideoEncoder::Create( - cricket::VideoCodec(format), openh264); - })); - media_dependencies.video_encoder_factory = - absl::make_unique( - std::move(sw_config)); - media_dependencies.video_decoder_factory.reset( - new NopVideoDecoderFactory()); - }; - - context_config.configure_dependencies = - [vc](webrtc::PeerConnectionFactoryDependencies& dependencies) { - dependencies.call_factory = CreateFakeNetworkCallFactory( - vc->config_.fake_network_send, vc->config_.fake_network_receive); - dependencies.sctp_factory.reset( - new SctpTransportFactory(dependencies.network_thread)); - }; - - vc->context_ = sora::SoraClientContext::Create(context_config); - return vc; } @@ -124,13 +47,14 @@ void VirtualClient::Connect() { if (config_.disable_highpass_filter) ao.highpass_filter = false; std::string audio_track_id = rtc::CreateRandomString(16); - audio_track_ = context_->peer_connection_factory()->CreateAudioTrack( - audio_track_id, - context_->peer_connection_factory()->CreateAudioSource(ao).get()); + audio_track_ = config_.context->peer_connection_factory()->CreateAudioTrack( + audio_track_id, config_.context->peer_connection_factory() + ->CreateAudioSource(ao) + .get()); } if (!config_.no_video_device) { std::string video_track_id = rtc::CreateRandomString(16); - video_track_ = context_->peer_connection_factory()->CreateVideoTrack( + video_track_ = config_.context->peer_connection_factory()->CreateVideoTrack( video_track_id, config_.capturer.get()); if (config_.fixed_resolution) { @@ -140,14 +64,16 @@ void VirtualClient::Connect() { } sora::SoraSignalingConfig config = config_.sora_config; - config.pc_factory = context_->peer_connection_factory(); + config.pc_factory = config_.context->peer_connection_factory(); config.observer = shared_from_this(); - config.network_manager = context_->signaling_thread()->BlockingCall([this]() { - return context_->connection_context()->default_network_manager(); - }); - config.socket_factory = context_->signaling_thread()->BlockingCall([this]() { - return context_->connection_context()->default_socket_factory(); - }); + config.network_manager = + config_.context->signaling_thread()->BlockingCall([this]() { + return config_.context->connection_context()->default_network_manager(); + }); + config.socket_factory = + config_.context->signaling_thread()->BlockingCall([this]() { + return config_.context->connection_context()->default_socket_factory(); + }); signaling_ = sora::SoraSignaling::Create(config); signaling_->Connect(); diff --git a/src/virtual_client.h b/src/virtual_client.h index 56ef672..a2100c4 100644 --- a/src/virtual_client.h +++ b/src/virtual_client.h @@ -56,6 +56,8 @@ struct VirtualClientConfig { webrtc::DegradedCall::TimeScopedNetworkConfig fake_network_receive; std::string openh264; + + std::shared_ptr context; }; class VirtualClient : public std::enable_shared_from_this, @@ -91,8 +93,6 @@ class VirtualClient : public std::enable_shared_from_this, std::shared_ptr signaling_; rtc::scoped_refptr audio_track_; rtc::scoped_refptr video_track_; - // 最後に解放したいので、最後に宣言する - std::shared_ptr context_; }; #endif diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 4f6d4d7..266c4f9 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -10,11 +10,16 @@ // Sora C++ SDK #include +#include +#include "dynamic_h264_video_encoder.h" #include "fake_audio_key_trigger.h" +#include "fake_network_call_factory.h" #include "fake_video_capturer.h" #include "game/game_kuzushi.h" +#include "nop_video_decoder.h" #include "scenario_player.h" +#include "sctp_transport_factory.h" #include "util.h" #include "virtual_client.h" #include "wav_reader.h" @@ -302,6 +307,81 @@ int Zakuro::Run() { vc_config.audio_type = VirtualClientConfig::AudioType::AutoGenerateFakeAudio; } + + // Sora client context + sora::SoraClientContextConfig context_config; + context_config.use_hardware_encoder = false; + context_config.use_audio_device = false; + + context_config.configure_media_dependencies = + [vc = vc_config]( + const webrtc::PeerConnectionFactoryDependencies& dependencies, + cricket::MediaEngineDependencies& media_dependencies) { + media_dependencies.adm = dependencies.worker_thread->BlockingCall([&] { + ZakuroAudioDeviceModuleConfig admconfig; + admconfig.task_queue_factory = dependencies.task_queue_factory.get(); + if (vc.audio_type == VirtualClientConfig::AudioType::Device) { +#if defined(__linux__) + webrtc::AudioDeviceModule::AudioLayer audio_layer = + webrtc::AudioDeviceModule::kLinuxAlsaAudio; +#else + webrtc::AudioDeviceModule::AudioLayer audio_layer = + webrtc::AudioDeviceModule::kPlatformDefaultAudio; +#endif + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; + admconfig.adm = webrtc::AudioDeviceModule::Create( + audio_layer, dependencies.task_queue_factory.get()); + } else if (vc.audio_type == VirtualClientConfig::AudioType::NoAudio) { + webrtc::AudioDeviceModule::AudioLayer audio_layer = + webrtc::AudioDeviceModule::kDummyAudio; + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::ADM; + admconfig.adm = webrtc::AudioDeviceModule::Create( + audio_layer, dependencies.task_queue_factory.get()); + } else if (vc.audio_type == + VirtualClientConfig::AudioType::SpecifiedFakeAudio) { + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::FakeAudio; + admconfig.fake_audio = vc.fake_audio; + } else if (vc.audio_type == + VirtualClientConfig::AudioType::AutoGenerateFakeAudio) { + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::Safari; + } else if (vc.audio_type == + VirtualClientConfig::AudioType::External) { + admconfig.type = ZakuroAudioDeviceModuleConfig::Type::External; + admconfig.render = vc.render_audio; + admconfig.sample_rate = vc.sample_rate; + admconfig.channels = vc.channels; + } + return ZakuroAudioDeviceModule::Create(std::move(admconfig)); + }); + + auto sw_config = sora::GetSoftwareOnlyVideoEncoderFactoryConfig(); + sw_config.use_simulcast_adapter = true; + sw_config.encoders.push_back(sora::VideoEncoderConfig( + webrtc::kVideoCodecH264, + [openh264 = vc.openh264]( + auto format) -> std::unique_ptr { + return webrtc::DynamicH264VideoEncoder::Create( + cricket::VideoCodec(format), openh264); + })); + media_dependencies.video_encoder_factory = + absl::make_unique( + std::move(sw_config)); + media_dependencies.video_decoder_factory.reset( + new NopVideoDecoderFactory()); + }; + + context_config.configure_dependencies = + [vc = + vc_config](webrtc::PeerConnectionFactoryDependencies& dependencies) { + dependencies.call_factory = CreateFakeNetworkCallFactory( + vc.fake_network_send, vc.fake_network_receive); + dependencies.sctp_factory.reset( + new SctpTransportFactory(dependencies.network_thread)); + }; + + auto context = sora::SoraClientContext::Create(context_config); + + vc_config.context = context; sora_config.sora_client = ZakuroVersion::GetClientName(); sora_config.insecure = config_.insecure; sora_config.client_cert = config_.client_cert; From 9ff06fa52303c78176f9607f5ac24dc34183ba7e Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 8 May 2023 10:26:57 +0900 Subject: [PATCH 42/68] =?UTF-8?q?ADM=20=E3=81=AE=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=83=80=E3=83=AA=E3=83=B3=E3=82=B0=E3=82=92=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=83=B3=E3=82=B9=E5=85=A8=E4=BD=93=E3=81=A7?= =?UTF-8?q?=E5=85=B1=E9=80=9A=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ADM を仮想クライアントごとに分けられなくなったので --- src/zakuro.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 266c4f9..d2b03ea 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -286,10 +286,11 @@ int Zakuro::Run() { vc_config.initial_mute_audio = config_.initial_mute_audio; if (config_.no_audio_device) { vc_config.audio_type = VirtualClientConfig::AudioType::NoAudio; - } else if (!config_.game.empty()) { - vc_config.audio_type = VirtualClientConfig::AudioType::External; - } else if (fake_audio_key_trigger) { + } else if (!config_.game.empty() || fake_audio_key_trigger) { vc_config.audio_type = VirtualClientConfig::AudioType::External; + vc_config.render_audio = gam->AddGameAudio(16000); + vc_config.sample_rate = 16000; + vc_config.channels = 1; } else if (!config_.fake_audio_capture.empty()) { WavReader wav_reader; int r = wav_reader.Load(config_.fake_audio_capture); @@ -379,9 +380,8 @@ int Zakuro::Run() { new SctpTransportFactory(dependencies.network_thread)); }; - auto context = sora::SoraClientContext::Create(context_config); + vc_config.context = sora::SoraClientContext::Create(context_config); - vc_config.context = context; sora_config.sora_client = ZakuroVersion::GetClientName(); sora_config.insecure = config_.insecure; sora_config.client_cert = config_.client_cert; @@ -422,13 +422,7 @@ int Zakuro::Run() { std::vector vc_configs; for (int i = 0; i < config_.vcs; i++) { - VirtualClientConfig config = vc_config; - if (config.audio_type == VirtualClientConfig::AudioType::External) { - config.render_audio = gam->AddGameAudio(16000); - config.sample_rate = 16000; - config.channels = 1; - } - vc_configs.push_back(std::move(config)); + vc_configs.push_back(vc_config); } std::vector> vcs; From 9752665151cc386bd0061d21d5a40c6f5fa81a12 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 8 May 2023 11:54:30 +0900 Subject: [PATCH 43/68] =?UTF-8?q?instance=5Fnum=20=E3=82=92=20instance-num?= =?UTF-8?q?=20=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index f277664..728fd92 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -176,13 +176,15 @@ void Util::ParseArgs(const std::vector& cargs, app.add_option("--sora-audio-codec-type", config.sora_audio_codec_type, "Audio codec for send") ->check(CLI::IsMember({"", "OPUS", "LYRA"})); - app.add_option("--sora-audio-codec-lyra-bitrate", config.sora_audio_codec_lyra_bit_rate, + app.add_option("--sora-audio-codec-lyra-bitrate", + config.sora_audio_codec_lyra_bit_rate, "Lyra audio codec bitrate") ->check(CLI::Range(0, 9200)); - app.add_option("--sora-audio-codec-lyra-usedtx", config.sora_audio_codec_lyra_usedtx, + app.add_option("--sora-audio-codec-lyra-usedtx", + config.sora_audio_codec_lyra_usedtx, "Lyra usedtx (default: none)") - ->type_name("TEXT") - ->transform(CLI::CheckedTransformer(optional_bool_map, CLI::ignore_case)); + ->type_name("TEXT") + ->transform(CLI::CheckedTransformer(optional_bool_map, CLI::ignore_case)); app.add_option("--sora-check-lyra-version", config.sora_check_lyra_version, "Lyra version check"); app.add_option("--sora-video-bit-rate", config.sora_video_bit_rate, @@ -413,7 +415,7 @@ std::vector> Util::NodeToArgs(const YAML::Node& inst) { int instance_num = 1; { - const YAML::Node& node = inst["instance_num"]; + const YAML::Node& node = inst["instance-num"]; if (node) { instance_num = node.as(); } From 0e6a6919399eb9fce86c4b831da6dc71dfefca27 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 8 May 2023 14:36:48 +0900 Subject: [PATCH 44/68] =?UTF-8?q?Sora=20C++=20SDK=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=202023.5.0=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 --- CHANGES.md | 6 ++++-- VERSION | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 7f940ff..09a097b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,9 +13,9 @@ - [CHANGE] `--fake-network-send-codel-active-queue-management` と `--fake-network-receive-codel-active-queue-management` オプションを削除 - @melpon -- [UPDATE] WebRTC を m111.5563.4.4 に上げる +- [UPDATE] WebRTC を m114.5735.0.1 に上げる - @melpon -- [UPDATE] Sora C++ SDK を 2023.4.0 に上げる +- [UPDATE] Sora C++ SDK を 2023.5.0 に上げる - @melpon - [UPDATE] `CMake` を `3.25.1` に上げる - @voluntas @@ -23,6 +23,8 @@ - @voluntas - [UPDATE] `CLI11` を `2.3.1` に上げる - @voluntas +- [UPDATE] Boost を 1.82.0 に上げる + - @melpon - [UPDATE] actions/create-release と actions/upload-release を softprops/action-gh-release に変更する - @melpon - [ADD] Ubuntu 22.04 x86_64 のビルドを追加 diff --git a/VERSION b/VERSION index 9c7a4be..0b19b12 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ ZAKURO_VERSION=2022.7.1 -SORA_CPP_SDK_VERSION=2023.4.0 -WEBRTC_BUILD_VERSION=m111.5563.4.4 -BOOST_VERSION=1.81.0 +SORA_CPP_SDK_VERSION=2023.5.0 +WEBRTC_BUILD_VERSION=m114.5735.0.1 +BOOST_VERSION=1.82.0 LYRA_VERSION=1.3.0 CLI11_VERSION=v2.3.1 CMAKE_VERSION=3.25.1 From 8f4ac41a5c2718f897c0c9e41bd20f69f7a836c6 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 8 May 2023 16:39:38 +0900 Subject: [PATCH 45/68] =?UTF-8?q?=E6=9C=80=E6=96=B0=E3=81=AB=E8=BF=BD?= =?UTF-8?q?=E5=BE=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/FAQ.md | 18 +----------------- doc/USE.md | 4 ++-- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/doc/FAQ.md b/doc/FAQ.md index e482f4b..5e6b1fa 100644 --- a/doc/FAQ.md +++ b/doc/FAQ.md @@ -21,23 +21,6 @@ Zakuro を提供することで、 Sora を運用するサーバのサイジン [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) です。 -``` -Copyright 2020-2021, Wandbox LLC (Original Author) -Copyright 2020-2021, Shiguredo Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -``` - ## Zakuro に含まれている音声ファイルについて教えてください Zakuro のスポットライト機能検証時に利用する音声ファイルには [あみたろの声素材工房](https://amitaro.net/) 様の声素材を使用しています。 @@ -47,6 +30,7 @@ Zakuro のスポットライト機能検証時に利用する音声ファイル サーバでの用途を前提としているため Linux での動作を想定しています。 - Ubuntu 20.04 x86_64 +- Ubuntu 22.04 x86_64 ## Zakuro は破壊的変更を行いますか? diff --git a/doc/USE.md b/doc/USE.md index 33d6866..9960ea8 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -137,11 +137,11 @@ zakuro: simulcast: true ``` -### instance_num と ${} によるシナリオの動的生成 +### instance-num と ${} によるシナリオの動的生成 ```yaml instances: - - instance_num: 2 + - instance-num: 2 name: zakuro vcs: 2 sora: From 661ce046a9fb8764474badc3e694a619fa693972 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 15 May 2023 09:46:38 +0900 Subject: [PATCH 46/68] =?UTF-8?q?--duration=20=E3=81=8A=E3=82=88=E3=81=B3?= =?UTF-8?q?=20--repeat-interval=20=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7?= =?UTF-8?q?=E3=83=B3=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 ++ src/util.cpp | 7 +++++++ src/virtual_client.cpp | 1 + src/zakuro.cpp | 23 ++++++++++++++++++++--- src/zakuro.h | 2 ++ 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 09a097b..9dabc06 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -31,6 +31,8 @@ - @melpon - [ADD] `--sora-client-id` および `--sora-bundle-id` オプションを追加 - @melpon +- [ADD] `--duration` および `--repeat-interval` オプションを追加 + - @melpon - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する - @torikizi - [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 diff --git a/src/util.cpp b/src/util.cpp index 728fd92..fc5d7ea 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -94,6 +94,11 @@ void Util::ParseArgs(const std::vector& cargs, app.add_option("--vcs-hatch-rate", config.vcs_hatch_rate, "Spawned virtual clients per seconds") ->check(CLI::Range(0.1, 100.0)); + app.add_option( + "--duration", config.duration, + "(Experimental) Duration of virtual client running in seconds"); + app.add_option("--repeat-interval", config.repeat_interval, + "(Experimental) Interval to reconnect after disconnection"); app.add_flag("--no-video-device", config.no_video_device, "Do not use video device"); @@ -474,6 +479,8 @@ std::vector> Util::NodeToArgs(const YAML::Node& inst) { DEF_STRING(inst, "", "name"); DEF_INTEGER(inst, "", "vcs"); DEF_DOUBLE(inst, "", "vcs-hatch-rate"); + DEF_DOUBLE(inst, "", "duration"); + DEF_DOUBLE(inst, "", "repeat-interval"); DEF_FLAG(inst, "", "no-video-device"); DEF_FLAG(inst, "", "no-audio-device"); DEF_FLAG(inst, "", "fake-capture-device"); diff --git a/src/virtual_client.cpp b/src/virtual_client.cpp index 3705669..0fa88c2 100644 --- a/src/virtual_client.cpp +++ b/src/virtual_client.cpp @@ -26,6 +26,7 @@ std::shared_ptr VirtualClient::Create( void VirtualClient::Connect() { if (closing_) { + need_reconnect_ = true; return; } diff --git a/src/zakuro.cpp b/src/zakuro.cpp index d2b03ea..2732efb 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -472,9 +472,26 @@ int Zakuro::Run() { for (const auto& d : dcs_data) { data.PlaySubScenario(std::get<0>(d), std::get<1>(d), 0); } - data.Sleep(1000, 5000); - data.PlayVoiceNumberClient(); - loop_index = 1 + dcs_data.size(); + ScenarioData sd; + sd.Sleep(1000, 5000); + sd.PlayVoiceNumberClient(); + data.PlaySubScenario("scenario-voice-number-client", sd, 0); + if (config_.duration == 0) { + data.Sleep(10000, 10000); + } else { + // duration が設定されている場合、duration 秒待って切断し、 + // repeat_interval 秒待ってから再接続する + data.Sleep((int)(config_.duration * 1000), + (int)(config_.duration * 1000)); + data.Disconnect(); + // repeat_interval == 0 の場合は再接続しない + if (config_.repeat_interval != 0) { + data.Sleep((int)(config_.repeat_interval * 1000), + (int)(config_.repeat_interval * 1000)); + data.Reconnect(); + } + } + loop_index = 1 + dcs_data.size() + 1; } else if (config_.scenario == "reconnect") { data.Reconnect(); data.Sleep(1000, 5000); diff --git a/src/zakuro.h b/src/zakuro.h index 73bfaed..0d6607d 100644 --- a/src/zakuro.h +++ b/src/zakuro.h @@ -22,6 +22,8 @@ struct ZakuroConfig { std::string name = "zakuro"; int vcs = 1; double vcs_hatch_rate = 1.0; + double duration = 0; + double repeat_interval = 0; bool no_video_device = false; bool no_audio_device = false; From 208d87c19cab234cd17ea1954a24e99e0a9fb04f Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 15 May 2023 10:34:30 +0900 Subject: [PATCH 47/68] =?UTF-8?q?`--max-retry`=20=E3=81=8A=E3=82=88?= =?UTF-8?q?=E3=81=B3=20`--retry-interval`=20=E3=82=AA=E3=83=97=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=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 ++ src/util.cpp | 6 ++++++ src/virtual_client.cpp | 46 ++++++++++++++++++++++++++++++++++-------- src/virtual_client.h | 9 ++++++++- src/zakuro.cpp | 2 ++ src/zakuro.h | 2 ++ 6 files changed, 58 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 9dabc06..407731c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -33,6 +33,8 @@ - @melpon - [ADD] `--duration` および `--repeat-interval` オプションを追加 - @melpon +- [ADD] `--max-retry` および `--retry-interval` オプションを追加 + - @melpon - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する - @torikizi - [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 diff --git a/src/util.cpp b/src/util.cpp index fc5d7ea..917fdfb 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -99,6 +99,10 @@ void Util::ParseArgs(const std::vector& cargs, "(Experimental) Duration of virtual client running in seconds"); app.add_option("--repeat-interval", config.repeat_interval, "(Experimental) Interval to reconnect after disconnection"); + app.add_option("--max-retry", config.max_retry, + "(Experimental) Max retries when a connection fails"); + app.add_option("--retry-interval", config.retry_interval, + "(Experimental) Interval to reconnect after connection fails"); app.add_flag("--no-video-device", config.no_video_device, "Do not use video device"); @@ -481,6 +485,8 @@ std::vector> Util::NodeToArgs(const YAML::Node& inst) { DEF_DOUBLE(inst, "", "vcs-hatch-rate"); DEF_DOUBLE(inst, "", "duration"); DEF_DOUBLE(inst, "", "repeat-interval"); + DEF_INTEGER(inst, "", "max-retry"); + DEF_INTEGER(inst, "", "retry-interval"); DEF_FLAG(inst, "", "no-video-device"); DEF_FLAG(inst, "", "no-audio-device"); DEF_FLAG(inst, "", "fake-capture-device"); diff --git a/src/virtual_client.cpp b/src/virtual_client.cpp index 0fa88c2..88abc28 100644 --- a/src/virtual_client.cpp +++ b/src/virtual_client.cpp @@ -18,11 +18,10 @@ std::shared_ptr VirtualClient::Create( VirtualClientConfig config) { - auto vc = std::make_shared(); - vc->config_ = std::move(config); - - return vc; + return std::shared_ptr(new VirtualClient(config)); } +VirtualClient::VirtualClient(const VirtualClientConfig& config) + : config_(config), retry_timer_(*config.sora_config.io_context) {} void VirtualClient::Connect() { if (closing_) { @@ -37,6 +36,8 @@ void VirtualClient::Connect() { return; } + retry_timer_.cancel(); + if (config_.audio_type != VirtualClientConfig::AudioType::NoAudio) { cricket::AudioOptions ao; if (config_.disable_echo_cancellation) @@ -91,6 +92,7 @@ void VirtualClient::Close() { } void VirtualClient::Clear() { + retry_timer_.cancel(); signaling_.reset(); } @@ -153,9 +155,37 @@ void VirtualClient::OnSetOffer(std::string offer) { void VirtualClient::OnDisconnect(sora::SoraSignalingErrorCode ec, std::string message) { signaling_.reset(); - closing_ = false; - if (need_reconnect_) { - need_reconnect_ = false; - Connect(); + retry_timer_.cancel(); + + if (!closing_) { + // VirtualClient の外から明示的に呼び出されていない、つまり不意に接続が切れた場合にここに来る + // この場合は、設定次第で再接続を試みる + if (retry_count_ < config_.max_retry) { + retry_count_ += 1; + retry_timer_.expires_from_now(boost::posix_time::milliseconds( + (int)(config_.retry_interval * 1000))); + retry_timer_.async_wait([this](boost::system::error_code ec) { + if (ec) { + return; + } + need_reconnect_ = false; + Connect(); + }); + } + } else { + closing_ = false; + if (need_reconnect_) { + need_reconnect_ = false; + Connect(); + } + } +} +void VirtualClient::OnNotify(std::string text) { + auto json = boost::json::parse(text); + if (json.at("event_type").as_string() == "connection.created") { + // 接続できたらリトライ数をリセットする + // 他人が接続された時もリセットされることになるけど、 + // その時は 0 のままになってるはずなので問題ない + retry_count_ = 0; } } diff --git a/src/virtual_client.h b/src/virtual_client.h index a2100c4..6eba5d3 100644 --- a/src/virtual_client.h +++ b/src/virtual_client.h @@ -26,6 +26,9 @@ struct VirtualClientConfig { rtc::scoped_refptr capturer; sora::SoraSignalingConfig sora_config; + int max_retry = 0; + double retry_interval = 60; + bool fixed_resolution = false; std::string priority = "BALANCE"; @@ -75,7 +78,7 @@ class VirtualClient : public std::enable_shared_from_this, void OnSetOffer(std::string offer) override; void OnDisconnect(sora::SoraSignalingErrorCode ec, std::string message) override; - void OnNotify(std::string text) override {} + void OnNotify(std::string text) override; void OnPush(std::string text) override {} void OnMessage(std::string label, std::string data) override {} @@ -87,9 +90,13 @@ class VirtualClient : public std::enable_shared_from_this, void OnDataChannel(std::string label) override {} private: + VirtualClient(const VirtualClientConfig& config); + VirtualClientConfig config_; bool closing_ = false; bool need_reconnect_ = false; + int retry_count_ = 0; + boost::asio::deadline_timer retry_timer_; std::shared_ptr signaling_; rtc::scoped_refptr audio_track_; rtc::scoped_refptr video_track_; diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 2732efb..9f330a9 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -276,6 +276,8 @@ int Zakuro::Run() { VirtualClientConfig vc_config; sora::SoraSignalingConfig& sora_config = vc_config.sora_config; vc_config.capturer = capturer; + vc_config.max_retry = config_.max_retry; + vc_config.retry_interval = config_.retry_interval; vc_config.no_video_device = config_.no_video_device; vc_config.fixed_resolution = config_.fixed_resolution; vc_config.priority = config_.priority; diff --git a/src/zakuro.h b/src/zakuro.h index 0d6607d..881167b 100644 --- a/src/zakuro.h +++ b/src/zakuro.h @@ -24,6 +24,8 @@ struct ZakuroConfig { double vcs_hatch_rate = 1.0; double duration = 0; double repeat_interval = 0; + int max_retry = 0; + double retry_interval = 60; bool no_video_device = false; bool no_audio_device = false; From 656e35715a20f78a552732586c7f2e92bb6dc03c Mon Sep 17 00:00:00 2001 From: miosakuma Date: Mon, 15 May 2023 17:28:08 +0900 Subject: [PATCH 48/68] =?UTF-8?q?VP9,=20AV1=20=E3=82=82=E3=82=B5=E3=82=A4?= =?UTF-8?q?=E3=83=9E=E3=83=AB=E3=82=AD=E3=83=A3=E3=82=B9=E3=83=88=E3=81=8C?= =?UTF-8?q?=E5=88=A9=E7=94=A8=E5=8F=AF=E8=83=BD=E3=81=A8=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E3=81=A8=E3=81=AA=E3=82=8B=E3=82=88=E3=81=86=E5=85=A5=E5=8A=9B?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=82=92=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ src/util.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 407731c..94261d3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -27,6 +27,8 @@ - @melpon - [UPDATE] actions/create-release と actions/upload-release を softprops/action-gh-release に変更する - @melpon +- [UPDATE] VP9, AV1 もサイマルキャストが利用可能と可能となるよう入力チェックを変更する + - @miosakuma - [ADD] Ubuntu 22.04 x86_64 のビルドを追加 - @melpon - [ADD] `--sora-client-id` および `--sora-bundle-id` オプションを追加 diff --git a/src/util.cpp b/src/util.cpp index 917fdfb..f685acc 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -353,8 +353,10 @@ void Util::ParseArgs(const std::vector& cargs, // サイマルキャストは VP8 か H264 のみで動作する if (config.sora_video && config.sora_simulcast && config.sora_video_codec_type != "VP8" && + config.sora_video_codec_type != "VP9" && + config.sora_video_codec_type != "AV1" && config.sora_video_codec_type != "H264") { - std::cerr << "Simulcast works only --sora-video-codec=VP8 or H264." + std::cerr << "Simulcast works only --sora-video-codec=VP8, VP9, AV1 or H264." << std::endl; std::exit(1); } From c7c043d4135d631db514914c50057bc951d413b2 Mon Sep 17 00:00:00 2001 From: torikizikaeru <51085972+torikizi@users.noreply.github.com> Date: Tue, 16 May 2023 12:06:21 +0900 Subject: [PATCH 49/68] =?UTF-8?q?CHANGES=20=E3=81=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 407731c..4ddcbd5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -35,6 +35,12 @@ - @melpon - [ADD] `--max-retry` および `--retry-interval` オプションを追加 - @melpon +- [ADD] Lyra 向けオプションを追加 + - `--sora-audio-codec-type` オプションに `LYRA` を追加 + - `--sora-audio-codec-lyra-bitrate` オプションを追加 + - `--sora-audio-codec-lyra-usedtx` オプションを追加 + - `--sora-check-lyra-version` オプションを追加 + - @torikizi - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する - @torikizi - [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 From 89c0f07c11d9a59b63b7df6560b70023c82397fe Mon Sep 17 00:00:00 2001 From: melpon Date: Tue, 16 May 2023 16:14:49 +0900 Subject: [PATCH 50/68] =?UTF-8?q?Sora=20C++=20SDK=20=E3=82=92=202023.5.1?= =?UTF-8?q?=20=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 --- CHANGES.md | 2 +- VERSION | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2d1e2bf..006fc25 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,7 +15,7 @@ - @melpon - [UPDATE] WebRTC を m114.5735.0.1 に上げる - @melpon -- [UPDATE] Sora C++ SDK を 2023.5.0 に上げる +- [UPDATE] Sora C++ SDK を 2023.5.1 に上げる - @melpon - [UPDATE] `CMake` を `3.25.1` に上げる - @voluntas diff --git a/VERSION b/VERSION index 0b19b12..37cce69 100644 --- a/VERSION +++ b/VERSION @@ -1,5 +1,5 @@ ZAKURO_VERSION=2022.7.1 -SORA_CPP_SDK_VERSION=2023.5.0 +SORA_CPP_SDK_VERSION=2023.5.1 WEBRTC_BUILD_VERSION=m114.5735.0.1 BOOST_VERSION=1.82.0 LYRA_VERSION=1.3.0 From 39d8871ed578850d416faef5f83f1be7ba5f4108 Mon Sep 17 00:00:00 2001 From: miosakuma Date: Tue, 16 May 2023 15:50:03 +0900 Subject: [PATCH 51/68] =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=83=86?= =?UTF-8?q?=E3=82=AD=E3=82=B9=E3=83=88=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 --- src/util.cpp | 66 ++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index f685acc..38065bc 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -60,7 +60,7 @@ void Util::ParseArgs(const std::vector& cargs, app.add_option("--output-file-connection-id", connection_id_stats_file, "Output to specified file with connection IDs"); app.add_option("--instance-hatch-rate", instance_hatch_rate, - "Spawned instance per seconds") + "Spawned instance per seconds (default: 1.0)") ->check(CLI::Range(0.1, 100.0)); // インスタンス毎のオプション @@ -89,34 +89,34 @@ void Util::ParseArgs(const std::vector& cargs, {{"false", false}, {"true", true}, {"none", boost::none}}); app.add_option("--name", config.name, "Client Name"); - app.add_option("--vcs", config.vcs, "Virtual Clients") + app.add_option("--vcs", config.vcs, "Virtual Clients (default: 1)") ->check(CLI::Range(1, 1000)); app.add_option("--vcs-hatch-rate", config.vcs_hatch_rate, - "Spawned virtual clients per seconds") + "Spawned virtual clients per seconds (default: 1.0)") ->check(CLI::Range(0.1, 100.0)); app.add_option( "--duration", config.duration, - "(Experimental) Duration of virtual client running in seconds"); + "(Experimental) Duration of virtual client running in seconds (if not zero) (default: 0.0)"); app.add_option("--repeat-interval", config.repeat_interval, - "(Experimental) Interval to reconnect after disconnection"); + "(Experimental) (If duration is set) Interval to reconnect after disconnection (default: 0.0)"); app.add_option("--max-retry", config.max_retry, - "(Experimental) Max retries when a connection fails"); + "(Experimental) Max retries when a connection fails (default: 0)"); app.add_option("--retry-interval", config.retry_interval, - "(Experimental) Interval to reconnect after connection fails"); + "(Experimental) (If max-retry is set) Interval to reconnect after connection fails (default: 60)"); app.add_flag("--no-video-device", config.no_video_device, - "Do not use video device"); + "Do not use video device (default: false)"); app.add_flag("--no-audio-device", config.no_audio_device, - "Do not use audio device"); + "Do not use audio device (default: false)"); app.add_flag("--fake-capture-device", config.fake_capture_device, - "Fake Capture Device"); + "Fake Capture Device (default: true)"); app.add_option("--fake-video-capture", config.fake_video_capture, "Fake Video from File") ->check(CLI::ExistingFile); app.add_option("--fake-audio-capture", config.fake_audio_capture, "Fake Audio from File") ->check(CLI::ExistingFile); - app.add_flag("--sandstorm", config.sandstorm, "Fake Sandstorm Video"); + app.add_flag("--sandstorm", config.sandstorm, "Fake Sandstorm Video (default: false)"); #if defined(__APPLE__) app.add_option("--video-device", config.video_device, "Use the video device specified by an index or a name " @@ -129,17 +129,17 @@ void Util::ParseArgs(const std::vector& cargs, #endif app.add_option("--resolution", config.resolution, "Video resolution (one of QVGA, VGA, HD, FHD, 4K, or " - "[WIDTH]x[HEIGHT])") + "[WIDTH]x[HEIGHT]) (default: VGA)") ->check(is_valid_resolution); - app.add_option("--framerate", config.framerate, "Video framerate") + app.add_option("--framerate", config.framerate, "Video framerate (default: 30)") ->check(CLI::Range(1, 60)); app.add_flag("--fixed-resolution", config.fixed_resolution, - "Maintain video resolution in degradation"); + "Maintain video resolution in degradation (default: false)"); app.add_option("--priority", config.priority, - "Preference in video degradation (experimental)") + "(Experimental) Preference in video degradation (default: BALANCE)") ->check(CLI::IsMember({"BALANCE", "FRAMERATE", "RESOLUTION"})); app.add_flag("--insecure", config.insecure, - "Allow insecure server connections when using SSL"); + "Allow insecure server connections when using SSL (default: false)"); app.add_option("--openh264", config.openh264, "OpenH264 dynamic library path. \"OpenH264 Video Codec " "provided by Cisco Systems, Inc.\"") @@ -155,10 +155,10 @@ void Util::ParseArgs(const std::vector& cargs, "Private key file path for client certification (PEM format)") ->check(CLI::ExistingFile); app.add_option("--initial-mute-video", config.initial_mute_video, - "Mute video initialy") + "Mute video initialy (default: false)") ->transform(CLI::CheckedTransformer(bool_map, CLI::ignore_case)); app.add_option("--initial-mute-audio", config.initial_mute_audio, - "Mute audio initialy") + "Mute audio initialy (default: false)") ->transform(CLI::CheckedTransformer(bool_map, CLI::ignore_case)); // Sora 系オプション @@ -166,7 +166,7 @@ void Util::ParseArgs(const std::vector& cargs, "Signaling URLs") ->take_all(); app.add_flag("--sora-disable-signaling-url-randomization", - config.sora_disable_signaling_url_randomization); + config.sora_disable_signaling_url_randomization, "Disable random connections to signaling URLs (default: false)"); app.add_option("--sora-channel-id", config.sora_channel_id, "Channel ID"); app.add_option("--sora-client-id", config.sora_client_id, "Client ID"); app.add_option("--sora-bundle-id", config.sora_bundle_id, "Bundle ID"); @@ -180,14 +180,14 @@ void Util::ParseArgs(const std::vector& cargs, "Send audio to sora (default: true)") ->transform(CLI::CheckedTransformer(bool_map, CLI::ignore_case)); app.add_option("--sora-video-codec-type", config.sora_video_codec_type, - "Video codec for send") + "Video codec for send (default: none)") ->check(CLI::IsMember({"", "VP8", "VP9", "AV1", "H264"})); app.add_option("--sora-audio-codec-type", config.sora_audio_codec_type, - "Audio codec for send") + "Audio codec for send (default: none)") ->check(CLI::IsMember({"", "OPUS", "LYRA"})); app.add_option("--sora-audio-codec-lyra-bitrate", config.sora_audio_codec_lyra_bit_rate, - "Lyra audio codec bitrate") + "Lyra audio codec bitrate (default: none)") ->check(CLI::Range(0, 9200)); app.add_option("--sora-audio-codec-lyra-usedtx", config.sora_audio_codec_lyra_usedtx, @@ -195,12 +195,12 @@ void Util::ParseArgs(const std::vector& cargs, ->type_name("TEXT") ->transform(CLI::CheckedTransformer(optional_bool_map, CLI::ignore_case)); app.add_option("--sora-check-lyra-version", config.sora_check_lyra_version, - "Lyra version check"); + "Lyra version check (default: false)"); app.add_option("--sora-video-bit-rate", config.sora_video_bit_rate, - "Video bit rate") + "Video bit rate (default: none)") ->check(CLI::Range(0, 30000)); app.add_option("--sora-audio-bit-rate", config.sora_audio_bit_rate, - "Audio bit rate") + "Audio bit rate (default: none)") ->check(CLI::Range(0, 510)); app.add_option("--sora-multistream", config.sora_multistream, "Use multistream (default: false)") @@ -209,17 +209,17 @@ void Util::ParseArgs(const std::vector& cargs, "Use simulcast (default: false)") ->transform(CLI::CheckedTransformer(bool_map, CLI::ignore_case)); app.add_option("--sora-simulcast-rid", config.sora_simulcast_rid, - "Simulcast rid"); + "Simulcast rid (default: none)"); app.add_option("--sora-spotlight", config.sora_spotlight, - "Use spotlight (default: false)") + "Use spotlight (default: none)") ->transform(CLI::CheckedTransformer(bool_map, CLI::ignore_case)); app.add_option("--sora-spotlight-number", config.sora_spotlight_number, - "Number of spotlight") + "Number of spotlight (default: none)") ->check(CLI::Range(0, 8)); app.add_option("--sora-spotlight-focus-rid", config.sora_spotlight_focus_rid, - "Spotlight focus rid"); + "Spotlight focus rid (default: none)"); app.add_option("--sora-spotlight-unfocus-rid", - config.sora_spotlight_unfocus_rid, "Spotlight unfocus rid"); + config.sora_spotlight_unfocus_rid, "Spotlight unfocus rid (default: none)"); app.add_option("--sora-data-channel-signaling", config.sora_data_channel_signaling, "Use DataChannel for Sora signaling (default: none)") @@ -252,14 +252,14 @@ void Util::ParseArgs(const std::vector& cargs, "JSON Value"); std::string sora_metadata; app.add_option("--sora-metadata", sora_metadata, - "Signaling metadata used in connect message") + "Signaling metadata used in connect message (default: none)") ->check(is_json); std::string sora_signaling_notify_metadata; app.add_option("--sora-signaling-notify-metadata", - sora_signaling_notify_metadata, "Signaling metadata") + sora_signaling_notify_metadata, "Signaling metadata (default: none)") ->check(is_json); std::string sora_data_channels; - app.add_option("--sora-data-channels", sora_data_channels, "DataChannels") + app.add_option("--sora-data-channels", sora_data_channels, "DataChannels (default: none)") ->check(is_json); // Fake network 系 From 008ed095299f1423caa4e239ce1350691968f5c6 Mon Sep 17 00:00:00 2001 From: melpon Date: Mon, 3 Jul 2023 11:32:49 +0900 Subject: [PATCH 52/68] =?UTF-8?q?`--fake-audio-capture`=20=E3=81=8C?= =?UTF-8?q?=E6=9C=89=E5=8A=B9=E3=81=AA=E5=A0=B4=E5=90=88=E3=81=AB=20`--dur?= =?UTF-8?q?ation`=20=E3=81=8C=E5=8A=B9=E3=81=8B=E3=81=AA=E3=81=84=E3=81=AE?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ src/zakuro.cpp | 42 ++++++++++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 006fc25..4baa729 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -52,6 +52,8 @@ - [FIX] パッケージを展開した際の名前が `zakuro` になってしまっていたのを `zakuro-{version}` にする - @melpon - @miosakuma +- [FIX] `--fake-audio-capture` が有効な場合に `--duration` が効かないのを修正 + - @melpon ## 2022.7.1 (2022-10-31) diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 9f330a9..9e03019 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -462,37 +462,47 @@ int Zakuro::Run() { dcs_data.push_back(std::make_tuple("scenario-dcs-" + ch.label, sd)); } - ScenarioPlayer scenario_player(spc); - ScenarioData data; - int loop_index; - if (!fake_audio_key_trigger) { - data.Reconnect(); - data.Sleep(10000, 10000); - loop_index = 1; - } else if (config_.scenario == "") { - data.Reconnect(); - for (const auto& d : dcs_data) { - data.PlaySubScenario(std::get<0>(d), std::get<1>(d), 0); - } - ScenarioData sd; - sd.Sleep(1000, 5000); - sd.PlayVoiceNumberClient(); - data.PlaySubScenario("scenario-voice-number-client", sd, 0); + // 切断と再接続のシナリオを追加する関数 + auto add_reconnect_scenario = [this](ScenarioData& data) { + int op = 0; if (config_.duration == 0) { data.Sleep(10000, 10000); + op += 1; } else { // duration が設定されている場合、duration 秒待って切断し、 // repeat_interval 秒待ってから再接続する data.Sleep((int)(config_.duration * 1000), (int)(config_.duration * 1000)); data.Disconnect(); + op += 2; // repeat_interval == 0 の場合は再接続しない if (config_.repeat_interval != 0) { data.Sleep((int)(config_.repeat_interval * 1000), (int)(config_.repeat_interval * 1000)); data.Reconnect(); + op += 2; } } + return op; + }; + + ScenarioPlayer scenario_player(spc); + ScenarioData data; + int loop_index; + if (!fake_audio_key_trigger) { + data.Reconnect(); + add_reconnect_scenario(data); + loop_index = 1; + } else if (config_.scenario == "") { + data.Reconnect(); + for (const auto& d : dcs_data) { + data.PlaySubScenario(std::get<0>(d), std::get<1>(d), 0); + } + ScenarioData sd; + sd.Sleep(1000, 5000); + sd.PlayVoiceNumberClient(); + data.PlaySubScenario("scenario-voice-number-client", sd, 0); + add_reconnect_scenario(data); loop_index = 1 + dcs_data.size() + 1; } else if (config_.scenario == "reconnect") { data.Reconnect(); From ee389adb704a15404869f5fc833930520becda18 Mon Sep 17 00:00:00 2001 From: voluntas Date: Mon, 3 Jul 2023 18:28:05 +0900 Subject: [PATCH 53/68] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 4716bde..25286e7 100644 --- a/README.md +++ b/README.md @@ -200,6 +200,14 @@ See the License for the specific language governing permissions and limitations under the License. ``` +## OpenH264 + +https://www.openh264.org/BINARY_LICENSE.txt + +``` +"OpenH264 Video Codec provided by Cisco Systems, Inc." +``` + ### 音声ファイルのライセンス スポットライト機能検証時に利用する音声ファイルには [あみたろの声素材工房](https://amitaro.net/) 様の声素材を使用しています。 From 79d3742a141b069acc7c2578261958d4b3b59ba5 Mon Sep 17 00:00:00 2001 From: voluntas Date: Tue, 4 Jul 2023 10:24:55 +0900 Subject: [PATCH 54/68] =?UTF-8?q?=E4=BE=9D=E5=AD=98=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=83=96=E3=83=A9=E3=83=AA=E3=81=AE=E3=83=90=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=82=92=E4=B8=8A=E3=81=92=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 259 ++++++++++++++++++++++++++--------------------------- VERSION | 4 +- 2 files changed, 131 insertions(+), 132 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4baa729..056757d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,344 +1,343 @@ # 変更履歴 - CHANGE - - 下位互換のない変更 + - 下位互換のない変更 - UPDATE - - 下位互換がある変更 + - 下位互換がある変更 - ADD - - 下位互換がある追加 + - 下位互換がある追加 - FIX - - バグ修正 + - バグ修正 ## develop - [CHANGE] `--fake-network-send-codel-active-queue-management` と `--fake-network-receive-codel-active-queue-management` オプションを削除 - - @melpon -- [UPDATE] WebRTC を m114.5735.0.1 に上げる - - @melpon -- [UPDATE] Sora C++ SDK を 2023.5.1 に上げる - - @melpon -- [UPDATE] `CMake` を `3.25.1` に上げる - - @voluntas + - @melpon +- [UPDATE] WebRTC を m114.5735.2.0 に上げる + - @melpon +- [UPDATE] Sora C++ SDK を 2023.7.1 に上げる + - @melpon +- [UPDATE] `CMake` を `3.26.4` に上げる + - @voluntas - [UPDATE] `OpenH264` を `2.3.1` に上げる - - @voluntas + - @voluntas - [UPDATE] `CLI11` を `2.3.1` に上げる - - @voluntas -- [UPDATE] Boost を 1.82.0 に上げる - - @melpon + - @voluntas +- [UPDATE] `Boost` を `1.82.0` に上げる + - @melpon - [UPDATE] actions/create-release と actions/upload-release を softprops/action-gh-release に変更する - - @melpon + - @melpon - [UPDATE] VP9, AV1 もサイマルキャストが利用可能と可能となるよう入力チェックを変更する - - @miosakuma + - @miosakuma - [ADD] Ubuntu 22.04 x86_64 のビルドを追加 - - @melpon + - @melpon - [ADD] `--sora-client-id` および `--sora-bundle-id` オプションを追加 - - @melpon + - @melpon - [ADD] `--duration` および `--repeat-interval` オプションを追加 - - @melpon + - @melpon - [ADD] `--max-retry` および `--retry-interval` オプションを追加 - - @melpon + - @melpon - [ADD] Lyra 向けオプションを追加 - - `--sora-audio-codec-type` オプションに `LYRA` を追加 - - `--sora-audio-codec-lyra-bitrate` オプションを追加 - - `--sora-audio-codec-lyra-usedtx` オプションを追加 - - `--sora-check-lyra-version` オプションを追加 - - @torikizi + - `--sora-audio-codec-type` オプションに `LYRA` を追加 + - `--sora-audio-codec-lyra-bitrate` オプションを追加 + - `--sora-audio-codec-lyra-usedtx` オプションを追加 + - `--sora-check-lyra-version` オプションを追加 + - @torikizi - [FIX] 廃止になった `--sora-audio-opus-params-clock-rate` を削除する - - @torikizi + - @torikizi - [FIX] "data-channels" の "interval" 項目を指定するとエラーになる問題を修正 - - @sile + - @sile - [FIX] クライアント名が消えてたのを修正 - - @melpon + - @melpon - [FIX] パッケージを展開した際の名前が `zakuro` になってしまっていたのを `zakuro-{version}` にする - - @melpon - - @miosakuma + - @melpon + - @miosakuma - [FIX] `--fake-audio-capture` が有効な場合に `--duration` が効かないのを修正 - - @melpon + - @melpon ## 2022.7.1 (2022-10-31) - [FIX] CI でパッケージングしたアーカイブファイルが空になる問題を修正 - - @miosakuma + - @miosakuma ## 2022.7.0 (2022-10-06) - [UPDATE] Sora C++ SDK を利用するように変更 - - @melpon + - @melpon - [CHANGE] VCS を 100 から 1000 に増やす - - @voluntas + - @voluntas ## 2022.6.0 (2022-09-05) - [UPDATE] asmjit と blend2d を最新版に上げる - - @voluntas + - @voluntas - [UPDATE] `cmake` を `3.24.1` に上げる - - @voluntas + - @voluntas - [UPDATE] yaml-cpp 0.7.0 に上げる - - @voluntas + - @voluntas - [UPDATE] OpenH264 2.3.0 に上げる - - @voluntas + - @voluntas - [UPDATE] WebRTC を m105.5195.0.0 に上げる - - @melpon + - @melpon - [UPDATE] Boost を 1.80.0 に上げる - - @melpon + - @melpon ## 2022.5.0 (2022-07-06) - [UPDATE] WebRTC を m103.5060.5.0 に上げる - - @melpon @voluntas @torikizi + - @melpon @voluntas @torikizi ## 2022.3.0 - [CHANGE] `--hatch-rate` を `--vcs-hatch-rate` に変更 - - @melpon + - @melpon - [ADD] `--instance-hatch-rate` を追加 - - @melpon + - @melpon - [ADD] シグナリング URL への接続順序をランダム化して、それを無効化するオプション `--sora-disable-signaling-url-randomization` を追加 - - @melpon + - @melpon ## 2022.3.0 - [UPDATE] WebRTC を m102.5005.7.6 に上げる - - @melpon @voluntas + - @melpon @voluntas - [UPDATE] asmjit と blend2d を最新版に上げる - - @voluntas @melpon + - @voluntas @melpon - [UPDATE] `cmake` を `3.23.2` に上げる - - @voluntas + - @voluntas - [UPDATE] OpenH264 2.2.0 に上げる - - @voluntas + - @voluntas - [UPDATE] `CLI11` を `2.2.0` に上げる - - @voluntas + - @voluntas - [UPDATE] Boost 1.79.0 に上げる - - @voluntas + - @voluntas - [ADD] simulcast_rid を追加する - - @melpon + - @melpon - [ADD] spotlight_focus_rid を追加する - - @melpon + - @melpon - [ADD] spotlight_unfocus_rid を追加する - - @melpon + - @melpon ## 2022.2.0 - [UPDATE] `cmake` を `3.22.3` に上げる - - @voluntas + - @voluntas - [UPDATE] libwebrtc のバージョンを `m99.4844.1.0` に上げる - - @voluntas + - @voluntas - [FIX] turn = false でも利用可能にする - - @melpon + - @melpon ## 2022.1.0 - [ADD] `--client-cert` と `--client-key` でクライアント認証をできるようにする - - @melpon + - @melpon - [ADD] `--initial-mute-video` と `--initial-mute-audio` でミュート状態で接続できるようにする - - @melpon + - @melpon - [UPDATE] libwebrtc のバージョンを `m99.4844.0.0` に上げる - - @melpon + - @melpon - [UPDATE] Boost 1.78.0 に上げる - - @melpon + - @melpon ## 2021.17.0 - [ADD] DataChannel メッセージングのランダムパケットの先頭部分に ConnecitonID を含める - - `<<"ZAKURO", UnixTimeUs:64, LabelCounter:64, ConnectionID:26/binary, RandomBin/binary>>` + - `<<"ZAKURO", UnixTimeUs:64, LabelCounter:64, ConnectionID:26/binary, RandomBin/binary>>` - [UPDATE] libwebrtc のバージョンを `m97.4692.0.0` に上げる - - @voluntas + - @voluntas ## 2021.16 - [CHANGE] DataChannel メッセージングのランダムパケットの先頭に ZAKURO という文字列をいれる - - @melpon + - @melpon - [UPDATE] `cmake` を `3.21.4` に上げる - - @voluntas + - @voluntas ## 2021.15 - [UPDATE] libwebrtc のバージョンを `m96.4664.1.1` に上げる - - @tnoho @voluntas @melpon + - @tnoho @voluntas @melpon - [CHANGE] `--use-dcsctp` フラグを削除(DcSCTP は常に有効になる) - - @melpon + - @melpon ## 2021.14 - [UPDATE] libwebrtc のバージョンを `m96.4664.0.2` に上げる - - @tnoho @voluntas + - @tnoho @voluntas ## 2021.13 - [CHANGE] data_channel_messaging を data_channles へ変更する - - @torikizi + - @torikizi - [ADD] DataChannel メッセージングのデータに時刻とカウンターを追加 - - @melpon + - @melpon ## 2021.12 - [UPDATE] `CLI11` を `2.1.2` に上げる - - @voluntas @melpon + - @voluntas @melpon - [UPDATE] libwebrtc のバージョンを `m94.4606.3.4` に上げる - - @voluntas + - @voluntas - [FIX] Let's Encrypt な証明書の SSL 接続が失敗する問題を修正する - - @melpon + - @melpon ## 2021.11 - [ADD] クラスター機能に対応 - - @melpon + - @melpon - [UPDATE] シグナリングの mid に対応 - - @melpon + - @melpon - [UPDATE] libwebrtc のバージョンを `m94.4606.3.3` に上げる - - @voluntas + - @voluntas - [UPDATE] `cmake` を `3.21.3` に上げる - - @voluntas + - @voluntas - [UPDATE] asmjit を `d0d14ac774977d0060a351f66e35cb57ba0bf59c` に上げる - - @voluntas + - @voluntas - [UPDATE] blend2d を `3a0299c9126d19759a483ac3267a52b50ec77141` に上げる - - @voluntas + - @voluntas ## 2021.10 - [UPDATE] Boost 1.77.0 に上げる - - @voluntas + - @voluntas - [UPDATE] libwebrtc のバージョンを `m93.4577.8.0` に上げる - - @melpon + - @melpon - [UPDATE] `cmake` を `3.21.2` に上げる - - @voluntas + - @voluntas - [UPDATE] `CLI11` を `2.0.0` に上げる - - @melpon + - @melpon - [UPDATE] AES-GCM を候補に含める - - @melpon + - @melpon - [ADD] DataChannel メッセージングに対応 - - @melpon + - @melpon - [ADD] DataChannel メッセージング向け負荷試験機能を追加 - - @melpon - + - @melpon ## 2021.9 - [UPDATE] `cmake` を `3.20.5` に上げる - - @voluntas + - @voluntas - [ADD] `--sora-audio-opus-params-clock-rate` オプションを追加 - - @melpon + - @melpon - [FIX] fake 映像/音声が正常に動かなくなっていたのを修正 - - @melpon + - @melpon ## 2021.8 - [UPDATE] WebRTC のバージョンを M92 (4515@{#9}) に上げる - - @melpon + - @melpon - [ADD] dcsctp を利用するオプション `--use-dcsctp` を追加 - - @melpon + - @melpon ## 2021.7 - [CHANGE] Ubuntu 18.04 のビルドを削除 - - @melpon + - @melpon - [ADD] YAML 設定で複数のインスタンスを立ち上げられる機能を実装 - - @melpon + - @melpon - [ADD] パケロスなどの機能をオプションで指定可能にする - - @melpon + - @melpon ## 2021.6 - [UPDATE] yaml の設定を引数で上書き可能にする - - @melpon + - @melpon - [FIX] 複数インスタンス時のキー入力がおかしくなるのを修正 - - @melpon + - @melpon ## 2021.5.2 - [FIX] セグフォやデッドロックを修正 - - @melpon + - @melpon ## 2021.5.1 - [FIX] DataChannel 周りの対応漏れを追加 - - @melpon + - @melpon ## 2021.5 - [UPDATE] WebRTC のバージョンを M91 (4472@{#9}) に上げる - - @melpon + - @melpon - [UPDATE] `cmake` を `3.20.4` に上げる - - @voluntas + - @voluntas - [UPDATE] asmjit を `78de7d9c81a6ad1b0f732b52666960d9be1c6461` に上げる - - @voluntas + - @voluntas - [FIX] DataChannel 周りの新しい仕様への追従 - - @melpon + - @melpon ## 2021.4 - [UPDATE] DataChannel の type: switch に対応 - - @melpon + - @melpon ## 2021.3 - [UPDATE] `cmake` を `3.20.2` に上げる - - @voluntas + - @voluntas - [UPDATE] DataChannel シグナリングに対応 - - @melpon + - @melpon - [UPDATE] WebSocket シグナリングの re-offer に対応 - - @melpon + - @melpon - [FIX] サイマルキャストの active: false に対応 - - @melpon + - @melpon ## 2021.2 - [UPDATE] `cmake` を `3.20.1` に上げる - - @voluntas + - @voluntas - [UPDATE] WebRTC のバージョンを M90 (4430@{#3}) に上げる - - @melpon + - @melpon - [UPDATE] Boost 1.76.0 に上げる - - @voluntas + - @voluntas - [UPDATE] blend2d を `41e4f9f440ed2cef9f3d19699a14e9e7b11144e4` に上げる - - @voluntas + - @voluntas - [UPDATE] asmjit を `0dd16b0a98ae1da48563c9cc62f757a9e6bbe9b6` に上げる - - @voluntas + - @voluntas ## 2021.1.2 - [UPDATE] 設定ファイルの内容を出力する際に引数をエスケープする - - @melpon + - @melpon - [FIX] 設定ファイルの `metadata` や `signaling-notify-metadata` などが引数に反映されていないのを修正 - - @melpon + - @melpon ## 2021.1.1 - [UPDATE] `cmake` を `3.20.0` に上げる - - @voluntas + - @voluntas - [FIX] `--metadata` と `--signaling-notify-metadata` 引数に `--sora-` プリフィックスが付いてなかったのを修正 - - @melpon + - @melpon ## 2021.1 - [CHANGE] Sora 関連の引数には `--sora-` の prefix を追加する - - @melpon + - @melpon - [CHANGE] CentOS 8 を削除する - - @voluntas + - @voluntas - [UPDATE] blend2d を `92ba4eaa2f22331bc9823ddb47f53dd8ce683c8b` に上げる - - @voluntas + - @voluntas - [UPDATE] asmjit を `a4dd0b2d8b0fdbcda777e4d6dae0e76636080113` に上げる - - @voluntas + - @voluntas - [UPDATE] `libwebrtc` を `M89.4389@{#7}` に上げる - - @melpon + - @melpon - [UPDATE] `cmake` を `3.19.4` に上げる - - @voluntas + - @voluntas - [ADD] サイマルキャストの active と adaptivePtime に対応する - - @melpon + - @melpon - [UPDATE] nlohmann/json を Boost.JSON に変更 - - @melpon + - @melpon - [ADD] 実験的機能として YAML ファイルへ対応する - - @melpon + - @melpon - [ADD] 実験的機能としてスポットライト利用時に音声ファイルを利用して好きな数字を発生できる機能を追加する - - @melpon + - @melpon ## 2020.2 - [ADD] `--game=kuzushi` を実装 - - @melpon + - @melpon - [UPDATE] `libwebrtc` を `M86.4240@{#10}` に上げる - - @voluntas + - @voluntas - [UPDATE] `cmake` を `3.18.3` に上げる - - @voluntas + - @voluntas ## 2020.1 diff --git a/VERSION b/VERSION index 37cce69..b5e3d1b 100644 --- a/VERSION +++ b/VERSION @@ -1,10 +1,10 @@ ZAKURO_VERSION=2022.7.1 SORA_CPP_SDK_VERSION=2023.5.1 -WEBRTC_BUILD_VERSION=m114.5735.0.1 +WEBRTC_BUILD_VERSION=m114.5735.1.0 BOOST_VERSION=1.82.0 LYRA_VERSION=1.3.0 CLI11_VERSION=v2.3.1 -CMAKE_VERSION=3.25.1 +CMAKE_VERSION=3.26.4 BLEND2D_VERSION=a84dfdbd1d03f9b203e18b9158387af32b6ce41e ASMJIT_VERSION=5c469e3f7c307da939d38d72e09f08db7ca076ef OPENH264_VERSION=v2.3.1 From 21b323ae29da21b02aadf0762d18d4dd878a531d Mon Sep 17 00:00:00 2001 From: voluntas Date: Tue, 4 Jul 2023 10:30:05 +0900 Subject: [PATCH 55/68] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E9=96=93=E9=81=95=E3=81=A3=E3=81=A6=E3=81=9F?= 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 b5e3d1b..587d611 100644 --- a/VERSION +++ b/VERSION @@ -1,6 +1,6 @@ ZAKURO_VERSION=2022.7.1 SORA_CPP_SDK_VERSION=2023.5.1 -WEBRTC_BUILD_VERSION=m114.5735.1.0 +WEBRTC_BUILD_VERSION=m114.5735.2.0 BOOST_VERSION=1.82.0 LYRA_VERSION=1.3.0 CLI11_VERSION=v2.3.1 From b0ba73fb71c7f095013774089ddffa6fc5da8c82 Mon Sep 17 00:00:00 2001 From: voluntas Date: Tue, 4 Jul 2023 10:46:38 +0900 Subject: [PATCH 56/68] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 25286e7..faa8f30 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,10 @@ WebRTC Load Testing Tool Zakuro は libwebrtc を利用した WebRTC SFU Sora - フェイクネットワークへ対応 - クライアント証明書へ対応 - 最新の libwebrtc へ対応 +- OpenH264 対応 - Sora C++ SDK ベース +- 期間繰り返し + - 30 秒負荷かけて切断を繰り返すなど ## 使ってみる From f9f719432e2666539e79fd244bff28b3e360e508 Mon Sep 17 00:00:00 2001 From: voluntas Date: Tue, 4 Jul 2023 10:48:57 +0900 Subject: [PATCH 57/68] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 587d611..e01ced3 100644 --- a/VERSION +++ b/VERSION @@ -1,5 +1,5 @@ -ZAKURO_VERSION=2022.7.1 -SORA_CPP_SDK_VERSION=2023.5.1 +ZAKURO_VERSION=2023.1.0 +SORA_CPP_SDK_VERSION=2023.7.1 WEBRTC_BUILD_VERSION=m114.5735.2.0 BOOST_VERSION=1.82.0 LYRA_VERSION=1.3.0 From 6d99c4bfac6a6751183771672bc91c19427e0a47 Mon Sep 17 00:00:00 2001 From: voluntas Date: Tue, 4 Jul 2023 10:56:05 +0900 Subject: [PATCH 58/68] =?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 056757d..0871561 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -27,7 +27,7 @@ - @melpon - [UPDATE] actions/create-release と actions/upload-release を softprops/action-gh-release に変更する - @melpon -- [UPDATE] VP9, AV1 もサイマルキャストが利用可能と可能となるよう入力チェックを変更する +- [UPDATE] VP9, AV1 もサイマルキャストが利用可能となるよう入力チェックを変更する - @miosakuma - [ADD] Ubuntu 22.04 x86_64 のビルドを追加 - @melpon From 5b240696b37c63c264124a613ec2fa82baf5fa6d Mon Sep 17 00:00:00 2001 From: voluntas Date: Tue, 4 Jul 2023 10:56:40 +0900 Subject: [PATCH 59/68] =?UTF-8?q?=E4=BE=9D=E5=AD=98=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=83=96=E3=83=A9=E3=83=AA=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 +- VERSION | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 0871561..b464191 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,7 +19,7 @@ - @melpon - [UPDATE] `CMake` を `3.26.4` に上げる - @voluntas -- [UPDATE] `OpenH264` を `2.3.1` に上げる +- [UPDATE] `OpenH264` を `2.3.2` に上げる - @voluntas - [UPDATE] `CLI11` を `2.3.1` に上げる - @voluntas diff --git a/VERSION b/VERSION index e01ced3..3e854d7 100644 --- a/VERSION +++ b/VERSION @@ -3,7 +3,7 @@ SORA_CPP_SDK_VERSION=2023.7.1 WEBRTC_BUILD_VERSION=m114.5735.2.0 BOOST_VERSION=1.82.0 LYRA_VERSION=1.3.0 -CLI11_VERSION=v2.3.1 +CLI11_VERSION=v2.3.2 CMAKE_VERSION=3.26.4 BLEND2D_VERSION=a84dfdbd1d03f9b203e18b9158387af32b6ce41e ASMJIT_VERSION=5c469e3f7c307da939d38d72e09f08db7ca076ef From a079effaa56fdf8a0b4d41f88dbb0fbf8551171f Mon Sep 17 00:00:00 2001 From: miosakuma Date: Wed, 5 Jul 2023 11:19:47 +0900 Subject: [PATCH 60/68] =?UTF-8?q?README.md=20=E3=81=AE=E3=83=98=E3=83=AB?= =?UTF-8?q?=E3=83=97=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88=E3=82=92=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E3=81=AB=E5=B7=AE=E3=81=97=E6=9B=BF=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 61 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index faa8f30..7094b53 100644 --- a/README.md +++ b/README.md @@ -64,39 +64,44 @@ Options: --output-file-connection-id TEXT Output to specified file with connection IDs --instance-hatch-rate FLOAT:FLOAT in [0.1 - 100] - Spawned instance per seconds + Spawned instance per seconds (default: 1.0) --name TEXT Client Name - --vcs INT:INT in [1 - 1000] Virtual Clients + --vcs INT:INT in [1 - 1000] Virtual Clients (default: 1) --vcs-hatch-rate FLOAT:FLOAT in [0.1 - 100] - Spawned virtual clients per seconds - --no-video-device Do not use video device - --no-audio-device Do not use audio device - --fake-capture-device Fake Capture Device + Spawned virtual clients per seconds (default: 1.0) + --duration FLOAT (Experimental) Duration of virtual client running in seconds (if not zero) (default: 0.0) + --repeat-interval FLOAT (Experimental) (If duration is set) Interval to reconnect after disconnection (default: 0.0) + --max-retry INT (Experimental) Max retries when a connection fails (default: 0) + --retry-interval FLOAT (Experimental) (If max-retry is set) Interval to reconnect after connection fails (default: 60) + --no-video-device Do not use video device (default: false) + --no-audio-device Do not use audio device (default: false) + --fake-capture-device Fake Capture Device (default: true) --fake-video-capture TEXT:FILE Fake Video from File --fake-audio-capture TEXT:FILE Fake Audio from File - --sandstorm Fake Sandstorm Video + --sandstorm Fake Sandstorm Video (default: false) --video-device TEXT:FILE Use the video input device specified by a name (some device will be used if not specified) - --resolution TEXT Video resolution (one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT]) + --resolution TEXT Video resolution (one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT]) (default: VGA) --framerate INT:INT in [1 - 60] - Video framerate - --fixed-resolution Maintain video resolution in degradation + Video framerate (default: 30) + --fixed-resolution Maintain video resolution in degradation (default: false) --priority TEXT:{BALANCE,FRAMERATE,RESOLUTION} - Preference in video degradation (experimental) - --insecure Allow insecure server connections when using SSL + (Experimental) Preference in video degradation (default: BALANCE) + --insecure Allow insecure server connections when using SSL (default: false) --openh264 TEXT:FILE OpenH264 dynamic library path. "OpenH264 Video Codec provided by Cisco Systems, Inc." --game TEXT:{kuzushi} Play game --scenario TEXT:{reconnect} Scenario type --client-cert TEXT:FILE Cert file path for client certification (PEM format) --client-key TEXT:FILE Private key file path for client certification (PEM format) --initial-mute-video BOOLEAN:value in {false->0,true->1} OR {0,1} - Mute video initialy + Mute video initialy (default: false) --initial-mute-audio BOOLEAN:value in {false->0,true->1} OR {0,1} - Mute audio initialy + Mute audio initialy (default: false) --sora-signaling-url TEXT ... Signaling URLs --sora-disable-signaling-url-randomization + Disable random connections to signaling URLs (default: false) --sora-channel-id TEXT Channel ID --sora-client-id TEXT Client ID --sora-bundle-id TEXT Bundle ID @@ -107,32 +112,32 @@ Options: --sora-audio BOOLEAN:value in {false->0,true->1} OR {0,1} Send audio to sora (default: true) --sora-video-codec-type TEXT:{VP8,VP9,AV1,H264} - Video codec for send + Video codec for send (default: none) --sora-audio-codec-type TEXT:{OPUS,LYRA} - Audio codec for send + Audio codec for send (default: none) --sora-audio-codec-lyra-bitrate INT:INT in [0 - 9200] - Lyra audio codec bitrate + Lyra audio codec bitrate (default: none) --sora-audio-codec-lyra-usedtx TEXT:value in {false-> 0,true-> 1,none->--} OR { 0, 1,--} Lyra usedtx (default: none) --sora-check-lyra-version BOOLEAN - Lyra version check + Lyra version check (default: false) --sora-video-bit-rate INT:INT in [0 - 30000] - Video bit rate + Video bit rate (default: none) --sora-audio-bit-rate INT:INT in [0 - 510] - Audio bit rate + Audio bit rate (default: none) --sora-multistream BOOLEAN:value in {false->0,true->1} OR {0,1} Use multistream (default: false) --sora-simulcast BOOLEAN:value in {false->0,true->1} OR {0,1} Use simulcast (default: false) - --sora-simulcast-rid TEXT Simulcast rid + --sora-simulcast-rid TEXT Simulcast rid (default: none) --sora-spotlight BOOLEAN:value in {false->0,true->1} OR {0,1} - Use spotlight (default: false) + Use spotlight (default: none) --sora-spotlight-number INT:INT in [0 - 8] - Number of spotlight + Number of spotlight (default: none) --sora-spotlight-focus-rid TEXT - Spotlight focus rid + Spotlight focus rid (default: none) --sora-spotlight-unfocus-rid TEXT - Spotlight unfocus rid + Spotlight unfocus rid (default: none) --sora-data-channel-signaling TEXT:value in {false-> 0,true-> 1,none->--} OR { 0, 1,--} Use DataChannel for Sora signaling (default: none) --sora-data-channel-signaling-timeout INT:POSITIVE @@ -142,11 +147,11 @@ Options: --sora-disconnect-wait-timeout INT:POSITIVE Disconnecting timeout for Data Channel in seconds (default: 5) --sora-metadata TEXT:JSON Value - Signaling metadata used in connect message + Signaling metadata used in connect message (default: none) --sora-signaling-notify-metadata TEXT:JSON Value - Signaling metadata + Signaling metadata (default: none) --sora-data-channels TEXT:JSON Value - DataChannels + DataChannels (default: none) --fake-network-send-queue-length-packets UINT Queue length in number of packets for sending --fake-network-send-queue-delay-ms INT From f7d8870e6772ad5025678f4ad86864da69809459 Mon Sep 17 00:00:00 2001 From: melpon Date: Thu, 6 Jul 2023 09:05:29 +0900 Subject: [PATCH 61/68] =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E3=82=92=E6=BA=80?= =?UTF-8?q?=E3=81=9F=E3=81=97=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AF=E8=87=AA?= =?UTF-8?q?=E5=8B=95=E3=81=A7=20zakuro=20=E3=82=92=E7=B5=82=E4=BA=86?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 全てのインスタンスで duration が設定されていて、repeat-interval が設定されていない場合、全ての仮想クライアントが切断された時に アプリケーションを自動で終了する。 --- src/scenario_player.h | 22 +++++++++++++++++++++- src/virtual_client.cpp | 23 ++++++++++++++++++++--- src/virtual_client.h | 3 ++- src/zakuro.cpp | 12 +++++++----- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/scenario_player.h b/src/scenario_player.h index ad87755..ff3bbe2 100644 --- a/src/scenario_player.h +++ b/src/scenario_player.h @@ -35,6 +35,7 @@ struct ScenarioData { }; struct OpDisconnect {}; struct OpReconnect {}; + struct OpExit {}; enum Type { OP_SLEEP, OP_PLAY_SUB_SCENARIO, @@ -42,6 +43,7 @@ struct ScenarioData { OP_SEND_DATA_CHANNEL_MESSAGE, OP_DISCONNECT, OP_RECONNECT, + OP_EXIT, }; typedef boost::variant + OpReconnect, + OpExit> operation_t; std::vector ops; @@ -70,6 +73,7 @@ struct ScenarioData { } void Disconnect() { ops.push_back(OpDisconnect()); } void Reconnect() { ops.push_back(OpReconnect()); } + void Exit() { ops.push_back(OpExit()); } }; struct ScenarioPlayerConfig { @@ -100,6 +104,7 @@ class ScenarioPlayer { client_infos_[client_id].loop_op_index = loop_op_index; client_infos_[client_id].timer.cancel(); client_infos_[client_id].paused = false; + client_infos_[client_id].exit = false; DoNext(client_id); } void PauseAll() { @@ -211,6 +216,20 @@ class ScenarioPlayer { (*config_.vcs)[client_id]->Connect(); break; } + case ScenarioData::OP_EXIT: { + (*config_.vcs)[client_id]->Close([this, client_id](std::string message) { + RTC_LOG(LS_INFO) << "Client " << client_id << " exited: " << message; + client_infos_[client_id].exit = true; + bool all_exited = std::all_of(client_infos_.begin(), client_infos_.end(), [](auto& info) { + return info.exit; + }); + if (all_exited) { + config_.ioc->stop(); + } + }); + + break; + } } Next(client_id); @@ -228,6 +247,7 @@ class ScenarioPlayer { int loop_op_index; boost::asio::deadline_timer timer; bool paused; + bool exit; }; std::vector client_infos_; VoiceNumberReader voice_reader_; diff --git a/src/virtual_client.cpp b/src/virtual_client.cpp index 88abc28..e8e7eef 100644 --- a/src/virtual_client.cpp +++ b/src/virtual_client.cpp @@ -81,13 +81,21 @@ void VirtualClient::Connect() { signaling_->Connect(); } -void VirtualClient::Close() { +void VirtualClient::Close(std::function on_close) { if (closing_) { + if (on_close_ == nullptr) { + on_close_ = on_close; + } else { + on_close("already closing"); + } return; } if (signaling_) { closing_ = true; + on_close_ = on_close; signaling_->Disconnect(); + } else { + on_close("already closed"); } } @@ -169,16 +177,25 @@ void VirtualClient::OnDisconnect(sora::SoraSignalingErrorCode ec, return; } need_reconnect_ = false; - Connect(); + if (on_close_ == nullptr) { + Connect(); + } }); } } else { closing_ = false; if (need_reconnect_) { need_reconnect_ = false; - Connect(); + if (on_close_ == nullptr) { + Connect(); + } } } + + if (on_close_) { + on_close_(message); + on_close_ = nullptr; + } } void VirtualClient::OnNotify(std::string text) { auto json = boost::json::parse(text); diff --git a/src/virtual_client.h b/src/virtual_client.h index 6eba5d3..c842676 100644 --- a/src/virtual_client.h +++ b/src/virtual_client.h @@ -69,7 +69,7 @@ class VirtualClient : public std::enable_shared_from_this, static std::shared_ptr Create(VirtualClientConfig config); void Connect(); - void Close(); + void Close(std::function on_close = nullptr); void Clear(); void SendMessage(const std::string& label, const std::string& data); @@ -96,6 +96,7 @@ class VirtualClient : public std::enable_shared_from_this, bool closing_ = false; bool need_reconnect_ = false; int retry_count_ = 0; + std::function on_close_; boost::asio::deadline_timer retry_timer_; std::shared_ptr signaling_; rtc::scoped_refptr audio_track_; diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 9e03019..6fa0294 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -463,7 +463,7 @@ int Zakuro::Run() { } // 切断と再接続のシナリオを追加する関数 - auto add_reconnect_scenario = [this](ScenarioData& data) { + auto add_reconnect_scenario = [this](ScenarioData& data, bool exit) { int op = 0; if (config_.duration == 0) { data.Sleep(10000, 10000); @@ -475,8 +475,10 @@ int Zakuro::Run() { (int)(config_.duration * 1000)); data.Disconnect(); op += 2; - // repeat_interval == 0 の場合は再接続しない - if (config_.repeat_interval != 0) { + if (config_.repeat_interval == 0) { + data.Exit(); + op += 1; + } else { data.Sleep((int)(config_.repeat_interval * 1000), (int)(config_.repeat_interval * 1000)); data.Reconnect(); @@ -491,7 +493,7 @@ int Zakuro::Run() { int loop_index; if (!fake_audio_key_trigger) { data.Reconnect(); - add_reconnect_scenario(data); + add_reconnect_scenario(data, true); loop_index = 1; } else if (config_.scenario == "") { data.Reconnect(); @@ -502,7 +504,7 @@ int Zakuro::Run() { sd.Sleep(1000, 5000); sd.PlayVoiceNumberClient(); data.PlaySubScenario("scenario-voice-number-client", sd, 0); - add_reconnect_scenario(data); + add_reconnect_scenario(data, true); loop_index = 1 + dcs_data.size() + 1; } else if (config_.scenario == "reconnect") { data.Reconnect(); From 645eee84c71b30e3078574e70e1762a8e1eb71ed Mon Sep 17 00:00:00 2001 From: melpon Date: Thu, 6 Jul 2023 14:22:33 +0900 Subject: [PATCH 62/68] =?UTF-8?q?`output-file-connection-id`=20=E3=82=92?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=97=E3=81=A6=E3=81=AA=E3=81=84=E6=99=82?= =?UTF-8?q?=E3=81=AB=E8=90=BD=E3=81=A1=E3=81=A6=E3=81=97=E3=81=BE=E3=81=86?= =?UTF-8?q?=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/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index a4c23bd..1a3d923 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -285,7 +285,9 @@ int main(int argc, char* argv[]) { for (auto& th : ths) { th->join(); } - stats_th->join(); + if (stats_th) { + stats_th->join(); + } return 0; } From c2d9463d5077731142ccfc519d569786d000cb4f Mon Sep 17 00:00:00 2001 From: melpon Date: Thu, 6 Jul 2023 14:25:26 +0900 Subject: [PATCH 63/68] =?UTF-8?q?CHANGES=20=E6=9B=B4=E6=96=B0?= 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 b464191..2f79c28 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -37,6 +37,8 @@ - @melpon - [ADD] `--max-retry` および `--retry-interval` オプションを追加 - @melpon +- [ADD] 全てのインスタンスで duration が設定されていて、repeat-interval が設定されていない場合、全ての仮想クライアントが duration 時間経過することによって切断された時に zakuro を自動で終了する + - @melpon - [ADD] Lyra 向けオプションを追加 - `--sora-audio-codec-type` オプションに `LYRA` を追加 - `--sora-audio-codec-lyra-bitrate` オプションを追加 @@ -54,6 +56,8 @@ - @miosakuma - [FIX] `--fake-audio-capture` が有効な場合に `--duration` が効かないのを修正 - @melpon +- [FIX] `--output-file-connection-id` を指定してない場合、終了時に落ちてしまうのを修正 + - @melpon ## 2022.7.1 (2022-10-31) From 29ec9c5286dbf61015f4eec0d898a12d51bcb328 Mon Sep 17 00:00:00 2001 From: voluntas Date: Sat, 5 Aug 2023 19:56:37 +0900 Subject: [PATCH 64/68] =?UTF-8?q?Discord=20=E3=81=A7=E3=81=AE=20IPv6=20?= =?UTF-8?q?=E3=82=92=E6=9C=89=E5=8A=B9=E3=81=AB=E3=81=97=E3=81=A6=E3=81=BF?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/FAQ.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/FAQ.md b/doc/FAQ.md index 5e6b1fa..2c9db40 100644 --- a/doc/FAQ.md +++ b/doc/FAQ.md @@ -36,6 +36,14 @@ Zakuro のスポットライト機能検証時に利用する音声ファイル 積極的な破壊的変更を行います。 +## Zakuro は IPv6 に対応していますか? + +対応しています。 + +Ubuntu サーバーを利用している場合、 +Temporary Address がデフォルトで無効になっているため、動作しない可能性があります。 +ネットワークマネージャーなどを有効にしてみてください。 + ## Zakuro を利用する際の注意点はありますか? ### ファイルディスクリプタ数 From 897db1dae720d4641503d56fe93173ac93e06d82 Mon Sep 17 00:00:00 2001 From: voluntas Date: Tue, 8 Aug 2023 11:56:27 +0900 Subject: [PATCH 65/68] Update FAQ.md --- doc/FAQ.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/FAQ.md b/doc/FAQ.md index 2c9db40..83e454a 100644 --- a/doc/FAQ.md +++ b/doc/FAQ.md @@ -41,8 +41,8 @@ Zakuro のスポットライト機能検証時に利用する音声ファイル 対応しています。 Ubuntu サーバーを利用している場合、 -Temporary Address がデフォルトで無効になっているため、動作しない可能性があります。 -ネットワークマネージャーなどを有効にしてみてください。 +MACアドレスベースの EUI-64 フォーマットの IPv6 になっている場合があります。 +これは非推奨となっているため、 sysctl で `add_gen_mode` を確認し変更してください。 ## Zakuro を利用する際の注意点はありますか? From 7aa1db4bafdec0d941c6bffa0f5d0cf51073e632 Mon Sep 17 00:00:00 2001 From: torikizi Date: Wed, 23 Aug 2023 15:04:28 +0900 Subject: [PATCH 66/68] =?UTF-8?q?Sora=20C++=20SDK=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=E4=B8=8A=E3=81=92?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 3e854d7..0dfd83d 100644 --- a/VERSION +++ b/VERSION @@ -1,6 +1,6 @@ ZAKURO_VERSION=2023.1.0 -SORA_CPP_SDK_VERSION=2023.7.1 -WEBRTC_BUILD_VERSION=m114.5735.2.0 +SORA_CPP_SDK_VERSION=2023.9.0 +WEBRTC_BUILD_VERSION=m115.5790.7.0 BOOST_VERSION=1.82.0 LYRA_VERSION=1.3.0 CLI11_VERSION=v2.3.2 From cf59b4255f2b2bfecad9c76183889c476a6be608 Mon Sep 17 00:00:00 2001 From: miosakuma Date: Wed, 23 Aug 2023 17:09:21 +0900 Subject: [PATCH 67/68] =?UTF-8?q?CHANGES=20=E3=81=A8=20README=20=E3=81=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 14 +++++++++----- README.md | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2f79c28..40687e6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,15 +13,17 @@ - [CHANGE] `--fake-network-send-codel-active-queue-management` と `--fake-network-receive-codel-active-queue-management` オプションを削除 - @melpon -- [UPDATE] WebRTC を m114.5735.2.0 に上げる - - @melpon -- [UPDATE] Sora C++ SDK を 2023.7.1 に上げる +- [CHANGE] YAML 設定の `instance_num` と `instance-num` に変更する - @melpon +- [UPDATE] WebRTC を m115.5790.7.0 に上げる + - @melpon @torikizi +- [UPDATE] Sora C++ SDK を 2023.9.0 に上げる + - @melpon @torikizi - [UPDATE] `CMake` を `3.26.4` に上げる - @voluntas -- [UPDATE] `OpenH264` を `2.3.2` に上げる +- [UPDATE] `OpenH264` を `2.3.1` に上げる - @voluntas -- [UPDATE] `CLI11` を `2.3.1` に上げる +- [UPDATE] `CLI11` を `2.3.2` に上げる - @voluntas - [UPDATE] `Boost` を `1.82.0` に上げる - @melpon @@ -29,6 +31,8 @@ - @melpon - [UPDATE] VP9, AV1 もサイマルキャストが利用可能となるよう入力チェックを変更する - @miosakuma +- [UPDATE] ヘルプテキストを修正する + - @miosakuma - [ADD] Ubuntu 22.04 x86_64 のビルドを追加 - @melpon - [ADD] `--sora-client-id` および `--sora-bundle-id` オプションを追加 diff --git a/README.md b/README.md index 7094b53..eac26dc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # WebRTC Load Testing Tool Zakuro -[![libwebrtc](https://img.shields.io/badge/libwebrtc-m105.5195-blue.svg)](https://chromium.googlesource.com/external/webrtc/+/branch-heads/5195) +[![libwebrtc](https://img.shields.io/badge/libwebrtc-m115.5790-blue.svg)](https://chromium.googlesource.com/external/webrtc/+/branch-heads/5790) [![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/shiguredo/zakuro.svg)](https://github.com/shiguredo/zakuro) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) From 2d06c72abb6e942ba2b04d9971a0c43a09409e0a Mon Sep 17 00:00:00 2001 From: miosakuma Date: Wed, 23 Aug 2023 17:16:35 +0900 Subject: [PATCH 68/68] =?UTF-8?q?2023.1.0=20=E3=83=AA=E3=83=AA=E3=83=BC?= =?UTF-8?q?=E3=82=B9?= 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 40687e6..73db70b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,8 @@ ## develop +## 2023.1.0 (2023-08-23) + - [CHANGE] `--fake-network-send-codel-active-queue-management` と `--fake-network-receive-codel-active-queue-management` オプションを削除 - @melpon - [CHANGE] YAML 設定の `instance_num` と `instance-num` に変更する