[*] 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 "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);
};
}

View File

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

View File

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