

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.

# Backend-Service und Webclient von Amazon GameLift Streams
<a name="sdk"></a>

 Mit Amazon GameLift Streams können Sie Anwendungen über einen Webbrowser streamen. Mit dem Amazon GameLift Streams Web SDK können Sie einen Backend-Streaming-Dienst einrichten. Anschließend stellen Endbenutzer über einen Webclient eine Verbindung zu einem Stream her. Sie können Ihr Spiel spielen oder über die gesamte Cloud mit Ihrer Anwendung interagieren. 

 Das Amazon GameLift Streams Web SDK umfasst einen Beispiel-Backend-Server und einen Beispiel-Webclient, mit denen Sie mit der Erstellung eines Backend-Service beginnen können. Sie können diese Beispiele auch verwenden, um zu testen, wie Amazon GameLift Streams streamt, ohne zusätzliche Entwicklung. Informationen zu den ersten Schritten finden Sie unter[Einrichtung eines Webservers und Clients mit Amazon GameLift Streams](setting-up-web-sdk.md). 

**Topics**
+ [Unterstützte Browser und Eingaben](sdk-browsers-input.md)
+ [Erforderliche Anschlüsse](required-ports.md)
+ [Einrichtung eines Webservers und Clients mit Amazon GameLift Streams](setting-up-web-sdk.md)
+ [Passen Sie das Erscheinungsbild des Streams an](sdk-stream-appearance.md)
+ [Präferenz für das Gebietsschema](sdk-locale-support.md)
+ [Umgang mit Mausbewegungen](sdk-mouse-movement.md)
+ [Datenkanalkommunikation zwischen einer Anwendung und einem Webclient](data-channels.md)

# Unterstützte Browser und Eingaben
<a name="sdk-browsers-input"></a>

Im Folgenden sind die unterstützten Plattformen und Browser für die Anzeige von Amazon GameLift Streams-Streams sowie deren kompatible Eingabe-Peripheriegeräte aufgeführt. Browser müssen außerdem mit Advanced Video Coding (AVC), auch bekannt als H.264, kompatibel sein.

Insgesamt empfehlen wir Google Chrome, Microsoft Edge oder eine benutzerdefinierte Chromium-basierte Desktop-Anwendung für das beste Endbenutzererlebnis und maximale Kompatibilität, insbesondere mit Gamecontrollern.

 [Weitere Informationen darüber, welche Controller mit welchen Browsern kompatibel sind, findest du in der Web Gamepad API.](https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API) Auch wenn einige Hinweise möglicherweise nicht für Amazon GameLift Streams gelten, gehen wir davon aus, dass die meisten Gamecontroller erfolgreich eine Verbindung über Bluetooth herstellen können. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/gameliftstreams/latest/developerguide/sdk-browsers-input.html)

## Bekannte Probleme
<a name="sdk-browsers-input-known-issues"></a>

Im Folgenden sind bekannte Probleme mit Browsern und Eingaben aufgeführt:
+ Safari beendet den Vollbildmodus sofort, wenn die Taste gedrückt `Esc` wird. Dies kann nicht außer Kraft gesetzt werden.
+ „Eingebettete“ oder „In-App“ -Browseransichten LinkedIn, wie sie in mobilen Apps wie Yelp, Instagram und anderen enthalten sind, werden auf iOS nicht unterstützt. Diese neigen dazu, die WebRTC-Unterstützung des Browsers zu deaktivieren, die für interaktives Echtzeit-Streaming erforderlich ist. Wir empfehlen, nicht standardmäßige Browserzeichenfolgen zu erkennen und den Benutzer zum Öffnen in Safari aufzufordern.
+ Wenn die Bildschirmauflösung in Ihrer Anwendung nicht auf 1080p eingestellt ist, kann das Maus-Tracking beeinträchtigt werden. Wir empfehlen, die Auswahl einer anderen Auflösung nach Möglichkeit zu deaktivieren. Wir empfehlen außerdem, den Fenstermodus zu deaktivieren und nur im Vollbildmodus auszuführen.
+ Um Plug & Play von Gamecontrollern auf Proton zu unterstützen, obwohl sie in nativen Linux-Anwendungen nicht unterstützt werden, zeigen Spiele, die in Proton-Laufzeitumgebungen laufen, *immer* einen verbundenen Gamecontroller an, auch wenn keiner am Client angeschlossen ist. Dies könnte ein Problem bei Spielen sein, die zur Eingabe des Controllers auffordern, selbst wenn der Controller inaktiv und unbenutzt ist. Wir empfehlen, dass in Spielen die Eingabe-Benutzeroberfläche auf der Grundlage der letzten Eingabemethode angezeigt wird.

