Amazon GameLift Streams 疑難排解 - Amazon GameLift Streams

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

Amazon GameLift Streams 疑難排解

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

如果您在呼叫 Amazon GameLift Streams APIs 或在主控台中使用資源時遇到 AccessDenied 例外狀況,您的 AWS Identity and Access Management (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"} } }
  • 如需詳細資訊,請參閱 安全章節Amazon GameLift Streams 的 Identity and Access Management中的 ,並檢閱《IAM 使用者指南》中的對存取遭拒錯誤訊息進行故障診斷

應用程式問題

本節識別導致應用程式無法執行或導致應用程式在 Amazon GameLift Streams 上顯示不同問題的潛在原因。

初步檢查

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

質子問題

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

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

應用程式會在串流工作階段開始時終止

如果您的應用程式在串流工作階段開始時立即終止,請檢閱下列潛在原因和解決方案:

  • 驗證執行時間。在 Amazon GameLift Streams 應用程式組態中,確認您在可執行啟動路徑中指定的檔案是可執行檔或指令碼,且適用於您選擇的執行時間環境。Windows 應用程式應該具有 ".exe"、".bat" 或 ".cmd" 的檔案類型,並以 Windows 或 Proton 執行時間為目標。原生 Linux 應用程式應為以 Ubuntu 22.04 LTS 執行時間為目標的可執行檔。

  • 驗證所需的 DLLs。您的 Windows 應用程式可能缺少必要的 DLLs。例如,如果您的應用程式是偵錯組建,則需要 Microsoft C 和 C++ (MSVC) 執行時間程式庫的偵錯版本。若要解決此問題,建議您將組建和 DLLs side-by-side封裝。如需說明,請參閱準備測試機器以執行 Microsoft 可執行的偵錯

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

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

如果您的 Unreal Engine 應用程式無法啟動、當機或要求您安裝其他相依性,例如 Microsoft C 和 C++ (MSVC) 執行時間,請嘗試下列動作:

  • 使用正確的可執行檔。若要讓您的應用程式正確使用 Amazon GameLift Streams,請將應用程式路徑設定為位於 Binaries/Win64/(或類似) 子資料夾中的完整可執行檔。Unreal Engine 會產生兩個可執行檔:資料夾根目錄的小型引導執行檔,以及Binaries/Win64/子資料夾中的平台目標可執行檔。根嘗試驗證先決條件的引導執行檔是正確的,並且可以在 Amazon GameLift Streams 上建立防止應用程式啟動的誤報。如果缺少平台目標可執行檔,則應用程式可能未正確建置。例如,請參閱以下範例 Unreal 應用程式的資料夾結構:

    BuildApp |-> MyUnrealApp.exe |-> MyUnrealApp |-> Binaries |-> Win64 |-> MyUnrealApp.exe
  • 關閉 Unreal Engine Asserts。停用 checkverifyensure巨集。它們可以防止應用程式建立損毀傾印。如需詳細資訊,請參閱 Unreal Engine 文件中的宣告

    • 在建置USE_CHECKS_IN_SHIPPING=0中定義 以停用 checkverify巨集。

    • 使用-handleensurepercent=0命令列引數來停用ensure巨集。

效能問題

本節識別在 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

    • gen6n:相當於 NVIDIA RTX 4060 GPU

    這會驗證應用程式的轉譯設定是否與 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
實作 Proton 執行時間應用程式的驅動程式型快取修正
  1. 使用以下環境變數覆寫開始串流您的預設應用程式:

    "__GL_SHADER_DISK_CACHE_PATH" : "/home/unpriv/games"
  2. 廣泛播放應用程式以產生著色器。

    重要

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

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

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

  5. 在串流工作階段匯出中尋找著色器資料夾和檔案:

    1. application\GLCache 資料夾

    2. 如果應用程式使用 DX11: application\path-to-exe\exe-name.dxvk-cache 檔案

    3. 如果應用程式使用 DX12: application\path-to-exe\vkd3d-proton.cache.write 檔案

  6. 將產生的著色器檔案上傳至應用程式的 Amazon S3 儲存貯體:

    1. GLCache 資料夾複製到應用程式的根目錄。

    2. 如果可用,請將 .dxvk-cachevkd3d-proton.cache.write快取檔案複製到包含應用程式可執行檔的資料夾。

  7. 使用相同的 Proton 組態建立新的 Amazon GameLift Streams 應用程式。

  8. 使用相同的環境變數覆寫執行應用程式:

    "__GL_SHADER_DISK_CACHE_PATH" : "/home/unpriv/games"

當您的應用程式開始串流時,它會使用預先產生的著色器,改善串流載入效能。

注意

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

使用 Unreal Engine 為應用程式實作以引擎為基礎的快取修正

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

  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 後端服務時,請檢查下列項目:

  • 選擇最接近最終使用者 AWS 區域 的位置。從用戶端到託管串流之區域的高延遲可能會影響串流品質。如需串流來源的位置清單AWS 區域 Amazon GameLift Streams 支援的 和 串流位置,請參閱 。您可以在 區域中 ping AWS 主控台端點,以取得近似的延遲測量。

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

  • 確認 ConnectionTimeoutSeconds 已合理設定,以允許最終使用者有足夠的時間在 Web 用戶端逾時之前進行連線。

建議最終使用者檢查下列項目:

  • 確保防火牆允許存取 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 不時暫停,進而導致串流體驗不佳。

串流輸入問題

本節識別與串流工作階段中使用者輸入相關的問題的潛在原因和解決方案。

一般輸入疑難排解

  • 測試問題是否為瀏覽器規格。整體而言,我們建議使用 Google Chrome、Microsoft Edge 或自訂 Chromium 桌面應用程式,以獲得最佳的最終使用者體驗和最大的相容性,特別是遊戲控制器。

  • 記錄從用戶端傳送並由應用程式接收的輸入事件,以識別前端程式碼中的輸入不相符之處。

  • 請務必支援的瀏覽器和輸入檢查支援瀏覽器和輸入裝置的其他資訊,包括已知問題和限制。

遊戲台和麥克風輸入不適用於原生 Linux 應用程式

原生 Linux 應用程式不支援遊戲台和麥克風輸入。支援的瀏覽器和輸入 如需支援輸入裝置的其他資訊,包括已知問題和限制,請參閱 。

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

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

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

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

開啟作業系統 UI 元素時卡住輸入

在桌面和行動瀏覽器用戶端上,某些作業系統層級 UI 元素具有優先順序時,不會處理金鑰版本等輸入事件。這可能會導致字元移動或動作重複,就好像金鑰仍在按住一樣,即使您已釋出它們。

  • 問題:當您開啟特定作業系統層級 UI 元素 (例如桌面上的瀏覽器選單列,或 iOS 上的控制中心和通知中心) 時,瀏覽器會停止觸發輸入事件,而不會觸發模糊或焦點事件。這會導致伺服器繼續接收最後一個輸入狀態。這是無法可靠偵測的瀏覽器層級限制。

  • 解決方案:在桌面瀏覽器上使用全螢幕模式,以防止存取瀏覽器選單列。對於使用連線鍵盤的 iOS 使用者,我們建議您使用 Web 檢視建立原生應用程式包裝函式,其中原生應用程式可以更好地偵測和處理焦點遺失,明確觸發瀏覽器視窗焦點和模糊事件。或者,使用前端 HTML 或遊戲內 UI 元素通知使用者仍在按下金鑰,並提供此 iOS 限制的相關資訊。

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

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

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

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

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

串流工作階段問題

本節識別與串流工作階段意外啟動或終止相關的問題的潛在原因和解決方案。

串流工作階段未啟動

可能的原因:

  • 應用程式掛載或當機。如需疑難排解說明,請參閱應用程式問題一節。

  • 串流群組狀態不是 Active。驗證串流群組的狀態。

  • 隨需容量的啟動時間比 StartStreamSession API ConnectionTimeoutSeconds中 指定的逾時時間更長。在 Windows 執行時間,隨需啟動時間可能需要 5 分鐘或更長時間。

  • 串流位置中沒有可用的容量。確認您配置的容量大於使用中的容量,或者您有未使用的隨需容量 (配置的容量小於永遠使用容量加上隨需容量)。在 主控台中,您可以在串流群組清單或串流群組詳細資訊頁面上找到這些值。使用 服務 API,您可以使用 GetStreamGroup 尋找這些值。可用容量暫時為零的一些情況包括:

    • 如果您剛增加串流位置的永遠開啟容量,請等待幾分鐘,以便配置容量。

    • 如果您在串流位置只有 1 個可用容量,且用戶端意外中斷連線,則上一個工作階段可能仍處於中斷連線狀態。請等待幾分鐘讓工作階段逾時,然後再試一次。

    • 如果您最近將位置新增至串流群組,而應用程式不存在於該位置,則應用程式可能尚未完成複寫。在 主控台的串流群組詳細資訊頁面上檢查複寫狀態。或者,您可以使用 GetApplication API 並檢查 ReplicationStatuses值,以確認所需串流位置Status的 為 COMPLETED

  • 網路條件太差,無法傳送影格,特別是第一個影格。檢查用戶端和串流位置之間的網路條件,並調整或嘗試不同的位置。

串流工作階段已終止

當應用程式當機或結束,或用戶端連線中斷時,串流工作階段會自動終止。工作階段也可以因下列逾時值而終止:

  • 配置逾時:Amazon GameLift Streams 尋找運算資源以託管串流工作階段的逾時值。

  • 連線逾時:用戶端連線至或重新連線至串流工作階段的逾時值。

  • 閒置逾時:串流工作階段可在沒有使用者輸入的情況下閒置的時間上限。

  • 工作階段長度逾時:串流工作階段的時間上限。

如需每個逾時及其可能值的詳細說明,請參閱 影響串流工作階段的逾時值