Estructuras de transmisión de vídeo de Kinesis - Amazon Kinesis Video Streams

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Estructuras de transmisión de vídeo de Kinesis

Puede utilizar las siguientes estructuras para proporcionar datos a una instancia de una transmisión de vídeo de Kinesis.

StreamDefinition/StreamInfo

El objeto StreamDefinition en la capa de C++ envuelve el objeto StreamInfo en el código independiente de plataforma y proporciona algunos valores predeterminados en el constructor.

Campos de miembros

Campo Tipo de datos Descripción Valor predeterminado
stream_name string Nombre de secuencia opcional. Para obtener más información acerca de la longitud del nombre de secuencia, consulte Límites del SDK para productores. Cada secuencia debe tener un nombre único. Si no se especifica ningún nombre, se genera uno de forma aleatoria.
retention_period duration<uint64_t, ratio<3600>> El periodo de retención de la secuencia, en segundos. Especificar 0 indica que no hay ninguna retención. 3600 (una hora)
tags const map<string, string>* Un mapa de pares clave/valor que contiene información de usuario. Si la secuencia ya tiene un conjunto de etiquetas, las nuevas etiquetas se añaden al conjunto de etiquetas existente. No hay etiquetas
kms_key_id string El ID de clave de AWS KMS que se va a utilizar para cifrar la transmisión. Para más información, consulte Protección de datos en Kinesis Video Streams. La clave de KMS predeterminada (aws/kinesis-video.)
streaming_type Enumeración de STREAMING_TYPE El único valor admitido es STREAMING_TYPE_REALTIME.
content_type string El formato del contenido de la secuencia. La consola Kinesis Video Streams puede reproducir contenido en este formatovideo/h264. video/h264
max_latency duration<uint64_t, milli> La latencia máxima en milisegundos de la secuencia. La devolución de llamada de presión de latencia de secuencia (si se ha especificado) se invoca cuando se supera la duración del búfer este tiempo. Especificar 0 indica que no se invocará ninguna devolución de llamada de presión de latencia de transmisión. milliseconds::zero()
fragment_duration duration<uint64_t> La duración del fragmento que desea, en segundos. Este valor se utiliza en combinación con el valor key_frame_fragmentation. Si este valor esfalse, Kinesis Video Streams genera fragmentos en un fotograma clave una vez transcurrido este tiempo. Por ejemplo, una secuencia de audio Advanced Audio Coding (AAC) tiene cada fotograma como fotograma clave. Si se especifica key_frame_fragmentation = false, la fragmentación se realiza en un fotograma clave después de que expire este tiempo, lo que generará fragmentos de 2 segundos. 2
timecode_scale duration<uint64_t, milli> La escala de código de tiempo de MKV en milisegundos, que especifica la granularidad de los códigos de tiempo para los fotogramas dentro del clúster de MKV. El código de tiempo del fotograma de MKV siempre tiene relación con el inicio del clúster. MKV utiliza un valor de 16 bits firmado (0-32767) para representar el código de tiempo dentro del clúster (fragmento). Compruebe que el código de tiempo del fotograma se pueda representar con la escala de código de tiempo indicada. El valor de escala de código de tiempo predeterminado de 1 ms garantiza que el marco mayor que se puede representar sea 32767 ms ~= 32 segundos. Esto supera la duración de fragmento máxima que se especifica en Cuotas de servicio de Kinesis Video Streams, que es 10 segundos. 1
key_frame_fragmentation bool Si se producen fragmentos en un fotograma clave. Si es true, el SDK produce un inicio del fragmento cada vez que haya un fotograma clave. Sifalse, Kinesis Video Streams espera fragment_duration al menos y produce un nuevo fragmento en el fotograma clave que le sigue. true
frame_timecodes bool Si se utilizan códigos de tiempo de fotograma o se generan marcas de tiempo utilizando la devolución de llamada de tiempo actual. Muchos codificadores no producen marcas temporales con los fotogramas. Por lo tanto, false la especificación de este parámetro garantiza que los fotogramas tengan una marca de tiempo a medida que se colocan en Kinesis Video Streams. true
absolute_fragment_times bool Kinesis Video Streams utiliza MKV como mecanismo de empaquetado subyacente. La especificación MKV es estricta acerca de los códigos de tiempo de fotograma relativos al inicio de clúster (fragmento). Sin embargo, los códigos de tiempo del clúster pueden ser absolutos o relativos a la hora de inicio para la transmisión. Si las marcas de tiempo son relativas, la llamada a la API de servicio de PutMedia utiliza la marca de tiempo de inicio de la secuencia opcional y ajusta las marcas temporales del clúster. El servicio siempre almacena los fragmentos con sus marcas de tiempo absolutas. true
fragment_acks bool Si desea recibir los ACK (agradecimientos) de fragmentos a nivel de aplicación. true, lo que significa que el SDK recibirá los ACK y actuará en consecuencia.
restart_on_error bool Si se reinicia ante errores específicos. true, lo que significa que el SDK intenta reiniciar el streaming si se producen errores.
recalculate_metrics bool Si se vuelven a calcular las métricas. Cada llamada para recuperar las métricas puede recalcularlos para obtener el valor de "ejecución" más reciente, lo que podría tener un pequeño impacto en la CPU. Es posible que tenga que establecerse en false en dispositivos de huella/potencia extremadamente baja para ahorrar ciclos de la CPU. De lo contrario, no recomendamos utilizarlos false para este valor. true
nal_adaptation_flags uint32_t

