[*] setBitrate

This commit is contained in:
acgist
2024-04-10 09:37:19 +08:00
parent 8a850c2655
commit ebe8a62fed
3 changed files with 55 additions and 26 deletions

View File

@@ -8,11 +8,7 @@
#include "sdk/android/native_api/jni/scoped_java_ref.h" #include "sdk/android/native_api/jni/scoped_java_ref.h"
#include "Log.hpp" #include "Log.hpp"
#define private public
#define protected public
#include "RouterCallback.hpp" #include "RouterCallback.hpp"
#undef private
#undef protected
/** /**
* 视频房间头文件 * 视频房间头文件
@@ -182,10 +178,11 @@ namespace acgist {
/** /**
* 设置码率 * 设置码率
* *
* @param maxFramerate 最大帧率
* @param minBitrate 最小码率 * @param minBitrate 最小码率
* @param maxBitrate 最大码率 * @param maxBitrate 最大码率
*/ */
void setBitrate(int minBitrate, int maxBitrate); void setBitrate(int maxFramerate, int minBitrate, int maxBitrate);
}; };
} }

View File

@@ -552,20 +552,48 @@ namespace acgist {
this->closeRoomCallback(env); 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( if(
this->sendTransport == nullptr || this->videoProducer == nullptr ||
this->sendTransport->handler == nullptr || (rtpSender = this->videoProducer->GetRtpSender()) == nullptr
this->sendTransport->handler->pc == nullptr ||
this->sendTransport->handler->pc->pc == nullptr
) { ) {
return; return;
} }
webrtc::BitrateSettings settings; webrtc::RtpParameters rtpParameters = rtpSender->GetParameters();
settings.min_bitrate_bps = minBitrate; auto& encodings = rtpParameters.encodings;
settings.max_bitrate_bps = maxBitrate; for(
settings.start_bitrate_bps = minBitrate; auto iterator = encodings.begin();
this->sendTransport->handler->pc->pc->SetBitrate(settings); 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 extern "C" JNIEXPORT jlong JNICALL
@@ -744,12 +772,12 @@ namespace acgist {
} }
extern "C" JNIEXPORT void JNICALL 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; Room* room = (Room*) nativeRoomPointer;
if(room == nullptr) { if(room == nullptr) {
return; return;
} }
room->setBitrate(minBitrate, maxBitrate); room->setBitrate(maxFramerate, minBitrate, maxBitrate);
} }
} }

View File

@@ -207,6 +207,8 @@ public class Room extends CloseableClient implements RouterCallback {
iceServers = new ArrayList<>(); iceServers = new ArrayList<>();
} }
this.rtcConfiguration = new PeerConnection.RTCConfiguration(iceServers); this.rtcConfiguration = new PeerConnection.RTCConfiguration(iceServers);
// this.rtcConfiguration.enableCpuOveruseDetection = true;
// 开始协商 // 开始协商
return this.taoyao.requestFuture( return this.taoyao.requestFuture(
this.taoyao.buildMessage("media::router::rtp::capabilities", "roomId", this.roomId), this.taoyao.buildMessage("media::router::rtp::capabilities", "roomId", this.roomId),
@@ -383,13 +385,14 @@ public class Room extends CloseableClient implements RouterCallback {
} }
/** /**
* 设置码率 * 动态设置帧率码率
* *
* @param maxFramerate 最大帧率
* @param minBitrate 最小码率 * @param minBitrate 最小码率
* @param maxBitrate 最大码率 * @param maxBitrate 最大码率
*/ */
public void setBitrate(int minBitrate, int maxBitrate) { public void setBitrate(int maxFramerate, int minBitrate, int maxBitrate) {
this.nativeSetBitrate(this.nativeRoomPointer, minBitrate, maxBitrate); this.nativeSetBitrate(this.nativeRoomPointer, maxFramerate, minBitrate, maxBitrate);
} }
@Override @Override
@@ -787,9 +790,10 @@ public class Room extends CloseableClient implements RouterCallback {
* Mediasoup设置码率 * Mediasoup设置码率
* *
* @param nativeRoomPointer 房间指针 * @param nativeRoomPointer 房间指针
* @param maxFramerate 最大帧率
* @param minBitrate 最小码率 * @param minBitrate 最小码率
* @param maxBitrate 最大码率 * @param maxBitrate 最大码率
*/ */
private native void nativeSetBitrate(long nativeRoomPointer, int minBitrate, int maxBitrate); private native void nativeSetBitrate(long nativeRoomPointer, int maxFramerate, int minBitrate, int maxBitrate);
} }