From fb4f64c20a40ac51d1a94a0a00a0de18ac5218b5 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Sat, 20 Jan 2024 10:03:39 +0800 Subject: [PATCH 01/14] =?UTF-8?q?[*]=20=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Deploy.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/docs/Deploy.md b/docs/Deploy.md index 48eb85d..886586e 100644 --- a/docs/Deploy.md +++ b/docs/Deploy.md @@ -17,7 +17,7 @@ Android >= 9.0 ## Debian -`CentOS 7`实在是太旧了,软件更新非常麻烦,所以直接使用`Debian`作为测试,系统配置全部使用`root`用户。 +`CentOS 7`实在是太旧了,软件更新非常麻烦,所以直接使用`Debian`作为测试。 ### 系统参数 @@ -395,11 +395,11 @@ wget http://www.ffmpeg.org/releases/ffmpeg-5.1.3.tar.xz tar -Jxvf ffmpeg-5.1.3.tar.xz cd ffmpeg-5.1.3/ PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/" -./configure \ ---enable-static \ ---enable-shared \ ---enable-gpl \ ---enable-libvpx \ +./configure \ +--enable-static \ +--enable-shared \ +--enable-gpl \ +--enable-libvpx \ --enable-libopus \ --enable-libx264 \ --enable-libx265 \ @@ -407,6 +407,15 @@ PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/" --enable-encoder=libvpx_vp9 --enable-decoder=vp9 --enable-parser=vp9 make && sudo make install +# 链接文件 +vim /etc/ld.so.conf + +--- +/usr/local/lib/ +--- + +ldconfig + # 验证 ffmpeg -version ffmpeg -decoders @@ -645,11 +654,11 @@ openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12 ## 清理源码 ``` -sudo rm -rf \ -/data/dev/cmake \ +sudo rm -rf \ +/data/dev/cmake \ /data/dev/ffmpeg \ /data/dev/python \ -/data/dev/maven/apache-maven-3.8.8-bin.tar.gz \ +/data/dev/maven/apache-maven-3.8.8-bin.tar.gz \ /data/dev/nodejs/node-v18.16.0-linux-x64.tar.xz \ /data/dev/java/openjdk-17.0.2_linux-x64_bin.tar.gz ``` From a3644cbb13fb56e610854af2fc47779e17aa2c9c Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Sat, 20 Jan 2024 14:46:18 +0800 Subject: [PATCH 02/14] [*] deploy --- docs/Deploy.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/Deploy.md b/docs/Deploy.md index 886586e..d2b980e 100644 --- a/docs/Deploy.md +++ b/docs/Deploy.md @@ -66,6 +66,7 @@ set nocompatible vi /etc/network/interfaces --- +auto enp0s3 iface enp0s3 inet static address 192.168.1.110 gateway 192.168.1.1 @@ -80,6 +81,17 @@ ifup enp0s3 ### 设置国内镜像 ``` +# DNS +sudo vim /etc/systemd/resolved.conf + +--- +DNS=233.5.5.5 233.6.6.6 114.114.114.114 8.8.8.8 +--- + +sudo systemctl restart systemd-resolved +sudo systemctl enable systemd-resolved +sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf + # 配置 vi /etc/apt/sources.list @@ -96,6 +108,7 @@ deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free cont # 更新系统 apt update +apt upgrade ``` ### 安装依赖 From d4dab26a05340f1b7051471aa1cfbfb47893f43a Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Tue, 23 Jan 2024 11:51:15 +0800 Subject: [PATCH 03/14] =?UTF-8?q?[*]=20=E5=88=A4=E6=96=AD=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/acgist/taoyao/media/client/Room.java | 2 +- taoyao-client-web/src/components/Taoyao.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java index 9f89a1d..bd73d60 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java @@ -288,7 +288,7 @@ public class Room extends CloseableClient implements RouterCallback { "forceTcp", false, "producing", false, "consuming", true, - "sctpCapabilities", this.dataProduce ? this.sctpCapabilities : null + "sctpCapabilities", this.dataConsume ? this.sctpCapabilities : null ), response -> { this.nativeCreateRecvTransport(this.nativeRoomPointer, JSONUtils.toJSON(response.body())); diff --git a/taoyao-client-web/src/components/Taoyao.js b/taoyao-client-web/src/components/Taoyao.js index de963bb..2700028 100644 --- a/taoyao-client-web/src/components/Taoyao.js +++ b/taoyao-client-web/src/components/Taoyao.js @@ -2839,7 +2839,7 @@ class Taoyao extends RemoteClient { forceTcp : this.forceTcp, producing : false, consuming : true, - sctpCapabilities: this.dataProduce ? this.mediasoupDevice.sctpCapabilities : undefined, + sctpCapabilities: this.dataConsume ? this.mediasoupDevice.sctpCapabilities : undefined, })); const { transportId, From f4ad326ecff8a40e63f35c792935bdab7ae5bb19 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Wed, 24 Jan 2024 18:26:55 +0800 Subject: [PATCH 04/14] [*] taoyao --- docs/Deploy.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/Deploy.md b/docs/Deploy.md index d2b980e..1dc4661 100644 --- a/docs/Deploy.md +++ b/docs/Deploy.md @@ -510,7 +510,7 @@ pm2 start|stop|restart taoyao-client-media > 下载依赖建议备份方便再次编译使用 -### Mediasoup单独编译 +### Mediasoup单独编译(旧版) 编译媒体服务时会自动编译`mediasoup`所以忽略单独编译 @@ -524,6 +524,16 @@ make make clean ``` +### Mediasoup单独编译(新版) + +* 需要`python3`和`pip3` +* 源码[mediasoup-3.13.16.zip](https://pan.baidu.com/s/1E_DXv32D9ODyj5J-o-ji_g?pwd=hudc)(包含依赖) + +``` +npm install +node npm-scripts.mjs worker:build +``` + ## 安装Web终端 `Nginx`和`PM2`选择一种启动即可 From 0f165a78c446300d7c821dae1a6bab980fc464f7 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Wed, 24 Jan 2024 18:29:46 +0800 Subject: [PATCH 05/14] [*] deploy --- docs/Deploy.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/Deploy.md b/docs/Deploy.md index 1dc4661..bf7ad3b 100644 --- a/docs/Deploy.md +++ b/docs/Deploy.md @@ -10,8 +10,8 @@ Maven >= 3.8.0 CMake >= 3.26.0 NodeJS >= v18.16.0 Python >= 3.8.0 with PIP -ffmpeg >= 4.3.0 -gcc/g++ >= 10.2.0 +FFmpeg >= 4.3.0 +GCC/G++ >= 10.2.0 Android >= 9.0 ``` @@ -190,7 +190,7 @@ sudo apt install git git --version ``` -## 安装gcc/g++ +## 安装GCC/G++ ``` # 安装 @@ -348,7 +348,7 @@ trusted-host = mirrors.aliyun.com pip config list ``` -## 安装ffmpeg +## 安装FFmpeg ``` mkdir -p /data/dev/ffmpeg ; cd $_ @@ -657,7 +657,7 @@ openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12 # 设置密码:-deststorepass 123456 ``` -## gcc/g++路径配置 +## GCC/G++路径配置 ``` # 安装路径 From 402318a08031a3c62abc89279cd4b72e9b665f83 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Tue, 9 Apr 2024 07:16:15 +0800 Subject: [PATCH 06/14] [*] setBitrate --- .../taoyao/media/src/main/cpp/include/Room.hpp | 11 +++++++++++ .../taoyao/media/src/main/cpp/webrtc/Room.cpp | 16 ++++++++++++++++ .../com/acgist/taoyao/boot/utils/DateUtils.java | 6 +++--- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/taoyao-client-android/taoyao/media/src/main/cpp/include/Room.hpp b/taoyao-client-android/taoyao/media/src/main/cpp/include/Room.hpp index 346c3f6..b995fa7 100644 --- a/taoyao-client-android/taoyao/media/src/main/cpp/include/Room.hpp +++ b/taoyao-client-android/taoyao/media/src/main/cpp/include/Room.hpp @@ -8,7 +8,11 @@ #include "sdk/android/native_api/jni/scoped_java_ref.h" #include "Log.hpp" +#define private public +#define protected public #include "RouterCallback.hpp" +#undef private +#undef protected /** * 视频房间头文件 @@ -175,6 +179,13 @@ namespace acgist { * @param env JNIEnv */ void closeRoom(JNIEnv* env); + /** + * 设置码率 + * + * @param minBitrate 最小码率 + * @param maxBitrate 最大码率 + */ + void setBitrate(int minBitrate, int maxBitrate); }; } \ No newline at end of file diff --git a/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp b/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp index a45c0b5..44fbc08 100644 --- a/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp +++ b/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp @@ -552,6 +552,22 @@ namespace acgist { this->closeRoomCallback(env); } + void Room::setBitrate(int minBitrate, int maxBitrate) { + if( + this->sendTransport == nullptr || + this->sendTransport->handler == nullptr || + this->sendTransport->handler->pc == nullptr || + this->sendTransport->handler->pc->pc == nullptr + ) { + return; + } + webrtc::BitrateSettings settings; + settings.min_bitrate_bps = minBitrate; + settings.max_bitrate_bps = maxBitrate; + settings.start_bitrate_bps = minBitrate; + this->sendTransport->handler->pc->pc->SetBitrate(settings); + } + extern "C" JNIEXPORT jlong JNICALL Java_com_acgist_taoyao_media_client_Room_nativeNewRoom( JNIEnv* env, jobject me, diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/DateUtils.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/DateUtils.java index c9fdf0f..6aa384a 100644 --- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/DateUtils.java +++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/DateUtils.java @@ -207,7 +207,7 @@ public final class DateUtils { * * @return 日期字符串 */ - public static String format(LocalDate localDate, DateStyle format) { + public static final String format(LocalDate localDate, DateStyle format) { return localDate != null && format != null ? format.getDateTimeFormatter().format(localDate) : null; } @@ -219,7 +219,7 @@ public final class DateUtils { * * @return 时间字符串 */ - public static String format(LocalTime localTime, TimeStyle format) { + public static final String format(LocalTime localTime, TimeStyle format) { return localTime != null && format != null ? format.getDateTimeFormatter().format(localTime) : null; } @@ -231,7 +231,7 @@ public final class DateUtils { * * @return 日期时间字符串 */ - public static String format(LocalDateTime localDateTime, DateTimeStyle format) { + public static final String format(LocalDateTime localDateTime, DateTimeStyle format) { return localDateTime != null && format != null ? format.getDateTimeFormatter().format(localDateTime) : null; } From 8a850c2655cfa0c4f65dfad7b781f43d8aa14d4e Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Tue, 9 Apr 2024 07:41:59 +0800 Subject: [PATCH 07/14] [*] java setbitrate --- .../taoyao/media/src/main/cpp/webrtc/Room.cpp | 9 +++++++++ .../com/acgist/taoyao/media/client/Room.java | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp b/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp index 44fbc08..0cb1b16 100644 --- a/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp +++ b/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp @@ -743,4 +743,13 @@ namespace acgist { env->ReleaseStringUTFChars(jConsumerId, consumerId); } + extern "C" JNIEXPORT void JNICALL + Java_com_acgist_taoyao_media_client_Room_nativeSetBitrate(JNIEnv* env, jobject me, jlong nativeRoomPointer, jint minBitrate, jint maxBitrate) { + Room* room = (Room*) nativeRoomPointer; + if(room == nullptr) { + return; + } + room->setBitrate(minBitrate, maxBitrate); + } + } diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java index bd73d60..ae2e2ee 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java @@ -382,6 +382,16 @@ public class Room extends CloseableClient implements RouterCallback { remoteClient.close(); } + /** + * 设置码率 + * + * @param minBitrate 最小码率 + * @param maxBitrate 最大码率 + */ + public void setBitrate(int minBitrate, int maxBitrate) { + this.nativeSetBitrate(this.nativeRoomPointer, minBitrate, maxBitrate); + } + @Override public void close() { synchronized (this) { @@ -773,4 +783,13 @@ public class Room extends CloseableClient implements RouterCallback { */ private native void nativeMediaConsumerClose(long nativeRoomPointer, String consumerId); + /** + * Mediasoup设置码率 + * + * @param nativeRoomPointer 房间指针 + * @param minBitrate 最小码率 + * @param maxBitrate 最大码率 + */ + private native void nativeSetBitrate(long nativeRoomPointer, int minBitrate, int maxBitrate); + } From ebe8a62feda4aa35b5a132602d1a0b1e681ad749 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Wed, 10 Apr 2024 09:37:19 +0800 Subject: [PATCH 08/14] [*] setBitrate --- .../media/src/main/cpp/include/Room.hpp | 11 ++-- .../taoyao/media/src/main/cpp/webrtc/Room.cpp | 54 ++++++++++++++----- .../com/acgist/taoyao/media/client/Room.java | 16 +++--- 3 files changed, 55 insertions(+), 26 deletions(-) diff --git a/taoyao-client-android/taoyao/media/src/main/cpp/include/Room.hpp b/taoyao-client-android/taoyao/media/src/main/cpp/include/Room.hpp index b995fa7..69e1a0e 100644 --- a/taoyao-client-android/taoyao/media/src/main/cpp/include/Room.hpp +++ b/taoyao-client-android/taoyao/media/src/main/cpp/include/Room.hpp @@ -8,11 +8,7 @@ #include "sdk/android/native_api/jni/scoped_java_ref.h" #include "Log.hpp" -#define private public -#define protected public #include "RouterCallback.hpp" -#undef private -#undef protected /** * 视频房间头文件 @@ -182,10 +178,11 @@ namespace acgist { /** * 设置码率 * - * @param minBitrate 最小码率 - * @param maxBitrate 最大码率 + * @param maxFramerate 最大帧率 + * @param minBitrate 最小码率 + * @param maxBitrate 最大码率 */ - void setBitrate(int minBitrate, int maxBitrate); + void setBitrate(int maxFramerate, int minBitrate, int maxBitrate); }; } \ No newline at end of file diff --git a/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp b/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp index 0cb1b16..973ac5a 100644 --- a/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp +++ b/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp @@ -552,20 +552,48 @@ namespace acgist { this->closeRoomCallback(env); } - void Room::setBitrate(int minBitrate, int maxBitrate) { + void Room::setBitrate(int maxFramerate, int minBitrate, int maxBitrate) { +// if( +// this->sendTransport == nullptr || +// this->sendTransport->sendHandler == nullptr || +// this->sendTransport->sendHandler->pc == nullptr || +// this->sendTransport->sendHandler->pc->pc == nullptr +// ) { +// return; +// } +// webrtc::BitrateSettings settings; +// settings.min_bitrate_bps = minBitrate; +// settings.max_bitrate_bps = maxBitrate; +// settings.start_bitrate_bps = minBitrate; +// this->sendTransport->sendHandler->pc->pc->SetBitrate(settings); + webrtc::RtpSenderInterface* rtpSender; if( - this->sendTransport == nullptr || - this->sendTransport->handler == nullptr || - this->sendTransport->handler->pc == nullptr || - this->sendTransport->handler->pc->pc == nullptr - ) { + this->videoProducer == nullptr || + (rtpSender = this->videoProducer->GetRtpSender()) == nullptr + ) { return; } - webrtc::BitrateSettings settings; - settings.min_bitrate_bps = minBitrate; - settings.max_bitrate_bps = maxBitrate; - settings.start_bitrate_bps = minBitrate; - this->sendTransport->handler->pc->pc->SetBitrate(settings); + webrtc::RtpParameters rtpParameters = rtpSender->GetParameters(); + auto& encodings = rtpParameters.encodings; + for( + auto iterator = encodings.begin(); + iterator != encodings.end(); + ++iterator + ) { + if(maxFramerate > 0) { + LOG_I("当前最大帧率:%d - %d - %f", maxFramerate, iterator->max_framerate, iterator->scale_resolution_down_by); + iterator->max_framerate = maxFramerate; + } + if(minBitrate > 0) { + LOG_I("当前最小码率:%d - %d", minBitrate, iterator->min_bitrate_bps); + iterator->min_bitrate_bps = minBitrate; + } + if(maxBitrate > 0) { + LOG_I("当前最大码率:%d - %d", maxBitrate, iterator->max_bitrate_bps); + iterator->max_bitrate_bps = maxBitrate; + } + } + rtpSender->SetParameters(rtpParameters); } extern "C" JNIEXPORT jlong JNICALL @@ -744,12 +772,12 @@ namespace acgist { } extern "C" JNIEXPORT void JNICALL - Java_com_acgist_taoyao_media_client_Room_nativeSetBitrate(JNIEnv* env, jobject me, jlong nativeRoomPointer, jint minBitrate, jint maxBitrate) { + Java_com_acgist_taoyao_media_client_Room_nativeSetBitrate(JNIEnv* env, jobject me, jlong nativeRoomPointer, jint maxFramerate, jint minBitrate, jint maxBitrate) { Room* room = (Room*) nativeRoomPointer; if(room == nullptr) { return; } - room->setBitrate(minBitrate, maxBitrate); + room->setBitrate(maxFramerate, minBitrate, maxBitrate); } } diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java index ae2e2ee..6379003 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java @@ -207,6 +207,8 @@ public class Room extends CloseableClient implements RouterCallback { iceServers = new ArrayList<>(); } this.rtcConfiguration = new PeerConnection.RTCConfiguration(iceServers); +// this.rtcConfiguration.enableCpuOveruseDetection = true; + // 开始协商 return this.taoyao.requestFuture( this.taoyao.buildMessage("media::router::rtp::capabilities", "roomId", this.roomId), @@ -383,13 +385,14 @@ public class Room extends CloseableClient implements RouterCallback { } /** - * 设置码率 + * 动态设置帧率码率 * - * @param minBitrate 最小码率 - * @param maxBitrate 最大码率 + * @param maxFramerate 最大帧率 + * @param minBitrate 最小码率 + * @param maxBitrate 最大码率 */ - public void setBitrate(int minBitrate, int maxBitrate) { - this.nativeSetBitrate(this.nativeRoomPointer, minBitrate, maxBitrate); + public void setBitrate(int maxFramerate, int minBitrate, int maxBitrate) { + this.nativeSetBitrate(this.nativeRoomPointer, maxFramerate, minBitrate, maxBitrate); } @Override @@ -787,9 +790,10 @@ public class Room extends CloseableClient implements RouterCallback { * Mediasoup设置码率 * * @param nativeRoomPointer 房间指针 + * @param maxFramerate 最大帧率 * @param minBitrate 最小码率 * @param maxBitrate 最大码率 */ - private native void nativeSetBitrate(long nativeRoomPointer, int minBitrate, int maxBitrate); + private native void nativeSetBitrate(long nativeRoomPointer, int maxFramerate, int minBitrate, int maxBitrate); } From 306b60887ab1dc01548429b1326f5e5ef9165319 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Wed, 10 Apr 2024 17:02:59 +0800 Subject: [PATCH 09/14] =?UTF-8?q?[*]=20=E7=A0=81=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taoyao/media/src/main/cpp/webrtc/Room.cpp | 9 +++++++-- .../main/java/com/acgist/taoyao/media/client/Room.java | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp b/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp index 973ac5a..dd71358 100644 --- a/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp +++ b/taoyao-client-android/taoyao/media/src/main/cpp/webrtc/Room.cpp @@ -342,6 +342,8 @@ namespace acgist { } this->factory = factory; this->rtcConfiguration = new webrtc::PeerConnectionInterface::RTCConfiguration(rtcConfiguration); +// this->rtcConfiguration->set_cpu_adaptation(false); +// this->rtcConfiguration->set_experiment_cpu_load_estimator(false); mediasoupclient::PeerConnection::Options options; options.config = rtcConfiguration; options.factory = factory; @@ -418,7 +420,7 @@ namespace acgist { nlohmann::json codecOptions = { // x-google-start-bitrate - { "videoGoogleStartBitrate", 400 }, + { "videoGoogleStartBitrate", 1200 }, // x-google-min-bitrate { "videoGoogleMinBitrate", 800 }, // x-google-max-bitrate @@ -581,7 +583,7 @@ namespace acgist { ++iterator ) { if(maxFramerate > 0) { - LOG_I("当前最大帧率:%d - %d - %f", maxFramerate, iterator->max_framerate, iterator->scale_resolution_down_by); + LOG_I("当前最大帧率:%d - %d", maxFramerate, iterator->max_framerate); iterator->max_framerate = maxFramerate; } if(minBitrate > 0) { @@ -592,6 +594,9 @@ namespace acgist { LOG_I("当前最大码率:%d - %d", maxBitrate, iterator->max_bitrate_bps); iterator->max_bitrate_bps = maxBitrate; } +// iterator->bitrate_priority = 4.0; +// iterator->network_priority = webrtc::Priority::kHigh; +// iterator->scale_resolution_down_by = 2; } rtpSender->SetParameters(rtpParameters); } diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java index 6379003..459840b 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java @@ -208,7 +208,6 @@ public class Room extends CloseableClient implements RouterCallback { } this.rtcConfiguration = new PeerConnection.RTCConfiguration(iceServers); // this.rtcConfiguration.enableCpuOveruseDetection = true; - // 开始协商 return this.taoyao.requestFuture( this.taoyao.buildMessage("media::router::rtp::capabilities", "roomId", this.roomId), From cd74941a36d99d6c3d6a82c7e5b8efdb48136129 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Thu, 11 Apr 2024 17:35:36 +0800 Subject: [PATCH 10/14] [*] --- taoyao-client-web/src/components/Taoyao.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/taoyao-client-web/src/components/Taoyao.js b/taoyao-client-web/src/components/Taoyao.js index 2700028..3c670f2 100644 --- a/taoyao-client-web/src/components/Taoyao.js +++ b/taoyao-client-web/src/components/Taoyao.js @@ -2329,6 +2329,9 @@ class Taoyao extends RemoteClient { videoSource: this.videoSource }, }); + // let oldParameters = this.videoProducer.rtpSender.getParameters(); + // oldParameters.encodings[0].maxBitrate = 800000; + // this.videoProducer.rtpSender.setParameters(oldParameters); this.callbackTrack(this.clientId, track); if (this.proxy && this.proxy.media) { this.proxy.media(track, this.videoProducer); From 1ab550b002d92bf965293f64973c1d5b9722287e Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Fri, 19 Apr 2024 15:16:03 +0800 Subject: [PATCH 11/14] [*] setBitrate --- taoyao-client-android/README.md | 6 ++++++ .../src/main/java/com/acgist/taoyao/media/client/Room.java | 2 ++ 2 files changed, 8 insertions(+) diff --git a/taoyao-client-android/README.md b/taoyao-client-android/README.md index 2d631d4..f3c4ce7 100644 --- a/taoyao-client-android/README.md +++ b/taoyao-client-android/README.md @@ -37,6 +37,12 @@ * WebRtcAudioRecord * WebRtcAudioTrack +## 动态修改码率 + +``` +HardwareVideoEncoder#updateBitrate +``` + ## 学习资料 * https://developer.android.google.cn/docs?hl=zh-cn diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java index 459840b..0170524 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java @@ -386,6 +386,8 @@ public class Room extends CloseableClient implements RouterCallback { /** * 动态设置帧率码率 * + * HardwareVideoEncoder#updateBitrate() + * * @param maxFramerate 最大帧率 * @param minBitrate 最小码率 * @param maxBitrate 最大码率 From 936f68c71446c0a9faa861ae20dc768f16d12920 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Wed, 4 Sep 2024 13:44:06 +0800 Subject: [PATCH 12/14] =?UTF-8?q?[*]=20=E4=BF=AE=E5=A4=8D=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acgist/taoyao/boot/utils/ErrorUtils.java | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java index 54dce19..a900ce8 100644 --- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java +++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java @@ -102,11 +102,14 @@ public final class ErrorUtils { final MessageCode messageCode = messageCodeException.getMessageCode(); status = messageCode.getStatus(); message = Message.fail(messageCode, messageCodeException.getMessage()); - } else if(rootError instanceof Throwable throwable) { + } else if( + rootError instanceof Throwable rootThrowable && + globalError instanceof Throwable globalThrowable + ) { // 未知异常:异常转换 - final MessageCode messageCode = ErrorUtils.messageCode(status, throwable); + final MessageCode messageCode = ErrorUtils.messageCode(status, globalThrowable, rootThrowable); status = messageCode.getStatus(); - message = Message.fail(messageCode, ErrorUtils.message(messageCode, throwable)); + message = Message.fail(messageCode, ErrorUtils.message(messageCode, rootThrowable)); } else { // 没有异常 final MessageCode messageCode = MessageCode.of(status); @@ -193,20 +196,32 @@ public final class ErrorUtils { } /** - * @param status 原始状态编码 - * @param throwable 异常 + * @see #messageCode(int, Throwable, Throwable) + */ + public static final MessageCode messageCode(int status, Throwable throwable) { + return ErrorUtils.messageCode(status, throwable, throwable); + } + + /** + * @param status 原始状态 + * @param globalThrowable 外层异常 + * @param rootThrowable 原始异常 * - * @return 状态编码 + * @return 响应状态 * * @see ResponseEntityExceptionHandler * @see DefaultHandlerExceptionResolver */ - public static final MessageCode messageCode(int status, Throwable throwable) { - final Class clazz = throwable.getClass(); + public static final MessageCode messageCode(int status, Throwable globalThrowable, Throwable rootThrowable) { + final Class rootClazz = rootThrowable.getClass(); + final Class globalClazz = globalThrowable.getClass(); return CODE_MAPPING.entrySet().stream() .filter(entry -> { final Class mappingClazz = entry.getKey(); - return mappingClazz.equals(clazz) || mappingClazz.isAssignableFrom(clazz); + return mappingClazz.equals(globalClazz) || + mappingClazz.isAssignableFrom(globalClazz) || + mappingClazz.equals(rootClazz) || + mappingClazz.isAssignableFrom(rootClazz); }) .map(Map.Entry::getValue) .findFirst() @@ -271,7 +286,7 @@ public final class ErrorUtils { if(cause instanceof MessageCodeException) { return cause; } - } while(cause != null && (cause = cause.getCause()) != null); + } while(cause != null && cause.getCause() != null && (cause = cause.getCause()) != null); // 返回原始异常 return t; } From d7ee0ee99b8648da072a00d907ee9d4c5bb1889f Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Wed, 4 Sep 2024 13:56:31 +0800 Subject: [PATCH 13/14] =?UTF-8?q?[*]=20=E4=BF=AE=E5=A4=8D=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java index a900ce8..55a4f85 100644 --- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java +++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/ErrorUtils.java @@ -213,6 +213,9 @@ public final class ErrorUtils { * @see DefaultHandlerExceptionResolver */ public static final MessageCode messageCode(int status, Throwable globalThrowable, Throwable rootThrowable) { + if(rootThrowable == null || globalThrowable == null) { + return MessageCode.CODE_9999; + } final Class rootClazz = rootThrowable.getClass(); final Class globalClazz = globalThrowable.getClass(); return CODE_MAPPING.entrySet().stream() From a5ccc17ecbc961e03a347d4ef6ed1eac26bed9ab Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Thu, 14 Nov 2024 10:01:58 +0800 Subject: [PATCH 14/14] =?UTF-8?q?[*]=20=E4=BC=98=E5=8C=96deps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 95b683f..8d43f89 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ [submodule "taoyao-client-media/mediasoup"] path = taoyao-client-media/mediasoup - url = https://gitee.com/acgist/mediasoup.git + url = https://github.com/versatica/mediasoup.git [submodule "taoyao-client-web/mediasoup-client"] path = taoyao-client-web/mediasoup-client - url = https://gitee.com/acgist/mediasoup-client.git + url = https://github.com/versatica/mediasoup-client.git [submodule "taoyao-client-android/libmediasoupclient"] path = taoyao-client-android/libmediasoupclient - url = https://gitee.com/acgist/libmediasoupclient.git + url = https://github.com/versatica/libmediasoupclient.git