Especifica las marcas de adaptación de unidad de capa de abstracción de red (NALU). Si la secuencia de bits está codificada en formato H.264, se puede procesar como sin procesar o empaquetadas en las NALU. Estas se encuentran en el Anexo B o en formato AVCC. La mayoría de los productores y consumidores de flujos elementales (codificadores y decodificadores de lectura) utilizan el formato del anexo B porque presenta ventajas, como la recuperación de errores. Los sistemas de nivel superior utilizan el formato AVCC, que es el formato predeterminado para MPEG, HLS, DASH, etc. La reproducción de consola utiliza las MSE (extensiones de fuente multimedia) del navegador para descodificar y reproducir la secuencia que utiliza el formato AVCC. Para H.264 (y para M-JPEG y H.265), el SDK proporciona capacidades de adaptación.

Muchas secuencias elementales se encuentran en el siguiente formato. En este ejemplo, Ab es el código de inicio de Anexo B (001 o 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)

En el caso del H.264, los datos privados del códec (CPD) se encuentran en los parámetros SPS (conjunto de parámetros de secuencia) y PPS (conjunto de parámetros de imagen), y se pueden adaptar al formato AVCC. A menos que la canalización multimedia proporcione el CPD por separado, la aplicación puede extraer el CPD desde el fotograma. Para ello, puede buscar la primera trama IDR (que debe contener el SPS y el PPS), extraer las dos NALU (que sí lo sonAb(Sps)Ab(Pps)) y colocarlas en el CPD. StreamDefinition

Para más información, consulte Marcas de adaptación de NAL.

El valor predeterminado consiste en adaptar el formato de Anexo B al formato AVCC tanto para los datos de fotogramas como para los datos privados de códec.
frame_rate uint32_t La velocidad de fotogramas prevista. Este valor se utiliza para calcular mejor las necesidades de búfer. 25
avg_bandwidth_bps uint32_t El ancho de banda medio previsto para la secuencia. Este valor se utiliza para calcular mejor las necesidades de búfer. 4 * 1024 * 1024
buffer_duration duration<uint64_t> La duración del búfer de la secuencia, en segundos. El SDK mantiene los fotogramas en el almacén de contenido hasta elbuffer_duration, tras lo cual los fotogramas anteriores se eliminan a medida que la ventana avanza. Si el fotograma que se va a eliminar no se ha enviado al backend, se invoca la llamada de retroceso del fotograma eliminado. Si la duración del búfer actual es mayor que max_latency, se invoca la devolución de llamada de presión de latencia de la secuencia. El búfer se recorta al siguiente inicio de fragmento cuando se recibe el ACK almacenado de forma persistente del fragmento. Esto indica que el contenido se ha almacenado de forma persistente y duradera en la nube, por lo que ya no es necesario almacenar el contenido en el dispositivo local. 120
replay_duration duration<uint64_t> El tiempo, en segundos, que se tarda en girar el lector actual hacia atrás para volver a reproducirlo en caso de error si está activado el reinicio. La restauración se detiene al inicio del búfer (en caso de que se acabe de iniciar el streaming o la ACK almacenada de forma persistente haya llegado). La restauración intenta ir a un fotograma clave que indique un inicio de fragmento. Si el error que provoca el reinicio no indica que el servidor esté inactivo (el servidor sigue activo y contiene los datos del fotograma en sus búferes internos), la reversión se detiene en el último fotograma ACK recibido. A continuación, avanza al siguiente fotograma clave, ya que todo el fragmento está almacenado en la memoria del host. 40
connection_staleness duration<uint64_t> El tiempo, expresado en segundos, tras el cual se invoca la devolución de señal de inactividad de la transmisión si el SDK no recibe el ACK almacenado en búfer. Indica que los fotogramas se envían desde el dispositivo, pero el backend no los reconoce. Esta condición indica un corte de conexión en el salto intermedio o en el balanceador de carga. 30
codec_id string El ID del códec para la pista MKV. V_MPEG4/ISO/AVC
track_name string El nombre de la pista MKV. kinesis_video
codecPrivateData unsigned char* El búfer de datos privados de códec (CPD). Si la canalización multimedia tiene la información sobre los CPD antes de que se inicie la secuencia, se pueden configurar en StreamDefinition.codecPrivateData. Los bits copiados y el búfer se pueden volver a utilizar o liberar después de la llamada para crear la secuencia. Sin embargo, si los datos no están disponibles cuando se crea la transmisión, se pueden configurar en una de las sobrecargas de la KinesisVideoStream.start(cpd) función. null
codecPrivateDataTamaño uint32_t El tamaño del búfer de datos privados de códec. 0

