diff --git a/app/backend/nvhttp.cpp b/app/backend/nvhttp.cpp index 9604029c..df0626d1 100644 --- a/app/backend/nvhttp.cpp +++ b/app/backend/nvhttp.cpp @@ -151,7 +151,8 @@ NvHTTP::launchApp(int appId, PSTREAM_CONFIGURATION streamConfig, bool sops, bool localAudio, - int gamepadMask) + int gamepadMask, + QString& rtspSessionUrl) { int riKeyId; @@ -185,10 +186,12 @@ NvHTTP::launchApp(int appId, // Throws if the request failed verifyResponseStatus(response); + + rtspSessionUrl = getXmlString(response, "sessionUrl0"); } void -NvHTTP::resumeApp(PSTREAM_CONFIGURATION streamConfig) +NvHTTP::resumeApp(PSTREAM_CONFIGURATION streamConfig, QString& rtspSessionUrl) { int riKeyId; @@ -207,6 +210,8 @@ NvHTTP::resumeApp(PSTREAM_CONFIGURATION streamConfig) // Throws if the request failed verifyResponseStatus(response); + + rtspSessionUrl = getXmlString(response, "sessionUrl0"); } void diff --git a/app/backend/nvhttp.h b/app/backend/nvhttp.h index 26c49b7c..959d9bf9 100644 --- a/app/backend/nvhttp.h +++ b/app/backend/nvhttp.h @@ -150,14 +150,16 @@ public: quitApp(); void - resumeApp(PSTREAM_CONFIGURATION streamConfig); + resumeApp(PSTREAM_CONFIGURATION streamConfig, + QString& rtspSessionUrl); void launchApp(int appId, PSTREAM_CONFIGURATION streamConfig, bool sops, bool localAudio, - int gamepadMask); + int gamepadMask, + QString& rtspSessionUrl); QVector getAppList(); diff --git a/app/streaming/session.cpp b/app/streaming/session.cpp index 2bd0cd09..1b2c927b 100644 --- a/app/streaming/session.cpp +++ b/app/streaming/session.cpp @@ -1026,16 +1026,19 @@ bool Session::startConnectionAsync() } } + QString rtspSessionUrl; + try { NvHTTP http(m_Computer->activeAddress, m_Computer->serverCert); if (m_Computer->currentGameId != 0) { - http.resumeApp(&m_StreamConfig); + http.resumeApp(&m_StreamConfig, rtspSessionUrl); } else { http.launchApp(m_App.id, &m_StreamConfig, enableGameOptimizations, m_Preferences->playAudioOnHost, - m_InputHandler->getAttachedGamepadMask()); + m_InputHandler->getAttachedGamepadMask(), + rtspSessionUrl); } } catch (const GfeHttpResponseException& e) { emit displayLaunchError(tr("GeForce Experience returned error: %1").arg(e.toQString())); @@ -1061,6 +1064,13 @@ bool Session::startConnectionAsync() hostInfo.serverInfoGfeVersion = siGfeVersion.data(); } + // Older GFE and Sunshine versions didn't have this field + QByteArray rtspSessionUrlStr; + if (!rtspSessionUrl.isEmpty()) { + rtspSessionUrlStr = rtspSessionUrl.toLatin1(); + hostInfo.rtspSessionUrl = rtspSessionUrlStr.data(); + } + if (m_Preferences->packetSize != 0) { // Override default packet size and remote streaming detection // NB: Using STREAM_CFG_AUTO will cap our packet size at 1024 for remote hosts. diff --git a/moonlight-common-c/moonlight-common-c b/moonlight-common-c/moonlight-common-c index 7c346c31..3b9d8a31 160000 --- a/moonlight-common-c/moonlight-common-c +++ b/moonlight-common-c/moonlight-common-c @@ -1 +1 @@ -Subproject commit 7c346c31040c6ed736d9d4b3a7cbc4b0aca1849c +Subproject commit 3b9d8a31763be77c921bd2581b5e75f4d40a1b11