Amazon Kinesis Video Streams
Guía para desarrolladores

Modelo de datos de Transmisión de vídeo de Kinesis

El Producer Libraries y el Stream Parser Library envían y reciben los datos de vídeo en un formato compatible con la integración de información junto a los datos de vídeo. Este formato se basa en la especificación Matroska (MKV).

El formato MKV es una especificación abierta para los datos de medios. Todas las bibliotecas y ejemplos de código de la Guía para desarrolladores de Amazon Transmisión de vídeo de Kinesis envían o reciben datos en el formato MKV.

El Transmisión de vídeo de Kinesis Producer Libraries usa los tipos StreamDefinition y Frame tipos para producir encabezados de transmisiones MKV, encabezados de fotogramas y datos de fotogramas.

Para obtener información sobre la especificación completa de MKV, consulte Matroska Specifications.

En las siguientes secciones se describen los componentes de datos con formato MKV producidos por la C++ Producer Library.

Elementos de encabezado de transmisión

Los siguientes elementos de encabezado MKV los utiliza StreamDefinition (definidos en StreamDefinition.h).

Elemento ​​Descripción Valores típicos
stream_name Se corresponde con el nombre de la Transmisión de vídeo de Kinesis. my-stream
retention_period El tiempo que Transmisión de vídeo de Kinesis mantiene los datos de transmisión. Especifique 0 para una transmisión que no mantiene los datos. 24
tags colección clave-valor de datos de usuarios. Estos datos se muestra en la Consola de administración de AWS y pueden leerlos las aplicaciones cliente para filtrar u obtener información sobre una transmisión.
kms_key_id Si está presente, es la clave maestra de AWS KMS definida por el usuario utilizada para cifrar datos en la transmisión. Si no está presente, los datos se cifrarán con la clave maestra facilitada por Kinesis (aws/kinesis-video). 01234567-89ab-cdef-0123-456789ab
streaming_type Actualmente, el único tipo de streaming válido es STREAMING_TYPE_REALTIME. STREAMING_TYPE_REALTIME
content_type El tipo de contenido definido por el usuario. Para que los datos de streaming de vídeo se reproduzcan en la consola, el tipo de contenido debe ser video/h264. vídeo/h264
max_latency En la actualidad, este valor no se utiliza y debe establecerse en 0. 0
fragment_duration Este valor es una estimación de la duración recomendada de sus fragmentos y se utiliza con fines de optimización. La duración real del fragmento se determina mediante los datos de streaming. 2
timecode_scale

Indica la escala empleada por las marcas temporales de los fotogramas. El valor predeterminado es 1 milisegundo. Si se especifica 0, se asigna también el valor predeterminado de 1 milisegundo. Este valor puede estar comprendido entre 100 nanosegundos y 1 segundo.

Para obtener más información, consulte TimecodeScale en la documentación de Matroska.

