Amazon GameLift Streams 疑難排解 - Amazon GameLift 串流

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon GameLift Streams 疑難排解

連線問題

當您設定 Amazon GameLift Streams 後端服務時,請檢查下列項目:

  • 選擇 AWS 區域 最接近最終使用者的位置。從用戶端到託管串流之區域的高延遲可能會影響串流品質。您可以在 區域中 ping AWS 主控台端點,以取得近似的延遲測量。

  • 確認您的串流群組具有新串流的容量。

  • 確認 ConnectionTimeoutSeconds已合理設定。增加它以允許客戶在逾時之前有更多時間進行連線。

建議客戶檢查下列項目:

  • 開啟 UDP 連接埠 33435-33465,以允許從 Amazon GameLift Streams 串流。如果 Amazon GameLift Streams 無法連接這些連接埠,可能會導致串流問題,例如黑色或灰色畫面。

  • 確認您的網際網路連線可以維持 1080p 串流至少 10 Mbps 的連線速度。如果您在 Amazon GameLift Streams 上遊戲時偵測到網路問題,您的網際網路速度可能會波動,而且可能不會持續達到至少 10 Mbps。執行網際網路速度測試並繼續疑難排解步驟。

  • 如果可能,請使用有線網路。使用 Wi-Fi 時,請將裝置移至靠近路由器的位置,以獲得更強的訊號強度。

  • 如果您使用同時具有 2.4 GHz 和 5 GHz 頻帶的 Wi-Fi 路由器,請嘗試連線至不同的頻帶。如果您不確定如何將路由器切換到不同的頻帶,請造訪 Wi-Fi 路由器製造商或供應商的支援頁面。您也可以聯絡其客戶服務。

  • 識別同一網路上的其他人 (特別是家用 Wi-Fi 時) 是否正在執行高頻寬應用程式,例如影片串流、下載、線上遊戲或備份。

  • 關閉裝置上的其他佔用頻寬的應用程式。

  • 串流時請勿使用 VPN 或代理。它們可能會導致更高的延遲並封鎖遊戲體驗。

  • 在 iPad 或 iPhone 上播放時,請確認您使用的是 Wi-Fi,而不是行動網路。使用行動網路可能會導致連線問題。

  • MacOS 使用者應停用 Location Services,因為這會導致 Wi-Fi 不時暫停,這會導致串流體驗不佳。

效能問題

本節識別遊戲串流效能不佳的潛在原因,並提供使用 Amazon GameLift Streams 最佳化串流的建議。

在 Amazon GameLift Streams 上串流時,遊戲效能會降低

如果您的遊戲在自己的機器上執行良好,但在 Amazon GameLift Streams 上串流時遇到效能問題,請考慮下列事項:

  • 您的機器可能具有比 Amazon GameLift Streams 更強大的硬體。請務必在具有與 Amazon GameLift Streams 所用硬體類似效能的機器上測試應用程式。對於 gen4n 串流類別,這與具有 NVIDIA RTX 2060 GPU 的電腦相當。對於 gen5n 串流類別,這與具有 NVIDIA RTX 3080 GPU 的電腦相當。

  • 問題可能是因為您的網路連線或 Amazon GameLift Streams 的設定。請嘗試 連線問題區段中的疑難排解秘訣。

如果您的遊戲在本機執行時速度緩慢,則需要最佳化其效能。最佳最佳化方法取決於您使用的特定引擎或架構。

Windows 應用程式遇到緩慢的載入時間或停滯問題

如果您的遊戲遇到較長的載入時間或停滯行為,建議您採取下列動作:

  1. 確保您的應用程式已使用引擎廠商的最佳化內容和著色器效能相關指導進行封裝和最佳化,以載入效能。

  2. 確保您的應用程式設定為串流群組中的預設應用程式

  3. 透過快取著色器作為應用程式封裝的一部分,在服務上最佳化應用程式第一次啟動。

有兩種方法來啟用著色器快取:

  • 驅動程式型快取 – 此方法專屬於執行期環境 GPU 和驅動程式版本。此選項可套用至所有應用程式,因此是預設建議的方法。每個 GPU/驅動程式組合都需要複寫此方法的步驟。

  • 引擎型快取 – 如果可用,此方法可透過遊戲引擎啟用著色器快取。它會減輕在開發人員上建立預先製作管道狀態物件 (PSO) 快取的負擔。它還假設引擎能夠處理相同 GPU 硬體上不同驅動程式的快取支援。

