

# Automatische IVS-Aufzeichnung in Amazon S3 \| Streaming mit niedriger Latenz
<a name="record-to-s3"></a>

In diesem Abschnitt finden Sie Informationen zum Feature „Automatische Aufnahme in S3“ von on Amazon-IVS-Streaming mit niedriger Latenz. Wir besprechen die Datenspeicherung für aufgenommene Amazon-IVS-Streams. Wir erklären den Speicherinhalt und das Metadatendateischema. Wir besprechen auch die Wiedergabe Ihrer aufgenommenen Inhalte.


| Details dazu … | Siehe ... | 
| --- | --- | 
| Einrichten und Stoppen der Videoaufnahme |  [Erstellen eines Kanals](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/getting-started-create-channel.html) in *Erste Schritte mit Amazon IVS* | 
| Die -API | [IVS-API-Referenz](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/Welcome.html) | 
| Kosten |  [Amazon-IVS-Kosten](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/costs.html) | 

## S3-Präfix
<a name="r2s3-prefix"></a>

Das S3-Präfix ist eine eindeutige Verzeichnisstruktur für jeden aufgezeichneten Livestream. Alle Medien- und Metadatendateien für den Livestream werden in diesem Verzeichnis geschrieben. Bei Kanälen mit aktivierter Aufzeichnung wird das S3-Präfix beim Starten einer Live-Sitzung generiert und am Anfang und Ende einer Aufzeichnung im CloudWatch Ereignis bereitgestellt.

Das S3-Präfix hat das folgende Format:

```
/ivs/v1/<aws_account_id>/<channel_id>/<year>/<month>/<day>/<hours>/<minutes>/<recording_id>
```

Wobei Folgendes gilt:
+ `aws_account_id` ist die ID Ihres AWS Kontos (generiert, wenn Sie ein AWS-Konto erstellt haben), aus dem der Kanal erstellt wird.
+ `channel_id` ist der Ressourcen-ID-Teil des Kanal-ARN (der letzte Teil des Amazon-Ressourcennamens). Siehe ARN in der [Glossar](ivs-glossary.md).
+ `<year>/<month>/<day>/<hours>/<minutes>` ist ein UTC-Zeitstempel, wann die Aufnahme gestartet wird.
+ `recording_id` ist eine eindeutige ID, die für jede Aufzeichnungssitzung generiert wird.

Beispiel:

```
ivs/v1/123456789012/AsXego4U6tnj/2020/6/23/20/12/j8Z9O91ndcVs
```

## Inhalte der Aufnahme
<a name="r2s3-contents"></a>

Beim Start der Aufzeichnung werden Videosegmente und Metadatendateien in den S3-Bucket geschrieben, der für den Kanal konfiguriert ist. Diese Inhalte sind für die Nachbearbeitung oder Wiedergabe als On-Demand-Video verfügbar.

Beachten Sie, dass es nach dem Start eines Livestreams und der Ausgabe des Recording Start EventBridge-Ereignisses etwas Zeit dauert, bis die Manifestdateien und Videosegmente geschrieben werden. Es wird empfohlen, aufgezeichnete Streams erst wiederzugeben oder zu verarbeiten, nachdem das Ereignis Aufzeichnungsende gesendet wurde. (Siehe [Verwenden von Amazon EventBridge mit IVS](eventbridge.md).)

Im Folgenden finden Sie eine Beispielverzeichnisstruktur und den Inhalt einer Aufzeichnung einer Live-Amazon IVS-Sitzung:

```
ivs/v1/123456789012/AsXego4U6tnj/2020/6/23/20/12/j8Z9O91ndcVs/
   events
      recording-started.json
      recording-ended.json
   media
      hls
      thumbnails
```

Der Ordner `events` enthält die Metadatendateien, die dem Aufzeichnungsereignis entsprechen. JSON-Metadatendateien werden generiert, wenn die Aufzeichnung gestartet, erfolgreich beendet oder mit Fehlern beendet wird:
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

Ein gegebener `events`-Ordner enthält `recording-started.json` und entweder `recording-ended.json` oder `recording-failed.json`.

Diese enthalten Metadaten, die sich auf die aufgezeichnete Sitzung und ihre Ausgabeformate beziehen. JSON-Details sind unten angegeben.

