Kinesis-Videostream-Strukturen - Amazon Kinesis Video Streams

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-Videostream-Strukturen

Sie können die folgenden Strukturen verwenden, um Daten für eine Instanz eines Kinesis-Videostreams bereitzustellen.

StreamDefinition/StreamInfo

Das Objekt StreamDefinition auf C++-Ebene kapselt das Objekt StreamInfo im plattformunabhängigen Code und stellt im Konstruktor einige Standardwerte bereit.

Felder für Mitglieder

Feld Datentyp Beschreibung Standardwert
stream_name string Ein optionaler Streamname. Weitere Informationen zur Länge des Streamnamens finden Sie unter Beschränkungen des Producer-SDK. Jeder Stream sollte einen eindeutigen Namen haben. Wenn kein Name angegeben wird, wird ein zufälliger Name generiert.
retention_period duration<uint64_t, ratio<3600>> Der Aufbewahrungszeitraum für den Stream in Sekunden. 0 bedeutet keine Aufbewahrung. 3600 (eine Stunde)
Tags const map<string, string>* Eine Map mit Schlüssel-Wert-Paaren, die Benutzerdaten enthalten. Wenn der Stream bereits einen Satz Tags aufweist, werden die neuen Tags an die die vorhandenen Tags angehängt. Keine Tags
kms_key_id string Die AWS KMS Schlüssel-ID, die für die Verschlüsselung des Streams verwendet werden soll. Weitere Informationen finden Sie unter Datenschutz in Kinesis Video Streams. Der KMS-Standardschlüssel (aws/kinesis-video).
streaming_type STREAMING_TYPE-Aufzählung Der einzige unterstützte Wert ist STREAMING_TYPE_REALTIME.
content_type string Inhaltsformat des Streams. Die Kinesis Video Streams Streams-Konsole kann Inhalte in diesem video/h264 Format wiedergeben. video/h264
max_latency duration<uint64_t, milli> Die maximale Latenz für den Stream in Millisekunden. Der Callback für Stream-Latenzdruck (sofern angegeben) wird aufgerufen, wenn die Pufferlaufzeit diesen Zeitraum übersteigt. Mit der Angabe 0 wird festgelegt, dass der Callback für Stream-Latenzdruck aufgerufen wird. milliseconds::zero()
fragment_duration duration<uint64_t> Die gewünschte Fragmentdauer in Sekunden. Dieser Wert wird in Kombination mit dem key_frame_fragmentation-Wert verwendet. Wenn dieser Wert lautetfalse, generiert Kinesis Video Streams nach Ablauf dieser Dauer Fragmente auf einem Schlüsselbild. Beispiel: In einem AAC-Audiostream ist jeder Frame ein Keyframe. Mit key_frame_fragmentation = false kommt es nach Ablauf dieser Dauer zur Fragmentierung eines Keyframes mit dem Ergebnis zweisekündiger Fragmente. 2
timecode_scale duration<uint64_t, milli> Die MKV-Timecodeskala in Millisekunden, die die Granularität der Timecodes für die Frames im MKV-Cluster angibt. Der MKV-Frame-Timecode gilt immer relativ zum Beginn des Clusters. MKV verwendet einen signierten 16-Bit-Wert (0 bis 32 767) zur Darstellung des Timecodes innerhalb des Clusters (Fragment). Stellen Sie sicher, dass der Frame-Timecode mit der angegebenen Timecode-Skala dargestellt werden kann. Mit dem Standard-Timecode-Skalawert von 1 ms wird sichergestellt, dass der größte darstellbare Frame 32 767 ms ~= 32 Sekunden lang ist. Dieser Wert liegt über der maximalen Fragmentdauer von 10 Sekunden, die in Kinesis Video Streams Streams-Dienstkontingente angegeben ist. 1
key_frame_fragmentation bool Gibt an, ob Fragmente für einen Keyframe erstellt werden. Wenn der Wert true ist, produziert das SDK jedes Mal einen Start des Fragments, wenn ein Keyframe auftritt. Wennfalse, wartet Kinesis Video Streams mindestens darauf fragment_duration und erzeugt ein neues Fragment auf dem darauffolgenden Schlüsselbild. true
frame_timecodes bool Verwendung von Frame-Timecodes oder Generieren von Zeitstempeln mit dem aktuellen Zeit-Callback: Viele Encoder erzeugen keine Zeitstempel mit den Frames. Wenn Sie also diesen Parameter angebenfalse, wird sichergestellt, dass die Frames beim Einfügen in Kinesis Video Streams mit einem Zeitstempel versehen werden. true
absolute_fragment_times bool Kinesis Video Streams verwendet MKV als zugrunde liegenden Verpackungsmechanismus. In der MKV-Spezifikation müssen Frame-Timecodes relativ zum Anfang des Clusters (Fragments) sein. Die Cluster-Timecodes können jedoch entweder absolut oder relativ zum Startzeitpunkt des Streams sein. Wenn die Zeitstempel relativ sind, verwendet der Aufruf von PutMedia in der Service-API den optionalen Zeitstempel für den Streamanfang und passt die Cluster-Zeitstempel entsprechend an. Der Service speichert die Fragmente immer mit den absoluten Zeitstempeln. true
fragment_acks bool Ob Fragment-ACKs (Bestätigungen) auf Anwendungsebene empfangen werden sollen. true bedeutet, dass das SDK ACKs empfängt und entsprechend verfährt.
restart_on_error bool Wird bei bestimmten Fehlern neu gestartet? true bedeutet, dass das SDK beim Auftreten eines Fehlers versucht, das Streamen neu zu starten.
recalculate_metrics bool Gibt an, ob die Metriken neu berechnet werden. Jeder Aufruf zum Abrufen der Kennzahlen kann diese neu berechnen, um sicherzustellen, dass der aktuelle "laufende" Wert abgerufen wird. Dafür wird – in geringem Umfang – CPU-Leistung benötigt. Diese Einstellung muss auf extrem leistungsschwachen/kleinen Geräten möglicherweise auf false eingestellt werden, um CPU-Takte zu sparen. Andernfalls wird die Verwendung false für diesen Wert nicht empfohlen. true
nal_adaptation_flags uint32_t

