mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-27 04:35:34 +08:00
[feat] enable congestion controller set target bitrate to video encoder
This commit is contained in:
@@ -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_);
|
||||
|
||||
@@ -44,6 +44,8 @@ class AomAv1Encoder : public VideoEncoder {
|
||||
|
||||
int ForceIdr();
|
||||
|
||||
int SetTargetBitrate(int bitrate);
|
||||
|
||||
std::string GetEncoderName() { return "AomAV1"; }
|
||||
|
||||
private:
|
||||
|
||||
@@ -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_) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -31,6 +31,8 @@ class OpenH264Encoder : public VideoEncoder {
|
||||
|
||||
int ForceIdr();
|
||||
|
||||
int SetTargetBitrate(int bitrate);
|
||||
|
||||
std::string GetEncoderName() { return "OpenH264"; }
|
||||
|
||||
private:
|
||||
|
||||
@@ -27,6 +27,8 @@ class VideoEncoder {
|
||||
|
||||
virtual int ForceIdr() = 0;
|
||||
|
||||
virtual int SetTargetBitrate(int bitrate) = 0;
|
||||
|
||||
virtual std::string GetEncoderName() = 0;
|
||||
|
||||
VideoEncoder() = default;
|
||||
|
||||
Reference in New Issue
Block a user