Der `media`-Ordner enthält alle unterstützten Medieninhalte in zwei Unterordnern:
+ `hls` enthält alle Medien und Manifestdateien, die während der Live-Sitzung generiert wurden und mit dem Amazon IVS-Player wiedergegeben werden können. In diesem Ordner gibt es zwei Arten von HLS-Manifesten, das Standard-Mastermanifest `master.m3u8` und das Manifest `byte-range-multivariant.m3u8` mit aktiviertem Bytebereich. Daher enthält jeder Wiedergabeordner sowohl eine `playlist.m3u8`- als auch eine `byte-range-variant.m3u8`-Datei. (Siehe [Playlisten im Bytebereich](#r2s3-byte-range-playlists) unten.)
+ `thumbnails` enthält Miniaturbilder, die während der Live-Sitzung generiert wurden. Miniaturansichten werden erstellt und jede Minute in den Bucket geschrieben. (Um dieses Verhalten zu ändern, müssen Sie die Eigenschaft `thumbnailConfiguration` für eine Aufzeichnungskonfiguration außer Kraft setzen.)

**Wichtig:** Die Inhalte im Ordner `media` werden dynamisch generiert und durch die Eigenschaften der ersten empfangenen Videosegmente bestimmt; der Ordnerinhalt stellt möglicherweise nicht die endgültigen Merkmale dar (z. B. die Formatvariantenqualität). *Treffen Sie keine Annahmen zum statischen Pfad.* Um die verfügbaren HLS-Formatvarianten und deren Pfad zu ermitteln, verwenden Sie die im Folgenden beschriebenen JSON-Metadatendateien.

## Playlisten im Bytebereich
<a name="r2s3-byte-range-playlists"></a>

Das Feature für die automatische Aufzeichnung in S3 unterstützt zusätzlich zu den Standard-HLS-Playlisten auch die Erstellung von [Playlisten im Bytebereich](https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-23#section-4.3.2.2). Playlisten im Bytebereich entsprechen Version 4 der HLS-Spezifikation. Dies ermöglicht ein präziseres Clipping von Inhalten: In einer Playlist im Bytebereich verweist jedes Segment in einer Wiedergabeindexdatei auf einen Teilbereich von Bytes eines Videoteils und bietet damit eine größere Granularität als die standardmäßige 10-Sekunden-Mediendateigröße. Bei einer Playlist mit Bytebereich entspricht die Segmentdauer dem für den Stream konfigurierten Keyframe-Intervall.

## Miniaturansichten
<a name="r2s3-thumbnails"></a>

Mit der Eigenschaft `thumbnailConfiguration` einer Aufzeichnungskonfiguration können Sie die Aufzeichnung von Miniaturansichten für eine Live-Sitzung aktivieren oder deaktivieren und das Intervall ändern, in dem Miniaturansichten für die Live-Sitzung erzeugt werden. Die Intervalle für Miniaturansichten können zwischen 1 Sekunde und 60 Sekunden liegen. Standardmäßig ist die Miniaturbildaufnahme in einem Intervall von 60 Sekunden aktiviert. Ausführliche Informationen finden Sie in der [API-Referenz zu Amazon-IVS-Streaming mit niedriger Latenz](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/Welcome.html).

Die Thumbnail-Konfiguration kann auch das`storage`-Feld (`SEQUENTIAL` und/oder `LATEST`) und eine Auflösung (`LOWEST_RESOLUTION`, `SD`, `HD` oder `FULL_HD`) beinhalten. Im Folgenden finden Sie die Auflösungen für jede Option: 

160 <= `LOWEST_RESOLUTION` <= 360

360 <= `SD` <= 480

480 <= `HD` <= 720

720 <= `FULL_HD` <= 1080

Wenn `resolution` für einen Stream, der Multitrack-Videoeingang verwendet, nicht festgelegt wird, werden Miniaturansichten aller Wiedergaben aufgezeichnet. Informationen zu Multitrack finden Sie unter [Multitrack-Video](multitrack-video.md).

## Fragmentierte Streams zusammenführen
<a name="r2s3-merge-fragmented-streams"></a>

Mit der `recordingReconnectWindowSeconds`-Eigenschaft einer Aufzeichnungskonfiguration können Sie ein Zeitfenster (in Sekunden) angeben, in dem Amazon IVS versucht, mit demselben S3-Präfix wie der vorherige Stream aufzuzeichnen, wenn Ihr Stream unterbrochen wird und ein neuer Stream gestartet wird. Mit anderen Worten, wenn eine Sendung die Verbindung trennt und dann innerhalb des angegebenen Intervalls erneut verbindet, werden die mehreren Streams als eine einzige Sendung betrachtet und zusammengeführt.

**Ereignisse zur Änderung des IVS-Aufzeichnungsstatus in Amazon EventBridge:** Die Aufnahme von Endereignissen und *recording-ended*-JSON-Metadatendateien werden um mindestens `recordingReconnectWindowSeconds` verzögert, da Amazon IVS darauf wartet, dass kein neuer Stream gestartet wird.

Weitere Informationen zur Einrichtung der Funktionalität zur Zusammenführung von Streams finden Sie unter [Schritt 4: Erstellen eines Kanals mit einer optionalen Aufzeichnung](getting-started-create-channel.md) in *Erste Schritte mit Amazon IVS*.

### Berechtigung
<a name="r2s3-merge-fragmented-streams-eligibility"></a>

Damit mehrere Streams mit demselben S3-Präfix aufgezeichnet werden können, müssen bestimmte Bedingungen für alle Streams erfüllt sein: 
+ Videobreite und -höhe müssen gleich sein.
+ Die Bildrate muss gleich sein.
+ Die Bitratendifferenz der nachfolgenden Streams muss kleiner oder gleich 50 % der Bitrate des ursprünglichen Streams sein.
+ Video- und Audiocodecs müssen identisch sein.

**Hinweise:**
+ Maximal 20 Streams werden zusammengeführt, danach wird ein neues S3-Präfix erstellt.
+ Nach 48 Stunden wird ein neues S3-Präfix erstellt. Wenn die erste Sendung beispielsweise 48 Stunden dauert und eine weitere Sendung innerhalb des `recordingReconnectWindowSeconds`-Intervalls gestartet wird, wird die nächste Sendung *nicht* mit dem ersten S3-Präfix zusammengeführt.
+ Schnelle Wiederverbindungen können dazu führen, dass ein neuer Broadcast gestartet wird, bevor der vorherige Broadcast mit dem Schreiben in S3 fertig ist. In diesem Fall wird der neue Broadcast *nicht* mit dem vorherigen S3-Präfix zusammengeführt. (Normalerweise wird das Schreiben in S3 innerhalb von 10 Sekunden nach Ende eines Broadcasts abgeschlossen.) Schnelle Wiederverbindungen können in verschiedenen Szenarien auftreten, darunter: 1) schnelle Hinter-/Vordergrundübergänge in Apps, 2) wenn die Stream-Übernahme bei Nutzung der automatischen Wiederverbindung der IVS-Broadcast-SDKs für Mobilgeräte nicht möglich ist und 3) wenn durch den Aufruf von [StopStream](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/API_StopStream.html) eine automatische Wiederverbindung über die Streaming-Client-Software ausgelöst wird.

