

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.

# Kinesis Video Streams Streams-Datenmodell
<a name="how-data"></a>

Das [Zu Kinesis Video Streams hochladen](producer-sdk.md) und die [Sehen Sie sich die Ausgabe von Kameras mithilfe der Parser-Bibliothek an](parser-library.md) senden und empfangen Videodaten in einem Format, das das Einbetten von Informationen neben den eigentlichen Videodaten unterstützt. Dieses Format basiert auf der Matroska (MKV)-Spezifikation.

Das [MKV-Format](https://en.wikipedia.org/wiki/Matroska) ist eine offene Spezifikation für Mediendaten. Alle Bibliotheken und Codebeispiele im *Amazon Kinesis Video Streams Developer Guide* senden oder empfangen Daten im MKV-Format. 

The [Zu Kinesis Video Streams hochladen](producer-sdk.md) verwendet die `Frame` Typen `StreamDefinition` und, um MKV-Stream-Header, Frame-Header und Frame-Daten zu erzeugen.

Weitere Hinweise zur vollständigen MKV-Spezifikation finden Sie unter [Matroska-Spezifikationen](https://www.matroska.org/technical/specs/index.html).

Die folgenden Abschnitte beschreiben die Komponenten von vom [C\$1\$1](producer-sdk-cpp.md) erzeugten Daten im MKV-Format.

**Topics**
+ [Stream-Header-Elemente](#how-data-header-streamdefinition)
+ [Streamen Sie Track-Daten](#how-data-header-streamtrack)
+ [Frame-Header-Elemente](#how-data-header-frame)
+ [MKV-Frame-Daten](#how-data-frame)

## Stream-Header-Elemente
<a name="how-data-header-streamdefinition"></a>

Die folgenden MKV-Header-Elemente werden von `StreamDefinition` (definiert in `StreamDefinition.h`) verwendet.


****  

| Element | Description | Typische Werte | 
| --- | --- | --- | 
| stream\$1name | Entspricht dem Namen des Kinesis-Videostreams. | my-stream | 
| retention\$1period | Die Dauer (in Stunden), für die Stream-Daten von Kinesis Video Streams gespeichert werden. Geben Sie dies 0 für einen Stream an, der keine Daten speichert.  | 24 | 
| Tags | Als Schlüssel-Wert-Paare angegebene Benutzerdaten. Diese Daten werden in der AWS-Managementkonsole angezeigt und können von Clientanwendungen gelesen werden, um eine Filterung durchzuführen oder Informationen zu einem Stream abzurufen. |  | 
| kms\$1key\$1id | Falls vorhanden, wird der benutzerdefinierte AWS KMS Schlüssel verwendet, um Daten im Stream zu verschlüsseln. Falls nicht, werden die Daten mit dem von Kinesis bereitgestellten Schlüssel () verschlüsselt. aws/kinesisvideo | 01234567-89ab-cdef-0123-456789ab | 
| streaming\$1type | Derzeit ist der einzige gültige Streaming-Typ STREAMING\$1TYPE\$1REALTIME. | STREAMING\$1TYPE\$1REALTIME | 
| content\$1type | Der benutzerdefinierte Inhaltstyp. Damit gestreamte Videodaten in der Konsole abgespielt werden können, muss der Typ video/h264 lauten. | video/h264 | 
| max\$1latency | Dieser Wert wird derzeit nicht verwendet und sollte auf 0 gesetzt werden. | 0 | 
| fragment\$1duration | Dies ist eine Schätzung der Fragmentdauer und wird zur Optimierung verwendet. Die tatsächliche Fragmentdauer wird durch die Streaming-Daten bestimmt. | 2 | 
| timecode\$1scale | Gibt die von Frame-Timestamps verwendete Skala an. Der Standardwert beträgt 1 Millisekunde. Wenn Sie `0` festlegen, wird ebenfalls der Standardwert von 1 Millisekunde festgelegt. Dieser Wert kann zwischen 100 Nanosekunden und einer Sekunde liegen. Weitere Informationen finden Sie [TimecodeScale](https://matroska.org/technical/specs/notes.html#TimecodeScale)in der Matroska-Dokumentation. |  | 
| key\$1frame\$1fragmentation | Bei der Einstellung true startet der Stream einen neuen Cluster, wenn ein Keyframe empfangen wird. | true | 
| frame\$1timecodes | Fallstrue, verwendet Kinesis Video Streams die Werte für den Präsentationszeitstempel (pts) und den Dekodierungszeitstempel (dts) der empfangenen Frames. Fallsfalse, stempelt Kinesis Video Streams die Frames beim Empfang mit vom System generierten Zeitwerten. | true | 
| absolute\$1fragment\$1time |  Mit dem Wert true werden die Cluster-Timecodes als absolute Zeiten (z. B. anhand der Systemuhr des Produzenten) interpretiert. Mit dem Wert false werden die Cluster-Timecodes als relativ zur Startzeit des Streams interpretiert. | true | 
| fragment\$1acks |  Fallstrue, werden Bestätigungen (ACKs) gesendet, wenn Kinesis Video Streams die Daten empfängt. ACKs Sie können mit den Rückrufen oder empfangen werden. KinesisVideoStreamFragmentAck KinesisVideoStreamParseFragmentAck | true | 
| restart\$1on\$1error | Gibt an, ob der Stream die Übertragung nach einem Fehler fortsetzen soll. | true | 
| nal\$1adaptation\$1flags | Gibt an, ob der Inhalt NAL (Network Abstraction Layer)-Adaptions- oder Codec-interne Daten enthält. Gültige Flags sind NAL\$1ADAPTATION\$1ANNEXB\$1NALS und NAL\$1ADAPTATION\$1ANNEXB\$1CPD\$1NALS. | NAL\$1ADAPTATION\$1ANNEXB\$1NALS | 
| frame\$1rate | Schätzwert der Frame-Rate des Inhalts. Dieser Wert wird zur Optimierung verwendet. Die tatsächliche Frame-Rate wird durch die Rate der eingehenden Daten bestimmt. Durch Festlegen von 0 wird der Standardwert 24 zugewiesen. | 24 | 
| avg\$1bandwidth\$1bps | Eine Schätzung der Inhaltsbandbreite in Mbit/s. Dieser Wert wird zur Optimierung verwendet. Der tatsächliche Wert wird durch die Bandbreite der eingehenden Daten bestimmt. Die ungefähre Bandbreite für einen Videostream mit einer Auflösung von 720p bei 25 FPS beträgt beispielsweise etwa 5 Mbit/s. | 5 | 
| buffer\$1duration | Die Dauer der Pufferung des Inhalts auf Konsumentenseite. Bei geringer Netzwerklatenz kann dieser Wert reduziert werden. Wenn die Netzwerklatenz hoch ist, wird durch eine Erhöhung dieses Werts verhindert, dass Frames verworfen werden, bevor sie gesendet werden können, da die Zuordnung die Frames nicht in den kleineren Puffer legt. |  | 
| replay\$1duration | Die Zeitspanne, für die der Videodatenstrom „zurückgespult“ wird, wenn die Verbindung unterbrochen wird. Dieser Wert kann Null sein, wenn Bildverluste aufgrund eines Verbindungsverlusts kein Problem darstellen. Der Wert kann erhöht werden, wenn die verbrauchende Anwendung redundante Frames entfernen kann. Dieser Wert sollte kleiner als die Pufferdauer sein, andernfalls wird die Pufferdauer verwendet. |  | 
| connection\$1staleness | Die Zeitspanne, die eine Verbindung aufrechterhalten wird, wenn keine Daten eingehen. |  | 
| codec\$1id | Der von dem Inhalt verwendete Codec. Weitere Informationen finden Sie unter [CodecID](https://matroska.org/technical/specs/codecid/index.html) in der Matroska-Spezifikation. | V\$1 MPEG2 | 
| track\$1name | Der benutzerdefinierte Name des Tracks | my\$1track | 
| codecPrivateData | Vom Encoder zur Decodierung der Frame-Daten bereitgestellte Informationen wie Frame-Breite und -Höhe in Pixeln, die von vielen nachgelagerten Konsumenten benötigt werden. In der [C\$1\$1-Producer-Bibliothek](producer-sdk-cpp.md) MkvStatics.cpp enthält das gMkvTrackVideoBits Array in die Pixelbreite und -höhe für den Frame. |  | 
| codecPrivateDataGröße | Die Größe der Daten im Parameter codecPrivateData |  | 
| track\$1type | Der Typ des Tracks für den Stream. | MKV\$1TRACK\$1INFO\$1TYPE\$1AUDIO oder MKV\$1TRACK\$1INFO\$1TYPE\$1VIDEO | 
| segment\$1uuid | Benutzerdefinierte Segment-UUID (16 Bytes). |  | 
| default\$1track\$1id | Eindeutige Zahl ungleich Null für den Track. | 1 | 

## Streamen Sie Track-Daten
<a name="how-data-header-streamtrack"></a>

Die folgenden MKV-Track-Elemente werden von `StreamDefinition` (definiert in `StreamDefinition.h`) verwendet.


****  

| Element | Description | Typische Werte | 
| --- | --- | --- | 
| track\$1name | Benutzerdefinierter Track-Name. Beispiel: "Audio" für die Audiospur.  | audio | 
| codec\$1id | Codec-ID für den Track. Beispiel: "A\$1AAC" für eine Audiospur. | A\$1AAC | 
| cpd | Die vom Encoder bereitgestellten Daten, die zum Decodieren der Frame-Daten verwendet werden. Diese Daten können Frame-Breite und -Höhe in Pixel umfassen, die von vielen nachgelagerten Konsumenten benötigt werden. In der [C\$1\$1-Producer-Bibliothek](https://docs.aws.amazon.com//kinesisvideostreams/latest/dg/producer-sdk-cpp.html) enthält das gMkvTrack VideoBits Array in MkvStatics .cpp die Pixelbreite und -höhe für den Frame.  |  | 
| cpd\$1size | Die Größe der Daten im codecPrivateData Parameter. |  | 
| track\$1type | Der Typ des Tracks. Beispielsweise können Sie den Aufzählungswert MKV\$1TRACK\$1INFO\$1TYPE\$1AUDIO für die Audioverarbeitung auswählen. | MKV\$1TRACK\$1INFO\$1TYPE\$1AUDIO | 

## Frame-Header-Elemente
<a name="how-data-header-frame"></a>

Die folgenden MKV-Header-Elemente werden von `Frame` (definiert im `KinesisVideoPic`-Paket in der Datei `mkvgen/Include.h`) verwendet:
+ **Frame Index:** Ein monoton ansteigender Wert.
+ **Flags:** Der Typ des Frames. Gültige Werte sind z. B. die Folgenden:
  + `FRAME_FLAGS_NONE`
  + `FRAME_FLAG_KEY_FRAME`: Wenn `key_frame_fragmentation` für den Stream aktiviert ist, wird bei jedem Keyframe ein neues Fragment begonnen.
  + `FRAME_FLAG_DISCARDABLE_FRAME`: Gibt an, dass der Decoder diesen Frame verwerfen kann, wenn die Decodierung langsam erfolgt.
  + `FRAME_FLAG_INVISIBLE_FRAME`: Die Dauer dieses Blocks beträgt 0.
+ **Zeitstempel für die Dekodierung:** Der Zeitstempel, zu dem dieser Frame dekodiert wurde. Wenn frühere Frames für die Dekodierung von diesem Frame abhängen, liegt dieser Zeitstempel möglicherweise vor dem früherer Frames. Dieser Wert gilt relativ zum Anfang des Fragments.
+ **Zeitstempel der Präsentation:** Der Zeitstempel, zu dem dieser Frame angezeigt wird. Dieser Wert gilt relativ zum Anfang des Fragments.
+ **Duration:** Die Wiedergabedauer des Frames.
+ **Size:** Die Größe der Framedaten in Byte.

## MKV-Frame-Daten
<a name="how-data-frame"></a>

Die Daten in `frame.frameData` können je nach verwendetem Codierungsschema entweder nur die Mediendaten des Frames enthalten oder zusätzlich auch eingebettete Header-Informationen. Um in der angezeigt zu werden AWS-Managementkonsole, müssen die Daten im [H.264-Codec](https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC) codiert sein. Kinesis Video Streams kann jedoch zeitserialisierte Datenströme in jedem Format empfangen.