Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Problembehebung bei Amazon GameLift Streams
Zugriff verweigert, wenn eine Anfrage an den Amazon GameLift Streams-Service gestellt wurde
Wenn Sie bei Aufrufen von Amazon GameLift Streams-APIs oder bei der Arbeit mit Ressourcen in der Konsole auf AccessDenied Ausnahmen stoßen, verfügt Ihre AWS Identity and Access Management (IAM-) Rolle möglicherweise nicht über ausreichende Berechtigungen für Amazon GameLift Streams. Überprüfen Sie, ob Folgendes der Fall ist:
-
Wenn die IAM-Rolle eine explizite „Deny-All“ -Richtlinie hat, müssen Sie Amazon GameLift Streams explizit als Ausnahme von dieser Richtlinie auflisten, indem Sie das Element
"gameliftstreams:*"hinzufügen. NotAction Beispiel:{ "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"} } } -
Weitere Informationen finden Sie Identity and Access Management für Amazon GameLift Streams im Kapitel Sicherheit und im IAM-Benutzerhandbuch unter Behebung von Fehlermeldungen mit Zugriffsverweigerung.
Probleme mit der Anwendung
In diesem Abschnitt werden mögliche Ursachen für Probleme identifiziert, die verhindern, dass Anwendungen ausgeführt werden oder dass sie in Amazon GameLift Streams unterschiedlich angezeigt werden.
Vorläufige Prüfungen
-
Führen Sie Ihre Anwendung auf einem anderen Computer aus, um zu überprüfen, ob sie korrekt verpackt ist. Dadurch wird bestätigt, dass Ihr Anwendungsinhalt keine fest codierten Pfade, fehlenden Ressourcen, Bibliotheken oder Binärdateien enthält, die auf anderen Geräten möglicherweise nicht funktionieren.
Probleme mit Proton
-
Stellen Sie sicher, dass Ihre Anwendung mit Proton kompatibel ist. Testen Sie Ihre Anwendung in einer lokalen Umgebung ohne den Amazon GameLift Streams-Server, um sicherzustellen, dass sie mit Proton kompatibel ist. Detaillierte Anweisungen finden Sie unter Kompatibilität mit Proton für Amazon GameLift Streams testen und beheben.
Anwendungsprobleme aufgrund der Bildschirmauflösung
Anwendungen können einfrieren, abstürzen oder falsch gerendert werden, wenn Sie versuchen, eine Vollbild-Auflösung zu verwenden, die nicht 1920x1080 ist. Wir empfehlen, für die Ausführung Ihrer Anwendung ein randloses Vollbild-Fenster zu verwenden und nicht zu versuchen, die Auflösung zu ändern.
Die Anwendung wird beim Start der Stream-Sitzung beendet
Wenn Ihre Anwendung sofort beendet wird, wenn eine Stream-Sitzung gestartet wird, überprüfen Sie die folgenden Punkte auf mögliche Ursachen und Lösungen:
-
Überprüfen Sie die Laufzeit. Vergewissern Sie sich in der Amazon GameLift Streams-Anwendungskonfiguration, dass die Datei, die Sie im Startpfad der ausführbaren Datei angegeben haben, eine ausführbare Datei oder ein ausführbares Skript ist und für die von Ihnen ausgewählte Laufzeitumgebung geeignet ist. Windows-Anwendungen sollten den Dateityp „.exe“, „.bat“ oder „.cmd“ haben und entweder auf die Windows- oder Proton-Laufzeiten abzielen. Native Linux-Anwendungen sollten ausführbare Dateien sein, die auf die Ubuntu 22.04 LTS-Laufzeit abzielen.
-
Überprüfen Sie die erforderlichen DLLs. In Ihrer Windows-Anwendung fehlen möglicherweise die erforderlichen DLLs. Wenn es sich bei Ihrer Anwendung beispielsweise um einen Debug-Build handelt, benötigt sie die Debug-Version der Microsoft C- und C++-Laufzeitbibliotheken (MSVC). Um dieses Problem zu lösen, empfehlen wir, dass Sie Ihren Build und Ihre DLLs Seite an Seite packen. Anweisungen finden Sie unter Vorbereiten eines Testcomputers für die Ausführung einer ausführbaren Debug-Datei
von Microsoft.
Im Allgemeinen empfehlen wir, dass Sie Ihren Build zuerst auf einem sauberen Computer testen, bevor Sie es mit Amazon GameLift Streams versuchen. Anweisungen zum Testen auf einer Amazon EC2 EC2-Instance finden Sie Richten Sie einen Remote-Computer ein unter.
Die Unreal Engine-Anwendung stürzt ab oder erfordert zusätzliche Abhängigkeiten
Wenn Ihre Unreal Engine-Anwendung nicht gestartet werden kann, abstürzt oder Sie zusätzliche Abhängigkeiten wie die Microsoft C- und C++-Laufzeit (MSVC) installieren müssen, versuchen Sie Folgendes:
-
Verwenden Sie die richtige ausführbare Datei. Damit Ihre Anwendung ordnungsgemäß mit Amazon GameLift Streams funktioniert, legen Sie den Anwendungspfad auf die vollständige ausführbare Datei fest, die sich im
Binaries/Win64/(oder einem ähnlichen) Unterordner befindet. Unreal Engine erzeugt zwei ausführbare Dateien: eine kleine Bootstrap-Datei im Stammverzeichnis des Ordners und eine ausführbare Plattform-Zieldatei im Unterordner.Binaries/Win64/Die Bootstrap-Programmdatei im Stammverzeichnis versucht zu überprüfen, ob die Vorbedingungen korrekt sind, und kann in Amazon GameLift Streams zu Fehlalarmen führen, die den Anwendungsstart verhindern. Wenn die ausführbare Datei für das Plattformziel fehlt, wurde die Anwendung möglicherweise nicht korrekt erstellt. Sehen Sie sich zum Beispiel die folgende Ordnerstruktur einer Unreal-Beispielanwendung an:BuildApp |-> MyUnrealApp.exe |-> MyUnrealApp |-> Binaries |-> Win64 |-> MyUnrealApp.exe -
Schalten Sie Unreal Engine Asserts aus. Deaktivieren Sie die
checkMakrosverify, undensure. Sie können verhindern, dass die Anwendung Crash-Dumps erstellt. Weitere Informationen finden Sie in der Dokumentation zu Asserts in Unreal Engine. -
Definieren Sie
USE_CHECKS_IN_SHIPPING=0in Ihrem Build das DeaktivierencheckundverifyMakros. -
Verwenden Sie das
-handleensurepercent=0Befehlszeilenargument, um Makros zu deaktivieren.ensure
-
Leistungsprobleme
In diesem Abschnitt werden mögliche Ursachen für Leistungsprobleme bei der Ausführung von Spielen auf Amazon GameLift Streams identifiziert und Vorschläge zur Optimierung Ihrer Streams im Service gegeben.
Die Spielleistung wird reduziert, wenn auf Amazon GameLift Streams gestreamt wird
Wenn Ihr Spiel auf Ihrem eigenen Computer gut läuft, aber Leistungsprobleme auftreten, wenn Sie es auf Amazon GameLift Streams streamen, sollten Sie Folgendes beachten:
-
Ihr Computer verfügt möglicherweise über eine leistungsstärkere Hardware als Amazon GameLift Streams. Stellen Sie sicher, dass Sie die Anwendung auf einem Computer mit ähnlicher Leistung wie die von Amazon GameLift Streams verwendete Hardware testen:
gen4n: vergleichbar mit der NVIDIA RTX 2060 GPU
gen5n: vergleichbar mit der NVIDIA RTX 3080 GPU
gen6n: vergleichbar mit der NVIDIA RTX 4060 GPU
Dadurch wird überprüft, ob die Rendering-Einstellungen Ihrer Anwendung mit der GPU kompatibel sind und ob die Leistung Ihren Erwartungen entspricht.
-
Das Problem könnte an Ihrer Netzwerkverbindung oder den Einstellungen von Amazon GameLift Streams liegen. Probieren Sie die Tipps zur Fehlerbehebung im Probleme mit der Stream-Konnektivität Abschnitt aus.
Wenn dein Spiel langsam ist, auch wenn es lokal läuft, musst du die Leistung optimieren. Die besten Optimierungsmethoden hängen von der spezifischen Engine oder dem Framework ab, das du verwendest.
-
Unreal Engine-Spiele finden Sie unter. Profilierung der Leistung von Unreal Engine
Bei Windows-Anwendungen treten langsame Ladezeiten oder ruckelnde Probleme auf
Wenn Ihr Spiel lange Ladezeiten hat oder stottert, empfehlen wir die folgende Vorgehensweise:
-
Stellen Sie sicher, dass Ihre Anwendung paketiert und für die Ladeleistung optimiert ist. Beachten Sie dabei die Hinweise Ihres Engine-Anbieters zur Optimierung von Inhalt und Shader-Leistung.
-
Stellen Sie sicher, dass Ihre Anwendung als Standardanwendung in einer Stream-Gruppe festgelegt ist.
-
Optimieren Sie den ersten Start der Anwendung im Service, indem Sie Shader als Teil Ihrer Anwendungspaketierung zwischenspeichern.
Es gibt zwei Möglichkeiten, das Shader-Caching zu aktivieren:
-
Driver-based Caching — Dieser Ansatz ist spezifisch für die GPU- und Treiberversion der Laufzeitumgebung. Diese Option kann auf alle Anwendungen angewendet werden und ist daher der empfohlene Standardansatz. Die Schritte für diesen Ansatz müssen für jede GPU/driver Kombination repliziert werden.
-
Engine-based Caching — Dieser Ansatz ermöglicht das Shader-Caching über die Game-Engine, sofern verfügbar. Dadurch wird der Entwickler mit der Erstellung eines vorgefertigten Pipeline-State-Object-Caches (PSO) betraut. Außerdem wird davon ausgegangen, dass die Engine in der Lage ist, die Cache-Unterstützung für verschiedene Treiber auf derselben GPU-Hardware zu verarbeiten.
Als bewährte Methode empfehlen wir, zuerst treiberbasiertes Caching zu implementieren, da hierfür kein tiefes Verständnis der Implementierung von PSO-Caching für die jeweilige Engine erforderlich ist.
Mit diesen Implementierungen können Shaderdateien exportiert und zusammen mit Ihrer Anwendung gepackt werden, sodass sie nicht bei jedem neuen Stream-Start generiert werden müssen.
Um einen treiberbasierten Caching-Fix für eine Windows-Runtime-Anwendung zu implementieren
-
Starten Sie das Streaming Ihrer Standardanwendung und spielen Sie sie ausgiebig ab, um Shader für die Anwendung zu generieren.
Wichtig
Achten Sie darauf, alle Bereiche oder Ebenen der Umgebung zu besuchen, um so viele Shader wie möglich zu erzeugen.
-
Bevor Sie den Stream schließen, aktivieren Sie die Exportfunktion in Ihrer aktiven Stream-Sitzung. Details hierzu finden Sie unter Stream-Sitzungsdateien exportieren.
-
Schließen Sie Ihre Anwendung ordnungsgemäß, indem Sie das Anwendungsmenü verlassen oder die Befehle zum Herunterfahren der Anwendung verwenden. Dadurch wird sichergestellt, dass der Shader-Cache für den Export bereit ist.
-
Laden Sie die .zip-Datei für den Stream-Sitzungsexport aus dem Amazon S3 S3-Bucket herunter, den Sie bei der Aktivierung der Exportfunktion angegeben haben. Einen Download-Link finden Sie in der Amazon GameLift Streams-Konsole auf der Seite Sessions.
-
Suchen Sie den Shader-Ordner innerhalb des Stream-Session-Exports. Es wird normalerweise an diesem Ort gespeichert:
AppData\Local\NVIDIA\DXCache. Laden Sie die generierten Shader-Dateien (*.nvph) in den Amazon S3 S3-Bucket Ihrer Anwendung hoch. -
Erstellen Sie eine
.batDatei, die die Shader-Dateien zur Laufzeit in den NVIDIA-Caching-Ordner kopiert. Dieser Ordner befindet sich normalerweise unter:.C:\Users\Administrator\AppData\Local\NVIDIA\DXCacheLaden Sie die.batDatei in den Amazon S3 S3-Anwendungs-Bucket hoch. -
Erstellen Sie eine neue Amazon GameLift Streams-Anwendung mit der
.batDatei als ausführbarem Pfad.
Wenn Ihre Anwendung mit dem Streaming beginnt, kopiert Ihre .bat Datei die vorgenerierten Shader in den Shader-Cache, bevor die Anwendung gestartet wird, wodurch die Leistung beim Laden des Streams verbessert wird.
Anmerkung
Möglicherweise müssen Sie diese Schritte wiederholen, wenn Sie Ihre Anwendung aktualisieren oder die Amazon GameLift Streams-Anwendung mit einer neuen Stream-Gruppe verknüpfen. Neuere Stream-Gruppen können aktualisierte GPU-Treiber aus dem Service enthalten.
In der folgenden .bat Beispieldatei wird davon ausgegangen, dass die Shader-Dateien unter dem Amazon S3 S3-Bucket-Präfix Shaders\ gespeichert sind. Sie können eine andere Ordnerstruktur verwenden.
@echo off set CURRENT_PATH=%cd% set DXCACHE_DIR=%CURRENT_PATH%\Shadersset 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
Um einen treiberbasierten Caching-Fix für eine Proton-Runtime-Anwendung zu implementieren
-
Starten Sie das Streaming Ihrer Standardanwendung mit der folgenden Umgebungsvariablenüberschreibung:
"__GL_SHADER_DISK_CACHE_PATH" : "/home/unpriv/games" -
Spielen Sie die Anwendung ausgiebig ab, um Shader zu generieren.
Wichtig
Achten Sie darauf, alle Bereiche oder Ebenen der Umgebung zu besuchen, um so viele Shader wie möglich zu erzeugen.
-
Bevor Sie den Stream schließen, aktivieren Sie die Exportfunktion in Ihrer aktiven Stream-Sitzung. Details hierzu finden Sie unter Stream-Sitzungsdateien exportieren.
-
Schließen Sie Ihre Anwendung ordnungsgemäß, indem Sie das Anwendungsmenü verlassen oder die Befehle zum Herunterfahren der Anwendung verwenden. Dadurch wird sichergestellt, dass der Shader-Cache für den Export bereit ist.
-
Laden Sie die .zip-Datei für den Stream-Sitzungsexport aus dem Amazon S3 S3-Bucket herunter, den Sie bei der Aktivierung der Exportfunktion angegeben haben. Einen Download-Link finden Sie in der Amazon GameLift Streams-Konsole auf der Seite Sessions.
-
Suchen Sie die Shader-Ordner und -Dateien innerhalb des Stream-Session-Exports:
-
Ordner
application\GLCache -
wenn die Anwendung DX11: -Datei verwendet
application\path-to-exe\exe-name.dxvk-cache -
wenn die Anwendung DX12-Datei verwendet
application\path-to-exe\vkd3d-proton.cache.write
-
-
Laden Sie die generierten Shader-Dateien in den Amazon S3 S3-Bucket Ihrer Anwendung hoch:
-
Kopieren Sie den
GLCacheOrdner in das Stammverzeichnis Ihrer Anwendung. -
Falls verfügbar, kopieren Sie die Datei
.dxvk-cacheoder dievkd3d-proton.cache.writeCache-Datei in den Ordner, der die ausführbare Datei der Anwendung enthält.
-
-
Erstellen Sie eine neue Amazon GameLift Streams-Anwendung mit derselben Proton-Konfiguration.
-
Führen Sie die Anwendung mit derselben Umgebungsvariablenüberschreibung aus:
"__GL_SHADER_DISK_CACHE_PATH" : "/home/unpriv/games"
Wenn Ihre Anwendung mit dem Streaming beginnt, verwendet sie die vorgenerierten Shader, wodurch die Leistung beim Laden des Streams verbessert wird.
Anmerkung
Möglicherweise müssen Sie diese Schritte wiederholen, wenn Sie Ihre Anwendung aktualisieren oder die Amazon GameLift Streams-Anwendung mit einer neuen Stream-Gruppe verknüpfen. Neuere Stream-Gruppen können aktualisierte GPU-Treiber aus dem Service enthalten.
Um einen Engine-basierten Caching-Fix für eine Anwendung zu implementieren, die Unreal Engine verwendet
Für diesen Ansatz können Sie die Funktionen von Unreal Engine verwenden, um einen Pipeline State Object (PSO) -Cache für Ihre Amazon GameLift Streams-Anwendung zu erstellen. Mit einem PSO-Cache können Sie vorkompilierte Grafik-Pipeline-Status mit kürzeren Kompilierungszeiten zur Laufzeit bereitstellen, wodurch Probleme beim Laden und Rendern reduziert werden können. Dies erfordert fortgeschrittene Kenntnisse der Unreal Engine, weshalb wir hier nicht auf alle Engine-spezifischen Details eingehen werden. Weitere Anweisungen finden Sie in der Anleitung von Unreal Engine im Abschnitt „Sammlungsablauf“ unter „Einen gebündelten PSO-Cache
-
Generieren Sie Shader für Ihre Anwendung, für die die PSO-Protokollierung aktiviert ist.
-
Erstellen Sie eine neue Amazon GameLift Streams-Anwendung mithilfe des Build-Pakets mit der PSO-enabled Anwendung.
-
Starten Sie einen Stream mit einem
-logPSOBefehl in Ihrer PSO-Logging-App. Sie können die Option Befehlszeilenargumente auf der Seite Stream-Konfiguration testen in der Amazon GameLift Streams-Konsole verwenden.Wichtig
Achten Sie darauf, alle Bereiche oder Ebenen der Umgebung zu besuchen, um so viele Shader wie möglich zu erzeugen.
-
Bevor Sie den Stream schließen, aktivieren Sie die Exportfunktion in Ihrer aktiven Stream-Sitzung. Details hierzu finden Sie unter Stream-Sitzungsdateien exportieren.
-
Beenden Sie die Anwendung über das Menü oder mithilfe der Unreal-Shutdown-Befehle. Wenn Sie den Stream direkt schließen, wird die Unreal-Shader-Pipeline-Datei nicht generiert.
-
Laden Sie die .zip-Datei für den Stream-Sitzungsexport aus dem Amazon S3 S3-Bucket herunter, den Sie im Exportschritt angegeben haben. Einen Download-Link finden Sie in der Amazon GameLift Streams-Konsole auf der Seite Sessions.
-
-
Package Sie die Unreal-Shader-Pipeline-Datei in Ihre Amazon GameLift Streams-Anwendung.
-
Suchen Sie die aufgezeichneten PSO-Dateien (
rec.pipelinecache) im Stream-Sitzungsexport unter.Saved/CollectedPSOsEntpacken Sie die PSO-Dateien mithilfe von Unreal-Befehlen. -
Packen Sie einen neuen Unreal-Build mit der generierten Ausgabe aus dem Entpacken. Folgen Sie den Anleitungen von Unreal in den Abschnitten PSO-Caches konvertieren und PSO-Caches
in Ihre Anwendung einbeziehen . Wichtig
Wenn Sie den Unreal-Befehl im Abschnitt „PSO-Caches konvertieren“ ausführen, stellen Sie sicher, dass Sie die Eingabedateien derselben Treiberversion verwenden. Beispiel: Verwenden Sie für DX12 nur die SM6-Dateien als Eingaben. Andernfalls erhalten Sie beim Packen der neuen Anwendung eine Fehlermeldung.
-
Erstellen Sie eine neue Amazon GameLift Streams-Anwendung für den neuen Paket-Build mit den PSO-Dateien.
-
Stellen Sie beim Starten und Testen von Streams sicher, dass der PSO-Cache geladen wird. Suchen Sie in den Spielprotokollen nach der folgenden Zeile:
Opened FPipelineCacheFile: ../../...
-
Anmerkung
Möglicherweise müssen Sie diese Schritte wiederholen, wenn Sie Ihre Anwendung aktualisieren oder die Amazon GameLift Streams-Anwendung mit einer neuen Stream-Gruppe verknüpfen. Neuere Stream-Gruppen können aktualisierte GPU-Treiber aus dem Service enthalten.
Probleme mit der Stream-Konnektivität und der Netzwerkleistung
Wenn Sie Ihren Amazon GameLift Streams-Backend-Service einrichten, überprüfen Sie Folgendes:
-
Wählen Sie eine Lösung, AWS-Region die dem Endbenutzer am nächsten kommt. Eine hohe Latenz zwischen Ihren Kunden und der Region, in der Ihr Stream gehostet wird, kann sich auf die Stream-Qualität auswirken. Eine Liste der Standorte, AWS-Regionen und Streaming-Standorte, die von Amazon GameLift Streams unterstützt werden von denen aus Sie streamen können, finden Sie unter. Sie können AWS Konsolenendpunkte in der Region anpingen, um eine ungefähre Latenzmessung zu erhalten.
-
Stellen Sie sicher, dass Ihre Stream-Gruppe Kapazität für neue Streams hat.
-
Stellen Sie sicher, dass diese Einstellung angemessen
ConnectionTimeoutSecondsist, sodass Endbenutzer genügend Zeit haben, eine Verbindung herzustellen, bevor ihr Webclient das Timeout erreicht.
Empfehlen Sie Ihren Endbenutzern, Folgendes zu überprüfen:
-
Stellen Sie sicher, dass Firewalls den Zugriff auf den UDP-Portbereich 33435-33465 zulassen, um Streaming von Amazon Streams zu ermöglichen. GameLift Wenn Amazon GameLift Streams diese Ports nicht erreichen kann, kann dies zu Streaming-Problemen führen, z. B. zu einem schwarzen oder grauen Bildschirm.
-
Stellen Sie sicher, dass Ihre Internetverbindung eine Verbindungsgeschwindigkeit von mindestens 10 Mbit/s für einen 1080p-Stream aufrechterhalten kann. Wenn Sie beim Abspielen auf Amazon GameLift Streams Netzwerkprobleme feststellen, schwankt Ihre Internetgeschwindigkeit möglicherweise und Sie erhalten möglicherweise nicht durchgehend mindestens 10 Mbit/s. Führen Sie einen Internet-Geschwindigkeitstest durch und fahren Sie mit den Schritten zur Fehlerbehebung fort.
-
Verwenden Sie nach Möglichkeit ein verkabeltes Netzwerk. Stellen Sie Ihr Gerät bei der Verwendung Wi-Fi in die Nähe Ihres Routers, um eine stärkere Signalstärke zu erzielen.
-
Wenn Sie einen Wi-Fi Router sowohl mit dem 2,4-GHz- als auch mit dem 5-GHz-Band verwenden, versuchen Sie, eine Verbindung zu einem anderen Band herzustellen. Wenn Sie sich nicht sicher sind, wie Sie Ihren Router auf ein anderes Band umstellen sollen, besuchen Sie die Support-Seiten des Herstellers oder Anbieters Ihres Wi-Fi Routers. Sie können sich auch an den Kundendienst wenden.
-
Stellen Sie fest, ob andere Benutzer im selben Netzwerk (insbesondere zu Hause Wi-Fi) Anwendungen mit hoher Bandbreite wie Videostreaming, Herunterladen, Online-Spiele oder Backups ausführen.
-
Schließen Sie andere Anwendungen auf Ihrem Gerät, die Bandbreite beanspruchen.
-
Verwenden Sie beim Streamen kein VPN oder Proxy. Sie können zu höheren Latenzen führen und das Gameplay beeinträchtigen.
-
Vergewissere dich, dass du Wi-Fi statt Mobilfunknetze verwendest, wenn du auf einem iPad oder iPhone spielst. Die Verwendung eines Mobilfunknetzes kann zu Verbindungsproblemen führen.
-
MacOS-Benutzer sollten die Ortungsdienste deaktivieren, da sie Wi-Fi dadurch von Zeit zu Zeit unterbrochen werden, was zu einem schlechten Streaming-Erlebnis führen kann.
Probleme mit der Stream-Eingabe
In diesem Abschnitt werden mögliche Ursachen und Lösungen für Probleme im Zusammenhang mit Benutzereingaben in einer Stream-Sitzung beschrieben.
Allgemeine Problembehandlung bei Eingaben
-
Testen Sie, ob das Problem browserspezifisch ist. Insgesamt empfehlen wir Google Chrome, Microsoft Edge oder eine benutzerdefinierte Chromium-based Desktop-Anwendung für das beste Endbenutzererlebnis und maximale Kompatibilität, insbesondere mit Gamecontrollern.
-
Protokollieren Sie Eingabeereignisse, die vom Client gesendet und von der Anwendung empfangen wurden, um festzustellen, wo ein Eingabefehler in Ihrem Frontend-Code vorliegt.
-
Suchen Sie unbedingt Unterstützte Browser und Eingaben nach zusätzlichen Informationen zu unterstützten Browsern und Eingabegeräten, einschließlich bekannter Probleme und Einschränkungen.
Gamepad- und Mikrofoneingänge funktionieren in nativen Linux-Anwendungen nicht
Gamepad- und Mikrofoneingänge werden in nativen Linux-Anwendungen nicht unterstützt. Unterstützte Browser und EingabenWeitere Informationen zu unterstützten Eingabegeräten, einschließlich bekannter Probleme und Einschränkungen, finden Sie unter.
Die Tasteneingabe scheint auf dem macOS-Client hängen zu bleiben
Auf macOS-Clients scheinen Tasten plötzlich festzustecken, wenn die Befehlstaste und eine andere Taste gleichzeitig gedrückt werden, wodurch das Tastenereignis wiederholt wird. Beispielsweise kann die Pfeiltaste hängen bleiben, wenn auch die Befehlstaste gedrückt wird. Wenn in einem Spiel die Pfeiltasten verwendet werden, um die Kamera zu drehen, würde dies dazu führen, dass sich die Kamera endlos dreht.
-
Problem: Die Befehlstaste auf macOS ist dem Metatasten-Ereignis zugeordnet, das der Windows-Taste unter Microsoft Windows zugeordnet ist. Das Problem ist ein Fehler
, der sich auf macOS-Browser auswirkt, wenn Command und eine andere Taste gleichzeitig gedrückt werden. Dabei wird die Metataste zurückgesetzt, wenn sie losgelassen wird, aber die Pfeiltaste nicht zurückgesetzt, weil der Browser kein Keyup-Ereignis für die Pfeiltaste erfasst hat, sodass der Web SDK-Client kein Keyup-Ereignis an den Server sendet und die Streaming-Anwendung immer noch denkt, dass die Taste gedrückt wird. -
Lösung: Wenn Sie die Befehlstaste nicht verwenden, können Sie sie mithilfe des Web-SDK-Tastaturfiltermechanismus (
keyboardFilter) herausfiltern, der sich in derInputConfigurationBenutzeroberfläche des Web SDK befindet.
Eingaben bleiben beim Öffnen von Benutzeroberflächenelementen des Betriebssystems hängen
Auf Desktop- und mobilen Browserclients werden Eingabeereignisse wie wichtige Veröffentlichungen nicht verarbeitet, wenn bestimmte OS-level Benutzeroberflächenelemente Priorität haben. Dies kann dazu führen, dass sich Charaktere bewegen oder Aktionen wiederholt werden, als ob Tasten immer noch gedrückt gehalten würden, obwohl Sie sie losgelassen haben.
-
Problem: Wenn Sie bestimmte Elemente der OS-level Benutzeroberfläche öffnen (z. B. Browser-Menüleisten auf dem Desktop oder Control Center und Notification Center auf iOS), beendet der Browser die Auslösung von Eingabeereignissen, ohne dass Unschärfe- oder Fokusereignisse ausgelöst werden. Dies führt dazu, dass der Server weiterhin den letzten Eingabestatus empfängt. Dies ist eine Einschränkung auf Browserebene, die nicht zuverlässig erkannt werden kann.
-
Lösung: Verwenden Sie den Vollbildmodus in Desktop-Browsern, um den Zugriff auf die Browser-Menüleisten zu verhindern. Für iOS-Benutzer mit angeschlossenen Tastaturen empfehlen wir, einen nativen App-Wrapper mit einer Webansicht zu erstellen, in der die native App Fokusverlust besser erkennen und behandeln kann, wodurch explizit Fokus- und Unschärfeereignisse im Browserfenster ausgelöst werden. Verwenden Sie alternativ Frontend-HTML oder Elemente der Benutzeroberfläche im Spiel, um Benutzer darüber zu informieren, dass immer noch eine Taste gedrückt ist, und um Informationen zu dieser iOS-Einschränkung bereitzustellen.
Mausbewegungen verhalten sich in Amazon GameLift Streams anders
Wenn sich Mausbewegungen beim Streamen mit Amazon GameLift Streams anders verhalten, z. B. schneller als erwartet, müssen Sie möglicherweise die Maussteuerung und die Cursorverwaltungslogik in Ihrer Anwendung anpassen.
-
Problem: Amazon GameLift Streams verwendet eine Heuristik, um auszuwählen, ob Mausereignisse im „relativen“ oder „absoluten“ Modus übertragen werden sollen. Im relativen Modus werden neue Maus-Updates als kleine, inkrementelle Unterschiede zum vorherigen Update bereitgestellt. Im absoluten Modus wird der Mauszeiger kontinuierlich an eine Bildschirmposition gedrückt, die mit dem Client synchronisiert ist. Wenn der Betriebssystem-Cursor über dem gestreamten Inhalt sichtbar ist, wählt die Heuristik immer absolute Koordinaten aus. Dies kann zu unerwartet großen Bewegungsdeltas führen, wenn Ihre Anwendung kleine, relative Aktualisierungen erwartet.
-
Lösung: Wenn Ihre Anwendung relative Mausbewegungen erwartet (z. B. FPS-style Kamerasteuerung oder Interaktionen durch Ziehen), blenden Sie den Betriebssystem-Cursor bei Mausinteraktionen aus. Sie können den Cursor beispielsweise bei gedrückter Maus ausblenden und bei gedrückter Maus wieder einblenden. Dadurch wird sichergestellt, dass beim Ziehen relative Koordinaten verwendet werden und die absolute Position nur synchronisiert wird, wenn die Taste losgelassen wird.
Weitere Informationen zur Mausbewegung in Amazon GameLift Streams finden Sie unterUmgang mit Mausbewegungen.
Probleme mit der Stream-Sitzung
In diesem Abschnitt werden mögliche Ursachen und Lösungen für Probleme im Zusammenhang mit dem unerwarteten Starten oder Beenden einer Stream-Sitzung beschrieben.
Die Stream-Sitzung wird nicht gestartet
Mögliche Ursachen:
-
Die Anwendung hängt oder ist abgestürzt. Anweisungen zur Fehlerbehebung finden Sie Probleme mit der Anwendung im Abschnitt.
-
Der Status der Stream-Gruppe ist nicht
Active. Überprüfen Sie den Status der Stream-Gruppe. -
On-demand Das Hochfahren der Kapazität dauert länger als das
ConnectionTimeoutSecondsin der StartStreamSessionAPI angegebene Timeout. In der Windows-Runtime kann die On-Demand-Hochlaufzeit 5 Minuten oder länger dauern. -
Am Streaming-Standort ist keine Kapazität verfügbar. Stellen Sie sicher, dass Ihre zugewiesene Kapazität größer ist als Ihre genutzte Kapazität oder ob Sie über On-Demand-Kapazität verfügen, die nicht genutzt wird (die zugewiesene Kapazität ist geringer als die ständig verfügbare Kapazität plus On-Demand-Kapazität). In der Konsole finden Sie diese Werte in der Liste der Stream-Gruppen oder auf der Detailseite der Stream-Gruppe. Mithilfe der Service-API finden Sie diese Werte unter GetStreamGroup. Zu den Szenarien, in denen die verfügbare Kapazität vorübergehend bei Null liegt, gehören die folgenden:
-
Wenn Sie gerade die Always-On-Kapazität am Streaming-Standort erhöht haben, warten Sie einige Minuten, bis die Kapazität zugewiesen ist.
-
Wenn am Streaming-Standort nur eine Kapazität verfügbar ist und Ihr Client die Verbindung unerwartet unterbrochen hat, befindet sich die vorherige Sitzung möglicherweise immer noch im Status „Nicht verbunden“. Warten Sie einige Minuten, bis das Zeitlimit für die Sitzung abgelaufen ist, und versuchen Sie es erneut.
-
Wenn Sie Ihrer Stream-Gruppe kürzlich einen Standort hinzugefügt haben und die Anwendung an diesem Standort nicht vorhanden war, hat die Anwendung die Replikation dort möglicherweise noch nicht abgeschlossen. Überprüfen Sie den Replikationsstatus auf der Seite mit den Stream-Gruppendetails in der Konsole. Alternativ können Sie die GetApplicationAPI verwenden und den
ReplicationStatusesWert überprüfen, um zu überprüfen, ob es sich um den gewünschten Streaming-Standort handeltCOMPLETED.Status
-
-
Die Netzwerkbedingungen sind so schlecht, dass Frames, insbesondere der erste Frame, nicht gesendet werden. Überprüfen Sie die Netzwerkbedingungen zwischen dem Client und dem Streaming-Standort und passen Sie einen anderen Standort an oder versuchen Sie es mit einem anderen.
Die Stream-Sitzung wurde beendet
Stream-Sitzungen werden automatisch beendet, wenn eine Anwendung abstürzt oder beendet wird oder wenn die Client-Verbindung unterbrochen wird. Sitzungen können auch aufgrund der folgenden Timeout-Werte beendet werden:
-
Platzierungs-Timeout: Timeout-Wert für Amazon GameLift Streams, um Rechenressourcen für das Hosten einer Stream-Sitzung zu finden.
-
Verbindungs-Timeout: Timeout-Wert für einen Client, um sich mit einer Stream-Sitzung zu verbinden oder erneut zu verbinden.
-
Timeout im Leerlauf: Maximale Zeit, während der eine Stream-Sitzung ohne Benutzereingabe inaktiv sein kann.
-
Timeout für die Sitzungslänge: Maximale Zeit für eine Stream-Sitzung.
Eine ausführliche Erläuterung der einzelnen Timeouts und ihrer möglichen Werte finden Sie unter. Timeout-Werte, die sich auf Stream-Sitzungen auswirken
Probleme mit dem Web SDK
In diesem Abschnitt werden mögliche Ursachen für Probleme im Zusammenhang mit dem Amazon GameLift Streams Web SDK bei der Integration von Amazon GameLift Streams in Ihre Webanwendung beschrieben.
Konfiguration der Audioelemente aus Gründen der Gerätekompatibilität
Wenn Sie ein neues GameLiftStreams Objekt erstellen, empfehlen wir, kein separates Audioelement bereitzustellen. Die Bereitstellung eines eigenen Audioelements ist nützlich, wenn Sie spezielle JavaScript Steuerungen für das Audio benötigen, die nicht auf das Videoelement angewendet werden sollten. Einige Geräte, wie z. B. bestimmte Smart-TVs, unterstützen jedoch jeweils nur ein Medienelement auf einer Webseite. Die Bereitstellung eines separaten Audioelements kann zu Wiedergabefehlern auf diesen Geräten führen.
Beim Start des Streams wird kein Audio abgespielt
Wenn beim Start des Streams kein Audio abgespielt wird, stellen Sie sicher, dass die Stummschaltung der Medienelemente aufgehoben ist. Manche Browser schalten Medienelemente, die nicht aktiv abgespielt werden, automatisch stumm. Verschiedene Browser haben unterschiedliche Autoplay-Richtlinien, die festlegen, wann Medienelemente stummgeschaltet werden.
Überprüfen Sie Folgendes, um Probleme mit der Audiowiedergabe zu beheben:
-
Stellen Sie sicher, dass die
mutedEigenschaft des Video- oder Audioelements auf eingestellt istfalse. -
Stellen Sie sicher, dass die Lautstärke des Medienelements nicht auf eingestellt ist
0. -
Überprüfen Sie die Autoplay-Richtlinie Ihres Browsers. Viele Browser erfordern eine Benutzerinteraktion, z. B. einen Klick, bevor sie die Medienwiedergabe ohne Stummschaltung ermöglichen.
-
Wenn Sie einen Rückruf benötigen, wenn die Sitzung verbunden ist, verwenden Sie
clientConnection.connectionStatein dem Objekt.GameLiftStreamsDies bietet einen Rückruf für den Fall, dass die Peer-Verbindung in einen verbundenen Zustand übergeht.