diff --git a/webrtc-jni/src/main/cpp/include/api/RTCConfiguration.h b/webrtc-jni/src/main/cpp/include/api/RTCConfiguration.h index 8d2d12ed..cc2c903c 100644 --- a/webrtc-jni/src/main/cpp/include/api/RTCConfiguration.h +++ b/webrtc-jni/src/main/cpp/include/api/RTCConfiguration.h @@ -41,6 +41,9 @@ namespace jni jfieldID rtcpMuxPolicy; jfieldID certificates; jfieldID portAllocatorConfig; + jfieldID audioJitterBufferMaxPackets; + jfieldID audioJitterBufferFastAccelerate; + jfieldID audioJitterBufferMinDelayMs; }; JavaLocalRef toJava(JNIEnv * env, const webrtc::PeerConnectionInterface::RTCConfiguration & config); diff --git a/webrtc-jni/src/main/cpp/src/api/RTCConfiguration.cpp b/webrtc-jni/src/main/cpp/src/api/RTCConfiguration.cpp index 0f86c590..51e4f5a0 100644 --- a/webrtc-jni/src/main/cpp/src/api/RTCConfiguration.cpp +++ b/webrtc-jni/src/main/cpp/src/api/RTCConfiguration.cpp @@ -60,6 +60,10 @@ namespace jni auto pac = jni::PortAllocatorConfig::toJava(env, nativeType.port_allocator_config); env->SetObjectField(config, javaClass->portAllocatorConfig, pac.get()); + env->SetIntField(config, javaClass->audioJitterBufferMaxPackets, nativeType.audio_jitter_buffer_max_packets); + env->SetBooleanField(config, javaClass->audioJitterBufferFastAccelerate, nativeType.audio_jitter_buffer_fast_accelerate); + env->SetIntField(config, javaClass->audioJitterBufferMinDelayMs, nativeType.audio_jitter_buffer_min_delay_ms); + return JavaLocalRef(env, config); } @@ -83,7 +87,7 @@ namespace jni configuration.type = JavaEnums::toNative(env, tp); configuration.bundle_policy = JavaEnums::toNative(env, bp); configuration.rtcp_mux_policy = JavaEnums::toNative(env, mp); - + for (auto & item : JavaIterable(env, cr)) { auto certificate = webrtc::RTCCertificate::FromPEM(jni::RTCCertificatePEM::toNative(env, item)); @@ -103,6 +107,10 @@ namespace jni configuration.port_allocator_config.flags = pacObj.getInt(pacJavaClass->flags); } + configuration.audio_jitter_buffer_fast_accelerate = obj.getBoolean(javaClass->audioJitterBufferFastAccelerate); + configuration.audio_jitter_buffer_max_packets = obj.getInt(javaClass->audioJitterBufferMaxPackets); + configuration.audio_jitter_buffer_min_delay_ms = obj.getInt(javaClass->audioJitterBufferMinDelayMs); + return configuration; } @@ -118,6 +126,9 @@ namespace jni rtcpMuxPolicy = GetFieldID(env, cls, "rtcpMuxPolicy", "L" PKG "RTCRtcpMuxPolicy;"); certificates = GetFieldID(env, cls, "certificates", LIST_SIG); portAllocatorConfig = GetFieldID(env, cls, "portAllocatorConfig", "L" PKG "PortAllocatorConfig;"); + audioJitterBufferMaxPackets = GetFieldID(env, cls, "audioJitterBufferMaxPackets", "I"); + audioJitterBufferFastAccelerate = GetFieldID(env, cls, "audioJitterBufferFastAccelerate", "Z"); + audioJitterBufferMinDelayMs = GetFieldID(env, cls, "audioJitterBufferMinDelayMs", "I"); } } } \ No newline at end of file diff --git a/webrtc/src/main/java/dev/onvoid/webrtc/RTCConfiguration.java b/webrtc/src/main/java/dev/onvoid/webrtc/RTCConfiguration.java index 520baaac..00190237 100644 --- a/webrtc/src/main/java/dev/onvoid/webrtc/RTCConfiguration.java +++ b/webrtc/src/main/java/dev/onvoid/webrtc/RTCConfiguration.java @@ -28,6 +28,11 @@ */ public class RTCConfiguration { + /** + * Default maximum number of packets in the audio jitter buffer. + */ + public static final int kAudioJitterBufferMaxPackets = 200; + /** * A list of ICE server's describing servers available to be used by ICE, * such as STUN and TURN servers. @@ -64,6 +69,21 @@ public class RTCConfiguration { */ public PortAllocatorConfig portAllocatorConfig; + /** + * The maximum number of packets that can be stored in the NetEq audio + * jitter buffer. Can be reduced to lower tolerated audio latency. + */ + public int audioJitterBufferMaxPackets = kAudioJitterBufferMaxPackets; + + /** Whether to use the NetEq "fast mode" which will accelerate audio quicker + * if it falls behind. + */ + public boolean audioJitterBufferFastAccelerate; + + /** + * The minimum delay in milliseconds for the audio jitter buffer. + */ + public int audioJitterBufferMinDelayMs; /** * Creates an instance of RTCConfiguration.