key_frame_fragmentation Si se establece en true, la transmisión inicia un nuevo clúster cuando recibe un fotograma clave. true
frame_timecodes Si es true, Transmisión de vídeo de Kinesis marca los fotogramas cuando los recibe. Si es false, Transmisión de vídeo de Kinesis utiliza el tiempo de descodificación de los fotogramas recibidos. true
absolute_fragment_time Si es true, los códigos temporales del clúster se interpretan como si se usara un tiempo absoluto (por ejemplo, el del reloj del sistema del productor). Si es false, los códigos temporales del clúster se interpretan como relativos a la hora de inicio de la transmisión. true
fragment_acks Si es true, se envía confirmación (ACK) cuando Transmisión de vídeo de Kinesis recibe los datos. Los ACK se pueden recibir mediante devoluciones de llamada de KinesisVideoStreamFragmentAck o KinesisVideoStreamParseFragmentAck. true
restart_on_error Indica si la transmisión debe reanudarse después de que se presente un error en la misma. true
nal_adaptation_flags Indica si los datos privados del códec o adaptación NAL (Network Abstraction Layer) están presentes en el contenido. Los indicadores válidos son NAL_ADAPTATION_ANNEXB_NALS y NAL_ADAPTATION_ANNEXB_CPD_NALS. NAL_ADAPTATION_ANNEXB_NALS
frame_rate Una estimación de la velocidad de fotogramas del contenido. Este valor se utiliza para la optimización; la velocidad de fotogramas real se determina en función de la velocidad de los datos entrantes. Si se especifica 0, se asigna el valor predeterminado de 24. 24
avg_bandwidth_bps Una estimación del ancho de banda del contenido. Este valor se utiliza para la optimización; la velocidad real se determina en función del ancho de banda de los datos entrantes. Por ejemplo, para una transmisión de vídeo con una resolución de 720p que se ejecute a 25 FPS, podría esperar un ancho de banda medio de 5 Mbps. 5
buffer_duration periodo que ha de almacenarse en búfer el contenido en el productor. Si existe una baja latencia de red, este valor puede reducirse; si la latencia de red es alta, al aumentar este valor se impide que se borren los fotogramas antes de poder enviarlos si se produce un error al colocar los fotogramas en el búfer más pequeño.
replay_duration la cantidad de tiempo que se "rebobinará" la transmisión de datos de vídeo en caso de una pérdida de conexión. Este valor puede ser cero si la pérdida de fotogramas debida a la ausencia de conexión no supone un problema; el valor puede aumentarse si la aplicación consumidora puede eliminar los fotogramas redundantes. Este valor debe ser inferior a la duración del búfer; de lo contrario, se usa la duración del búfer.
connection_staleness periodo que se mantiene una conexión cuando no se reciben datos.
codec_id El códec utilizado por el contenido. Para obtener más información, consulte CodecID en la especificación de Matroska. V_MPEG2
track_name El nombre de la pista definido por el usuario. my_track
codecPrivateData datos facilitados por el codificador empleado para descodificar los datos de los fotogramas, por ejemplo, la anchura y altura de los mismos en píxeles, ya que es una información necesaria para muchos consumidores a posteriori. En la C++ Producer Library, la matriz gMkvTrackVideoBits en MkvStatics.cpp incluye el ancho y el alto en píxeles del fotograma.
codecPrivateDataSize El tamaño de los datos en el parámetro codecPrivateData.
track_type El tipo de pista para el flujo. MKV_TRACK_INFO_TYPE_AUDIO o MKV_TRACK_INFO_TYPE_VIDEO
segment_uuid Uuid de segmento definido por el usuario (16 bytes).
default_track_id Número único distinto de cero de la pista. 1

Datos de pista del flujo

Los siguientes elementos de pista MKV los utiliza StreamDefinition (definidos en StreamDefinition.h).

Elemento ​​Descripción Valores típicos
track_name Nombre de pista definido por el usuario. Por ejemplo, "audio" para la pista de audio. audio
codec_id ID del códec para la pista. Por ejemplo, "A_AAC" para una pista de audio. A_AAC
cpd Datos que proporciona el codificador usado para descodificar los datos del fotograma. Estos datos pueden incluir la anchura y la altura del fotograma en píxeles, lo cual es necesario para muchos consumidores a posteriori. En la C++ Producer Library, la matriz gMkvTrackVideoBits en MkvStatics.cpp incluye la anchura y la altura de los píxeles del fotograma.
cpd_size El tamaño de los datos en el parámetro codecPrivateData.
track_type El tipo de la pista. Por ejemplo, puede utilizar el valor de enumeración de MKV_TRACK_INFO_TYPE_AUDIO para el audio. MKV_TRACK_INFO_TYPE_AUDIO

Elementos de encabezado de fotogramas

Los siguientes elementos de encabezado MKV los utiliza Frame (definidos en el paquete KinesisVideoPic, en mkvgen/Include.h):

  • Frame Index: valor con aumento monotónico.

  • Flags: tipo de fotograma. Entre los valores válidos se incluyen:

    • FRAME_FLAGS_NONE

    • FRAME_FLAG_KEY_FRAME: si key_frame_fragmentation está configurado en la transmisión, los fotogramas claves inician un nuevo fragmento.

    • FRAME_FLAG_DISCARDABLE_FRAME: indica al descodificador que puede descartar este fotograma si la descodificación es lenta.

    • FRAME_FLAG_INVISIBLE_FRAME: la duración de este bloque es 0.

  • Decoding Timestamp: marca temporal de cuándo se descodificó este fotograma. Si los fotogramas anteriores dependen de este fotograma para su descodificación, esta marca temporal puede aparecer antes que las de los fotogramas previos. Este valor es relativo al inicio del fragmento.

  • Presentation Timestamp: marca temporal de cuándo se muestra este fotograma. Este valor es relativo al inicio del fragmento.

  • Duration: duración de reproducción del fotograma.

  • Size: tamaño en bytes de los datos del fotograma

Datos de fotograma en MKV

Los datos de frame.frameData podrían contener solamente datos multimedia del fotograma o también información anidada adicional de encabezados, en función del esquema de codificación empleado. Para que se muestren en la Consola de administración de AWS, los datos deben estar codificados en el códec H.264, pero Transmisión de vídeo de Kinesis recibir transmisiones de datos serializadas en el tiempo en cualquier formato.