ClientMetrics

El ClientMetricsobjeto se llena al llamargetKinesisVideoMetrics.

Campos miembros

Campo Tipo de datos Descripción
versión UINT32 La versión de la estructura, definida en la macro CLIENT_METRICS_CURRENT_VERSION.
contentStoreSize UINT64 El tamaño del almacén de contenido general en bytes. Este es el valor especificado en DeviceInfo.StorageInfo.storageSize.
contentStoreAvailableTamaño UINT64 Tamaño de almacenamiento disponible actual en bytes.
contentStoreAllocatedTamaño UINT64 Tamaño asignado actual. Los tamaños asignado más disponible deben ser ligeramente más pequeños que el tamaño de almacenamiento general, debido a los datos la contabilidad interna y la implementación del almacén de contenido.
totalContentViewsTamaño UINT64 El tamaño de la memoria asignada para todas las vistas de contenido para todas las secuencias. Esto no se tiene en cuenta para el tamaño de almacenamiento. Esta memoria se asigna mediante la macro MEMALLOC, que se puede sobrescribir para proporcionar un asignador personalizado.
totalFrameRate UINT64 La velocidad de fotograma total observada en todas las secuencias.
totalTransferRate UINT64 La velocidad total de la secuencia observada en bytes por segundo en todas las secuencias.

StreamMetrics

El StreamMetricsobjeto se llena al llamargetKinesisVideoMetrics.

Campos miembros

Campo Tipo de datos Descripción
versión UINT32 La versión de la estructura, definida en la macro STREAM_METRICS_CURRENT_VERSION.
currentViewDuration UINT64 La duración de los fotogramas acumulados. En el caso de redes rápidas, esta duración es cero o la duración de la trama (a medida que se transmite la trama). Si la duración es superior a la max_latency especificada enStreamDefinition, se invoca la llamada de retorno de latencia de la transmisión si así se especifica. La duración se especifica en unidades 100 ns, que es la unidad de tiempo predeterminada para la capa PIC.
overallViewDuration UINT64 La duración de vista general. Si la transmisión está configurada sin ACK ni persistencia, este valor aumenta a medida que se colocan los fotogramas en la transmisión de vídeo de Kinesis y pasa a ser igual al buffer_duration de. StreamDefinition Cuando los ACK están activados y se recibe el ACK persistente, el búfer se recorta hasta el siguiente fotograma clave. Esto se debe a que la marca de tiempo del ACK indica el principio de todo el fragmento. La duración se especifica en unidades 100 ns, que es la unidad de tiempo predeterminada para la capa PIC.
currentViewSize UINT64 El tamaño en bytes del búfer actual.
overallViewSize UINT64 El tamaño general de vista en bytes.
currentFrameRate UINT64 La velocidad de fotogramas observada para la secuencia actual.
currentTransferRate UINT64 La velocidad de transferencia observada en bytes por segundo para la secuencia actual.