diff --git a/app/src/main/java/com/limelight/nvstream/ConnectionContext.java b/app/src/main/java/com/limelight/nvstream/ConnectionContext.java index 2638ded0..d81328d3 100644 --- a/app/src/main/java/com/limelight/nvstream/ConnectionContext.java +++ b/app/src/main/java/com/limelight/nvstream/ConnectionContext.java @@ -15,6 +15,9 @@ public class ConnectionContext { // This is the version quad from the appversion tag of /serverinfo public String serverAppVersion; public String serverGfeVersion; + + // This is the sessionUrl0 tag from /resume and /launch + public String rtspSessionUrl; public int negotiatedWidth, negotiatedHeight; public boolean negotiatedHdr; diff --git a/app/src/main/java/com/limelight/nvstream/NvConnection.java b/app/src/main/java/com/limelight/nvstream/NvConnection.java index 678a293f..3d3c8c60 100644 --- a/app/src/main/java/com/limelight/nvstream/NvConnection.java +++ b/app/src/main/java/com/limelight/nvstream/NvConnection.java @@ -275,7 +275,7 @@ public class NvConnection { synchronized (MoonBridge.class) { MoonBridge.setupBridge(videoDecoderRenderer, audioRenderer, connectionListener); int ret = MoonBridge.startConnection(context.serverAddress, - context.serverAppVersion, context.serverGfeVersion, + context.serverAppVersion, context.serverGfeVersion, context.rtspSessionUrl, context.negotiatedWidth, context.negotiatedHeight, context.streamConfig.getRefreshRate(), context.streamConfig.getBitrate(), context.streamConfig.getMaxPacketSize(), diff --git a/app/src/main/java/com/limelight/nvstream/http/NvHTTP.java b/app/src/main/java/com/limelight/nvstream/http/NvHTTP.java index 07ad639b..1cc78449 100644 --- a/app/src/main/java/com/limelight/nvstream/http/NvHTTP.java +++ b/app/src/main/java/com/limelight/nvstream/http/NvHTTP.java @@ -680,7 +680,13 @@ public class NvHTTP { (context.streamConfig.getAttachedGamepadMask() != 0 ? "&gcmap=" + context.streamConfig.getAttachedGamepadMask() : ""), false); String gameSession = getXmlString(xmlStr, "gamesession"); - return gameSession != null && !gameSession.equals("0"); + if (gameSession != null && !gameSession.equals("0")) { + context.rtspSessionUrl = getXmlString(xmlStr, "sessionUrl0"); + return true; + } + else { + return false; + } } public boolean resumeApp(ConnectionContext context) throws IOException, XmlPullParserException { @@ -690,7 +696,13 @@ public class NvHTTP { "&surroundAudioInfo=" + context.streamConfig.getAudioConfiguration().getSurroundAudioInfo(), false); String resume = getXmlString(xmlStr, "resume"); - return Integer.parseInt(resume) != 0; + if (Integer.parseInt(resume) != 0) { + context.rtspSessionUrl = getXmlString(xmlStr, "sessionUrl0"); + return true; + } + else { + return false; + } } public boolean quitApp() throws IOException, XmlPullParserException { 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 b54f7b4d..e6f49209 100644 --- a/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java +++ b/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java @@ -253,6 +253,7 @@ public class MoonBridge { } public static native int startConnection(String address, String appVersion, String gfeVersion, + String rtspSessionUrl, int width, int height, int fps, int bitrate, int packetSize, int streamingRemotely, int audioConfiguration, boolean supportsHevc, diff --git a/app/src/main/jni/moonlight-core/callbacks.c b/app/src/main/jni/moonlight-core/callbacks.c index a5c81743..5fc1c4ae 100644 --- a/app/src/main/jni/moonlight-core/callbacks.c +++ b/app/src/main/jni/moonlight-core/callbacks.c @@ -364,6 +364,7 @@ static CONNECTION_LISTENER_CALLBACKS BridgeConnListenerCallbacks = { JNIEXPORT jint JNICALL Java_com_limelight_nvstream_jni_MoonBridge_startConnection(JNIEnv *env, jclass clazz, jstring address, jstring appVersion, jstring gfeVersion, + jstring rtspSessionUrl, jint width, jint height, jint fps, jint bitrate, jint packetSize, jint streamingRemotely, jint audioConfiguration, jboolean supportsHevc, @@ -377,6 +378,7 @@ Java_com_limelight_nvstream_jni_MoonBridge_startConnection(JNIEnv *env, jclass c .address = (*env)->GetStringUTFChars(env, address, 0), .serverInfoAppVersion = (*env)->GetStringUTFChars(env, appVersion, 0), .serverInfoGfeVersion = gfeVersion ? (*env)->GetStringUTFChars(env, gfeVersion, 0) : NULL, + .rtspSessionUrl = rtspSessionUrl ? (*env)->GetStringUTFChars(env, rtspSessionUrl, 0) : NULL, }; STREAM_CONFIGURATION streamConfig = { .width = width, @@ -416,6 +418,9 @@ Java_com_limelight_nvstream_jni_MoonBridge_startConnection(JNIEnv *env, jclass c if (gfeVersion != NULL) { (*env)->ReleaseStringUTFChars(env, gfeVersion, serverInfo.serverInfoGfeVersion); } + if (rtspSessionUrl != NULL) { + (*env)->ReleaseStringUTFChars(env, rtspSessionUrl, serverInfo.rtspSessionUrl); + } return ret; } \ No newline at end of file diff --git a/app/src/main/jni/moonlight-core/moonlight-common-c b/app/src/main/jni/moonlight-core/moonlight-common-c index 7c346c31..3b9d8a31 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 7c346c31040c6ed736d9d4b3a7cbc4b0aca1849c +Subproject commit 3b9d8a31763be77c921bd2581b5e75f4d40a1b11