@@ -158,16 +158,16 @@ namespace caff {
158158 this ->failedCallback = failedCallback;
159159 transitionState (State::Offline, State::Starting);
160160
161- int targetBitrate = maxBitsPerSecond;
161+ int targetMaxBitrate = maxBitsPerSecond;
162162 int targetFps = maxFps;
163163 int targetFrameHeight = maxFrameHeight;
164164 int targetFrameWidth = maxFrameWidth;
165165
166166 auto info = getEncoderInfo (sharedCredentials);
167167 if (info.has_value ()) {
168168 if (info->setting .targetBitrate > maxBitsPerSecond) {
169- targetBitrate = info->setting .targetBitrate ;
170- LOG_DEBUG (" Setting target bitrate: %d" , targetBitrate );
169+ targetMaxBitrate = info->setting .targetBitrate ;
170+ LOG_DEBUG (" Setting target max bitrate: %d" , targetMaxBitrate );
171171 // Only allow increases in framerate and frame size if bandwith cap has been raised
172172 if (info->setting .framerate > maxFps) {
173173 targetFps = info->setting .framerate ;
@@ -183,13 +183,16 @@ namespace caff {
183183 }
184184 }
185185
186+ int targetMinBitrate = targetMaxBitrate * 3 / 4 ;
187+
186188 broadcastThread = std::thread ([=] {
187189 setupSubscription ();
188190
189191 LOG_DEBUG (" Creating video track" );
190192 videoCapturer = new VideoCapturer;
191193 videoCapturer->SetFramerateLimit (targetFps);
192194 videoCapturer->SetFrameSizeLimit (targetFrameWidth, targetFrameHeight);
195+ videoCapturer->EnableFrameAdaption (false );
193196 auto videoSource = factory->CreateVideoSource (videoCapturer);
194197 auto videoTrack = factory->CreateVideoTrack (" external_video" , videoSource);
195198
@@ -224,9 +227,9 @@ namespace caff {
224227 peerConnection->AddStream (mediaStream);
225228
226229 webrtc::BitrateSettings bitrateOptions;
227- bitrateOptions.start_bitrate_bps = targetBitrate ;
228- bitrateOptions.max_bitrate_bps = targetBitrate ;
229- bitrateOptions.min_bitrate_bps = targetBitrate ;
230+ bitrateOptions.start_bitrate_bps = targetMaxBitrate ;
231+ bitrateOptions.max_bitrate_bps = targetMaxBitrate ;
232+ bitrateOptions.min_bitrate_bps = targetMinBitrate ;
230233 peerConnection->SetBitrate (bitrateOptions);
231234
232235 rtc::scoped_refptr<CreateSessionDescriptionObserver> creationObserver =
@@ -304,10 +307,9 @@ namespace caff {
304307 webrtc::RtpParameters params = sender->GetParameters ();
305308
306309 if (params.encodings .size () > 0 ) {
307- params.encodings [0 ].max_bitrate_bps = targetBitrate;
308- params.encodings [0 ].min_bitrate_bps = targetBitrate;
309- params.encodings [0 ].max_framerate = targetFps;
310- LOG_DEBUG (" Setting video RTP sender min/max bitrate to target bitrate: %d" , targetBitrate);
310+ params.encodings [0 ].max_bitrate_bps = targetMaxBitrate;
311+ params.encodings [0 ].min_bitrate_bps = targetMinBitrate;
312+ LOG_DEBUG (" Setting video RTP sender max bitrate to target bitrate: %d" , targetMaxBitrate);
311313 }
312314
313315 webrtc::RTCError ret = sender->SetParameters (params);
0 commit comments