## Einschränkungen
<a name="sdk-browsers-input-limits"></a>
+ Die meisten Laufzeitumgebungen unterstützen Gamecontroller, mit Ausnahme von Ubuntu 22.04 LTS. Wenn du Gamecontroller-Unterstützung benötigst, erwäge, das Spiel mit einer anderen Laufzeitumgebung zu erstellen. Eine Liste anderer Laufzeitumgebungen finden Sie unter[Laufzeitumgebungen](configuration-options.md#configuration-options-runtime).
+ Die Gamecontroller PlayStation 5 und Luna werden in Firefox nicht unterstützt.
+ Unterstützung für haptisches Feedback:
  + Haptisches Feedback auf den S/X Controllern der PlayStation 4- und Xbox-Serie wird in Chrome, Edge und Safari unterstützt.
  + Haptik auf dem PlayStation DualSense 5-Controller wird nur im Safari-Browser unterstützt.
  + Firefox unterstützt auf keinem Controller haptisches Feedback.
  + Android- und iOS-Geräte unterstützen auf keinem Controller haptisches Feedback.
+ Die Funktion **Stream testen** in der Amazon GameLift Streams-Konsole unterstützt keine Mikrofone.

## IPv6 Unterstützung
<a name="sdk-browsers-input-ipv6-support"></a>

Streaming an IPv6 reine Clients wird nur mit Windows-Runtime-Anwendungen unterstützt.


| Laufzeit | Streamen über IPv4 | Rüber streamen IPv6 | 
| --- | --- | --- | 
| Microsoft Windows Server 2022-Basis | Ja | Ja | 
| Ubuntu 22.04 LTS | Ja | Nein | 
| Protonen-Laufzeiten | Ja | Nein | 

# Erforderliche Anschlüsse
<a name="required-ports"></a>

 Um Amazon GameLift Streams zu integrieren, stellen Sie sicher, dass in Ihrer Netzwerkinfrastruktur die erforderlichen Ports offen und zugänglich sind. Im Folgenden finden Sie eine Liste der Ports, die Sie in Ihrem Netzwerk für die Kommunikation mit Amazon GameLift Streams offen haben sollten. 


| Port | Protokoll | Zweck | 
| --- | --- | --- | 
|  443  |  (HTTPS) TCP  |  AWS APIs, einschließlich Amazon GameLift Streams  | 
|  33435-33465  |  UDP  |  Web-RTC  | 

# Einrichtung eines Webservers und Clients mit Amazon GameLift Streams
<a name="setting-up-web-sdk"></a>

 In diesem Tutorial richten Sie eine Web-Client-Anwendung ein, die den Streaming-Dienst GameLift von Amazon Streams integriert. Anschließend verwenden Sie das Amazon GameLift Streams Web SDK, eine JavaScript Bibliothek und Beispielcode, mit dem Sie beginnen können. Der Beispielcode umfasst einen einfachen Amazon GameLift Streams-Backend-Webserver und einen einfachen Webclient. Am Ende dieses Tutorials können Sie mithilfe des Beispielcodes einen Stream starten. 

 Wenn Sie Amazon GameLift Streams zum ersten Mal verwenden, empfehlen wir Ihnen dringend, mit dem [Ihren ersten Stream in Amazon GameLift Streams starten](streaming-process.md) Tutorial zu beginnen, das Sie durch das Hochladen eines Spiels auf Amazon S3 und das Testen des Streamings von der Amazon GameLift Streams-Konsole in Ihrem Browser aus führt. 

## Voraussetzungen
<a name="setting-up-web-sdk-prereq"></a>
+ Ein AWS-Konto mit den richtigen Anmeldeinformationen für den programmatischen Zugriff. Weitere Informationen finden Sie unter [Amazon GameLift Streams als Entwickler einrichten](setting-up.md).
+ Das AWS-SDK.
+ Ein von Amazon GameLift Streams unterstützter Webbrowser — siehe. [Unterstützte Browser und Eingaben](sdk-browsers-input.md)
+ Node.js — siehe [Download-Seite von Node.js](https://nodejs.org/en/download).

## Laden Sie das Web-SDK herunter
<a name="setting-up-web-sdk-materials"></a>

Für dieses Tutorial müssen Sie die folgenden Materialien aus dem Bereich Ressourcen der [Produktseite Erste Schritte](https://aws.amazon.com/gamelift/streams/getting-started/) herunterladen:
+ **Amazon GameLift Streams Web SDK-Bundle**: Dieses Paket beinhaltet Beispielcode für einen einfachen Backend-Service und einen Webclient.
+ **Amazon GameLift Streams Web SDK API-Referenz**: Diese API-Referenz dokumentiert Amazon GameLift Streams API-Wrapper für. JavaScript

## Richten Sie Ihre Streaming-Ressourcen ein
<a name="setting-up-web-sdk-resources"></a>

Sie benötigen Stream-Ressourcen — eine Anwendung und eine Stream-Gruppe —, um einen Stream zu starten. Insbesondere müssen Sie über Folgendes verfügen:
+  Eine Anwendung im Status **Bereit**. 
+  Eine Stream-Gruppe im Status **Aktiv** mit verfügbarer Stream-Kapazität. 
+  Für das Streaming an anderen Orten als dem primären Standort muss die Anwendung die Replikation an diesen Speicherort abgeschlossen haben. 

 Informationen zum Einrichten einer Anwendung und einer Stream-Gruppe mithilfe der Amazon GameLift Streams-Konsole oder der Amazon GameLift Streams-CLI finden Sie unter [Bereiten Sie eine Anwendung in Amazon GameLift Streams vor](applications.md) und[Streaming mit einer Amazon GameLift Streams-Stream-Gruppe verwalten](stream-groups.md). Eine end-to-end exemplarische Vorgehensweise in der Amazon GameLift Streams-Konsole finden Sie alternativ unter. [Ihren ersten Stream in Amazon GameLift Streams starten](streaming-process.md) 

## Richten Sie einen Backend-Server ein
<a name="setting-up-web-sdk-backend"></a>

 Der Backend-Server ist für Aufgaben wie die Authentifizierung von Benutzern, die Konfiguration von Stream-Parametern und die Ausführung von Amazon GameLift Streams-API-Aufrufen im Namen von Endbenutzern verantwortlich. Lesen Sie den Beispielcode und die Amazon GameLift Streams Web SDK API-Referenz, um mehr über die Einrichtung zu erfahren. Sehen Sie sich insbesondere die Datei server.js im Amazon GameLift Streams Web SDK-Paket an. 

**Wichtig**  
 Dieser Code ist nur ein Beispielcode für Test- und Evaluierungszwecke und sollte nicht in einer Produktionskapazität verwendet werden. 

**Um den Beispiel-Backend-Dienst auszuführen**

1.  Öffnen Sie ein Terminal oder eine Befehlszeile und navigieren Sie zu dem Ordner`AmazonGameLiftStreamsWebSDK\GameLiftStreamsSampleGamePublisherService\`. 

1.  Führen Sie die folgenden Befehle aus: 

   ```
   npm install
   node server.js
   ```

 Wenn der Beispiel-Back-End-Dienst ausgeführt wird, können Endbenutzer über den Webclient eine Verbindung zu einem Stream herstellen. Testen Sie den Webclient im nächsten Schritt. 

## Starten Sie einen Webclient
<a name="setting-up-web-sdk-client"></a>

Die Web-Client-Anwendung ist dafür verantwortlich, Amazon GameLift Streams-Streams zu empfangen und zu dekodieren, an Endbenutzer zu streamen und die Webbrowser-Benutzeroberfläche bereitzustellen, damit Endbenutzer mit der Anwendung interagieren können. Lesen Sie den Beispielcode und die Amazon GameLift Streams Web SDK API-Referenz, um mehr darüber zu erfahren, wie Sie das JavaScript Amazon GameLift Streams Web SDK in Ihre eigene Web-Client-Anwendung integrieren können. Näheres dazu finden Sie `public/index.html` im Amazon GameLift Streams Web SDK-Paket. Sie können sich auch die Quelle der Webseite ansehen, wenn Sie einen Webclient in Ihrem Browser starten.

**Anmerkung**  
Die Windows-Laufzeit in Amazon GameLift Streams unterstützt Stream-Sitzungen über IPv4 oder IPv6. Linux- und Proton-Laufzeitumgebungen unterstützen jedoch nur Streaming Over IPv4.

**Um eine Web-Client-Anwendung zu starten**

1.  Öffnen Sie einen Webbrowser und navigieren Sie zu`http://localhost:port/`. Die Portnummer wird vom Backend-Server festgelegt. Standardmäßig ist dies der HTTP-Port 8000. 

1. Spielen Sie das Spiel oder verwenden Sie die Software.

   1. Um Eingaben, z. B. Ihre Maus, anzuhängen, wählen Sie **Eingabe anhängen**.

   1. Um das Spiel zu beenden, wählen Sie die **Esc-Taste**.

   1. Um den Serverprozess zu beenden, wählen Sie **Strg\$1C**.

## Bereinigen Sie die Streaming-Ressourcen
<a name="setting-up-web-sdk-cleanup"></a>

**Warnung**  
 Einer Stream-Gruppe fallen Kosten an, wenn ihr Streaming-Kapazität zugewiesen wurde, auch wenn diese Kapazität ungenutzt ist. Um unnötige Kosten zu vermeiden, skalieren Sie Ihre Stream-Gruppen auf die erforderliche Größe. Während der Entwicklung empfehlen wir, die ständig verfügbare Kapazität und die Zielkapazität im Leerlauf in Ihren Stream-Gruppen auf Null zu skalieren, wenn sie nicht verwendet werden. Weitere Informationen finden Sie unter [Skalieren Sie Stream-Gruppen auf eine Kapazität von Null](pricing.md#pricing-pause-stream-groups).

Nachdem Sie das Tutorial abgeschlossen haben und Ihre Anwendung nicht mehr streamen müssen, gehen Sie wie folgt vor, um Ihre Amazon GameLift Streams-Ressourcen zu bereinigen.

**Löschen einer Stream-Gruppe**

 Wenn Sie eine Stream-Gruppe löschen, arbeitet Amazon GameLift Streams daran, die gesamte Stream-Kapazität freizugeben. 

**Um eine Stream-Gruppe mit der Amazon GameLift Streams-Konsole zu löschen**

1.  Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die [Amazon GameLift Streams-Konsole](https://console.aws.amazon.com/gameliftstreams/). 

1.  Um eine Liste Ihrer vorhandenen Stream-Gruppen anzuzeigen, wählen Sie im Navigationsbereich **Stream-Gruppen** aus. 

1.  Wählen Sie den Namen der Stream-Gruppe aus, die Sie löschen möchten. 

1.  Wählen Sie auf der Detailseite der Stream-Gruppe die Option **Löschen** aus. 

1.  Bestätigen Sie im Dialogfeld „**Löschen**“ die Löschaktion. 

 Amazon GameLift Streams beginnt mit der Freigabe von Rechenressourcen und dem Löschen der Stream-Gruppe. Während dieser Zeit befindet sich die Stream-Gruppe im Status **Löschen**. Nachdem Amazon GameLift Streams die Stream-Gruppe gelöscht hat, können Sie sie nicht mehr abrufen. 

**Eine Anwendung löschen**

 Sie können eine Anwendung nur löschen, wenn sie die folgenden Bedingungen erfüllt: 
+  Die Anwendung hat den Status **Bereit** oder **Fehler**. 
+  Die Anwendung wird aktuell in keiner Stream-Sitzung gestreamt. Sie müssen warten, bis der Client die Stream-Sitzung beendet, oder die Amazon GameLift Streams-API aufrufen [TerminateStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_TerminateStreamSession.html), um den Stream zu beenden. 

 Wenn die Anwendung mit Stream-Gruppen verknüpft ist, müssen Sie die Verknüpfung mit allen zugehörigen Stream-Gruppen aufheben, bevor Sie sie löschen können. In der Konsole führt Sie ein Dialogfeld durch diesen Vorgang. 

**Um eine Anwendung mithilfe der Amazon GameLift Streams-Konsole zu löschen**

1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die [Amazon GameLift Streams-Konsole](https://console.aws.amazon.com/gameliftstreams/).

1. Wählen Sie in der Navigationsleiste **Anwendungen** aus, um eine Liste Ihrer vorhandenen Anwendungen anzuzeigen. Wählen Sie die Anwendung aus, die Sie löschen möchten. 

1. Wählen Sie auf der Detailseite der Anwendung die Option **Löschen** aus. 

1. Bestätigen **Sie im Dialogfeld Löschen** die Löschaktion. 

 Amazon GameLift Streams beginnt mit dem Löschen der Anwendung. Während dieser Zeit befindet sich die Anwendung im `Deleting` Status. Nachdem Amazon GameLift Streams die Anwendung gelöscht hat, können Sie sie nicht mehr abrufen. 

# Passen Sie das Erscheinungsbild des Streams an
<a name="sdk-stream-appearance"></a>

## Ladebildschirm
<a name="sdk-loading-screen"></a>

Wenn ein Kunde einen Webbrowser öffnet, um einen Stream anzusehen, beginnt der Webclient, eine Verbindung zur Amazon GameLift Streams-Streams-Sitzung herzustellen. Während die Stream-Sitzung geladen wird, können Sie auf dem Bildschirm des Kunden einen benutzerdefinierten Hintergrund und ein Logo anzeigen.

Der Amazon GameLift Streams Web SDK-Beispielclient in der `GameLiftStreamsSampleGamePublisherService/public/LoadingScreen/loadingscreen.js` Datei zeigt, wie Sie ein animiertes Logo in Ihrem Frontend-Webclient implementieren können. Der Standard-Ladebildschirm besteht aus 2 Bildern: Hintergrund und Vordergrund. Das Vordergrundbild ist in der Mitte positioniert und hat eine Pulsanimation. Die Animation wird nur abgespielt, während die Stream-Sitzung eine Verbindung herstellt.

**Um einen Ladebildschirm zu aktivieren**

1. Navigieren Sie im Amazon GameLift Streams Web SDK-Beispielclient zu dem `GameLiftStreamsSampleGamePublisherService/public/LoadingScreen/` Ordner.

1. Fügen Sie Ihre Hintergrund- und Vordergrundbilder mit den Standardnamen hinzu, `Background.png` und`LoadingLogo.png`. Wenn Sie sie umbenennen oder ein anderes Bildformat verwenden möchten, müssen Sie den Code in aktualisieren`GameLiftStreamsSampleGamePublisherService/public/loadingscreen.js`.

1. (Optional) Aktualisieren Sie den JavaScript Code unter`GameLiftStreamsSampleGamePublisherService/public/loadingscreen.js`, um verschiedene Animationen zu implementieren.

# Präferenz für das Gebietsschema
<a name="sdk-locale-support"></a>

 In Amazon GameLift Streams können Sie die Gebietsschemaeinstellungen pro Stream festlegen. Dies ist nützlich, wenn Ihre Anwendung standortspezifische Informationen wie Uhrzeit oder Währung vom Betriebssystem des Endbenutzers abruft. 

 Amazon GameLift Streams unterstützt die folgenden Sprachen: 


| Wert | Description | 
| --- | --- | 
|  `en_US`  |  US-Englisch (Standard)  | 
|  `ja_jp.UTF-8`  |  Japanisch  | 

 **Um die Gebietsschemaeinstellung zu ändern** 

 Wenn Sie [StartStreamSession](https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_StartStreamSession.html)mit der Amazon GameLift Streams-API aufrufen, fügen Sie `LANG=<language>` zu Ihrem hinzu`AdditionalEnvironmentVariables`. Da die Gebietsschemaeinstellung für jeden Benutzer einzigartig ist, legen Sie dies auf der Ebene der Stream-Sitzung fest. Wenn Sie dies nicht festlegen, verwendet der Stream standardmäßig US-Englisch. 

**Example Beispiel**  

```
aws gameliftstreams start-stream-session \
   --identifier arn:aws:gameliftstreams:us-west-2:123456789012:streamgroup/1AB2C3De4 \
   --protocol WebRTC \
   --signal-request "[webrtc-ice-offer json string]" \
   --user-id xnshijwh \            
   --additional-environment-variables '{"LANG": "ja_JP.UTF-8"}'
```

# Umgang mit Mausbewegungen
<a name="sdk-mouse-movement"></a>

Die Handhabung von Mausbewegungen ist entscheidend für die Bereitstellung reaktionsschneller und intuitiver Benutzererlebnisse in gestreamten Anwendungen. Amazon GameLift Streams optimiert automatisch die Übertragung von Mauseingaben auf der Grundlage des Cursorverhaltens Ihrer Anwendung und stellt so sicher, dass sich Mausbewegungen natürlich anfühlen, unabhängig davon, ob der Cursor versteckt oder sichtbar ist. Wenn Sie wissen, wie Amazon GameLift Streams Mausereignisse verarbeitet, können Sie Anwendungen entwickeln, die nahtlos mit dem Streaming-Dienst zusammenarbeiten und die bestmögliche Benutzererfahrung bieten.

## Eingabemodi für die Maus
<a name="sdk-mouse-input-modes"></a>

Amazon GameLift Streams verwendet zwei unterschiedliche Modi für die Übertragung von Mausereignissen an Ihre Anwendung und wählt automatisch den geeigneten Modus basierend auf der Cursorsichtbarkeit aus:

Relativer Modus  
Im relativen Modus werden Mausaktualisierungen als kleine, inkrementelle Abweichungen von der vorherigen Position übertragen. Dieser Modus ist ideal für Anwendungen, die eine präzise, kontinuierliche Verfolgung der Mausbewegungen erfordern, wie z. B. Ego-Shooter-Spiele (FPS) oder Benutzeroberflächen mit 3D-Ausrichtung. Amazon GameLift Streams verwendet den relativen Modus, wenn der Betriebssystem-Cursor versteckt oder vollständig transparent ist.

Absoluter Modus  
Im absoluten Modus wird die Position des Mauszeigers als exakte Bildschirmkoordinate übertragen. Dieser Modus eignet sich gut für Anwendungen, die auf eine präzise Cursorpositionierung angewiesen sind, wie z. B. point-and-click Spiele oder Benutzeroberflächen mit anklickbaren Elementen. Amazon GameLift Streams verwendet den absoluten Modus, wenn der Betriebssystem-Cursor sichtbar ist, auch wenn Ihre Anwendung ein benutzerdefiniertes Cursorbild anzeigt.

Diese automatische Auswahl gewährleistet eine optimale Leistung für verschiedene Anwendungstypen, ohne dass eine manuelle Konfiguration erforderlich ist.

## Zeigersperre
<a name="sdk-pointer-lock"></a>

Die Zeigersperre ist eine Web-API-Funktion, die den Mauszeiger innerhalb eines bestimmten Elements erfasst, den Cursor versteckt und verhindert, dass er den dafür vorgesehenen Bereich verlässt. Diese Funktion ist besonders nützlich für Spiele, bei denen die Maus zur Kamerasteuerung oder zum Zielen uneingeschränkt bewegt werden muss, ohne dass ein sichtbarer Cursor abgelenkt wird oder Fensterränder nur eingeschränkt erreicht werden können.

Amazon GameLift Streams bietet automatische Funktionen zum Sperren von Zeigern über die `autoPointerLock` Eigenschaft in der `InputConfiguration` Oberfläche des Web-SDK. Diese Funktion ist in die [requestPointerLock API](https://developer.mozilla.org/en-US/docs/Web/API/Element/requestPointerLock) integriert, um eine intuitive und kontextsensitive Mauserfassung zu ermöglichen.

### Automatisches Verhalten der Zeigersperre
<a name="sdk-pointer-lock-behavior"></a>

Amazon GameLift Streams aktiviert automatisch die Zeigersperre, wenn sich die Anwendung im Vollbildmodus befindet und der Remote-Cursor auf dem Stream-Host unsichtbar ist. Dieses Verhalten passt gut zu gängigen Mustern bei der Spieleentwicklung:
+ **FPS/TPS-Spiele und 3D-Orientierungssteuerung — Der Zeiger wird automatisch gesperrt und der Cursor wird ausgeblendet, sodass eine uneingeschränkte Kamerasteuerung gewährleistet ist, die für das FPS-Gameplay** unerlässlich ist.
+ **Point-and-click Spiele und UI-Steuerung** — Wenn in Spielen der Cursor für Menüinteraktionen oder Strategiespiele sichtbar ist, bleibt der Zeiger sichtbar und entsperrt, sodass die gewünschte Benutzererfahrung erhalten bleibt.

### Konfigurationsoptionen
<a name="sdk-pointer-lock-configuration"></a>

Die `autoPointerLock` Eigenschaft akzeptiert die folgenden Werte:

`true`  
Die Maus wird immer erfasst, wenn der Remote-Cursor unsichtbar ist.

`false`  
Die Maus wird nie erfasst, unabhängig von der Sichtbarkeit des Cursors.

`'fullscreen'` (Standard)  
Die Maus wird nur aufgenommen, wenn sich das Videoelement im Vollbildmodus befindet und der Remote-Cursor unsichtbar ist.

**Wichtig**  
`autoPointerLock`hat aufgrund von Plattformbeschränkungen keine Auswirkungen auf den Safari-Browser oder auf iOS-Plattformen.

## Bewährte Methoden
<a name="sdk-mouse-best-practices"></a>

Um eine optimale Maussteuerung in Ihren gestreamten Anwendungen zu gewährleisten:
+ **Streamen Sie immer im Vollbildmodus** — Ihre Anwendung sollte bereits im Vollbildmodus laufen, damit sie in unserem Service ordnungsgemäß funktioniert. Darüber hinaus empfehlen wir, die Browserunterstützung zu verwenden, um den Stream zu einem Vollbild-Element zu machen, um ein optimales Endbenutzererlebnis zu erzielen. Auf diese Weise können Probleme wie Ausrichtungsprobleme zwischen dem Systemcursor und dem Software-Cursor vermieden werden.
+ **Den Cursor bei Relativbewegungen ausblenden** — Wenn Ihre Anwendung relative Mausbewegungen erwartet (z. B. bei Kamerasteuerungen im FPS-Stil oder Interaktionen auf Ziehbasis), blenden Sie den Betriebssystem-Cursor während dieser Interaktionen aus. In einigen Szenarien müssen Sie den Cursor bei gedrückter Maus möglicherweise ausblenden und bei gedrückter Maus wieder einblenden.
+ **Den Cursor für absolute Positionierung anzeigen** — Wenn Ihre Anwendung eine präzise Cursorpositionierung für Benutzeroberflächeninteraktionen benötigt, stellen Sie sicher, dass der Betriebssystem-Cursor sichtbar bleibt, um den absoluten Koordinatenmodus zu aktivieren.
+ **Testen Sie verschiedene Eingabeszenarien** — Stellen Sie sicher, dass Ihre Anwendung sowohl den relativen als auch den absoluten Mausmodus korrekt verarbeitet, da Amazon GameLift Streams je nach Änderung der Cursorsichtbarkeit zwischen den Modi wechseln kann.
+ **Testen Sie verschiedene Fenstermodi** — Testen Sie gegebenenfalls die Maussteuerung Ihrer Anwendung sowohl im Fenster- als auch im Vollbildmodus. Ermitteln Sie, welche `autoPointerLock` Einstellung für Ihre Eingabekonfiguration am besten geeignet ist.

# Datenkanalkommunikation zwischen einer Anwendung und einem Webclient
<a name="data-channels"></a>

 Datenkanäle ermöglichen Ihnen die sichere Kommunikation beliebiger Nachrichten zwischen Ihrer Amazon GameLift Streams-Anwendung und dem Webclient (dem JavaScript Code, der im Webbrowser des Endbenutzers ausgeführt wird). Auf diese Weise können Endbenutzer über den Webbrowser, in dem sie den Stream ansehen, mit der Anwendung interagieren, die Amazon GameLift Streams streamt. 

Hier sind einige Beispiele für Anwendungsfälle von Datenkanälen in Amazon GameLift Streams:
+ Benutzer können die Anwendung URLs in ihrem lokalen Browser öffnen.
+ Benutzer können Inhalte in der Zwischenablage hin und her an die Anwendung übergeben.
+ Benutzer können Inhalte von ihrem lokalen Computer in die Anwendung hochladen.
+ Entwickler können die Benutzeroberfläche im Browser implementieren, der Befehle an die Anwendung sendet.
+ Benutzer können Schemas übergeben, um die Anzeige von Visualisierungsebenen zu steuern.

## Features
<a name="data-channels-features"></a>

**Größenbeschränkungen für Nachrichten**  
Das Amazon GameLift Streams Web SDK legt eine maximale Größenbeschränkung von 64 KB (65536 Byte) pro Nachricht fest. Dadurch wird sichergestellt, dass die Größenbeschränkungen für Nachrichten mit den meisten Browsern kompatibel sind und dass die Kommunikation nur geringe Auswirkungen auf die Gesamtbandbreite des Streams hat.

**Metriken**  
 Metriken zu Ihrer Datenkanalnutzung werden an Ihr AWS-Konto gesendet, wenn eine Stream-Sitzung endet. Weitere Informationen finden Sie [Datenkanäle](monitoring-cloudwatch.md#monitoring-data-channels) im Abschnitt *Amazon GameLift Streams überwachen*. 

## Datenkanäle verwenden
<a name="data-channels-using"></a>

Das Amazon GameLift Streams Web SDK bietet die `sendApplicationMessage` Funktion, die eine Nachricht als Byte-Array an die Anwendung sendet. Die Nachricht wird von einer Callback-Funktion verarbeitet, `clientConnection.applicationMessage` die Sie definieren.

Wenn der Client Nachrichten sendet, bevor die Anwendung eine Verbindung zum Datenkanalport herstellt, werden die Nachrichten in die Warteschlange gestellt. Wenn die Anwendung dann eine Verbindung herstellt, empfängt sie die Nachrichten. Wenn die Anwendung jedoch Nachrichten sendet, bevor der Client eine Verbindung zum Datenkanalport herstellt, gehen die Nachrichten verloren. Die Anwendung muss den Verbindungsstatus der Clients überprüfen, bevor sie eine Nachricht sendet.

## Auf der Client-Seite
<a name="data-channels-using-client"></a>

Schreiben Sie den folgenden Code in Ihre Webclient-Anwendung.

1.  Definieren Sie die Callback-Funktion, um eingehende Nachrichten von der Anwendung zu empfangen. 

   ```
   function streamApplicationMessageCallback(message) {
       console.log('Received ' + message.length + ' bytes of message from 
       Application');
   }
   ```

1.  Stellen Sie `clientConnection.applicationMessage` Ihre Callback-Funktion ein. 

   ```
   clientConnection: {
       connectionState: streamConnectionStateCallback,
       channelError: streamChannelErrorCallback,
       serverDisconnect: streamServerDisconnectCallback,
       applicationMessage: streamApplicationMessageCallback,
   }
   ```

1.  Rufen Sie die `GameLiftStreams.sendApplicationMessage` Funktion auf, um Nachrichten an Ihre Anwendung zu senden. Sie können dies jederzeit aufrufen, solange die Stream-Sitzung aktiv ist und die Eingabe angehängt ist. 

Sehen Sie sich als Beispiel den Amazon GameLift Streams Web SDK-Beispielclient an, der zeigt, wie Sie einen einfachen Datenkanal auf der Client-Seite einrichten.

## Auf der Anwendungsseite
<a name="data-channels-using-application"></a>

Schreiben Sie die folgende Logik in Ihre Anwendung.

### Schritt 1. Connect zum Datenkanalport her
<a name="data-channels-using-application-1"></a>

Wenn Ihre Anwendung gestartet wird, stellen Sie eine Verbindung zum Port `40712` on her`localhost`. Ihre Anwendung sollte diese Verbindung während der gesamten Ausführungsdauer aufrechterhalten. Wenn die Anwendung die Verbindung schließt, kann sie nicht erneut geöffnet werden.

### Schritt 2. Achte auf Ereignisse
<a name="data-channels-using-application-2"></a>

Ein Ereignis beginnt mit einem Header fester Größe, gefolgt von zugehörigen Daten variabler Länge. Wenn Ihre Anwendung ein Ereignis empfängt, analysieren Sie das Ereignis, um die Informationen abzurufen.

**Ereignisformat**
+ **Header**: Ein 4-Byte-Header im Formular `abcc`
  +  `a`: Client-ID-Byte. Dies identifiziert eine bestimmte Client-Verbindung im Fall mehrerer Verbindungen (aufgrund von Verbindungsabbruch und Wiederverbindung).
  +  `b`: Ereignistyp Byte. `0`- der Client hat eine Verbindung hergestellt, `1` - der Client hat die Verbindung getrennt, `2` - eine Nachricht wurde vom Client gesendet. Andere Ereignistypen werden möglicherweise mit future Amazon GameLift Streams-Serviceupdates empfangen und sollten ignoriert werden.
  +  `cc`: Länge der zugehörigen Ereignisdaten. Dies wird als 2 Byte mit Big-Endian-Reihenfolge dargestellt (das erste Byte ist das signifikanteste). Wenn der Ereignistyp 2 ist, stellen die Ereignisdaten den Nachrichteninhalt des Clients dar.
+ **Daten**: Die verbleibenden Byte enthalten die Ereignisdaten, z. B. eine Client-Nachricht. Die Länge der Daten wird `cc` im Header durch angegeben.

**Um auf Ereignisse zu warten**

1. Lesen Sie die vier Header-Bytes, um die Client-ID, den Ereignistyp und die Länge der Ereignisdaten abzurufen.

1. Lesen Sie die Ereignisdaten variabler Länge unabhängig von der Client-ID und dem Ereignistyp entsprechend der im Header beschriebenen Länge. Es ist wichtig, die Daten bedingungslos zu lesen, damit die Ereignisdaten niemals im Puffer verbleiben, wo sie mit dem nächsten Event-Header verwechselt werden könnten. Machen Sie keine Annahmen über die Länge der Daten, die auf Ereignistypen basieren.

1. Ergreifen Sie je nach Ereignistyp die entsprechenden Maßnahmen, sofern diese von Ihrer Anwendung erkannt werden. Diese Aktion kann das Protokollieren einer eingehenden Verbindung oder Verbindungsunterbrechung oder das Analysieren der Client-Nachricht und das Auslösen der Anwendungslogik umfassen.

### Schritt 3. Nachrichten an den Client übertragen
<a name="data-channels-using-application-3"></a>

Die Anwendung sollte Nachrichten mit demselben Vier-Byte-Header-Format übertragen, das von eingehenden Ereignissen verwendet wird.

**Um eine Nachricht an den Client zu übertragen**

1. Schreiben Sie den Header mit den folgenden Eigenschaften:

   1. `a`: Client-ID-Byte. Wenn Ihre Nachricht als Antwort auf eine Client-Nachricht gesendet wird, sollte sie dieselbe Client-ID wie die eingehende Client-Nachricht wiederverwenden, um zu verhindern, dass Racebedingungen auftreten, wie z. B. die Zustellung einer Antwort von einer alten Client-Verbindung an einen neu verbundenen Client. Wenn Ihre Anwendung eine unaufgeforderte Nachricht an den Client sendet, sollte sie die Client-ID so einstellen, dass sie dem letzten Ereignis „Client-Verbindung“ entspricht (Ereignistyp 0).

   1. `b`: Der Ereignistyp ausgehender Nachrichten muss immer 2 sein. Der Client ignoriert Nachrichten mit anderen Ereignistypen.

   1. `cc`: Länge der Nachricht in Byte.

1. Schreiben Sie die Nachrichten-Bytes.

Die Nachricht wird an den angegebenen Client zugestellt, sofern der Client die Verbindung nicht unterbricht. Wenn ein Client, dessen Verbindung unterbrochen wurde, erneut eine Verbindung herstellt, wird über ein Ereignis, bei dem die Verbindung zum Client hergestellt wurde, eine neue Client-ID zugewiesen. Alle nicht zugestellten Nachrichten für die alte Client-ID werden verworfen.

**Example**  
Der folgende Pseudocode demonstriert die Logik für die Kommunikation von Nachrichten auf der Anwendungsseite. Ein vollständiges Beispiel für die Verwendung von Winsock finden Sie unter [Complete Winsock Client Code in der Windows Sockets 2-Dokumentation](https://learn.microsoft.com/en-us/windows/win32/winsock/complete-client-code).  

```
connection = connect_to_tcp_socket("localhost:40712")
loop:
    while has_pending_bytes(connection):
        client_id = read_unsigned_byte(connection)
        event_type = read_unsigned_byte(connection)
        event_length = 256 * read_unsigned_byte(connection)
        event_length = event_length + read_unsigned_byte(connection)
        event_data = read_raw_bytes(connection, event_length)
        if message_type == 0:
            app_process_client_connected(client_id)
        else if message_type == 1:
            app_process_client_disconnected(client_id)
        else if message_type == 2:
            app_process_client_message(client_id, event_data)
        else:
            log("ignoring unrecognized event type")
    while app_has_outgoing_messages():
        target_client_id, message_bytes = app_next_outgoing_message()
        message_length = length(message_bytes)
        write_unsigned_byte(connection, target_client_id)
        write_unsigned_byte(connection, 2)
        write_unsigned_byte(connection, message_length / 256)
        write_unsigned_byte(connection, message_length mod 256)
        write_raw_bytes(connection, message_bytes)
```