Allow configuration of audio jitter buffer max target delay

This commit is contained in:
Rashad Sookram 2023-09-21 12:01:06 -04:00 committed by GitHub
parent 61ba86b928
commit e667578458
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 56 additions and 2 deletions

View file

@ -384,6 +384,15 @@ class RTC_EXPORT PeerConnectionInterface : public rtc::RefCountInterface {
audio_rtcp_report_interval_ms;
}
// RingRTC change to configure the audio jitter buffer's max target delay.
int audio_jitter_buffer_max_target_delay_ms() const {
return media_config.audio.jitter_buffer_max_target_delay_ms;
}
void set_audio_jitter_buffer_max_target_delay_ms(int jitter_buffer_max_target_delay_ms) {
media_config.audio.jitter_buffer_max_target_delay_ms =
jitter_buffer_max_target_delay_ms;
}
int video_rtcp_report_interval_ms() const {
return media_config.video.rtcp_report_interval_ms;
}

View file

@ -71,6 +71,8 @@ std::unique_ptr<voe::ChannelReceiveInterface> CreateChannelReceive(
config.rtcp_send_transport, event_log, config.rtp.local_ssrc,
config.rtp.remote_ssrc, config.jitter_buffer_max_packets,
config.jitter_buffer_fast_accelerate, config.jitter_buffer_min_delay_ms,
// RingRTC change to configure the jitter buffer's max target delay.
config.jitter_buffer_max_target_delay_ms,
// RingRTC change to configure the RTCP report interval.
config.rtcp_report_interval_ms,
config.enable_non_sender_rtt, config.decoder_factory,

View file

@ -97,6 +97,8 @@ class ChannelReceive : public ChannelReceiveInterface,
size_t jitter_buffer_max_packets,
bool jitter_buffer_fast_playout,
int jitter_buffer_min_delay_ms,
// RingRTC change to configure the jitter buffer's max target delay.
int jitter_buffer_max_target_delay_ms,
// RingRTC change to configure the RTCP report interval.
int rtcp_report_interval_ms,
bool enable_non_sender_rtt,
@ -537,6 +539,8 @@ ChannelReceive::ChannelReceive(
size_t jitter_buffer_max_packets,
bool jitter_buffer_fast_playout,
int jitter_buffer_min_delay_ms,
// RingRTC change to configure the jitter buffer's max target delay.
int jitter_buffer_max_target_delay_ms,
// RingRTC change to configure the RTCP report interval.
int rtcp_report_interval_ms,
bool enable_non_sender_rtt,
@ -573,8 +577,8 @@ ChannelReceive::ChannelReceive(
acm_receiver_.ResetInitialDelay();
acm_receiver_.SetMinimumDelay(0);
// RingRTC change to limit the jitter buffer's max target delay
acm_receiver_.SetMaximumDelay(500);
// RingRTC change to configure the jitter buffer's max target delay.
acm_receiver_.SetMaximumDelay(jitter_buffer_max_target_delay_ms);
acm_receiver_.FlushBuffers();
_outputAudioLevel.ResetLevelFullRange();
@ -1114,6 +1118,8 @@ std::unique_ptr<ChannelReceiveInterface> CreateChannelReceive(
size_t jitter_buffer_max_packets,
bool jitter_buffer_fast_playout,
int jitter_buffer_min_delay_ms,
// RingRTC change to configure the jitter buffer's max target delay.
int jitter_buffer_max_target_delay_ms,
// RingRTC change to configure the RTCP report interval.
int rtcp_report_interval_ms,
bool enable_non_sender_rtt,
@ -1126,6 +1132,8 @@ std::unique_ptr<ChannelReceiveInterface> CreateChannelReceive(
clock, neteq_factory, audio_device_module, rtcp_send_transport,
rtc_event_log, local_ssrc, remote_ssrc, jitter_buffer_max_packets,
jitter_buffer_fast_playout, jitter_buffer_min_delay_ms,
// RingRTC change to configure the jitter buffer's max target delay.
jitter_buffer_max_target_delay_ms,
// RingRTC change to configure the RTCP report interval.
rtcp_report_interval_ms,
enable_non_sender_rtt, decoder_factory, codec_pair_id,

View file

@ -181,6 +181,8 @@ std::unique_ptr<ChannelReceiveInterface> CreateChannelReceive(
size_t jitter_buffer_max_packets,
bool jitter_buffer_fast_playout,
int jitter_buffer_min_delay_ms,
// RingRTC change to configure the jitter buffer's max target delay.
int jitter_buffer_max_target_delay_ms,
// RingRTC change to configure the RTCP report interval.
int rtcp_report_interval_ms,
bool enable_non_sender_rtt,

View file

@ -129,6 +129,8 @@ class AudioReceiveStreamInterface : public MediaReceiveStreamInterface {
size_t jitter_buffer_max_packets = 200;
bool jitter_buffer_fast_accelerate = false;
int jitter_buffer_min_delay_ms = 0;
// RingRTC change to configure the jitter buffer's max target delay.
int jitter_buffer_max_target_delay_ms = 500;
// RingRTC change to configure the RTCP report interval.
int rtcp_report_interval_ms = 5000;

View file

@ -71,6 +71,8 @@ struct MediaConfig {
struct Audio {
// Time interval between RTCP report for audio
int rtcp_report_interval_ms = 5000;
// RingRTC change to configure the jitter buffer's max target delay.
int jitter_buffer_max_target_delay_ms = 500;
} audio;
bool operator==(const MediaConfig& o) const {

View file

@ -279,6 +279,8 @@ webrtc::AudioReceiveStreamInterface::Config BuildReceiveStreamConfig(
size_t jitter_buffer_max_packets,
bool jitter_buffer_fast_accelerate,
int jitter_buffer_min_delay_ms,
// RingRTC change to configure the jitter buffer's max target delay.
int jitter_buffer_max_target_delay_ms,
// RingRTC change to configure the RTCP report interval.
int rtcp_report_interval_ms,
rtc::scoped_refptr<webrtc::FrameDecryptorInterface> frame_decryptor,
@ -299,6 +301,8 @@ webrtc::AudioReceiveStreamInterface::Config BuildReceiveStreamConfig(
config.jitter_buffer_max_packets = jitter_buffer_max_packets;
config.jitter_buffer_fast_accelerate = jitter_buffer_fast_accelerate;
config.jitter_buffer_min_delay_ms = jitter_buffer_min_delay_ms;
// RingRTC change to configure the jitter buffer's max target delay.
config.jitter_buffer_max_target_delay_ms = jitter_buffer_max_target_delay_ms;
// RingRTC change to configure the RTCP report interval.
config.rtcp_report_interval_ms = rtcp_report_interval_ms;
config.frame_decryptor = std::move(frame_decryptor);
@ -2315,6 +2319,8 @@ bool WebRtcVoiceReceiveChannel::AddRecvStream(const StreamParams& sp) {
decoder_map_, codec_pair_id_, engine()->audio_jitter_buffer_max_packets_,
engine()->audio_jitter_buffer_fast_accelerate_,
engine()->audio_jitter_buffer_min_delay_ms_,
// RingRTC change to configure the jitter buffer's max target delay.
audio_config_.jitter_buffer_max_target_delay_ms,
// RingRTC change to configure the RTCP report interval.
audio_config_.rtcp_report_interval_ms, unsignaled_frame_decryptor_,
crypto_options_, unsignaled_frame_transformer_);

View file

@ -109,6 +109,7 @@ RUSTEXPORT webrtc::PeerConnectionInterface* Rust_createPeerConnection(
webrtc::rffi::PeerConnectionObserverRffi* observer_borrowed,
RffiPeerConnectionKind kind,
int audio_jitter_buffer_max_packets,
int audio_jitter_buffer_max_target_delay_ms,
int audio_rtcp_report_interval_ms,
RffiIceServer ice_server,
webrtc::AudioTrackInterface* outgoing_audio_track_borrowed_rc,

View file

@ -365,6 +365,7 @@ RUSTEXPORT PeerConnectionInterface* Rust_createPeerConnection(
PeerConnectionObserverRffi* observer_borrowed,
RffiPeerConnectionKind kind,
int audio_jitter_buffer_max_packets,
int audio_jitter_buffer_max_target_delay_ms,
int audio_rtcp_report_interval_ms,
RffiIceServer ice_server,
webrtc::AudioTrackInterface* outgoing_audio_track_borrowed_rc,
@ -381,6 +382,7 @@ RUSTEXPORT PeerConnectionInterface* Rust_createPeerConnection(
config.tcp_candidate_policy = PeerConnectionInterface::kTcpCandidatePolicyEnabled;
}
config.audio_jitter_buffer_max_packets = audio_jitter_buffer_max_packets;
config.set_audio_jitter_buffer_max_target_delay_ms(audio_jitter_buffer_max_target_delay_ms);
config.set_audio_rtcp_report_interval_ms(audio_rtcp_report_interval_ms);
config.sdp_semantics = SdpSemantics::kPlanB_DEPRECATED;
if (ice_server.urls_size > 0) {

View file

@ -467,6 +467,8 @@ public class PeerConnection {
public TcpCandidatePolicy tcpCandidatePolicy;
public CandidateNetworkPolicy candidateNetworkPolicy;
public int audioJitterBufferMaxPackets;
// RingRTC change to configure the jitter buffer's max target delay.
public int audioJitterBufferMaxTargetDelayMs;
public boolean audioJitterBufferFastAccelerate;
public int iceConnectionReceivingTimeout;
public int iceBackupCandidatePairPingInterval;
@ -583,6 +585,8 @@ public class PeerConnection {
candidateNetworkPolicy = CandidateNetworkPolicy.ALL;
this.iceServers = iceServers;
audioJitterBufferMaxPackets = 50;
// RingRTC change to configure the jitter buffer's max target delay.
audioJitterBufferMaxTargetDelayMs = 500;
audioJitterBufferFastAccelerate = false;
iceConnectionReceivingTimeout = -1;
iceBackupCandidatePairPingInterval = -1;
@ -662,6 +666,12 @@ public class PeerConnection {
return audioJitterBufferMaxPackets;
}
// RingRTC change to configure the jitter buffer's max target delay.
@CalledByNative("RTCConfiguration")
int getAudioJitterBufferMaxTargetDelayMs() {
return audioJitterBufferMaxTargetDelayMs;
}
@CalledByNative("RTCConfiguration")
boolean getAudioJitterBufferFastAccelerate() {
return audioJitterBufferFastAccelerate;

View file

@ -190,6 +190,8 @@ void JavaToNativeRTCConfiguration(
rtc_config->servers = JavaToNativeIceServers(jni, j_ice_servers);
rtc_config->audio_jitter_buffer_max_packets =
Java_RTCConfiguration_getAudioJitterBufferMaxPackets(jni, j_rtc_config);
// RingRTC change to configure the jitter buffer's max target delay.
rtc_config->set_audio_jitter_buffer_max_target_delay_ms(Java_RTCConfiguration_getAudioJitterBufferMaxTargetDelayMs(jni, j_rtc_config));
rtc_config->audio_jitter_buffer_fast_accelerate =
Java_RTCConfiguration_getAudioJitterBufferFastAccelerate(jni,
j_rtc_config);

View file

@ -120,6 +120,8 @@ RTC_OBJC_EXPORT
@property(nonatomic, assign) BOOL disableLinkLocalNetworks;
@property(nonatomic, assign) int audioJitterBufferMaxPackets;
// RingRTC change to configure the jitter buffer's max target delay.
@property(nonatomic, assign) int audioJitterBufferMaxTargetDelayMs;
@property(nonatomic, assign) BOOL audioJitterBufferFastAccelerate;
@property(nonatomic, assign) int iceConnectionReceivingTimeout;
@property(nonatomic, assign) int iceBackupCandidatePairPingInterval;

View file

@ -36,6 +36,8 @@
@synthesize maxIPv6Networks = _maxIPv6Networks;
@synthesize disableLinkLocalNetworks = _disableLinkLocalNetworks;
@synthesize audioJitterBufferMaxPackets = _audioJitterBufferMaxPackets;
// RingRTC change to configure the jitter buffer's max target delay.
@synthesize audioJitterBufferMaxTargetDelayMs = _audioJitterBufferMaxTargetDelayMs;
@synthesize audioJitterBufferFastAccelerate = _audioJitterBufferFastAccelerate;
@synthesize iceConnectionReceivingTimeout = _iceConnectionReceivingTimeout;
@synthesize iceBackupCandidatePairPingInterval =
@ -108,6 +110,8 @@
_maxIPv6Networks = config.max_ipv6_networks;
_disableLinkLocalNetworks = config.disable_link_local_networks;
_audioJitterBufferMaxPackets = config.audio_jitter_buffer_max_packets;
// RingRTC change to configure the jitter buffer's max target delay.
_audioJitterBufferMaxTargetDelayMs = config.audio_jitter_buffer_max_target_delay_ms();
_audioJitterBufferFastAccelerate = config.audio_jitter_buffer_fast_accelerate;
_iceConnectionReceivingTimeout = config.ice_connection_receiving_timeout;
_iceBackupCandidatePairPingInterval =
@ -223,6 +227,8 @@
nativeConfig->max_ipv6_networks = _maxIPv6Networks;
nativeConfig->disable_link_local_networks = _disableLinkLocalNetworks;
nativeConfig->audio_jitter_buffer_max_packets = _audioJitterBufferMaxPackets;
// RingRTC change to configure the jitter buffer's max target delay.
nativeConfig->set_audio_jitter_buffer_max_target_delay_ms(_audioJitterBufferMaxTargetDelayMs);
nativeConfig->audio_jitter_buffer_fast_accelerate =
_audioJitterBufferFastAccelerate ? true : false;
nativeConfig->ice_connection_receiving_timeout =