Gibt die Anpassungs-Flags für die Netzwerk-Abstraktionsschichteinheit (Network Abstraction Layer Unit, NALU) an. Wenn der Bitstream mit H.264 codiert ist, kann er in NALUs als Rohdaten oder Paket verarbeitet werden. Diese liegen entweder im Annex-B- oder AVCC-Format vor. Die meisten elementaren Stream-Produzenten und -Verbraucher (Lese-Encoder und -Decoder) verwenden das Annex-B-Format, da es Vorteile bietet, wie z. B. die Fehlerbehebung. Systeme auf höherer Ebene verwenden das AVCC-Format. Dieses Format ist Standard für MPEG, HLS, DASH usw. Die Konsolenwiedergabe verwendet die Browser-MSE (Media Source Extensions), um den Stream im Format AVCC zu decodieren und wiederzugeben. Für H.264 (und für M-JPEG und H.265), stellt das SDK Adaptionsfunktionen bereit.

Viele einfache Streams liegen in folgendem Format vor. In diesem Beispiel ist Ab der Annex-B-Startcode (001 oder 0001).

Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)…. Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)

Im Fall von H.264 ist der Codec Private Data (CPD) in den Parametern SPS (Sequence Parameter Set) und PPS (Picture Parameter Set) enthalten und kann an das AVCC-Format angepasst werden. Sofern die Medien-Pipeline die CPD nicht separat ausgibt, kann die Anwendung die CPD aus dem Frame extrahieren. Dazu sucht es nach dem ersten IDR-Frame (der SPS und PPS enthalten sollte), extrahiert die beiden NALUs (die es sindAb(Sps)Ab(Pps)) und fügt sie in die CPD ein. StreamDefinition

Weitere Informationen finden Sie unter NAL Adaptation Flags.

Standardmäßig wird das Format Annex-B für das Format AVCC sowohl für die Framedaten als auch für die CPD (Codec Private Data) adaptiert.
frame_rate uint32_t Die erwartete Bildrate. Dieser Wert wird verwendet, um den Pufferbedarf exakter zu berechnen. 25
avg_bandwidth_bps uint32_t Die erwartete durchschnittliche Bandbreite für den Stream. Dieser Wert wird verwendet, um den Pufferbedarf exakter zu berechnen. 4 * 1 024 * 1 024
buffer_duration duration<uint64_t> Laufzeit des Streampuffers in Sekunden. Das SDK speichert die Frames bis zu einem Tag im Inhaltsspeicher. Danach werden die vorherigen Frames gelöschtbuffer_duration, wenn sich das Fenster weiterbewegt. Wenn der Frame, der gelöscht wird, nicht an das Backend gesendet wurde, wird der Drop-Frame-Callback aufgerufen. Wenn die aktuelle Pufferlaufzeit größer als max_latency ist, wird der Callback für Stream-Latenzdruck aufgerufen. Der Puffer wird bis zum nächsten Fragmentstart gekürzt, wenn das persistente Fragment-ACK empfangen wird. Dies gibt an, dass der Inhalt dauerhaft persistent in der Cloud liegt und nicht mehr auf dem lokalen Gerät gespeichert werden muss. 120
replay_duration duration<uint64_t> Die Dauer in Sekunden, bis das aktuelle Lesegerät während eines Fehlers zur Wiedergabe zurückgeschaltet wird, wenn der Neustart aktiviert ist. Der Rollback stoppt am Pufferanfang (falls das Streamen gerade erst begonnen hat oder eine persistente ACK aufgetreten ist). Das Rollback versucht, auf einem Keyframe zu landen, der einen Fragmentstart bezeichnet. Wenn der Fehler, der den Neustart verursacht hat, nicht auf einen ausgefallenen Host hinweist (der Host ist noch aktiv und enthält die Frame-Daten in seinen internen Puffern), wird der Rollback beim letzten empfangenen ACK-Frame beendet. Dann wird zum nächsten Keyframe vor gesprungen, da das gesamte Fragment bereits im Arbeitsspeicher des Host gespeichert ist. 40
connection_staleness duration<uint64_t> Die Zeit in Sekunden, nach der der Stream Staleness Callback aufgerufen wird, wenn das SDK das Puffer-ACK nicht empfängt. Es zeigt an, dass die Frames vom Gerät gesendet werden, das Backend sie jedoch nicht bestätigt. Dies weist auf eine getrennte Verbindung am Zwischenpunkt oder Load Balancer hin. 30
codec_id string Die Codec-ID für den MKV-Track. V_MPEG4/ISO/AVC
track_name string Der Name des MKV-Tracks. kinesis_video
codecPrivateData unsigned char* Der CPD-Puffer (Codec Private Data). Wenn die Medienpipeline über die Informationen zu den CPD verfügt, bevor der Stream startet, kann dies in StreamDefinition.codecPrivateData festgelegt werden. Die Bits werden kopiert und der Puffer kann nach dem Aufruf zum Erstellen des Streams wiederverwendet oder freigegeben werden. Wenn die Daten jedoch bei der Erstellung des Streams nicht verfügbar sind, können sie in einer der Überladungen der Funktion festgelegt werden. KinesisVideoStream.start(cpd) null
codecPrivateDataGröße uint32_t Die CPD-Puffergröße 0