根據最佳實務,我們建議您先實作以驅動程式為基礎的快取,因為它不需要深入了解如何為指定的引擎實作 PSO 快取。

透過這些實作,著色器檔案可以與您的應用程式一起匯出和封裝,因此不需要在每次新的串流啟動時產生。

實作 Windows 執行期應用程式的驅動程式型快取修正
  1. 開始串流您的預設應用程式,並廣泛播放以產生應用程式的著色器。

    重要

    請務必瀏覽環境的所有區域或層級,以產生盡可能多的著色器。

  2. 關閉串流之前,請在作用中串流工作階段中啟用匯出功能。如需詳細資訊,請參閱匯出串流工作階段檔案

  3. 從您在上一個步驟中指定的 Amazon S3 儲存貯體下載串流工作階段匯出 .zip 檔案。您可以在工作階段頁面上的 Amazon GameLift Streams 主控台中找到下載連結。

  4. 在串流工作階段匯出中尋找著色器資料夾。它通常會儲存到這個位置:AppData\Local\NVIDIA\DXCache。將產生的著色器檔案 (*.nvph) 上傳至應用程式的 Amazon S3 儲存貯體。

  5. 建立 .bat 檔案,以在執行時間將著色器檔案複製到 NVIDIA 快取資料夾。此資料夾通常位於:C:\Users\Administrator\AppData\Local\NVIDIA\DXCache。將.bat檔案上傳至 Amazon S3 應用程式儲存貯體。

  6. 使用 .bat 檔案作為可執行路徑建立新的 Amazon GameLift Streams 應用程式。

當您的應用程式開始串流時,您的.bat檔案會先將預先產生的著色器複製到著色器快取,再啟動應用程式,進而改善串流載入效能。

注意

每當您更新應用程式或將 Amazon GameLift Streams 應用程式連結至新的串流群組時,您可能需要重複這些步驟。較新的串流群組可以包含來自 服務的更新 GPU 驅動程式。

下列範例.bat檔案假設著色器檔案存放在 Amazon S3 儲存貯體字首 下Shaders\。您可以使用不同的資料夾結構。

@echo off set CURRENT_PATH=%cd% set DXCACHE_DIR=%CURRENT_PATH%\Shaders set NVIDIA_DXCACHE_DIR=C:\Users\Administrator\AppData\Local\NVIDIA\DXCache if not exist "%NVIDIA_DXCACHE_DIR%" ( mkdir "%NVIDIA_DXCACHE_DIR%" ) xcopy /s /f "%DXCACHE_DIR%" "%NVIDIA_DXCACHE_DIR%" start %CURRENT_PATH%\app.exe
使用 Unreal Engine 為應用程式實作引擎型快取修正

對於此方法,您可以使用 Unreal Engine 功能為 Amazon GameLift Streams 應用程式建立管道狀態物件 (PSO) 快取。PSO 快取可讓您提供預先編譯的圖形管道狀態,並縮短執行時間編譯時間,從而減少載入和轉譯期間的延遲。這需要對 Unreal Engine 的進階知識,因此我們不會在此涵蓋所有引擎特定的詳細資訊。如需其他指示,請參閱 Unreal Engine 在建立綁定 PSO 快取「收集流程」一節中的指引。

  1. 為您的應用程式產生已啟用 PSO 記錄的著色器。

    1. 使用具有啟用 PSO 的應用程式的封裝建置建立新的 Amazon GameLift Streams 應用程式。

    2. 在 PSO 記錄應用程式中使用 -logPSO命令啟動串流。您可以使用 Amazon GameLift Streams 主控台中測試串流組態頁面上的命令列引數選項。

      重要

      請務必瀏覽環境的所有區域或層級,以產生盡可能多的著色器。

    3. 關閉串流之前,請在作用中串流工作階段中啟用匯出功能。如需詳細資訊,請參閱匯出串流工作階段檔案

    4. 從選單或使用 Unreal shutdown 命令退出應用程式。如果您直接關閉串流,將不會產生 Unreal 著色器管道檔案。

    5. 從您在匯出步驟中指定的 Amazon S3 儲存貯體下載串流工作階段匯出 .zip 檔案。您可以在工作階段頁面上的 Amazon GameLift Streams 主控台中找到下載連結。

  2. 將 Unreal 著色器管道檔案封裝至 Amazon GameLift Streams 應用程式。

    1. 在 下的串流工作階段匯出中找到記錄的 PSO 檔案 (rec.pipelinecache)Saved/CollectedPSOs。使用 Unreal 命令解壓縮 PSO 檔案。

    2. 使用解壓縮產生的輸出封裝新的 Unreal 組建。遵循「不真實」指引,章節轉換 PSO 快取,並在應用程式中包含 PSO 快取

      重要

      在「轉換 PSO 快取」區段中執行 Unreal 命令時,請確定您使用相同的驅動程式版本輸入檔案。例如:對於 DX12,僅使用 SM6 檔案做為輸入。否則,您會在封裝新應用程式時收到錯誤。

    3. 使用 PSO 檔案為新封裝的組建建立新的 Amazon GameLift Streams 應用程式。

    4. 啟動和測試串流時,請確認正在載入 PSO 快取。檢查以下行的遊戲日誌:

      Opened FPipelineCacheFile: ../../...
