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); }