From 5f5944c2371ca602fe4ad16ea47d27e7b2af5d1d Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 30 Nov 2019 22:13:46 -0600 Subject: [PATCH] Improve low bandwidth audio performance and fix RTSP issues with broken PMTUD --- .../com/limelight/binding/audio/AndroidAudioRenderer.java | 4 ++-- app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java | 2 +- app/src/main/jni/moonlight-core/callbacks.c | 1 + app/src/main/jni/moonlight-core/moonlight-common-c | 2 +- app/src/main/jni/moonlight-core/simplejni.c | 4 ++-- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/limelight/binding/audio/AndroidAudioRenderer.java b/app/src/main/java/com/limelight/binding/audio/AndroidAudioRenderer.java index c12021b4..550ad505 100644 --- a/app/src/main/java/com/limelight/binding/audio/AndroidAudioRenderer.java +++ b/app/src/main/java/com/limelight/binding/audio/AndroidAudioRenderer.java @@ -170,14 +170,14 @@ public class AndroidAudioRenderer implements AudioRenderer { @Override public void playDecodedAudio(short[] audioData) { // Only queue up to 40 ms of pending audio data in addition to what AudioTrack is buffering for us. - if (MoonBridge.getPendingAudioFrames() < 8) { + if (MoonBridge.getPendingAudioDuration() < 40) { // This will block until the write is completed. That can cause a backlog // of pending audio data, so we do the above check to be able to bound // latency at 40 ms in that situation. track.write(audioData, 0, audioData.length); } else { - LimeLog.info("Too many pending audio frames: " + MoonBridge.getPendingAudioFrames()); + LimeLog.info("Too much pending audio data: " + MoonBridge.getPendingAudioDuration() +" ms"); } } diff --git a/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java b/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java index e8fe6d38..31088e7a 100644 --- a/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java +++ b/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java @@ -208,7 +208,7 @@ public class MoonBridge { public static native String findExternalAddressIP4(String stunHostName, int stunPort); - public static native int getPendingAudioFrames(); + public static native int getPendingAudioDuration(); public static native int getPendingVideoFrames(); diff --git a/app/src/main/jni/moonlight-core/callbacks.c b/app/src/main/jni/moonlight-core/callbacks.c index 27050372..be495dfd 100644 --- a/app/src/main/jni/moonlight-core/callbacks.c +++ b/app/src/main/jni/moonlight-core/callbacks.c @@ -382,6 +382,7 @@ static AUDIO_RENDERER_CALLBACKS BridgeAudioRendererCallbacks = { .stop = BridgeArStop, .cleanup = BridgeArCleanup, .decodeAndPlaySample = BridgeArDecodeAndPlaySample, + .capabilities = CAPABILITY_SUPPORTS_ARBITRARY_AUDIO_DURATION }; static CONNECTION_LISTENER_CALLBACKS BridgeConnListenerCallbacks = { diff --git a/app/src/main/jni/moonlight-core/moonlight-common-c b/app/src/main/jni/moonlight-core/moonlight-common-c index 9bd30189..c1a26618 160000 --- a/app/src/main/jni/moonlight-core/moonlight-common-c +++ b/app/src/main/jni/moonlight-core/moonlight-common-c @@ -1 +1 @@ -Subproject commit 9bd301897aa5329aafea203885398bc3dcb19d94 +Subproject commit c1a26618d48d436657e47bcd38c2487d318c9fa0 diff --git a/app/src/main/jni/moonlight-core/simplejni.c b/app/src/main/jni/moonlight-core/simplejni.c index e9a5998f..e9ff2fe6 100644 --- a/app/src/main/jni/moonlight-core/simplejni.c +++ b/app/src/main/jni/moonlight-core/simplejni.c @@ -83,8 +83,8 @@ Java_com_limelight_nvstream_jni_MoonBridge_findExternalAddressIP4(JNIEnv *env, j } JNIEXPORT jint JNICALL -Java_com_limelight_nvstream_jni_MoonBridge_getPendingAudioFrames(JNIEnv *env, jclass clazz) { - return LiGetPendingAudioFrames(); +Java_com_limelight_nvstream_jni_MoonBridge_getPendingAudioDuration(JNIEnv *env, jclass clazz) { + return LiGetPendingAudioDuration(); } JNIEXPORT jint JNICALL