注意

每當您更新應用程式或將 Amazon GameLift Streams 應用程式連結至新的串流群組時,您可能需要重複這些步驟。較新的串流群組可以包含來自 服務的更新 GPU 驅動程式。

應用程式問題

初步檢查

  • 在不同的機器上執行您的應用程式,以確認其已正確封裝。這確認您的應用程式內容不包含任何可能不適用於其他裝置的硬式編碼路徑、遺失資產、程式庫或二進位檔。

  • (選用) 在具有與 Amazon GameLift Streams 串流類別相當之 GPU 的機器上執行應用程式。這會驗證應用程式的轉譯設定是否與 GPU 相容,以及效能是否符合您的期望。

  • 開啟 UDP 連接埠 33435-33465,以允許從 Amazon GameLift Streams 串流。如果 Amazon GameLift Streams 無法連接這些連接埠,可能會導致串流問題,例如黑色或灰色畫面。

應用程式不適用於 Proton 上的 Amazon GameLift Streams

螢幕解析度造成的應用程式問題

如果您嘗試使用非 1920x1080 的全螢幕解析度,應用程式可能會凍結、當機或轉譯不正確。我們建議您使用無邊界全螢幕視窗來執行應用程式,並且不要嘗試變更解析度。

金鑰輸入似乎卡在 MacOS 用戶端

在 MacOS 用戶端上,當同時按下命令修飾詞金鑰和另一個金鑰時,金鑰可能會突然卡住,重複金鑰事件。例如,當同時按下 Command 鍵時,箭頭鍵可能會卡住。在遊戲中,如果使用方向鍵來旋轉相機,這會使相機無限旋轉。

  • 問題:MacOS 上的 Command 金鑰會映射至中金鑰事件,而中繼金鑰事件會映射至 Microsoft Windows 上的 Windows 金鑰。當同時按下 Command 和另一個金鑰時,問題是影響 MacOS 瀏覽器的錯誤,其中 Meta 金鑰會在釋放時重設,但方向鍵不會重設,因為瀏覽器未擷取方向鍵的鍵控事件,因此 Web SDK 用戶端不會將鍵控事件傳送至伺服器,而串流應用程式仍會認為該金鑰正在按下。

  • 解決方案:如果您不是使用 命令金鑰,則可以使用 Web SDK InputConfiguration 介面中找到的 Web SDK 鍵盤篩選機制 (keyboardFilter) 進行篩選。

滑鼠移動在 Amazon GameLift Streams 上的行為不同

如果使用 Amazon GameLift Streams 串流時滑鼠移動的行為不同,例如移動速度比預期更快,您可能需要調整應用程式中的滑鼠處理和游標管理邏輯。

  • 問題:Amazon GameLift Streams 使用啟發式來選擇是否以「相對」或「絕對」模式傳輸滑鼠事件。在相對模式下,新滑鼠更新會以與上一次更新不同的小幅度增量提供。在絕對模式中,滑鼠游標會持續強制至與用戶端同步的畫面位置。當作業系統游標顯示在串流內容上時,啟發式一律會挑選絕對座標。如果您的應用程式預期進行小型的相對更新,這可能會導致意外的大型移動差異。

  • 解決方案:如果您的應用程式預期相對滑鼠動作 (例如,FPS 型攝影機控制項或以拖曳為基礎的互動),請在滑鼠互動期間隱藏作業系統游標。例如,在滑鼠下隱藏游標,並在滑鼠上再次顯示。這可確保拖曳動作使用相對座標,只有在放開按鈕時才會同步絕對位置。