### Bekanntes Problem
<a name="r2s3-merge-fragmented-streams-known-issue"></a>

Wenn `recordingReconnectWindowSeconds` aktiviert ist und das Web Broadcast SDK verwendet wird, funktioniert die Aufzeichnung mit demselben S3-Präfix möglicherweise nicht, da das Web Broadcast SDK Bitraten und Qualitäten dynamisch ändert.

## JSON-Metadatendateien
<a name="r2s3-json-metadata"></a>

Wenn ein Ereignis Aufzeichnungsstatusänderung eintritt, wird eine entsprechende Amazon CloudWatch Metrik generiert und eine Metadatendatei innerhalb des S3-Präfix geschrieben. (Siehe [Überwachen von Amazon-IVS-Streaming mit niedriger Latenz](stream-health.md).)

Diese Metadaten weisen das JSON-Format auf. Sie umfasst die folgenden Informationen:


| Feld | Typ | Erforderlich | Beschreibung | 
| --- | --- | --- | --- | 
| `channel_arn` | Zeichenfolge | Ja | ARN des Channels, der den Livestream sendet. | 
| `media` | Objekt | Ja | Objekt, das die Aufzählungsobjekte von Medieninhalten enthält, die für diese Aufzeichnung verfügbar sind. Zulässige Werte: `"hls"`, `"thumbnails"`. | 
| [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html) | object | Ja | Aufzählungsfeld, das die Ausgabe des Apple HLS-Formats beschreibt. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | Ganzzahl | Bedingt | Dauer des aufgezeichneten HLS-Inhalts in Millisekunden. Dies ist nur verfügbar, wenn `recording_status` `"RECORDING_ENDED"` oder `"RECORDING_ENDED_WITH_FAILURE"` ist. Wenn ein Fehler aufgetreten ist, bevor eine Aufzeichnung durchgeführt wurde, ist dies 0. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | Zeichenfolge | Ja | Relativer Pfad vom S3-Präfix, in dem HLS-Inhalt gespeichert wird. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | Zeichenfolge | Ja | Name der HLS-Master-Wiedergabeliste. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | Zeichenfolge | Ja | Name der multivariablen HLS-Playlist im Bytebereich. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | object | Ja | Array von Formatvarianten (HLS-Variante) von Metadatenobjekten. Es ist immer mindestens eine Formatvariante vorhanden. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | Zeichenfolge | Ja | Relativer Pfad vom S3-Präfix, in dem HLS-Inhalt für diese Formatvariante gespeichert wird. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | Zeichenfolge | Ja | Name der Medienwiedergabelistdatei für diese Formatvariante. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | Zeichenfolge | Ja | Name der Playlist im Bytebereich für diese Formvariante. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Bedingt | Pixelauflösungshöhe des codierten Videos. Diese Option ist nur verfügbar, wenn die Formatvariante eine Videospur enthält. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Bedingt | Pixelauflösungsbreite des codierten Videos. Diese Option ist nur verfügbar, wenn die Formatvariante eine Videospur enthält. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | object | Bedingt | Aufzählungsfeld, das die Ausgabe von Miniaturansichten beschreibt. Dies ist nur verfügbar, wenn der `recordingMode` der Miniaturaufzeichnungskonfiguration `INTERVAL` ist. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | Zeichenfolge | Bedingt | Relativer Pfad vom S3-Präfix, in dem Miniaturansicht-Inhalt gespeichert wird. Dies ist nur verfügbar, wenn der `recordingMode` der Miniaturaufzeichnungskonfiguration `INTERVAL` ist. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Ja | Die Höhe des Vorschaubilds. Standard: Auflösung der Quellwiedergabeversion. Dieser Wert wird durch Benutzereingaben in der entsprechenden Aufzeichnungskonfiguration beeinflusst, insbesondere durch den `thumbnailConfiguration.resolution `-Wert. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Ja | Die Breite des Vorschaubilds. Standard: Auflösung der Quellwiedergabeversion. Dieser Wert wird durch Benutzereingaben in der entsprechenden Aufzeichnungskonfiguration beeinflusst, insbesondere durch den `thumbnailConfiguration.resolution`-Wert. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | object | Ja | Aufzählungsfeld, das die Ausgabe von Miniaturansichten beschreibt. Diese Funktion ist nur verfügbar, wenn die Konfiguration der Miniaturansicht `storage` auch `LATEST` enthält. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Ja | Die Höhe des Vorschaubilds. Standard wird die Auflösung der Quell-Wiedergabeversion sein. Dieser Wert wird durch Benutzereingaben in der entsprechenden Aufzeichnungskonfiguration beeinflusst, insbesondere durch den `thumbnailConfiguration.resolution`-Wert. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Ja | Die Breite des Vorschaubilds. Standard wird die Auflösung der Quell-Wiedergabeversion sein. Dieser Wert wird durch Benutzereingaben in der entsprechenden Aufzeichnungskonfiguration beeinflusst, insbesondere durch den `thumbnailConfiguration.resolution`-Wert. | 
| `recording_ended_at` | Zeichenfolge | Bedingt | RFC 3339 UTC-Zeitstempel, wenn die Aufnahme beendet wurde. Dies ist nur verfügbar, wenn `recording_status` `"RECORDING_ENDED"` oder `"RECORDING_ENDED_WITH_FAILURE"` ist.<br />`recording_started_at` und `recording_ended_at` sind Zeitstempel, wenn diese Ereignisse generiert werden, und stimmen möglicherweise nicht genau mit den Zeitstempeln des HLS-Videosegments überein. Um die Dauer einer Aufnahme genau zu bestimmen, verwenden Sie das Feld `duration_ms`. | 
| `recording_started_at` | Zeichenfolge | Ja | RFC 3339 UTC-Zeitstempel, wenn die Aufnahme gestartet wurde.<br />Beachten Sie den oben stehenden Hinweis zu `recording_ended_at`. | 
| `recording_status` | Zeichenfolge | Ja | Aufzeichnungsstatus. Zulässige Werte: `"RECORDING_STARTED"`, `"RECORDING_ENDED"`, `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `recording_status_message` | Zeichenfolge | Bedingt | Beschreibende Informationen über den Status. Dies ist nur verfügbar, wenn `recording_status` `"RECORDING_ENDED"` oder `"RECORDING_ENDED_WITH_FAILURE"` ist. | 
| `version` | Zeichenfolge | Ja | Die Version des Metadatenschemas. | 

### Beispiel: recording\_started.json
<a name="r2s3-json-metadata-recording-started"></a>

```
{
   "version": "v1",
   "channel_arn": "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj",
   "recording_started_at": "2020-06-12T12:53:26Z",
   "recording_status : "RECORDING_STARTED",
   "media": {
      "hls": {
         "path": "media/hls",
         "playlist": "master.m3u8",
         "byte_range_playlist": "byte-range-multivariant.m3u8",
         "renditions": [
            {
               "path": "480p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 480,
               "resolution_width": 852
            },
            {
               "path": "360p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 360,
               "resolution_width": 640
            },
            {
               "path": "160p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 160,
               "resolution_width": 284
            },
            {
               "path": "720p60",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 720,
               "resolution_width": 1280
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "resolution_height": 480,
         "resolution_width": 852
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail/thumb.jpg",
         "resolution_height": 480,
         "resolution_width": 852
      }
   }
}
```

### Beispiel: recording\_ended.json
<a name="r2s3-json-metadata-recording-ended"></a>

```
{
   "version": "v1",
   "channel_arn": "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj",
   "recording_ended_at": "2020-06-14T12:53:20Z",
   "recording_started_at": "2020-06-12T12:53:26Z",
   "recording_status": "RECORDING_ENDED",
   "media": {
      "hls": {
         "duration_ms": 172794489,
         "path": "media/hls",
         "playlist": "master.m3u8",
         "byte_range_playlist": "byte-range-multivariant.m3u8",
         "renditions": [
            {
               "path": "480p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 480,
               "resolution_width": 852
            },
            {
               "path": "360p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 360,
               "resolution_width": 640
            },
            {
               "path": "160p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 160,
               "resolution_width": 284
            },
            {
               "path": "720p60",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 720,
               "resolution_width": 1280
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "resolution_height": 480,
         "resolution_width": 852
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail/thumb.jpg",
         "resolution_height": 480,
         "resolution_width": 852
      }
   }
}
```

### Beispiel: recording\_failed.json
<a name="r2s3-json-metadata-recording-failed"></a>

```
{
   "version": "v1",
   "channel_arn": "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj",
   "recording_ended_at": "2020-06-14T12:53:20Z",
   "recording_started_at": "2020-06-12T12:53:26Z",
   "recording_status": "RECORDING_ENDED_WITH_FAILURE",
   "recording_status_message": "InternalServerException",
   "media": {
      "hls": {
         "duration_ms": 172794489,
         "path": "media/hls",
         "playlist": "master.m3u8",
         "renditions": [
            {
               "path": "480p30",
               "playlist": "playlist.m3u8",
               "resolution_height": 480,
               "resolution_width": 852
            },
            {
               "path": "720p60",
               "playlist": "playlist.m3u8",
               "resolution_height": 720,
               "resolution_width": 1280
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "resolution_height": 480,
         "resolution_width": 852
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail/thumb.jpg",
         "resolution_height": 480,
         "resolution_width": 852
      }
   }
}
```

## Erkennen der Formatvarianten einer Aufzeichnung
<a name="r2s3-recording-renditions"></a>

Wenn Sie Inhalte auf einen Amazon IVS-Kanal streamen, verwendet Auto-Record-to-s3 das Quellvideo, um mehrere Formatvarianten zu generieren. Durch die Verwendung von [Adaptive Bitrate Streaming](player.md) (ABR) schaltet der Amazon IVS Player die Wiedergabedaten (Bitraten) automatisch nach Bedarf um zur Optimierung der Wiedergabe für unterschiedliche Netzwerkbedingungen.

Jede beim Livestreaming generierte Formatvariante wird in einem eindeutigen Pfad innerhalb des S3-Aufzeichnungspräfix aufgezeichnet. Die Namen der Auflösungsdetails, des Pfads und der Wiedergabeliste werden während des Start- und Stoppens der Aufzeichnung in einer [JSON-Metadatendatei](#r2s3-json-metadata) gespeichert. Wenn der Wert `renditionSelection` der Aufnahmekonfiguration `ALL` ist, werden alle Wiedergabeversionen für die Aufnahme ausgewählt. Wenn `renditionSelection` `CUSTOM` ist, muss der Benutzer eine oder mehrere der folgenden Optionen auswählen: `LOWEST_RESOLUTION`, `SD`, `HD` und FULL\_HD. Im Folgenden finden Sie die Auflösungen für jede Option:

160 <= `LOWEST_RESOLUTION` <= 360

360 <= `SD` <= 480

480 <= `HD` <= 720

720 <= `FULL_HD` <= 1080

**Wichtig:** Machen Sie *keine* Annahmen über den statischen Wiedergabepfad oder die Liste der generierten Wiedergabeversionen, da diese Änderungen unterliegen können. Gehen Sie *nicht* davon aus, dass eine bestimmte Wiedergabe immer für eine Amazon IVS-Aufnahme verfügbar ist. Informationen zum Ermitteln der verfügbaren Formatvarianten, Auflösungen und Pfade finden Sie in den Metadatendateien.

Die `event/recording_started.json`- oder `event/recording_ended.json`-Datei innerhalb des Aufnahme-Präfixes enthält die Pfade und Namen der Mediendateien innerhalb des Aufnahme-Präfixes. Alle `path`-Elemente relativ zum vorherigen Pfad in der Hierarchie sind. Elemente unter `media > hls` beschreiben HLS-Assets, wobei Name und Pfad der Master-Wiedergabeliste auf dieser Ebene definiert sind.

Hier ist ein Python-Code-Snippet, das zeigt, wie ein Master-Wiedergabelisten-Pfad mit dem S3-Aufzeichnungspräfix und der Metadatendatei generiert wird:

```
def get_master_playlist(metadata_json, s3_recording_prefix):
   return s3_recording_prefix + '/' + metadata_json['media']['hls']['path'] + '/' + metadata_json['media']['hls']['playlist']
```

Elemente unter `media > hls > renditions` beschreiben die Liste der aufgezeichneten Formatvarianten. Die `resolution_height`- und `resolution_width`-Eigenschaften können verwendet werden, um die Videoauflösung zu identifizieren. Die `path`- und `playlist`-Elemente können verwendet werden, um den Wiedergabelisten-Pfad abzuleiten. Verwenden Sie diese Felder, um zu bestimmen, welche Formatvariante für die Nachbearbeitung verwendet werden soll.

Um die höchste verfügbare Wiedergabeliste für eine Aufnahme zu ermitteln, können Sie EventBridge Ereignisse „IVS Recording State Change“ abonnieren. (Siehe [Verwenden von Amazon EventBridge mit IVS](eventbridge.md).) Im Folgenden finden Sie ein Beispiel Python-Skript, das die Verwendung einer Lambda-Funktion veranschaulicht, die diese Ereignisse abonniert hat.

```
import json
import boto3
s3 = boto3.resource('s3')

def get_highest_rendition_playlist(bucket_name, prefix_name):
   object_path = "{}/events/recording-started.json".format(prefix_name)
   object = s3.Object(bucket_name, object_path)
   body = str(object.get()['Body'].read().decode('utf-8'))
   metadata = json.loads(body)
   media_path = metadata["media"]["hls"]["path"]
   renditions = metadata["media"]["hls"]["renditions"]

   highest_rendition = None
   highest_rendition_size = 0

   for rendition in renditions:
       current_rendition_size = rendition["resolution_height"]
       if (current_rendition_size > highest_rendition_size):
           highest_rendition_size = current_rendition_size
           highest_rendition = rendition

   highest_rendition_playlist = media_path + '/' + highest_rendition['path'] + '/' + highest_rendition['playlist']
   return highest_rendition_playlist


def lambda_handler(event, context):
   prefix_name = event["detail"]["recording_s3_key_prefix"]
   bucket_name = event["detail"]["recording_s3_bucket_name"]
   rendition_playlist = get_highest_rendition_playlist(bucket_name, prefix_name)
   print("Highest rendition playlist: {}/{}".format(prefix_name, rendition_playlist))

   return {
       'statusCode': 200,
       'body': rendition_playlist
   }
```

## Wiedergabe von aufgezeichneten Inhalten aus privaten Buckets
<a name="r2s3-private-bucket-playback"></a>

Objekte, die mit dem Feature „Automatische Aufnahme in Amazon S3“ aufgezeichnet wurden, sind standardmäßig privat. Daher können diese Objekte nicht über die direkte S3-URL wiedergegeben werden. Wenn Sie versuchen, das HLS-Master-Manifest (m3u8-Datei) für die Wiedergabe mit dem Amazon IVS Player oder einem anderen Player zu öffnen, erhalten Sie eine Fehlermeldung (z. B. „Sie haben keine Berechtigung für den Zugriff auf die angeforderte Ressource“). Stattdessen können Sie diese Dateien mit dem Amazon-CloudFront-CDN (Content Delivery Network) wiedergeben.

### Amazon-CloudFront-Verteilung
<a name="r2s3-cdn-oai"></a>

Ihre CloudFront-Verteilungen können so konfiguriert werden, dass Inhalt von privaten Buckets bereitgestellt wird. In der Regel ist dies vorzuziehen, offen zugängliche Buckets zu haben, in denen Lesevorgänge die von CloudFront angebotenen Steuerelemente umgehen. Ihre Verteilung kann für den Service von einem privaten Bucket aus eingerichtet werden, indem eine Ursprungszugriffsidentität (OAC – origin access control) erstellt wird. Dabei handelt es sich um einen speziellen CloudFront-Benutzer, der über Leseberechtigungen für den privaten Ursprungsbucket verfügt. Sie können die OAC erstellen, wenn Sie Ihre Verteilung erstellen oder sie anschließend über die CloudFront-Konsole oder API hinzufügen. Sehen Sie [Erstellen einer neuen Ursprungszugriffssteuerung](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#create-oac-overview-s3).

### Wiedergabe von Amazon CloudFront
<a name="r2s3-cdn-playback"></a>

Sobald Sie Ihre Verteilung mit einer OAC eingerichtet haben, um Zugriff auf Ihren privaten Bucket zu erhalten, sollten Ihre Videodateien über die CloudFront-URL zur Verwendung verfügbar sein. Ihre CloudFront-URL ist der **Domainname für die Verteilung** auf der Registerkarte **Einzelheiten** in der AWS-CloudFront-Konsole. Sie ist in etwa wie folgt:

a1b23cdef4ghij.cloudfront.net.

Um Ihr aufgezeichnetes Video über Ihre Verteilung zu streamen, suchen Sie den Objektschlüssel für Ihre `master.m3u8`-Datei. Sie ist in etwa wie folgt:

```
ivs/v1/012345678912/a0bCDeFGH1IjK/2021/4/20/12/03/aBcdEFghIjkL/media/hls/master.m3u8
```

Hängen Sie den Objektschlüssel an das Ende Ihrer CloudFront-URL an. Ihre endgültige URL sieht etwa folgendermaßen aus:

```
https://a1b23cdef4ghij.cloudfront.net/ivs/v1/012345678912/a0bCDeFGH1IjK/2021/4/20/12/03/aBcdEFghIjkL/media/hls/master.m3u8
```

Um die Wiedergabe über einen Webbrowser abzuspielen, stellen Sie sicher, dass Sie CORS sowohl in CloudFront als auch im S3-Bucket konfigurieren. Befolgen Sie für die CloudFront-Konfiguration die Anweisungen unter [Erstellen von Richtlinien für Ursprungsanfragen](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy), um eine Richtlinie für **CORS-S3-Ursprungsanfragen** und eine **SimpleCORS**-Antwort-Header-Richtlinie an die CloudFront-Verteilung anzuhängen. Sehen Sie sich die Beispielseite der Konfigurationskonsole unten an:

![Beispielseite für Konsolenkonfigurationen. Wir empfehlen, eine Cache-Richtlinie und eine Origin-Request-Richtlinie zu verwenden, um den Cache-Schlüssel und die Origin-Anfragen zu kontrollieren.](http://docs.aws.amazon.com/de_de/ivs/latest/LowLatencyUserGuide/images/CORS_Configuration.png)


Zur Konfiguration von S3 CORS siehe [CORS-Konfiguration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html), um geeignete Regeln für Ihren S3-Bucket zu erstellen.

Jetzt können Sie Ihr aufgezeichnetes Video wiedergeben, als ob Sie direkt aus einem Bucket abspielen würden.

Weitere Informationen finden Sie unter [Beschränken des Zugriffs auf einen Amazon-S3-Ursprung](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html).