ClientMetrics

Das ClientMetricsObjekt wird durch Aufrufen gefülltgetKinesisVideoMetrics.

Felder für Mitglieder

Feld Datentyp Beschreibung
Version UINT32 Die Version der Struktur, definiert im Makro CLIENT_METRICS_CURRENT_VERSION.
contentStoreSize UINT64 Die Inhaltsspeicher-Gesamtgröße in Byte. Dies ist der in DeviceInfo.StorageInfo.storageSize angegebene Wert.
contentStoreAvailableGröße UINT64 Aktuell verfügbare Speichergröße in Byte.
contentStoreAllocatedGröße UINT64 Aktuell zugewiesene Größe. Die zugewiesene plus die verfügbaren Größen sollten etwas kleiner als die Speichergesamtgröße sein, da für die interne Speicherverwaltung und die Implementierung des Inhaltsspeichers ebenfalls Speicher benötigt wird.
totalContentViewsGröße UINT64 Die Größe des für alle Inhaltsansichten für alle Streams zugewiesenen Speichers. Dies wird nicht auf die Speichergröße angerechnet. Dieser Speicher wird mit dem Makro MEMALLOC zugeordnet, das überschrieben werden kann, um einen benutzerdefinierten Allocator bereitzustellen.
totalFrameRate UINT64 Die insgesamt über alle Streams beobachtete Bildrate.
totalTransferRate UINT64 Die insgesamt über alle Streams beobachtete Streamrate in Byte pro Sekunde.

StreamMetrics

Das StreamMetricsObjekt wird durch Aufrufen gefülltgetKinesisVideoMetrics.

Felder für Mitglieder

Feld Datentyp Beschreibung
Version UINT32 Die Version der Struktur, definiert im Makro STREAM_METRICS_CURRENT_VERSION.
currentViewDuration UINT64 Die Dauer der akkumulierten Frames. Im Fall eines schnellen Netzwerks ist diese Dauer entweder Null oder die Framedauer (während der Frame übertragen wird). Wenn die Dauer länger als die in der max_latency angegebene Dauer wirdStreamDefinition, wird der Stream-Latenz-Callback aufgerufen, sofern er angegeben ist. Die Dauer wird in Einheiten von 100 ns – die Standardzeiteinheit für den PIC-Layer – angegeben.
overallViewDuration UINT64 Die Gesamtanzeigedauer. Wenn der Stream ohne ACKs oder Persistenz konfiguriert ist, steigt dieser Wert, wenn die Frames in den Kinesis-Videostream eingefügt werden, und entspricht dem buffer_duration in der. StreamDefinition Wenn ACKs aktiviert sind und das persistente ACK empfangen wird, wird der Puffer auf das nächste Schlüsselbild gekürzt. Das liegt daran, dass der ACK-Zeitstempel den Anfang des gesamten Fragments angibt. Die Dauer wird in Einheiten von 100 ns – die Standardzeiteinheit für den PIC-Layer – angegeben.
currentViewSize UINT64 Die Größe des aktuellen Puffers in Byte.
overallViewSize UINT64 Die Gesamtanzeigegröße in Byte.
currentFrameRate UINT64 Die beobachtete Bildrate für den aktuellen Stream.
currentTransferRate UINT64 Die beobachtete Übertragungsrate in Byte pro Sekunde für den aktuellen Stream.