如需 Amazon GameLift Streams 中滑鼠移動的詳細資訊,請參閱 滑鼠移動處理

Unreal Engine 應用程式當機或需要額外相依性

如果您的 Unreal Engine 應用程式當機、停滯或要求您安裝其他相依性,例如 Microsoft Visual C++ 執行期,請嘗試下列動作。

  • 使用正確的可執行檔。若要讓您的應用程式正確使用 Amazon GameLift Streams,請將應用程式路徑設定為位於 Binaries/Win64/ 子資料夾中或類似位置的完整可執行檔。Unreal Engine 會產生兩個可執行檔:資料夾根目錄的小型可執行檔 (捷徑),以及Binaries/Win64/子資料夾中的完整可執行檔。如果缺少完整的可執行檔,則應用程式可能未正確建置。例如,請參閱下列範例 Unreal 應用程式的資料夾結構:

    BuildApp |-> MyUnrealApp.exe |-> MyUnrealApp |-> Binaries |-> Win64 |-> MyUnrealApp.exe
  • 關閉 Unreal Engine Asserts。停用檢查、驗證和確保巨集。這可防止應用程式建立損毀傾印,否則會導致應用程式停滯在 Amazon GameLift Streams 上。如果啟用宣告,您應該預期延遲。如需詳細資訊,請參閱 Unreal Engine 文件中的宣告

    • USE_CHECKS_IN_SHIPPING=0 設定為停用檢查和驗證巨集。

    • handleensurepercent=0 設定為停用確保巨集。

Windows 應用程式會在啟動時終止

如果您的 Windows 應用程式在啟動時終止,您的應用程式可能缺少必要的 DLLs。如果您的應用程式是偵錯組建,則它特別需要 Visual C++ 程式庫 DLLs偵錯版本。

若要解決此問題,建議您side-by-side封裝建置和 DLLs。如需說明,請參閱準備測試機器以執行 Microsoft 可執行的偵錯

使用封裝的建置和 DLLs,在乾淨的機器上測試您的應用程式,例如 Amazon EC2 執行個體。當您準備好在 Amazon GameLift Streams 上試用時,請使用此套件建立新的應用程式。請務必選擇使用包含DLLs 執行建置的正確可執行檔。

一般而言,建議您先在乾淨的機器上測試建置,然後再嘗試 Amazon GameLift Streams。如需在 Amazon EC2 執行個體上測試的指示,請參閱 設定遠端機器

向 Amazon GameLift Streams 服務提出請求時存取遭拒

如果您在嘗試執行 Amazon GameLift Streams 動作或使用 資源時遇到「存取遭拒」例外狀況,您的 AWS Identity and Access Management (IAM) 角色可能沒有足夠的許可。這是因為向 Amazon GameLift Streams 服務提出請求,例如呼叫 StartStreamSession

確定受影響的 IAM 角色的政策具有 Amazon GameLift Streams 的適當許可。請檢查以下內容:

  • 如果 IAM 角色具有明確的「全部拒絕」政策,您必須將 新增至 NotAction 元素,明確列出 Amazon GameLift Streams 作為該政策"gameliftstreams:*"的例外狀況。例如:

    { "Sid": "DenyAllExceptListedIfNoMFA", "Effect": "Deny", "NotAction": [ "iam:CreateVirtualMFADevice", "iam:EnableMFADevice", "iam:GetUser", "iam:ListMFADevices", "iam:ListVirtualMFADevices", "iam:ResyncMFADevice", "sts:GetSessionToken", "gameliftstreams:*" // Add this ], "Resource": "*", "Condition": { "BoolIfExists": {"aws:MultiFactorAuthPresent": "false"} } }
  • 如需其他故障診斷,請參閱《IAM 使用者指南》中的對存取遭拒錯誤訊息進行故障診斷