[feat] enable congestion controller set target bitrate to video encoder

This commit is contained in:
dijunkun
2025-02-11 17:25:50 +08:00
parent 7a8be01e7b
commit 36704c7e4c
19 changed files with 770 additions and 525 deletions

View File

@@ -359,6 +359,11 @@ int AomAv1Encoder::ForceIdr() {
return 0;
}
int AomAv1Encoder::SetTargetBitrate(int bitrate) {
target_bitrate_ = bitrate;
return 0;
}
int AomAv1Encoder::Release() {
if (frame_for_encode_ != nullptr) {
aom_img_free(frame_for_encode_);

View File

@@ -44,6 +44,8 @@ class AomAv1Encoder : public VideoEncoder {
int ForceIdr();
int SetTargetBitrate(int bitrate);
std::string GetEncoderName() { return "AomAV1"; }
private:

View File

@@ -221,6 +221,25 @@ int NvidiaVideoEncoder::ForceIdr() {
return 0;
}
int NvidiaVideoEncoder::SetTargetBitrate(int bitrate) {
if (!encoder_) {
return -1;
}
NV_ENC_RECONFIGURE_PARAMS reconfig_params;
reconfig_params.version = NV_ENC_RECONFIGURE_PARAMS_VER;
NV_ENC_INITIALIZE_PARAMS init_params;
NV_ENC_CONFIG encode_config = {NV_ENC_CONFIG_VER};
init_params.encodeConfig = &encode_config;
encoder_->GetInitializeParams(&init_params);
init_params.frameRateDen = 1;
init_params.frameRateNum = init_params.frameRateDen * fps_;
init_params.encodeConfig->rcParams.averageBitRate = average_bitrate_;
init_params.encodeConfig->rcParams.maxBitRate = bitrate;
reconfig_params.reInitEncodeParams = init_params;
return encoder_->Reconfigure(&reconfig_params) ? 0 : -1;
}
int NvidiaVideoEncoder::ResetEncodeResolution(unsigned int width,
unsigned int height) {
if (!encoder_) {

View File

@@ -20,6 +20,8 @@ class NvidiaVideoEncoder : public VideoEncoder {
int ForceIdr();
int SetTargetBitrate(int bitrate);
std::string GetEncoderName() { return "NvidiaH264"; }
private:
@@ -50,6 +52,7 @@ class NvidiaVideoEncoder : public VideoEncoder {
uint32_t key_frame_interval_ = 3000;
uint32_t average_bitrate_ = 2000000;
uint32_t max_bitrate_ = 10000000;
uint32_t fps_ = 30;
int max_payload_size_ = 3000;
NvEncoder* encoder_ = nullptr;
CUcontext cuda_context_ = nullptr;

View File

@@ -359,6 +359,13 @@ int OpenH264Encoder::ForceIdr() {
return 0;
}
int OpenH264Encoder::SetTargetBitrate(int bitrate) {
target_bitrate_ = bitrate;
encoder_params_.iTargetBitrate = target_bitrate_;
return openh264_encoder_->SetOption(ENCODER_OPTION_BITRATE, &target_bitrate_);
}
int OpenH264Encoder::Release() {
if (openh264_encoder_) {
openh264_encoder_->Uninitialize();

View File

@@ -31,6 +31,8 @@ class OpenH264Encoder : public VideoEncoder {
int ForceIdr();
int SetTargetBitrate(int bitrate);
std::string GetEncoderName() { return "OpenH264"; }
private:

View File

@@ -27,6 +27,8 @@ class VideoEncoder {
virtual int ForceIdr() = 0;
virtual int SetTargetBitrate(int bitrate) = 0;
virtual std::string GetEncoderName() = 0;
VideoEncoder() = default;