Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream...

215
Transmisiones de vídeo de Amazon Kinesis Developer Guide

Transcript of Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream...

Page 1: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeode Amazon Kinesis

Developer Guide

Page 2: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Transmisiones de vídeo de Amazon Kinesis: Developer GuideCopyright © 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any mannerthat is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks notowned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored byAmazon.

Page 3: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Table of Contents¿Qué es Amazon Transmisión de vídeo de Kinesis? ............................................................................... 1

¿Es la primera vez que usa Transmisión de vídeo de Kinesis? .......................................................... 2Requisitos del sistema ........................................................................................................................ 4

Requisitos de cámara ................................................................................................................. 4Cámaras probadas ............................................................................................................. 4Sistemas operativos probados .............................................................................................. 5

Requisitos de almacenamiento de SDK ......................................................................................... 5Funcionamiento .................................................................................................................................. 6

API y Producer Libraries .............................................................................................................. 7API de Transmisión de vídeo de Kinesis ................................................................................ 8Producer Libraries ............................................................................................................. 10

Control de acceso ..................................................................................................................... 10Sintaxis de la política ........................................................................................................ 10Acciones de Transmisión de vídeo de Kinesis ....................................................................... 11Nombres de recursos de Amazon (ARN) para Transmisión de vídeo de Kinesis .......................... 11Conceder a otras cuentas de IAM acceso a las transmisiones de vídeo de Kinesis ...................... 12Ejemplos de políticas ........................................................................................................ 12

Uso del cifrado en el servidor ..................................................................................................... 14¿Qué es el cifrado en el servidor para Transmisión de vídeo de Kinesis? ................................... 14Cuestiones sobre costos, regiones y desempeño ................................................................... 14¿Cómo puedo empezar a usar el cifrado en el servidor? ......................................................... 15Creación y uso de claves maestras de AWS KMS generadas por el usuario ............................... 15Permisos de para utilizar claves maestras de AWS KMS generadas por el usuario ...................... 16

Modelo de datos ....................................................................................................................... 17Elementos de encabezado de transmisión ............................................................................ 17Elementos de encabezado de fotogramas ............................................................................ 21Datos de fotograma en MKV .............................................................................................. 22

Introducción ..................................................................................................................................... 23Paso 1: Configurar una cuenta ................................................................................................... 23

Suscribirse en AWS .......................................................................................................... 23Creación de un usuario administrador de IAM ....................................................................... 24Paso siguiente .................................................................................................................. 24

Paso 2: Creación de una transmisión de vídeo de Kinesis ............................................................... 24Creación de una transmisión de vídeo con la consola ............................................................ 25Creación de una transmisión de vídeo con la AWS CLI .......................................................... 27Paso siguiente .................................................................................................................. 27

Siguientes pasos ...................................................................................................................... 27Producer libraries .............................................................................................................................. 28

Transmisión de vídeo de Kinesis Producer Client .......................................................................... 28Transmisión de vídeo de Kinesis Producer Library ......................................................................... 29Temas relacionados .................................................................................................................. 29Java Producer Library ............................................................................................................... 29

Procedimiento: Uso del SDK de Java Producer ..................................................................... 30Paso 1: descargar y configurar el código .............................................................................. 30Paso 2: escribir y examinar el código .................................................................................. 31Paso 3: ejecutar y verificar el código ................................................................................... 32

Android Producer Library ........................................................................................................... 33Procedimiento: Uso del SDK de Android Producer ................................................................. 33Paso 1: descargar y configurar el código .............................................................................. 35Paso 2: examinar el código ................................................................................................ 36Paso 3: ejecutar y verificar el código ................................................................................... 37

C++ Producer Library ................................................................................................................ 38Modelo de objetos ............................................................................................................ 38Inserción de medios en la transmisión ................................................................................. 38

iii

Page 4: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Interfaces de devolución de llamada .................................................................................... 38Procedimiento: Uso del SDK de C++ Producer ...................................................................... 39Paso 1: descargar y configurar el código .............................................................................. 41Paso 2: escribir y examinar el código .................................................................................. 42Paso 3: ejecutar y verificar el código ................................................................................... 45Uso del SDK C++ Producer como complemento de GStreamer ................................................ 46Uso del SDK C++ Producer como complemento de GStreamer en un contenedor de Docker ......... 46Uso del SDK C++ Producer en Raspberry Pi ........................................................................ 47

Referencia ............................................................................................................................... 52Límites de SDK Producer ................................................................................................... 52Referencia de códigos de error ........................................................................................... 54Marcas de adaptación de NAL ............................................................................................ 77Estructuras de Producer .................................................................................................... 78Estructuras de Stream ....................................................................................................... 79Devoluciones de llamada ................................................................................................... 91

Stream Parser Library ....................................................................................................................... 97Procedimiento: uso de Kinesis Video Stream Parser Library ............................................................ 97Requisitos previos ..................................................................................................................... 97Paso 1: descargar y configurar el código ...................................................................................... 98

Paso siguiente .................................................................................................................. 98Paso 2: escribir y examinar el código .......................................................................................... 98

StreamingMkvReader ........................................................................................................ 98FragmentMetadataVisitor .................................................................................................... 99OutputSegmentMerger ..................................................................................................... 100KinesisVideoExample ....................................................................................................... 101Paso siguiente ................................................................................................................ 103

Paso 3: ejecutar y verificar el código .......................................................................................... 103Ejemplos ........................................................................................................................................ 104

Requisitos previos ................................................................................................................... 104Complemento de GStreamer ..................................................................................................... 104

Descargar, compilar y configurar el elemento GStreamer ....................................................... 105Ejecutar el elemento GStreamer ........................................................................................ 106Lanzar comandos ............................................................................................................ 106Ejecute el elemento de GStreamer en un contenedor de Docker ............................................. 108Referencia de parámetros ................................................................................................ 110

API PutMedia ......................................................................................................................... 112Paso 1: descargar y configurar el código ............................................................................ 113Paso 2: escribir y examinar el código ................................................................................. 113Paso 3: ejecutar y verificar el código .................................................................................. 115

RTSP y Docker ....................................................................................................................... 116Requisitos previos ........................................................................................................... 116Crear la imagen de Docker. .............................................................................................. 116Ejecute la aplicación de ejemplo de RTSP .......................................................................... 116

GStreamer ............................................................................................................................. 117Requisitos previos ........................................................................................................... 117Ejecución del ejemplo de GStreamer ................................................................................. 117

Renderer ................................................................................................................................ 118Requisitos previos ........................................................................................................... 119Ejecución del ejemplo de Renderer .................................................................................... 119Funcionamiento ............................................................................................................... 119

Monitorización ................................................................................................................................. 121Monitorización de métricas con CloudWatch ................................................................................ 121

Orientación sobre las métricas de CloudWatch .................................................................... 122Registro de llamadas a la API con CloudTrail .............................................................................. 125

Transmisión de vídeo de Kinesis y CloudTrail ...................................................................... 125Entradas de archivos de registro de Transmisión de vídeo de Kinesis ...................................... 126

Límites ........................................................................................................................................... 129

iv

Page 5: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Límites de las API del plano de control ...................................................................................... 129Límites de las API de medios y de medios archivados .................................................................. 129

Solución de problemas ..................................................................................................................... 132Solución de problemas generales .............................................................................................. 132

Latencia demasiado alta ................................................................................................... 132Solución de problemas del uso compartido de recursos entre orígenes (API) .................................... 132

Error: “No se puede determinar el nombre del servicio o la operación que se debe autorizar” ....... 133Error: “Error al colocar un fotograma en la transmisión” ......................................................... 133Error: “El servicio cerró la conexión antes de que se recibiera el AckEvent final” ........................ 133Error: "STATUS_STORE_OUT_OF_MEMORY" .................................................................... 133

Solución de problemas de Java ................................................................................................ 134Habilitar los logs de Java ................................................................................................. 134

Solución de problemas de Producer Library ................................................................................ 134No se puede compilar el SDK de Producer ......................................................................... 135La transmisión de vídeo no aparece en la consola ............................................................... 135Error: "Security token included in the request is invalid" (El token de seguridad incluido en lasolicitud no es válido) durante el streaming de datos mediante la aplicación de demostraciónGStreamer ..................................................................................................................... 136Error: "Failed to submit frame to Kinesis Video client" (No se pudo enviar el fotograma al clientede Kinesis Video) ............................................................................................................ 136La aplicación GStreamer se detiene con el mensaje "transmisión detenida, motivo no negociado"en OS X ........................................................................................................................ 136Error: "Failed to allocate heap" (No se puede asignar el montón) al crear el cliente de KinesisVideo en la demostración de GStreamer en un dispositivo Raspberry Pi .................................. 137Error: "Instrucción ilegal" al ejecutar la demostración de GStreamer en un dispositivo RaspberryPi .................................................................................................................................. 137La cámara no se carga en un dispositivo Raspberry Pi ......................................................... 137No se puede encontrar la cámara en macOS High Sierra ...................................................... 138No se ha encontrado el archivo jni.h al compilar en macOS High Sierra ................................... 138Errores de cURL al ejecutar la aplicación de demostración GStreamer .................................... 138Aserción de rango/marca temporal en el tiempo de ejecución en un dispositivo Raspberry Pi ....... 138Aserción en gst_value_set_fraction_range_full en un dispositivo Raspberry Pi ............................ 138

Solución de problemas de Stream Parser Library ......................................................................... 138No se puede tener acceso a un solo fotograma de la transmisión ........................................... 139Error de descodificación de fragmentos .............................................................................. 139

Historial de revisión ......................................................................................................................... 140Referencia de la API ....................................................................................................................... 143

Actions .................................................................................................................................. 143Amazon Kinesis Video Streams ......................................................................................... 143Amazon Kinesis Video Streams Media ............................................................................... 173Amazon Kinesis Video Streams Archived Media .................................................................. 183

Data Types ............................................................................................................................ 196Amazon Kinesis Video Streams ......................................................................................... 197Amazon Kinesis Video Streams Media ............................................................................... 200Amazon Kinesis Video Streams Archived Media .................................................................. 202

Common Errors ...................................................................................................................... 207Common Parameters ............................................................................................................... 209

v

Page 6: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

¿Qué es Amazon Transmisión devídeo de Kinesis?

Amazon Transmisión de vídeo de Kinesis es un servicio de AWS completamente administrado que puedeutilizar para transmitir vídeos en directo desde dispositivos a la nube de AWS, o bien crear aplicacionespara el procesamiento de vídeo en tiempo real o el análisis de vídeo orientado a lotes.

Transmisión de vídeo de Kinesis no es solo almacenamiento para datos de vídeo. Puede utilizarlo paraver sus transmisiones de vídeo en tiempo real a medida que se reciben en la nube. Puede monitorear sustransmisiones en directo en la consola de administración de AWS o desarrollar sus propias aplicacionesde monitoreo que utiliza la biblioteca de la API de Transmisión de vídeo de Kinesis para mostrar vídeo endirecto.

Puede utilizar Transmisión de vídeo de Kinesis para capturar grandes cantidades de datos de vídeo envivo de millones de fuentes, como smartphones, cámaras de seguridad, webcams, cámaras integradasen vehículos, drones y otras fuentes. También puede enviar datos serializados en el tiempo que no seande vídeo, como, por ejemplo, datos de audio, imágenes térmicas, datos de profundidad, datos de radar ymucho más. Dado que la transmisión de vídeo en vivo se transmite desde estas fuentes a Kinesis, puedecompilar aplicaciones que obtengan acceso a los datos, fotograma a fotograma y en tiempo real, paraun procesamiento de baja latencia. Transmisión de vídeo de Kinesis es independiente del origen; puedetransmitir vídeo desde un equipo con cámara web utilizando la biblioteca GStreamer (p. 117) o desdeuna cámara en su red mediante RTSP.

También puede configurar su transmisión de vídeo de Kinesis para almacenar de forma duraderadatos de medios para el periodo de retención especificado. Transmisión de vídeo de Kinesis almacenaautomáticamente estos datos y los cifra en reposo. Además, Transmisión de vídeo de Kinesis aplicaíndices temporales a los datos almacenados en función de las marcas temporales del productor y lasmarcas temporales de ingesta. Puede crear aplicaciones que procesen periódicamente en lotes los datosde vídeo o crear aplicaciones que requieran un acceso ad hoc a los datos históricos según los distintoscasos de uso.

Sus aplicaciones personalizadas, en tiempo real u orientadas a lotes pueden ejecutarse en instanciasde Amazon EC2. Estas aplicaciones pueden procesar datos con algoritmos de aprendizaje profundo decódigo abierto o utilizar aplicaciones de terceros que se integren con Transmisión de vídeo de Kinesis.

Entre los beneficios de usar Transmisión de vídeo de Kinesis se incluyen los siguientes:

• Conexión y transmisión desde millones de dispositivos : Transmisión de vídeo de Kinesis le permiteconectarse y transmitir vídeo, audio y otros datos desde millones de dispositivos, smartphonescomerciales, drones, cámaras de salpicadero y mucho más. Puede usar las bibliotecas de productoresde Transmisión de vídeo de Kinesis para configurar sus dispositivos y transmitir de forma fiable entiempo real o como cargas de contenido multimedia posteriores.

• Almacenamiento duradero, cifrado e indexado de los datos : puede configurar su transmisión de vídeode Kinesis para almacenar de forma duradera los datos de medios durante periodos de retenciónpersonalizados. Transmisión de vídeo de Kinesis también genera un índice de los datos almacenadosen función de marcas generadas por el productor o marcas temporales de servicio. Sus aplicacionespueden recuperar fácilmente los datos especificados en una transmisión utilizando el índice de tiempo.

• Concéntrese en la administración de las aplicaciones en lugar de en la infraestructura: Transmisión devídeo de Kinesis es un servicio sin servidor, por lo que no hay ninguna infraestructura que configuraro administrar. No tiene que preocuparse por la implementación, la configuración y el escalado elásticode la infraestructura subyacente a medida que las transmisiones de datos y el número de aplicacionesconsumidoras crecen o se reducen. Transmisión de vídeo de Kinesis realiza automáticamente toda la

1

Page 7: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

¿Es la primera vez que usaTransmisión de vídeo de Kinesis?

administración y el mantenimiento necesarios para administrar las transmisiones, de modo que puedacentrarse en las aplicaciones, no en la infraestructura.

• Cree aplicaciones por lotes y en tiempo real sobre las transmisiones de datos: puede utilizar Transmisiónde vídeo de Kinesis para crear aplicaciones personalizadas en tiempo real que operan sobretransmisiones de datos en vivo y crear aplicaciones por lotes o ad hoc que operan de forma duraderasobre datos persistentes sin requisitos estrictos de latencia. Puede crear, implementar y administraraplicaciones personalizadas, soluciones de código abierto (Apache MXNet, OpenCV), domésticas ode terceros a través de AWS Marketplace, para procesar y analizar sus transmisiones. Las API deTransmisión de vídeo de Kinesis Get le permiten crear varias aplicaciones simultáneas que procesandatos en tiempo real o por lotes.

• Transmisión de datos de forma más segura: Transmisión de vídeo de Kinesis cifra todos los datoscuando fluyen a través del servicio y cuando los retiene. Transmisión de vídeo de Kinesis aplica cifradobasado en Transport Layer Security (TLS) en el streaming de datos desde dispositivos y cifra todos losdatos en reposo mediante AWS Key Management Service (AWS KMS). Además, puede administrar elacceso a sus datos con AWS Identity and Access Management (IAM).

• Pago por uso: para obtener más información, consulte Precios de AWS.

Transmisión de vídeo de Kinesis es adecuado para varias aplicaciones sectoriales. Por ejemplo:

• Iniciativas de ciudades inteligentes: envíe las transmisiones de vídeo desde las cámaras de tráfico alos flujos de vídeo de Kinesis y cree aplicaciones consumidoras que puedan realizar un seguimientode los patrones de tráfico en tiempo real. También puede procesar en lotes los datos históricos paracomprender los cambios resultantes de una nueva construcción o de variaciones en el direccionamientodel tráfico.

• Escenarios domésticos: puede conectar cámaras de seguridad domésticas, supervisores infantiles yotras cámaras integradas en dispositivos para crear experiencias que mantengan la seguridad de losconsumidores y haga que sus vidas sean más productivas y divertidas.

• Características inteligentes para el comercio minorista: capture vídeo a partir de varias cámaras entienda para automatizar el recuento de clientes, generar mapas de calor en la tienda para comprenderla actividad de los visitantes, optimizar el diseño y la exposición de la mercancía, además de otrasacciones que fomentan la satisfacción del cliente.

• Automatización industrial: emplee lectores de matrículas que detectan automáticamente cuándo saleny entran los camiones de los almacenes. Recuente los palés y supervise el movimiento de bienesy materiales en la superficie comercial. Utilice cámaras térmicas para notificar cuándo existe unsobrecalentamiento de la maquinaria industrial para utilizar un mantenimiento preventivo y proteger laseguridad de los empleados.

¿Es la primera vez que usa Transmisión de vídeode Kinesis?

Si es un usuario nuevo de Transmisión de vídeo de Kinesis, le recomendamos que lea las siguientessecciones en orden:

1. Amazon Transmisión de vídeo de Kinesis: cómo funciona (p. 6): para aprender los conceptosesenciales de Transmisión de vídeo de Kinesis.

2. Introducción a Transmisión de vídeo de Kinesis (p. 23): para configurar su cuenta y probarTransmisión de vídeo de Kinesis.

3. Transmisión de vídeo de Kinesis Producer Libraries (p. 28): para obtener más información sobre lacreación de una aplicación productora de Transmisión de vídeo de Kinesis.

4. Kinesis Video Stream Parser Library (p. 97): para obtener más información sobre el procesamientode marcos de datos entrantes en una aplicación consumidora de Transmisión de vídeo de Kinesis.

2

Page 8: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

¿Es la primera vez que usaTransmisión de vídeo de Kinesis?

5. Ejemplos de Amazon Transmisión de vídeo de Kinesis (p. 104): para ver más ejemplos de lo que sepuede hacer con Transmisión de vídeo de Kinesis.

3

Page 9: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Requisitos de cámara

Requisitos del sistema deTransmisión de vídeo de Kinesis

Las siguientes secciones contienen los requisitos de hardware, de software y de almacenamiento paraAmazon Transmisión de vídeo de Kinesis.

Temas• Requisitos de cámara (p. 4)• Requisitos de almacenamiento de SDK (p. 5)

Requisitos de cámaraLas cámaras que se utilizan para ejecutar el SDK Producer de Transmisión de vídeo de Kinesis y lasmuestras tienen los siguientes requisitos de memoria:

• La vista de contenido de SDK requiere 16 MB de memoria.• La configuración predeterminada de la aplicación de muestra es 512 MB. Este valor es adecuado para

los productores que tengan buena conectividad de red y no tengan requisitos de almacenamientoen búfer adicional. Si la conectividad de red es deficiente y se requiere más almacenamiento enbúfer, puede calcular el requisito de memoria por segundo de buffering multiplicando la velocidad defotogramas por segundo por el tamaño de memoria del fotograma. Para obtener más información acercade la asignación de memoria, consulte StorageInfo (p. 78).

Le recomendamos que utilice cámaras USB o RTSP (Real Time Streaming Protocol) que codifican datosutilizando H.264 ya que esto elimina la carga de trabajo de codificación de la CPU.

Actualmente, la aplicación de demostración no es compatible con el protocolo de datagramas de usuario(UDP) para streaming RTSP. Esta capacidad se añadirá en el futuro.

El SDK Producer admite los siguientes tipos de cámaras:

• Cámaras web.• Cámaras USB.• Cámaras con codificación H.264 (opción preferida).• Cámaras sin codificación H.264.• Módulo de cámara Raspberry Pi. Esta es la opción preferida para dispositivos Raspberry Pi, ya que se

conecta a la GPU para transferencia de datos de vídeo, por lo que no hay ninguna capacidad adicionalpara el procesamiento de CPU.

• Cámaras (red) RTSP. Estas cámaras son preferibles porque las secuencias de vídeo ya estáncodificadas en H.264.

Cámaras probadasHemos probado las siguientes cámaras USB con Transmisión de vídeo de Kinesis:

• Logitech 1080p

4

Page 10: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Sistemas operativos probados

• Logitech C930• Logitech C920 (H.264)• Logitech Brio (4K)• Cámara USB SVPRO objetivo gran angular ojo de pez 170 grados 1080P 2mp Sony IMX322 HD H.264

30 fps Cámara web USB mini aluminio

Hemos probado las siguientes cámaras IP con Transmisión de vídeo de Kinesis:

• Vivotek FD9371 - HTV/EHTV• Vivotek IB9371 - HT• Cámara IP Hikvision 3MP DS-2CD2035FWD-I• Sricam SP012 IP• Cámara IP VStarcam 720P WiFi (TCP)• Cámara IP Ipccam 1080P de vigilancia de seguridad• Cámara de red domo fija AXIS P3354

De las cámaras que se han probado con Transmisión de vídeo de Kinesis, las cámaras Vivotek tienen lasecuencia RTSP más coherente. La cámara Sricam tiene la secuencia RTSP menos coherente.

Sistemas operativos probadosHemos probado cámaras web y cámaras RTSP con los siguientes dispositivos y sistemas operativos:

• Mac mini• High Sierra

• Portátiles MacBook Pro• Sierra (10.12)• El Capitán (10,11)

• Portátiles HP con Ubuntu 16.04• Ubuntu 17.10 (contenedor Docker)• Raspberry Pi 3

Requisitos de almacenamiento de SDKLa instalación del Transmisión de vídeo de Kinesis Producer Libraries (p. 28) tiene un requisito dealmacenamiento mínimo de 170 MB y un requisito de almacenamiento recomendado de 512 MB.

5

Page 11: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Transmisión de vídeo deKinesis: cómo funciona

Temas• Soporte para la API y las Producer Libraries de Transmisión de vídeo de Kinesis (p. 7)• Control de acceso a los recursos de Transmisión de vídeo de Kinesis mediante IAM (p. 10)• Uso del cifrado en el servidor con Transmisión de vídeo de Kinesis (p. 14)• Modelo de datos de Transmisión de vídeo de Kinesis (p. 17)

Amazon Transmisión de vídeo de Kinesis es un servicio de AWS completamente administrado que lepermite transmitir vídeos en vivo desde dispositivos a la nube de AWS y almacenarlos de forma duradera.A continuación, puede crear sus propias aplicaciones de procesamiento de vídeo en tiempo real o realizaranálisis de vídeo orientado a lotes.

El siguiente diagrama ofrece información general sobre cómo funciona Transmisión de vídeo de Kinesis.

El diagrama ilustra la interacción entre los siguientes componentes:

6

Page 12: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

API y Producer Libraries

• Productor: cualquier origen que inserta datos en una transmisión de vídeo de Kinesis. Un productorpuede ser cualquier dispositivo generador de vídeo, como, por ejemplo, una cámara de seguridad, unacámara que se lleva puesta, la cámara de un smartphone o una cámara de salpicadero. Un productortambién puede enviar datos que no sean de vídeo, como, por ejemplo, fuentes de audio, imágenes odatos de radar.

Un único productor puede generar una o varias transmisiones de vídeo. Por ejemplo, una cámara devídeo puede enviar datos de vídeo a una transmisión de vídeo de Kinesis y datos de audio a otra.• Bibliotecas de productores de Transmisión de vídeo de Kinesis: conjunto de bibliotecas y software fácil

de usar que puede instalar y configurar en sus dispositivos. Estas bibliotecas facilitan la conexión deforma segura y la transmisión fiable de vídeo de diferentes formas, incluido en tiempo real, después dealmacenarlo en búfer temporalmente durante unos segundos o con cargas de medios "tras el hecho".

• Transmisión de vídeo de Kinesis: un recurso que le permite transportar datos de vídeo en vivo,almacenarlos opcionalmente y ponerlos a disposición para su consumo tanto en tiempo real como enlotes o de forma ad hoc. En una configuración típica, una transmisión de vídeo de Kinesis solo tiene unproductor que publica datos en ella.

La transmisión puede constar de audio, vídeo y transmisiones de datos codificadas temporalmentesimilares, como fuentes de detección de profundidad, fuentes de radar y mucho más. Puede crear unatransmisión de vídeo de Kinesis con la Consola de administración de AWS o mediante programación,utilizando los SDK de AWS.

Varias aplicaciones independientes pueden consumir una transmisión de vídeo de Kinesis en paralelo.• Consumidor: obtiene datos, como fragmentos y fotogramas, a partir de una transmisión de vídeo de

Kinesis para verlos, procesarlos o analizarlos. Generalmente, estos consumidores se denominanaplicaciones de Transmisión de vídeo de Kinesis. Puede escribir aplicaciones que consuman y procesendatos en transmisiones de vídeo de Kinesis en tiempo real o después de que los datos se almacenende forma duradera y se les aplique un indexado temporal si no se requiere un procesamiento de bajalatencia. Puede crear estas aplicaciones consumidoras para ejecutarlas en instancias de Amazon EC2.• Kinesis Video Stream Parser Library (p. 97): permite a las aplicaciones de Transmisión de vídeo de

Kinesis obtener medios de forma fiable a partir de transmisiones de vídeo de Kinesis con baja latencia.Además, analiza los límites de los fotogramas en los medios, de modo que las aplicaciones puedancentrarse en el procesamiento y el análisis de los propios fotogramas.

Soporte para la API y las Producer Libraries deTransmisión de vídeo de Kinesis

Transmisión de vídeo de Kinesis proporciona API para crear y administrar transmisiones y leer o escribirdatos multimedia en una transmisión y desde ella. La consola de Transmisión de vídeo de Kinesis, ademásde tener funcionalidad de administración, también es compatible con la reproducción de vídeo en vivo ybajo demanda. Transmisión de vídeo de Kinesis también ofrece un conjunto de bibliotecas de productoresque puede utilizar en su código de aplicación para extraer datos de sus orígenes de medios y cargarlos ensu transmisión de vídeo de Kinesis.

Temas• API de Transmisión de vídeo de Kinesis (p. 8)• Producer Libraries (p. 10)

7

Page 13: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

API de Transmisión de vídeo de Kinesis

API de Transmisión de vídeo de KinesisTransmisión de vídeo de Kinesis proporciona API para crear y administrar transmisiones de vídeo deKinesis. También proporciona API para leer y escribir datos de medios en una transmisión, tal y como seindica a continuación:

• API de productores: Transmisión de vídeo de Kinesis proporciona una API PutMedia para escribir datosde medios en una transmisión de vídeo de Kinesis. En una solicitud PutMedia, el productor envía unatransmisión de fragmentos de medios. Un fragmento es una secuencia de fotogramas autónoma. Losfotogramas que pertenecen a un fragmento no deben tener ningún tipo de dependencia de fotogramasde otros fragmentos. Para obtener más información, consulte PutMedia (p. 178).

A medida que llegan los fragmentos, Transmisión de vídeo de Kinesis asigna un número de fragmentoúnico, en orden ascendente. También almacena marcas temporales del lado del productor y el servidorpara cada fragmento, como metadatos específicos a Transmisión de vídeo de Kinesis.

• API de consumidores: las siguientes API permiten a los consumidores obtener datos de una transmisión:• GetMedia: al utilizar esta API, los consumidores deben identificar el fragmento de inicio.

Posteriormente, la API devuelve los fragmentos en el orden en el que se agregaron a la transmisión(en orden ascendente por número de fragmento). Los datos de medios en los fragmentos seempaquetan en un formato estructurado, como Matroska (MKV). Para obtener más información,consulte GetMedia (p. 174).

Note

GetMedia sabe dónde están los fragmentos (archivados en el almacén de datos odisponibles en tiempo real). Por ejemplo, si GetMedia determina que el fragmento de inicioestá archivado, empieza a devolver fragmentos desde el almacén de datos. Cuando necesitadevolver fragmentos más nuevos que no están archivados todavía, GetMedia cambiará aleer fragmentos desde un búfer de transmisión en memoria.

Este es un ejemplo de un consumidor continuo, que procesa fragmentos en el orden en el que sereciben en la transmisión.

GetMedia permite que las aplicaciones de procesamiento de vídeo fallen o se retrasen y despuésse pongan al día sin esfuerzo adicional. Al usar GetMedia, las aplicaciones pueden procesar datosarchivados en el almacén de datos, y a medida que la aplicación se pone al día, GetMedia sigueenviando datos de medios en tiempo real a medida que llegan.

• GetMediaFromFragmentList (y ListFragments): las aplicaciones de procesamientopor lotes se consideran consumidores sin conexión. Los consumidores sin conexión podríanoptar por recuperar explícitamente fragmentos de medios particulares o intervalos de vídeocombinando las API ListFragments y GetMediaFromFragmentList. ListFragments yGetMediaFromFragmentList permiten que una aplicación identifique los segmentos de vídeodurante un intervalo de tiempo o un intervalo de fragmentos específico y, a continuación, recupereesos fragmentos secuencialmente o de forma paralela para su procesamiento. Este enfoque esadecuado para conjuntos de aplicaciones MapReduce, que deben procesar rápidamente grandescantidades de datos en paralelo.

Por ejemplo, supongamos que un consumidor quiere procesar los fragmentos de vídeo de todo un día.El consumidor haría lo siguiente:1. Obtener una lista de fragmentos llamando a la API ListFragments y especificar un intervalo de

tiempo para seleccionar la colección de fragmentos deseada.

La API devuelve los metadatos de todos los fragmentos en el intervalo de tiempo especificado. Losmetadatos proporcionan información, como el número de fragmento, marcas temporales del ladodel productor o el servidor, etcétera.

2. Tomar la lista de metadatos de fragmentos y recuperar fragmentos, en cualquier orden. Porejemplo, para procesar todos los fragmentos del día, el consumidor podría optar por dividir la lista

8

Page 14: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

API de Transmisión de vídeo de Kinesis

en sublistas y hacer que procesos de trabajo (por ejemplo, varias instancias de Amazon EC2)recuperen los fragmentos en paralelo utilizando GetMediaFromFragmentListy los procesen enparalelo.

En el siguiente diagrama se muestra el flujo de datos de fragmentos durante estas llamadas a la API.

Cuando un productor envía una solicitud PutMedia, envía los metadatos de medios en la carga y, acontinuación, envía una secuencia de fragmentos de datos de medios. Tras recibir los datos, Transmisiónde vídeo de Kinesis almacena los datos de medios entrantes como fragmentos de Transmisión de vídeo deKinesis. Cada fragmento consta de los elementos siguientes:

• Una copia de los metadatos de medios• Un fragmento• Metadatos específicos a Transmisión de vídeo de Kinesis, por ejemplo, el número de fragmento y las

marcas temporales del lado del servidor y el productor

Cuando un consumidor solicita metadatos de medios, Transmisión de vídeo de Kinesis devuelve unatransmisión de fragmentos, empezando por el número de fragmento que especifique en la solicitud.

Si habilita la persistencia de datos para la transmisión, después de recibir un fragmento en la transmisión,Transmisión de vídeo de Kinesis también guarda una copia del fragmento en el almacén de datos.

9

Page 15: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Producer Libraries

Producer LibrariesDespués de crear una transmisión de vídeo de Kinesis, puede comenzar a enviar datos a la misma.Puede utilizar estas bibliotecas en su código de aplicación para extraer datos de sus orígenes de mediosy cargarlos en su transmisión de vídeo de Kinesis. Para obtener más información acerca de las producerlibraries, consulte Transmisión de vídeo de Kinesis Producer Libraries (p. 28).

Control de acceso a los recursos de Transmisión devídeo de Kinesis mediante IAM

Mediante el uso de AWS Identity and Access Management (IAM) con Amazon Transmisión de vídeo deKinesis, puede controlar si los usuarios de su organización pueden realizar una tarea usando operacionesAPI específicas de Transmisión de vídeo de Kinesis y si pueden utilizar recursos específicos de AWS.

Para obtener más información sobre IAM, consulte lo siguiente:

• AWS Identity and Access Management (IAM)• Introducción• Guía del usuario de IAM

Contenido• Sintaxis de la política (p. 10)• Acciones de Transmisión de vídeo de Kinesis (p. 11)• Nombres de recursos de Amazon (ARN) para Transmisión de vídeo de Kinesis (p. 11)• Conceder a otras cuentas de IAM acceso a las transmisiones de vídeo de Kinesis (p. 12)• Ejemplos de políticas para Transmisión de vídeo de Kinesis (p. 12)

Sintaxis de la políticaUna política de IAM es un documento JSON que consta de una o varias instrucciones. Cada instruccióntiene la estructura siguiente:

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ]}

Una instrucción está compuesta por varios elementos:

• Effect: el valor de effect puede ser Allow o Deny. De forma predeterminada, los usuarios de IAM notienen permiso para utilizar los recursos y las acciones de API; y se deniegan todas las solicitudes. Si

10

Page 16: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Acciones de Transmisión de vídeo de Kinesis

se concede un permiso explícito se anula el valor predeterminado. Una denegación explícita invalidacualquier permiso concedido.

• Action: el valor de action es la acción de la API para la que concede o deniega permisos.• Resource: el recurso al que afecta la acción. Para especificar un recurso en la instrucción, debe usar el

nombre de recurso de Amazon (ARN).• Condition: las condiciones son opcionales. Se pueden usar para controlar cuándo está en vigor la

política.

Al crear y administrar las políticas de IAM, es posible que quiera usar el generador de políticas de IAM y elsimulador de políticas de IAM.

Acciones de Transmisión de vídeo de KinesisEn una instrucción de política de IAM, puede especificar cualquier acción de API de cualquier servicioque sea compatible con IAM. Para Transmisión de vídeo de Kinesis, use el prefijo siguiente conel nombre de la acción de API: kinesisvideo:. Por ejemplo, kinesisvideo:CreateStream,kinesisvideo:ListStreams y kinesisvideo:DescribeStream.

Para especificar varias acciones en una única instrucción, sepárelas con comas del siguiente modo:

"Action": ["kinesisvideo:action1", "kinesisvideo:action2"]

También puede utilizar caracteres comodín para especificar varias acciones. Por ejemplo, puedeespecificar todas las acciones cuyo nombre comience por la palabra "Get" del siguiente modo:

"Action": "kinesisvideo:Get*"

Para especificar todas las operaciones de Transmisión de vídeo de Kinesis use el carácter comodín deasterisco (*) del siguiente modo:

"Action": "kinesisvideo:*"

Para ver la lista completa de las acciones de la API de Transmisión de vídeo de Kinesis, consulte laReferencia de la API de Transmisión de vídeo de Kinesis.

Nombres de recursos de Amazon (ARN) paraTransmisión de vídeo de KinesisCada instrucción de política de IAM se aplica a los recursos especificados utilizando sus ARN.

Utilice el siguiente formato de recursos de ARN para Transmisión de vídeo de Kinesis:

arn:aws:kinesisvideo:region:account-id:stream/stream-name/code

Por ejemplo:

"Resource": arn:aws:kinesisvideo::*:111122223333:stream/my-stream/0123456789012

Puede obtener el ARN de una secuencia utilizando DescribeStream.

11

Page 17: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Conceder a otras cuentas de IAM accesoa las transmisiones de vídeo de Kinesis

Conceder a otras cuentas de IAM acceso a lastransmisiones de vídeo de KinesisEs posible que necesite conceder permiso a otras cuentas de IAM para llevar a cabo operaciones en unaTransmisión de vídeo de Kinesis. A continuación, se ofrece información general en la que se describen lospasos generales para conceder acceso a las transmisiones de vídeo entre cuentas:

1. Obtenga el ID de cuenta de 12 dígitos de la cuenta a la que desee conceder permisos para realizaroperaciones en la transmisión (por ejemplo, 111111111111).

2. Cree una política administrada en la cuenta que posea la transmisión que permita el nivel de accesoque desee conceder. Para ver políticas de ejemplo para recursos de Transmisión de vídeo de Kinesis,consulte Ejemplos de políticas (p. 12) en la siguiente sección.

3. Cree un rol, especificando la cuenta a la que está la concediendo permisos, y asocie la política que hacreado en el paso anterior.

4. Cree una política administrada que permita la acción AssumeRole sobre la función que ha creado enel paso anterior. Por ejemplo, el rol podría tener el siguiente aspecto:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/CustomRole" }}

Para obtener instrucciones paso a paso sobre la concesión de acceso a varias cuentas, consulteDelegación del acceso entre cuentas de AWS mediante roles de IAM.

Ejemplos de políticas para Transmisión de vídeo deKinesisLos siguientes ejemplos de políticas muestran cómo puede controlar el acceso de los usuarios a suTransmisión de vídeo de Kinesis.

Example 1: Permitir a los usuarios obtener datos de cualquier Transmisión de vídeo de Kinesis

Esta política permite a un usuario o grupo realizar las operaciones DescribeStream,GetDataEndpoint, GetMedia, ListStreams y ListTagsForStream en cualquier Transmisión devídeo de Kinesis. Esta política es adecuada para los usuarios que pueden recibir datos de cualquiertransmisión de vídeo.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:Describe*", "kinesisvideo:Get*", "kinesisvideo:List*" ], "Resource": "*"

12

Page 18: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Ejemplos de políticas

} ]}

Example 2: Permitir a un usuario crear una Transmisión de vídeo de Kinesis y escribir datos enella

Esta política permite a un usuario o grupo realizar las operaciones CreateStream y PutMedia. Estapolítica es adecuada para una cámara de seguridad que pueda crear una transmisión de vídeo y enviardatos a la misma.

{ "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:CreateStream", "kinesisvideo:PutMedia" ], "Resource": "*" } ]}

Example 3: Permitir a un usuario acceso completo a todos los recursos de Transmisión de vídeode Kinesis

Esta política permite a un usuario o grupo realizar cualquier operación de Transmisión de vídeo de Kinesisen cualquier recurso. Esta política es adecuada para los administradores.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesisvideo:*", "Resource": "*" } ]}

Example 4: Permitir a un usuario escribir datos en una Transmisión de vídeo de Kinesis específica

Esta política permite a un usuario o a un grupo escribir datos en una transmisión de vídeo específica. Estapolítica es adecuada para un dispositivo que pueda enviar datos a una única transmisión.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesisvideo:PutMedia", "Resource": "arn:aws:kinesisvideo:us-west-2:123456789012:stream/your_stream/0123456789012" } ]}

13

Page 19: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Uso del cifrado en el servidor

Uso del cifrado en el servidor con Transmisión devídeo de Kinesis

El cifrado en el servidor mediante las claves de AWS Key Management Service (AWS KMS) le facilita latarea de cumplir los estrictos requisitos de administración de datos mediante el cifrado de los datos enreposo en Amazon Transmisión de vídeo de Kinesis.

Temas• ¿Qué es el cifrado en el servidor para Transmisión de vídeo de Kinesis? (p. 14)• Cuestiones sobre costos, regiones y desempeño (p. 14)• ¿Cómo puedo empezar a usar el cifrado en el servidor? (p. 15)• Creación y uso de claves maestras de AWS KMS generadas por el usuario (p. 15)• Permisos de para utilizar claves maestras de AWS KMS generadas por el usuario (p. 16)

¿Qué es el cifrado en el servidor para Transmisión devídeo de Kinesis?El cifrado en el servidor es una característica de Transmisión de vídeo de Kinesis que cifraautomáticamente los datos antes de que entren en reposo mediante una clave maestra del cliente(CMK) de AWS KMS que usted especifique. Los datos se cifran antes de transmitirlos a la capa dealmacenamiento de la transmisión de Transmisión de vídeo de Kinesis y se descifran después derecuperarlos del almacenamiento. Como resultado, los datos siempre se cifran en reposo en el servicio deTransmisión de vídeo de Kinesis.

Con el cifrado en el servidor, sus consumidores y productores de una Transmisión de vídeo de Kinesisno tendrán que ocuparse de administrar claves maestras ni realizar operaciones criptográficas. Si laretención de datos está habilitada, los datos se cifran automáticamente a medida que entran y salen delservicio de Transmisión de vídeo de Kinesis, de modo que los datos en reposo quedan cifrados. AWS KMSproporciona todas las claves maestras que usa la característica de cifrado en el servidor. AWS KMS facilitael uso de una CMK para Transmisión de vídeo de Kinesis administrada por AWS, una CMK de AWS KMSespecificada por el usuario o una clave maestra importada del servicio de AWS KMS.

Cuestiones sobre costos, regiones y desempeñoCuando aplique el cifrado de servidor, se le aplicarán los costos de uso de las API y las claves de AWSKMS. A diferencia de las claves maestras de AWS KMS personalizadas, la clave maestra del cliente (CMK)(Default) aws/kinesis-video se ofrece sin cargo alguno. No obstante, debe pagar los costos deuso de la API que Transmisión de vídeo de Kinesis genera en su nombre.

Los costos de uso de la API se aplican a todas las CMK, incluidas las personalizadas. Los costos de KMSse escalan con el número de credenciales de usuario que usa en sus productores y consumidores dedatos, porque cada conjunto de credenciales de usuario requiere una llamada a la API distinta a AWSKMS.

A continuación se describen los costos por recurso:

Claves

• La CMK para Transmisión de vídeo de Kinesis administrada por AWS (alias = aws/kinesis-video) esgratuita.

• Las claves de AWS KMS generadas por el usuario están sujetas a los costos por claves de AWS KMS.Para obtener más información, consulte Precios de AWS Key Management Service.

14

Page 20: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

¿Cómo puedo empezar a usar el cifrado en el servidor?

Uso de la API de AWS KMSLas solicitudes de API para generar nuevas claves de cifrado de datos o recuperar claves de cifradoexistentes aumentan a medida que aumenta el tráfico, y están sujetas a los costos de uso de AWS KMS.Para obtener más información, consulte Precios de AWS Key Management Service: uso.

Transmisión de vídeo de Kinesis genera solicitudes de claves aunque la retención esté establecida en 0(sin retención).

Disponibilidad del cifrado en el servidor por regiónEl cifrado en el servidor de Transmisión de vídeo de Kinesis se ofrece en todas las regiones de AWS en lasque está disponible Transmisión de vídeo de Kinesis.

¿Cómo puedo empezar a usar el cifrado en elservidor?El cifrado en el servidor siempre está activado en una Transmisión de vídeo de Kinesis. Si unaclave proporcionada por el usuario no se especifica cuando se crea la transmisión, se utiliza la clavepredeterminada (proporcionada por Transmisión de vídeo de Kinesis).

Se debe asignar una clave maestra de AWS KMS proporcionada por el usuario a una Transmisiónde vídeo de Kinesis cuando esta se crea. No se puede asignar otra clave diferente a una transmisiónposteriormente con la API UpdateStream.

Puede asignar una clave maestra de AWS KMS proporcionada por el usuario a una Transmisión de vídeode Kinesis de dos maneras:

• Al crear una Transmisión de vídeo de Kinesis en la Consola de administración de AWS, especifique laclave maestra de AWS KMS en la sección Encryption de la página Create new Kinesis Video stream.

• Al crear una Transmisión de vídeo de Kinesis con la API CreateStream, especifique el ID clave en elparámetro KmsKeyId.

Creación y uso de claves maestras de AWS KMSgeneradas por el usuarioEsta sección describe cómo crear y usar sus propias claves maestras de AWS KMS en lugar de usar laclave maestra administrada por Amazon Transmisión de vídeo de Kinesis.

Creación de claves maestras de AWS KMS generadas por elusuarioPara obtener más información sobre cómo crear sus propias claves maestras, consulte Creación de clavesen la AWS Key Management Service Developer Guide. Después de crear las claves para su cuenta, elservicio de Transmisión de vídeo de Kinesis devuelve estas claves en la lista de claves maestras de KMS.

Uso de claves maestras de AWS KMS generadas por el usuarioUna vez que los permisos adecuados se apliquen a sus consumidores, productores y administradores,puede utilizar las claves maestras de AWS KMS personalizadas en su propia cuenta de AWS o en otracuenta de AWS. Todas las claves maestras de AWS KMS en su cuenta aparecerán en la lista KMS MasterKey de la consola.

15

Page 21: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Permisos de para utilizar claves maestrasde AWS KMS generadas por el usuario

Para utilizar las claves maestras de AWS KMS personalizadas que se encuentren en otra cuenta,necesitará permisos para utilizar las claves. Asimismo, debe crear la transmisión utilizando la APICreateStream. No puede utilizar claves maestras de AWS KMS de distintas cuentas en transmisionescreadas en la consola.

Note

No se obtiene acceso a la clave de AWS KMS hasta que se ejecuta la operación PutMedia oGetMedia. Así, se obtienen los siguientes resultados:

• Si la clave que especifique no existe, la operación CreateStream se completarácorrectamente, pero las operaciones PutMedia y GetMedia de la transmisión fallarán.

• Si utiliza la clave maestra facilitada (aws/kinesis-video), la clave no estará presente en sucuenta hasta que se realice la primera operación PutMedia o GetMedia.

Permisos de para utilizar claves maestras de AWSKMS generadas por el usuarioAntes de poder utilizar el cifrado en el servidor con una clave maestra de AWS KMS generada por elusuario, debe configurar políticas claves de AWS KMS para permitir el cifrado de transmisiones y el cifradoy el descifrado de los registros de la transmisión. Para obtener ejemplos y más información sobre lospermisos de AWS KMS, consulte AWS KMS API Permissions: Actions and Resources Reference.

Note

El uso de las claves de servicio predeterminadas para el cifrado no requiere que se apliquenpermisos de IAM personalizados.

Antes de utilizar las claves maestras de AWS KMS generadas por el usuario, asegúrese de que susproductores y consumidores de Transmisión de vídeo de Kinesis (entidades principales de IAM) seanusuarios en la política de claves maestras de AWS KMS. De lo contrario, las labores de escritura y lecturade una secuencia producirán un error, lo que, en definitiva, podría resultar en pérdida de datos, retrasosen el procesamiento, aplicaciones colgadas. Puede administrar los permisos para las claves de AWS KMScon las políticas de IAM. Para obtener más información, consulte Using IAM Policies with AWS KMS.

Ejemplo de permisos para productoresSus productores de Transmisión de vídeo de Kinesis deben tener el permiso kms:GenerateDataKey:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "kinesis-video:PutMedia", ], "Resource": "arn:aws:kinesis-video:*:123456789012:MyStream" } ]}

16

Page 22: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Modelo de datos

Ejemplo de permisos para consumidoresSus consumidores de Transmisión de vídeo de Kinesis deben tener el permiso kms:Decrypt:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "kinesis-video:GetMedia", ], "Resource": "arn:aws:kinesis-video:*:123456789012:MyStream" } ]}

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

El Producer libraries (p. 28) y el Stream Parser Library (p. 97) envían y reciben los datos de vídeo enun formato compatible con la integración de información junto a los datos de vídeo. Este formato se basaen la especificación Matroska (MKV).

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

El Transmisión de vídeo de Kinesis Producer Libraries (p. 28) usa los tipos StreamDefinition yFrame tipos para producir encabezados de transmisiones MKV, encabezados de fotogramas y datos defotogramas.

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 (p. 38).

Temas• Elementos de encabezado de transmisión (p. 17)• Elementos de encabezado de fotogramas (p. 21)• Datos de fotograma en MKV (p. 22)

Elementos de encabezado de transmisiónLos siguientes elementos de encabezado MKV los utiliza StreamDefinition (definidos enStreamDefinition.h).

17

Page 23: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Elementos de encabezado de transmisión

Elemento Descripción Valores típicos

stream_name Se corresponde con el nombrede la Transmisión de vídeo deKinesis.

my-stream

retention_period El tiempo que Transmisión devídeo de Kinesis mantiene losdatos de transmisión. Especifique0 para una transmisión que nomantiene los datos.

24

tags colección clave-valor de datos deusuarios. Estos datos se muestraen la Consola de administraciónde AWS y pueden leerlos lasaplicaciones cliente para filtrar uobtener información sobre unatransmisión.

 

kms_key_id Si está presente, es la clavemaestra de AWS KMS definidapor el usuario utilizada paracifrar datos en la transmisión.Si no está presente, los datosse cifrarán con la clave maestrafacilitada por Kinesis (aws/kinesis-video).

01234567-89ab-cdef-0123-456789ab

streaming_type Actualmente, el único tipode streaming válido esSTREAMING_TYPE_REALTIME.

STREAMING_TYPE_REALTIME

content_type El tipo de contenido definidopor el usuario. Para que losdatos de streaming de vídeo sereproduzcan en la consola, el tipode contenido debe ser video/h264.

vídeo/h264

max_latency En la actualidad, este valor no seutiliza y debe establecerse en 0.

0

fragment_duration Este valor es una estimación dela duración recomendada de susfragmentos y se utiliza con finesde optimización. La duraciónreal del fragmento se determinamediante los datos de streaming.

2

timecode_scale Indica la escala empleadapor las marcas temporalesde los fotogramas. Elvalor predeterminado es1 milisegundo. Si se especifica0, se asigna también elvalor predeterminado de 1milisegundo. Este valor puede

18

Page 24: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Elementos de encabezado de transmisión

Elemento Descripción Valores típicosestar comprendido entre 100nanosegundos y 1 segundo.

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

key_frame_fragmentation Si se establece en true, latransmisión inicia un nuevoclúster cuando recibe unfotograma clave.

true

frame_timecodes Si es true, Transmisión devídeo de Kinesis marca losfotogramas cuando los recibe.Si es false, Transmisiónde vídeo de Kinesis utiliza eltiempo de descodificación de losfotogramas recibidos.

true

absolute_fragment_time Si es true, los códigostemporales del clúster seinterpretan como si se usara untiempo absoluto (por ejemplo,el del reloj del sistema delproductor). Si es false, loscódigos temporales del clústerse interpretan como relativos a lahora de inicio de la transmisión.

true

fragment_acks Si es true, se envíaconfirmación (ACK) cuandoTransmisión de vídeo de Kinesisreciba los datos. Los ACKse pueden recibir mediantedevoluciones de llamada deKinesisVideoStreamFragmentAckoKinesisVideoStreamParseFragmentAck.

true

restart_on_error Indica si la transmisión debereanudarse después de que sepresente un error en la misma.

true

nal_adaptation_flags Indica si los datos privadosdel códec o adaptación NAL(Network Abstraction Layer)están presentes en el contenido.Los indicadores válidos sonNAL_ADAPTATION_ANNEXB_NALSyNAL_ADAPTATION_ANNEXB_CPD_NALS.

NAL_ADAPTATION_ANNEXB_NALS

19

Page 25: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Elementos de encabezado de transmisión

Elemento Descripción Valores típicos

frame_rate Una estimación de la velocidadde fotogramas del contenido.Este valor se utiliza para laoptimización; la velocidad defotogramas real se determinaen función de la velocidadde los datos entrantes. Si seespecifica 0, se asigna el valorpredeterminado de 24.

24

avg_bandwith_bps Una estimación del ancho debanda del contenido. Este valorse utiliza para la optimización; lavelocidad real se determina enfunción del ancho de banda delos datos entrantes. Por ejemplo,para una transmisión de vídeocon una resolución de 720p quese ejecute a 25 FPS, podríaesperar un ancho de bandamedio de 5 Mbps.

5

buffer_duration periodo que ha de almacenarseen búfer el contenido en elproductor. Si existe una bajalatencia de red, este valor puedereducirse; si la latencia de redes alta, al aumentar este valorse impide que se borren losfotogramas antes de poderenviarlos si se produce un erroral colocar los fotogramas en elbúfer más pequeño.

replay_duration la cantidad de tiempo que se"rebobinará" la transmisión dedatos de vídeo en caso de unapérdida de conexión. Este valorpuede ser cero si la pérdidade fotogramas debida a laausencia de conexión no suponeun problema; el valor puedeaumentarse si la aplicaciónconsumidora puede eliminarlos fotogramas redundantes.Este valor debe ser inferiora la duración del búfer; de locontrario, se usa la duración delbúfer.

connection_staleness periodo que se mantiene unaconexión cuando no se recibendatos.

20

Page 26: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Elementos de encabezado de fotogramas

Elemento Descripción Valores típicos

codec_id El códec utilizado por elcontenido. Para obtener másinformación, consulte CodecIDen la especificación de Matroska.

V_MPEG2

track_name El nombre de la pista definido porel usuario.

my_track

codecPrivateData datos facilitados por elcodificador empleado paradescodificar los datos de losfotogramas, por ejemplo,la anchura y altura de losmismos en píxeles, ya quees una información necesariapara muchos consumidores aposteriori. En la C++ ProducerLibrary (p. 38), la matrizgMkvTrackVideoBits enMkvStatics.cpp incluye elancho y el alto en píxeles delfotograma.

codecPrivateDataSize El tamaño de los datos en elparámetro codecPrivateData.

Elementos de encabezado de fotogramasLos siguientes elementos de encabezado MKV los utiliza Frame (definidos en el paqueteKinesisVideoPic, 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, losfotogramas claves inician un nuevo fragmento.

• FRAME_FLAG_DISCARDABLE_FRAME: indica al descodificador que puede descartar este fotograma sila 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 aparecerantes 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 alinicio del fragmento.

• Duration: duración de reproducción del fotograma.• Size: tamaño en bytes de los datos del fotograma

21

Page 27: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Datos de fotograma en MKV

Datos de fotograma en MKVLos datos de frame.frameData podrían contener solamente datos multimedia del fotograma o tambiéninformación anidada adicional de encabezados, en función del esquema de codificación empleado. Paraque se muestren en la Consola de administración de AWS, los datos deben estar codificados en el códecH.264, pero Transmisión de vídeo de Kinesis puede recibir transmisiones de datos serializadas en eltiempo en cualquier formato.

22

Page 28: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 1: Configurar una cuenta

Introducción a Transmisión de vídeode Kinesis

En esta sección se describe cómo realizar las siguientes tareas en Amazon Transmisión de vídeo deKinesis:

• Configurar su cuenta de AWS y crear un administrador, si aún no lo ha hecho.• Crear un Transmisión de vídeo de Kinesis.

En otras secciones de esta guía se describe cómo enviar datos a la transmisión y ver datos de latransmisión.

Si es la primera vez que utiliza Amazon Transmisión de vídeo de Kinesis, le recomendamos que leaAmazon Transmisión de vídeo de Kinesis: cómo funciona (p. 6) antes de continuar.

Note

Seguir el ejemplo de introducción no supondrá incurrir en ningún cargo en su cuenta de AWS.Consulte Precios de Amazon Transmisión de vídeo de Kinesis para conocer los costos de datosen su región.

Temas• Paso 1: configurar una cuenta de AWS y crear un administrador (p. 23)• Paso 2: Creación de una transmisión de vídeo de Kinesis (p. 24)• Siguientes pasos (p. 27)

Paso 1: configurar una cuenta de AWS y crear unadministrador

Antes de usar Transmisión de vídeo de Kinesis por primera vez, realice las siguientes tareas:

1. Suscribirse en AWS (p. 23) (a no ser que ya tenga una cuenta)2. Creación de un usuario administrador de IAM (p. 24)

Suscribirse en AWSSi ya tiene una cuenta de AWS, puede omitir este paso.

Cuando se inscribe en Amazon Web Services (AWS), su cuenta de AWS se registra automáticamenteen todos los servicios de AWS, incluido Transmisión de vídeo de Kinesis. Al utilizar Transmisión de vídeode Kinesis, se le cobrará en función de la cantidad de datos recibidos, almacenados y consumidos desdeel servicio. Si es cliente nuevo de AWS, puede comenzar con Transmisión de vídeo de Kinesis de formagratuita. Para obtener más información, consulte Capa de uso gratuita de AWS.

Para crear una cuenta de AWS

1. Abra https://aws.amazon.com/ y después elija Create an AWS Account.

23

Page 29: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Creación de un usuario administrador de IAM

Note

Esto podría no estar disponible en el navegador si ha iniciado previamente sesión en laConsola de administración de AWS. En ese caso, elija Sign in to a different account ydespués Create a new AWS account.

2. Siga las instrucciones en línea.

Parte del procedimiento de inscripción consiste en recibir una llamada telefónica e introducir unnúmero PIN con el teclado del teléfono.

Anote su ID de cuenta de AWS porque lo necesitará en la siguiente tarea.

Creación de un usuario administrador de IAMCuando se inscriba en AWS, tendrá que proporcionar una dirección de correo electrónico y la contraseñaasociada a su cuenta de AWS. Esto constituye su usuario raíz de la cuenta de AWS, cuyas credencialespermiten el acceso completo a todos sus recursos de AWS.

Note

Por motivos de seguridad, le recomendamos que utilice el usuario raíz solo para crear unadministrador, que es un usuario de IAM con permisos completos sobre su cuenta de AWS.Puede utilizar este administrador para crear otros usuarios y roles de IAM con permisos limitados.Para obtener más información, consulte IAM Best Practices y Creating an Admin User and Groupen la guía del usuario de IAM.

Para crear un administrador e iniciar sesión en la consola

1. Crear un administrador en su cuenta de AWS. Para obtener instrucciones, consulte Creating Your FirstIAM User and Administrators Group en la Guía del usuario de IAM.

2. Como administrador, podrá iniciar sesión en la consola con una URL especial. Para obtener másinformación, consulte Cómo inician sesión los usuarios en su cuenta en la Guía del usuario de IAM.

El administrador puede crear más usuarios en la cuenta. De forma predeterminada, los usuarios de IAMno tienen permisos. El administrador puede crear usuarios y administrar sus permisos. Para obtener másinformación, consulte Creating Your First IAM User and Administrators Group.

Para obtener más información sobre IAM, consulte lo siguiente:

• AWS Identity and Access Management (IAM)• Introducción• Guía del usuario de IAM

Paso siguientePaso 2: Creación de una transmisión de vídeo de Kinesis (p. 24)

Paso 2: Creación de una transmisión de vídeo deKinesis

En esta sección se describe cómo crear una transmisión de vídeo de Kinesis.

24

Page 30: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Creación de una transmisión de vídeo con la consola

Esta sección contiene los siguientes procedimientos:

• the section called “Creación de una transmisión de vídeo con la consola” (p. 25)• the section called “Creación de una transmisión de vídeo con la AWS CLI” (p. 27)

Creación de una transmisión de vídeo con la consola1. Inicie sesión en la Consola de administración de AWS y abra la consola de Kinesis en https://

console.aws.amazon.com/kinesis.2. En la página Manage streams, seleccione Create.3. En la página Create new KinesisVideo Stream, escriba ExampleStream para el nombre de la

transmisión. Deje la casilla Use default settings seleccionada.

25

Page 31: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Creación de una transmisión de vídeo con la consola

4. Seleccione Create stream.

26

Page 32: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Creación de una transmisión de vídeo con la AWS CLI

5. Una vez que Transmisión de vídeo de Kinesis haya creado la transmisión, analice los detalles en lapágina ExampleStream.

Creación de una transmisión de vídeo con la AWS CLI1. Asegúrese de que ha instalado y configurado la AWS CLI. Para obtener más información, consulte la

documentación de la Interfaz de línea de comandos de AWS.2. Ejecute el siguiente comando Create-Stream en la AWS CLI:

$ aws kinesisvideo create-stream --stream-name "MyKinesisVideoStream" --data-retention-in-hours "24"

Paso siguienteSiguientes pasos (p. 27)

Siguientes pasosCuando tenga una transmisión de vídeo, podrá comenzar a enviar datos desde una aplicación Java.En el código, utilice las opciones de Transmisión de vídeo de Kinesis para configurar su aplicación paraextraer los datos de sus orígenes de medios y cargarlos en su transmisión. Para obtener más información,consulte Uso de la Java Producer Library (p. 29).

27

Page 33: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Transmisión de vídeo de Kinesis Producer Client

Transmisión de vídeo de KinesisProducer Libraries

Las bibliotecas de Amazon Transmisión de vídeo de Kinesis Producer son un conjunto de bibliotecasfáciles de usar que forman parte del SDK de Transmisión de vídeo de Kinesis Producer. El cliente utilizalas bibliotecas y el SDK para crear la aplicación en el dispositivo para conectarse de forma segura aTransmisión de vídeo de Kinesis y transmitir vídeos y otros datos multimedia que se pueden ver en laconsola o en las aplicaciones cliente en tiempo real.

Los datos pueden ser medios transmitidos de las siguientes formas:

• Streaming de datos de medios en tiempo real• Streaming de datos de medios tras almacenarlos en búfer unos segundos• Streaming de carga de medios "tras el hecho"

Después de crear una transmisión de Transmisión de vídeo de Kinesis, puede comenzar a enviardatos a la misma. Puede utilizar el SDK para crear código de aplicación que extraiga los datos devídeo (fotogramas) de la fuente de los medios y los cargue a Transmisión de vídeo de Kinesis. Estasaplicaciones también se denominan aplicaciones productoras.

Las Producer libraries contienen los siguientes componentes:

• Transmisión de vídeo de Kinesis Producer Client (p. 28)• Transmisión de vídeo de Kinesis Producer Library (p. 29)

Transmisión de vídeo de Kinesis Producer ClientEl Transmisión de vídeo de Kinesis Producer Client incluye una única clase KinesisVideoClient.Esta clase administra fuentes de medios, recibe datos desde las fuentes y administra el ciclo de vida de latransmisión a medida que fluyen los datos desde un origen de medios a Transmisión de vídeo de Kinesis.Además, proporciona una interfaz MediaSource para definir la interacción entre Transmisión de vídeo deKinesis y su hardware y software.

Un origen de medios puede ser casi cualquier cosa. Por ejemplo, puede utilizar un origen de mediosque sea una cámara o un micrófono. Los orígenes de medios no se limitan exclusivamente a fuentes deaudio y vídeo. Por ejemplo, los logs de datos pueden ser archivos de texto, pero aun así pueden enviarsecomo flujos de datos. También puede disponer de varias cámaras en un teléfono que transmitan datossimultáneamente.

Para obtener datos de cualquiera de estas fuentes, puede implementar la interfaz MediaSource. Estainterfaz habilita situaciones adicionales para las que no facilitamos soporte integrado. Por ejemplo, podríadecidir enviar lo siguiente a Transmisión de vídeo de Kinesis:

• Una transmisión de datos de diagnóstico (por ejemplo, logs y eventos de aplicaciones)• Datos de cámaras de infrarrojos, radares o cámaras de profundidad

Transmisión de vídeo de Kinesis no proporciona implementaciones integradas para dispositivosproductores de medios como, por ejemplo, cámaras. Para extraer datos de estos dispositivos, debeimplementar código, por lo que estará creando su propia implementación de origen de mediospersonalizada. Tras ello, puede registrar de forma explícita sus fuentes de medios personalizadas conKinesisVideoClient, que carga los datos a Transmisión de vídeo de Kinesis.

28

Page 34: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Transmisión de vídeo de Kinesis Producer Library

El Transmisión de vídeo de Kinesis Producer Client está disponible para aplicaciones Java y Android.Para obtener más información, consulte Uso de la Java Producer Library (p. 29) y Uso de la AndroidProducer Library (p. 33).

Transmisión de vídeo de Kinesis Producer LibraryLa Transmisión de vídeo de Kinesis Producer Library forma parte del Transmisión de vídeo de KinesisProducer Client. La biblioteca también está disponible para que aquellos que desean una mayorintegración con Transmisión de vídeo de Kinesis la utilicen directamente. Permite la integración desdedispositivos con sistemas operativos propios, pilas de red o recursos en el dispositivo limitados.

La Transmisión de vídeo de Kinesis Producer Library implementa la máquina de estado para el streaminga Transmisión de vídeo de Kinesis. Proporciona enlaces de devolución de llamada, que requieren queproporcione su propia implementación de transporte y administre de forma explícita cada mensaje entrantey saliente desde el servicio.

Puede optar por usar la Transmisión de vídeo de Kinesis Producer Library directamente por las razonessiguientes:

• El dispositivo en el que desea ejecutar la aplicación no cuenta con una máquina virtual Java.• Quiere escribir el código de la aplicación en un lenguaje que no sea Java.• Tiene Java en el dispositivo, pero quiere reducir la cantidad de sobrecarga en el código y limitar

al mínimo nivel de abstracción, debido a limitaciones de, por ejemplo, memoria y capacidad deprocesamiento.

En la actualidad, la Transmisión de vídeo de Kinesis Producer Library está disponible para aplicaciones C++. Para obtener más información, consulte Uso de la C++ Producer Library (p. 38).

Temas relacionadosUso de la Java Producer Library (p. 29)

Uso de la Android Producer Library (p. 33)

Uso de la C++ Producer Library (p. 38)

Uso de la Java Producer LibraryAmazon Transmisión de vídeo de Kinesis proporciona la Java Producer Library, que se puede utilizar paraescribir código de aplicación, con una configuración mínima, para enviar datos multimedia de un dispositivoa una Transmisión de vídeo de Kinesis.

Debe realizar los siguientes pasos para integrar el código con Transmisión de vídeo de Kinesis, de modoque su aplicación pueda comenzar el streaming de datos a su Transmisión de vídeo de Kinesis:

1. Crear una instancia del objeto KinesisVideoClient.2. Puede crear un objeto MediaSource proporcionando información sobre el origen de medios. Por

ejemplo, al crear un origen de medios de cámara, puede proporcionar información como, por ejemplo, laidentificación de la cámara y la especificación del método de cifrado que utilice.

Cuando quiera iniciar el streaming, debe crear un origen de medios personalizado.

29

Page 35: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Procedimiento: Uso del SDK de Java Producer

3. Registre el origen multimedia con KinesisVideoClient.

Después de registrar el origen de medios con KinesisVideoClient, siempre que los datos esténdisponibles en el origen de medios, llama a KinesisVideoClient con los datos.

Procedimiento: Uso del SDK de Java ProducerEn este procedimiento se muestra cómo utilizar el Transmisión de vídeo de Kinesis Java Producer Clienten su aplicación de Java para enviar datos a su Transmisión de vídeo de Kinesis.

Estos pasos no requieren que tenga un origen de medios, como, por ejemplo, una cámara o micrófono.Para los fines de prueba, el código genera fotogramas de ejemplo consistentes en una serie de bytes.Puede utilizar el mismo patrón de codificación al enviar datos de medios desde fuentes reales como, porejemplo, cámaras y micrófonos.

El procedimiento incluye los pasos siguientes:

• Descargar y configurar el código• Escribir y examinar el código• Ejecutar y verificar el código

Requisitos previos• En el código de muestra, puede proporcionar las credenciales especificando un perfil que configure en

su archivo de perfil de credenciales de AWS. Si aún no lo ha hecho, configure en primer lugar su perfilde credenciales. Para obtener más información, consulte Configuración de credenciales y regiones deAWS para desarrollo en la AWS SDK for Java.

Note

El ejemplo de Java utiliza un objeto SystemPropertiesCredentialsProvider paraobtener sus credenciales de AWS. El proveedor recupera estas credenciales de laspropiedades del sistema Java aws.accessKeyId y aws.secretKey. Puede definir estaspropiedades del sistema en su entorno de desarrollo de Java. Para obtener información sobrecómo configurar las propiedades del sistema de Java, consulte la documentación de su entornode desarrollo integrado (IDE) específico.

• La NativeLibraryPath debe contener el archivo KinesisVideoProducerJNI, disponible en https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp. La extensión de este archivodependerá de su sistema operativo:• KinesisVideoProducerJNI.so para Linux• KinesisVideoProducerJNI.dylib para macOS• KinesisVideoProducerJNI.dll para Windows (no disponible actualmente)

Note

Hay bibliotecas precompiladas para macOS, Ubuntu y Raspbian disponibles en src/main/resources/lib. Para otros entornos, compile la C++ Producer Library (p. 38).

Paso 1: descargar y configurar el código de la JavaProducer LibraryEn esta sección del procedimiento de Java Producer Library, descargará el código Java de ejemplo,importará el proyecto en su IDE Java y configurará las ubicaciones de la biblioteca.

30

Page 36: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 2: escribir y examinar el código

Para conocer los requisitos previos y otros detalles sobre este ejemplo, consulte Uso de la Java ProducerLibrary.

1. Cree un directorio y, a continuación, clone el código fuente de ejemplo desde el repositorio GitHub.

$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-java

2. Abra el entorno de desarrollo integrado (IDE) de Java que utilice (por ejemplo, Eclipse o JetBrainsIntelliJ IDEA) e importe el proyecto Apache Maven que haya descargado:

• En IntelliJ IDEA: seleccione Import. Vaya al archivo pom.xml en la raíz del paquete descargado.• En Eclipse: seleccione File, Import, Maven, Existing Maven Projects. A continuación, vaya al

directorio kinesis-video-java-demo.

Para obtener más información, consulte la documentación de su IDE.3. El código de muestra de Java utiliza las credenciales actuales de AWS. Para utilizar un perfil de

credenciales diferente, localice el siguiente código en DemoAppMain.java:

final KinesisVideoClient kinesisVideoClient = KinesisVideoJavaClientFactory .createKinesisVideoClient( Regions.US_WEST_2, AuthHelper.getSystemPropertiesCredentialsProvider());

Cambie ese código a lo siguiente:

final KinesisVideoClient kinesisVideoClient = KinesisVideoJavaClientFactory .createKinesisVideoClient( Regions.US_WEST_2, new ProfileCredentialsProvider("credentials-profile-name"););

Para obtener más información, consulte ProfileCredentialsProvider en la referencia de AWS SDK forJava.

Paso siguientethe section called “Paso 2: escribir y examinar el código” (p. 31)

Paso 2: escribir y examinar el códigoEn esta sección del procedimiento de Java Producer Library, escribirá y analizará el código Java deejemplo que descargó en la sección anterior.

La aplicación de prueba de Java (DemoAppMain) muestra el siguiente patrón de codificación:

• Cree una instancia de KinesisVideoClient.• Cree una instancia de MediaSource.• Registre el MediaSource con el cliente.• Inicie el streaming. Es decir, inicie el MediaSource y comenzará a enviar datos al cliente.

En las siguientes secciones presentamos más detalles.

31

Page 37: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 3: ejecutar y verificar el código

Creación de una instancia de KinesisVideoClientPuede crear el objeto KinesisVideoClient llamando a la operación createKinesisVideoClient.

final KinesisVideoClient kinesisVideoClient = KinesisVideoJavaClientFactory .createKinesisVideoClient( Regions.US_WEST_2, AuthHelper.getSystemPropertiesCredentialsProvider());

Para que KinesisVideoClient realice llamadas de red, necesita credenciales de autenticación. Puedetransferir en una instancia de SystemPropertiesCredentialsProvider, que lee AWSCredentialspara el perfil predeterminado en el archivo de credenciales:

[default]aws_access_key_id = ABCDEFGHIJKLMOPQRSTUaws_secret_access_key = AbCd1234EfGh5678IjKl9012MnOp3456QrSt7890

Creación de una instancia de MediaSourcePara enviar bytes a su Transmisión de vídeo de Kinesis necesita producir los datos. Amazon Transmisiónde vídeo de Kinesis proporciona la interfaz MediaSource, que representa el origen de datos.

Por ejemplo, la biblioteca Java de Transmisión de vídeo de Kinesis proporciona la implementaciónImageFileMediaSource de la interfaz MediaSource. Esta clase solo lee los datos de una serie dearchivos multimedia en lugar de una Transmisión de vídeo de Kinesis, pero puede utilizarla para probar elcódigo.

final MediaSource bytesMediaSource = createImageFileMediaSource();

Registro del MediaSource con el clienteRegistre el origen de medios que haya creado con el KinesisVideoClient, de modo que seaconsciente de la existencia del cliente y pueda enviarle los datos.

kinesisVideoClient.registerMediaSource(STREAM_NAME, bytesMediaSource);

Inicio del origen de mediosInicie el origen de medios para que pueda comenzar a generar los datos y enviarlos al cliente.

bytesMediaSource.start();

Paso siguientethe section called “Paso 3: ejecutar y verificar el código” (p. 32)

Paso 3: ejecutar y verificar el códigoPara ejecutar la herramienta de ejecución de pruebas de Java para Java Producer Library, haga losiguiente.

1. Seleccione DemoAppMain.2. Seleccione Run, Run 'DemoAppMain'.

32

Page 38: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Android Producer Library

3. Añada sus credenciales a los argumentos de JVM de la aplicación:

• Para las credenciales de AWS no temporales: "-Daws.accessKeyId={YourAwsAccessKey} -Daws.secretKey={YourAwsSecretKey} -Djava.library.path={NativeLibraryPath}"

• Para las credenciales de AWS temporales: "-Daws.accessKeyId={YourAwsAccessKey} -Daws.secretKey={YourAwsSecretKey} -Daws.sessionToken={YourAwsSessionToken}-Djava.library.path={NativeLibraryPath}"

4. Inicie sesión en la Consola de administración de AWS y abra la consola de Transmisión de vídeo deKinesis.

En la página Manage Streams, elija su transmisión.5. El vídeo de ejemplo se reproducirá en el reproductor incrustado. Es posible que necesite esperar

un poco (hasta diez segundos en condiciones típicas de ancho de banda y procesador) mientras seacumulan los fotogramas hasta que aparece el vídeo.

El código de ejemplo crea una transmisión. Cuando se inicia el MediaSource en el código, comienza aenviar fotogramas de muestra al KinesisVideoClient. A continuación, el cliente envía los datos a suTransmisión de vídeo de Kinesis.

Uso de la Android Producer LibraryAmazon Transmisión de vídeo de Kinesis proporciona la Android Producer Library, que se puede utilizarpara escribir código de aplicación, con una configuración mínima, para enviar datos multimedia de undispositivo Android a una Transmisión de vídeo de Kinesis.

Debe realizar los siguientes pasos para integrar el código con Transmisión de vídeo de Kinesis, de modoque su aplicación pueda comenzar el streaming de datos a su Transmisión de vídeo de Kinesis:

1. Crear una instancia del objeto KinesisVideoClient.2. Puede crear un objeto MediaSource proporcionando información sobre el origen de medios. Por

ejemplo, al crear un origen de medios de cámara, puede proporcionar información como, por ejemplo, laidentificación de la cámara y la especificación del método de cifrado que utilice.

Cuando quiera iniciar el streaming, debe crear un origen de medios personalizado.

Procedimiento: Uso del SDK de Android ProducerEn este procedimiento se muestra cómo utilizar el Transmisión de vídeo de Kinesis Android ProducerClient en su aplicación Android para enviar datos a su Transmisión de vídeo de Kinesis.

El procedimiento incluye los pasos siguientes:

• Descargar y configurar el código• Examinar el código• Ejecutar y verificar el código

Requisitos previos• Recomendamos Android Studio para examinar, editar y ejecutar el código de la aplicación.

Recomendamos al menos la versión 3.0.0, publicada en octubre de 2017.• En el código de muestra, proporcione las credenciales de Amazon Cognito. Siga estos procedimientos

para configurar un grupo de usuarios y de identidades de Amazon Cognito:

33

Page 39: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Procedimiento: Uso del SDK de Android Producer

Para configurar un grupo de usuarios

1. Inicie sesión en la consola de Amazon Cognito.2. Elija Manage your User Pools.3. Elija Create a user pool.4. Escriba un valor en Pool name; por ejemplo, <nombre_de_usuario>_android_user_pool.5. Elija Review defaults.6. Elija Create pool.7. Copie y guarde el valor de Pool Id. Necesitará este valor al configurar la aplicación de ejemplo.8. En la página del grupo, elija App clients.9. Elija Add an app client.10. Escriba un valor en App client name; por ejemplo,

<nombre_de_usuario>_android_app_client.11. Elija Create app client.12. Elija Show Details y copie y guarde los valores de App client ID y App client secret. Necesitará estos

valores al configurar la aplicación de ejemplo.

Para configurar un grupo de identidades

1. Abra la consola de Amazon Cognito.2. Seleccione Manage Identity Pools (Administrar grupos de identidades).3. Elija Create new identity pool.4. Escriba un valor en Identity pool name; por ejemplo,

<nombre_de_usuario>_android_identity_pool.5. Expanda la sección Authentication providers. En la pestaña Cognito, añada los valores de User Pool

ID y App client ID del procedimiento anterior.6. Elija Create pool.7. En la página siguiente, expanda la sección Show Details.8. En la sección que tiene un valor para Role name que termina en Auth_Role, elija View Policy

Document.9. Elija Edit y confirme el cuadro de diálogo Edit Policy que aparece. A continuación, copie el siguiente

código JSON y péguelo en el editor:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-identity:*", "kinesisvideo:*" ], "Resource": [ "*" ] } ]}

10. Elija Allow.11. En la página siguiente, copie y guarde el valor de Identity pool ID del fragmento de código de Get

AWS Credentials. Necesitará este valor al configurar la aplicación de ejemplo.34

Page 40: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 1: descargar y configurar el código

Paso 1: descargar y configurar el código de la AndroidProducer LibraryEn esta sección del procedimiento de Android Producer Library, descargue el ejemplo de Android y abra elproyecto en Android Studio.

Para conocer los requisitos previos y otros detalles sobre este ejemplo, consulte Uso de la AndroidProducer Library.

1. Cree un directorio y, a continuación, clone el SDK de Android de AWS desde el repositorio GitHub.

$ git clone https://github.com/awslabs/aws-sdk-android-samples

2. Abra Android Studio.3. En la pantalla de apertura, elija Open an existing Android Studio project.4. Vaya al directorio aws-sdk-android-samples/AmazonKinesisVideoDemoApp y elija OK.5. Abra el archivo AmazonKinesisVideoDemoApp/src/main/res/raw/awsconfiguration.json.

En el nodo CredentialsProvider, proporcione el ID de grupo de identidades del procedimientoPara configurar un grupo de identidades en la sección Prerequisites y proporcione la región de AWS(por ejemplo, us-west-2).

En el nodo CognitoUserPool, proporcione el secreto de cliente de aplicación, el ID de cliente deaplicación y el ID de grupo del procedimiento Para configurar un grupo de usuarios en la secciónPrerequisites y proporcione la región de AWS (por ejemplo, us-west-2).

6. El archivo awsconfiguration.json será similar al siguiente:

{ "Version": "1.0", "CredentialsProvider": { "CognitoIdentity": { "Default": { "PoolId": "us-west-2:01234567-89ab-cdef-0123-456789abcdef", "Region": "us-west-2" } } }, "IdentityManager": { "Default": {} }, "CognitoUserPool": { "Default": { "AppClientSecret": "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmno", "AppClientId": "0123456789abcdefghijklmnop", "PoolId": "us-west-2_qRsTuVwXy", "Region": "us-west-2" } }}

7. Actualice el archivo StreamingFragment.java con su región:

try { mKinesisVideoClient = KinesisVideoAndroidClientFactory.createKinesisVideoClient( getActivity(), Regions.US_WEST_2, KinesisVideoDemoApp.getCredentialsProvider());

35

Page 41: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 2: examinar el código

Para las constantes de región de AWS, consulte Regiones.

Paso siguientethe section called “Paso 2: examinar el código” (p. 36)

Paso 2: examinar el códigoEn esta sección del procedimiento de Android Producer Library, examinará el código Java de ejemplo.

La aplicación de prueba de Android (AmazonKinesisVideoDemoApp) muestra el siguiente patrón decodificación:

• Cree una instancia de KinesisVideoClient.• Cree una instancia de MediaSource.• Inicie el streaming: es decir, inicie MediaSource y comenzará a enviar datos al cliente.

En las siguientes secciones presentamos más detalles.

Creación de una instancia de KinesisVideoClientPuede crear el objeto KinesisVideoClient llamando a la operación createKinesisVideoClient.

mKinesisVideoClient = KinesisVideoAndroidClientFactory.createKinesisVideoClient( getActivity(), Regions.US_WEST_2, KinesisVideoDemoApp.getCredentialsProvider());

Para que KinesisVideoClient realice llamadas de red, necesita credenciales de autenticación. Paseuna instancia de AWSCredentialsProvider, que lee las credenciales de Amazon Cognito desde elarchivo awsconfiguration.json que ha modificado en la sección anterior.

Creación de una instancia de MediaSourcePara enviar bytes a su Transmisión de vídeo de Kinesis debe producir los datos. Amazon Transmisión devídeo de Kinesis proporciona la interfaz MediaSource, que representa el origen de datos.

Por ejemplo, la biblioteca Android de Transmisión de vídeo de Kinesis proporciona la implementaciónAndroidCameraMediaSource de la interfaz MediaSource. Esta clase lee los datos de una de lascámaras del dispositivo.

En el siguiente ejemplo de código (del archivo fragment/StreamConfigurationFragment.java), secrea la configuración del origen multimedia:

private AndroidCameraMediaSourceConfiguration getCurrentConfiguration() {return new AndroidCameraMediaSourceConfiguration( AndroidCameraMediaSourceConfiguration.builder() .withCameraId(mCamerasDropdown.getSelectedItem().getCameraId()) .withEncodingMimeType(mMimeTypeDropdown.getSelectedItem().getMimeType()) .withHorizontalResolution(mResolutionDropdown.getSelectedItem().getWidth()) .withVerticalResolution(mResolutionDropdown.getSelectedItem().getHeight()) .withCameraFacing(mCamerasDropdown.getSelectedItem().getCameraFacing()) .withIsEncoderHardwareAccelerated( mCamerasDropdown.getSelectedItem().isEndcoderHardwareAccelerated())

36

Page 42: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 3: ejecutar y verificar el código

.withFrameRate(FRAMERATE_20) .withRetentionPeriodInHours(RETENTION_PERIOD_48_HOURS) .withEncodingBitRate(BITRATE_384_KBPS) .withCameraOrientation(-mCamerasDropdown.getSelectedItem().getCameraOrientation()) .withNalAdaptationFlags(StreamInfo.NalAdaptationFlags.NAL_ADAPTATION_ANNEXB_CPD_AND_FRAME_NALS) .withIsAbsoluteTimecode(false));}

En el siguiente ejemplo de código (del archivo fragment/StreamingFragment.java), se crea el origenmultimedia:

mCameraMediaSource = (AndroidCameraMediaSource) mKinesisVideoClient .createMediaSource(mStreamName, mConfiguration);

Inicio del origen de mediosInicie el origen de medios para que pueda comenzar a generar los datos y enviarlos al cliente. El siguienteejemplo de código procede del archivo fragment/StreamingFragment.java:

mCameraMediaSource.start();

Paso siguientethe section called “Paso 3: ejecutar y verificar el código” (p. 37)

Paso 3: ejecutar y verificar el códigoPara ejecutar la aplicación de ejemplo Android de la Android Producer Library, haga lo siguiente.

1. Realice la conexión a un dispositivo Android.2. Elija Run, Run... y Edit configurations....3. Elija +, Android App. En el campo Name, escriba AmazonKinesisVideoDemoApp. En la lista

desplegable Module, elija AmazonKinesisVideoDemoApp. Seleccione Aceptar.4. Elija Run, Run.5. En la pantalla Select a Deployment Target, elija el dispositivo conectado y elija OK.6. En la aplicación AWSKinesisVideoDemoApp en el dispositivo, elija Create new account.7. Escriba los valores de USERNAME, Password, Given name, Email address y Phone number; a

continuación, elija Sign up.

Note

Estos valores tienen las siguientes restricciones:

• Contraseña: debe contener letras mayúsculas y minúsculas, números y caracteresespeciales. Puede cambiar estas restricciones en la página de grupo de usuarios en laconsola de Amazon Cognito.

• Dirección de correo electrónico: debe ser una dirección válida para que pueda recibir uncódigo de confirmación.

• Número de teléfono: debe tener el formato de +<Código de país><Número>, porejemplo, +12065551212.

8. Escriba el código que ha recibido por correo electrónico y elija Confirm. Seleccione Ok.

37

Page 43: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

C++ Producer Library

9. En la siguiente página, deje los valores predeterminados y elija Stream.10. Inicie sesión en la Consola de administración de AWS y abra la consola de Transmisiones de vídeo de

Kinesis en https://console.aws.amazon.com/kinesisvideo/ en Región EE.UU. Oeste (Oregón).

En la página Manage Streams, elija demo-stream.11. El vídeo de streaming se reproduce en el reproductor incrustado. Es posible que necesite esperar

un poco (hasta diez segundos en condiciones típicas de ancho de banda y procesador) mientras seacumulan los fotogramas hasta que aparece el vídeo.

Note

Si se produce la rotación de la pantalla del dispositivo (por ejemplo, de vertical a horizontal),la aplicación detiene el streaming de vídeo.

El código de ejemplo crea una transmisión. Cuando se inicia el MediaSource en el código, comienza aenviar fotogramas desde la cámara a KinesisVideoClient. A continuación, el cliente envía los datos auna Transmisión de vídeo de Kinesis denominada demo-stream.

Uso de la C++ Producer LibraryAmazon Transmisión de vídeo de Kinesis proporciona la biblioteca C++ Producer, que puede usar paraescribir el código de aplicación para enviar datos multimedia desde un dispositivo a una Transmisión devídeo de Kinesis.

Modelo de objetosLa biblioteca de C++ proporciona los siguientes objetos para administrar el envío de datos a unaTransmisión de vídeo de Kinesis:

• KinesisVideoProducer: contiene información acerca de su origen de medios y credenciales de AWS ymantiene las devoluciones de llamadas para informar sobre los eventos de Transmisión de vídeo deKinesis.

• KinesisVideoStream: representa la Transmisión de vídeo de Kinesis. Contiene información sobre losparámetros de la secuencia de vídeo, como el nombre, el periodo de retención de datos, el tipo decontenido multimedia, etc.

Inserción de medios en la transmisiónLa biblioteca C++ proporciona métodos (por ejemplo, PutFrame) que puede utilizar para incluir datos enel objeto KinesisVideoStream. A continuación, la biblioteca administra el estado interno de los datos, loque puede incluir las siguientes tareas:

• Realización de la autenticación.• Observación de la latencia de red. Si la latencia es demasiado elevada, la biblioteca podría optar por

anular fotogramas.• Seguimiento del estado del streaming en curso.

Interfaces de devolución de llamadaEsta capa expone un conjunto de interfaces de devolución de llamada, lo que le permite comunicarse conla capa de la aplicación. Entre estas interfaces de devolución de llamada se incluyen las siguientes:

38

Page 44: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Procedimiento: Uso del SDK de C++ Producer

• Interfaz de devolución de llamadas de servicio (CallbackProvider): la biblioteca invoca eventosobtenidos mediante esta interfaz al crear una secuencia, obtiene una descripción de la secuencia,elimina una secuencia, etc.

• Interfaz de estado de preparación del cliente o eventos de bajo almacenamiento(ClientCallbackProvider): la biblioteca invoca eventos en esta interfaz cuando el clienteestá preparado o cuando detecta que podría quedarse sin espacio de almacenamiento o memoriadisponibles.

• Interfaz de devolución de llamada de eventos de transmisión (StreamCallbackProvider): labiblioteca invoca eventos en esta interfaz cuando se producen eventos en la transmisión, como que estaadopte el estado de preparación, se produzca anulación de fotogramas o errores en la transmisión.

Transmisión de vídeo de Kinesis proporciona implementaciones predeterminadas para estas interfaces.También puede proporcionar su propia implementación personalizada: por ejemplo, si necesita lógica deredes personalizada o desea exponer una condición de bajo almacenamiento a la interfaz de usuario.

Para obtener más información acerca de las devoluciones de llamadas en las Producer Libraries, consulteDevoluciones de llamada de SDK Producer (p. 91).

Procedimiento: Uso del SDK de C++ ProducerEn este procedimiento se muestra cómo utilizar el cliente de Transmisión de vídeo de Kinesis y losorígenes multimedia en una aplicación C++ para enviar datos a su Transmisión de vídeo de Kinesis.

Note

La biblioteca de C++ incluye un script de compilación de muestra para macOS. En la actualidad,la C++ Producer Library no está disponible para Windows.Para utilizar la biblioteca C++ Producer en un dispositivo Raspberry Pi, consulte Apéndice: uso delSDK C++ Producer en Raspberry Pi (p. 47).

El procedimiento incluye los pasos siguientes:

• Paso 1: descargar y configurar el código• Paso 2: escribir y examinar el código• Paso 3: ejecutar y verificar el código

Requisitos previos• Credenciales: en el código de muestra, puede proporcionar las credenciales especificando un perfil que

configure en su archivo de perfil de credenciales de AWS. Si aún no lo ha hecho, configure en primerlugar su perfil de credenciales.

Para obtener más información, consulte Configuración de credenciales y regiones de AWS paradesarrollo.

• Integración del almacén de certificados: la biblioteca de productores de Transmisión de vídeo de Kinesisdebe establecer una relación de confianza con el servicio al que llama. Esto se realiza mediante lavalidación de las entidades de certificación (CA) del almacén de certificados públicos. En los modelosbasados en Linux, este almacén se encuentra en el directorio /etc/ssl/.

Descargue el certificado de la siguiente ubicación en el almacén de certificados:

https://www.amazontrust.com/repository/SFSRootCAG2.pem• Instale las siguientes dependencias de compilación para macOS:

• Autoconf 2.69 (Licencia GPLv3+/Autoconf: GNU GPL versión 3 o posterior)• CMake 3.7 o 3.8

39

Page 45: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Procedimiento: Uso del SDK de C++ Producer

• Pkg-Config• Flex 2.5.35 Apple (flex-31) o posterior• Bison 2.4 (licencia de GNU)• Automake 1.15.1 (licencia de GNU)• GNU Libtool (Apple Inc. versión cctools-898)• xCode (macOS) / clang / gcc (xcode-select version 2347)• Kit de desarrollo de Java (JDK) (para la compilación de JNI de Java)• Lib-Pkg

• Instale las siguientes dependencias de compilación para Ubuntu (las respuestas a los comandos deversión están truncadas):• Instale Git: sudo apt-get install git

$ git --versiongit version 2.14.1

• Instale CMake: sudo apt-get install cmake

$ cmake --versioncmake version 3.9.1

• Instale Libtool: sudo apt-get install libtool

2.4.6-2

• Instale libtool-bin: sudo apt-get install libtool-bin

$ libtool --versionlibtool (GNU libtool) 2.4.6Written by Gordon Matzigkeit, 1996

• Instale GNU Automake: sudo apt-get install automake

$ automake --versionautomake (GNU automake) 1.15

• Instale GNU Bison: sudo apt-get install bison

$ bison -Vbison (GNU Bison) 3.0.4

• Instale G++: sudo apt-get install g++

g++ --versiong++ (Ubuntu 7.2.0-8ubuntu3) 7.2.0

• Instale curl: sudo apt-get install curl

$ curl --versioncurl 7.55.1 (x86_64-pc-linux-gnu) libcurl/7.55.1 OpenSSL/1.0.2g zlib/1.2.11 libidn2/2.0.2 libpsl/0.18.0 (+libidn2/2.0.2) librtmp/2.3

• Instale pkg-config: sudo apt-get install pkg-config

$ pkg-config --version0.29.1 40

Page 46: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 1: descargar y configurar el código

• Instale Flex: sudo apt-get install flex

$ flex --versionflex 2.6.1

• Instale OpenJDK: sudo apt-get install openjdk-8-jdk

$ java -showversionopenjdk version "1.8.0_151"

• Establezca la variable de entorno JAVA_HOME: export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

• Ejecute el script de compilación: ./install-script

Paso siguientePaso 1: descargar y configurar el código de la C++ Producer Library

Paso 1: descargar y configurar el código de la C++Producer LibraryEn esta sección, descargará las bibliotecas de bajo nivel y configurará la aplicación para utilizar suscredenciales de AWS.

Para conocer los requisitos previos y otros detalles sobre este ejemplo, consulte Uso de la C++ ProducerLibrary.

1. Cree un directorio y, a continuación, clone el código fuente de ejemplo desde el repositorio GitHub.

$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp

2. Abra el código en el entorno de desarrollo integrado (IDE) de su elección (por ejemplo, Eclipse).3. En la línea de comandos, configure las variables de entorno ACCESS_KEY_ENV_VAR y

SECRET_KEY_ENV_VAR según sus credenciales de AWS. De forma alternativa, puede incluir suscredenciales de AWS en el código, en las siguientes líneas de ProducerTestFixture.h:

if (nullptr == (accessKey = getenv(ACCESS_KEY_ENV_VAR))) { accessKey = "AccessKey"; }

if (nullptr == (secretKey = getenv(SECRET_KEY_ENV_VAR))) { secretKey = "SecretKey"; }

4. En tst/ProducerTestFixture.h, busque la llamada a CreateStream. Cambie el nombre de ladefinición de la transmisión de ScaryTestStream2 a un nombre exclusivo:

shared_ptr<KinesisVideoStream> CreateTestStream(int index) { char stream_name[MAX_STREAM_NAME_LEN]; sprintf(stream_name, "ScaryTestStream_%d", index);

Paso siguientePaso 2: escribir y examinar el código (p. 42)

41

Page 47: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 2: escribir y examinar el código

Paso 2: escribir y examinar el códigoEn esta sección del procedimiento de C++ Producer Library, examinará el código en la herramienta deejecución de pruebas de C++ (tst/ProducerTestFixture.h y otros archivos). Descargó este códigoen la sección anterior.

El ejemplo de C++ independiente de la plataforma: muestra el siguiente patrón de código:

• Crea una instancia de KinesisVideoProducer para obtener acceso a Transmisión de vídeo deKinesis.

• Cree una instancia de KinesisVideoStream. Esto crea una Transmisión de vídeo de Kinesis en sucuenta de AWS si aún no existe una transmisión con el mismo nombre.

• Llama a putFrame en la KinesisVideoStream para cada fotograma de datos, a medida que estándisponibles, para enviarlos a la transmisión.

En las siguientes secciones presentamos más detalles:

Creación de una instancia de KinesisVideoProducerPuede crear el objeto KinesisVideoProducer llamando al métodoKinesisVideoProducer::createSync. En el siguiente ejemplo se crea el KinesisVideoProduceren el archivo ProducerTestFixture.h:

kinesis_video_producer_ = KinesisVideoProducer::createSync(move(device_provider_), move(client_callback_provider_), move(stream_callback_provider_), move(credential_provider_), defaultRegion_);

El método createSync usa los siguientes parámetros:

• Un objeto DeviceInfoProvider, que devuelve un objeto DeviceInfo que contiene informaciónsobre el dispositivo o configuración de almacenamiento.

Note

Configure el tamaño del almacén de contenido mediante el parámetrodeviceInfo.storageInfo.storageSize. Las transmisiones de contenido compartenel almacén de contenido. Para determinar los requisitos del tamaño de almacenamiento,multiplique el tamaño promedio de fotograma por el número de fotogramas almacenadospara la duración máxima de todas las transmisiones y, a continuación, multiplique el resultadopor 1,2 para incluir la desfragmentación. Por ejemplo, si la aplicación tiene la siguienteconfiguración:• Tres transmisiones• 3 minutos de duración máxima• La velocidad de cada transmisión es de 30 fps• Cada uno de los fotogramas tiene un tamaño de 10 000 KBLos requisitos del almacén de contenido para esta aplicación son 3 (transmisiones) * 3(minutos) * 60 (segundos de un minuto) * 10 000 (kb) * 1,2 (límite de desfragmentación) =194,4 Mb ~ 200 Mb.

• Un objeto ClientCallbackProvider, que devuelve indicadores de la función que informan deeventos específicos del cliente.

• Un objeto StreamCallbackProvider, que devuelve indicadores de función que se vuelven a llamarcuando se producen eventos específicos a la transmisión.

42

Page 48: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 2: escribir y examinar el código

• Un objeto CredentialProvider, que proporciona acceso a las variables de entorno de credencialesde AWS.

• La región de AWS ("us-west-2"). El punto de enlace de servicio se determina a partir de la región.

Creación de una instancia de KinesisVideoStreamPuede crear el objeto KinesisVideoStream llamando al métodoKinesisVideoProducer::CreateStream con un parámetro StreamDefinition. En el ejemplo secrea el KinesisVideoStream en el archivo ProducerTestFixture.h:

auto stream_definition = make_unique<StreamDefinition>(stream_name, hours(2), tags, "", STREAMING_TYPE_REALTIME, "video/h264", milliseconds::zero(), seconds(2), milliseconds(1), true, true, true);return kinesis_video_producer_->createStream(move(stream_definition));

El objeto StreamDefinition tiene los siguientes campos:

• Nombre de transmisión.• Periodo de retención de datos.• Etiquetas para la transmisión. Las aplicaciones consumidoras pueden usar estas etiquetas para

encontrar la transmisión correcta o para obtener más información sobre la transmisión. Las etiquetastambién se pueden ver en la Consola de administración de AWS.

• Clave de cifrado de AWS KMS para la transmisión. Para obtener más información, consulte Uso delcifrado en el servidor con Transmisión de vídeo de Kinesis.

• Tipo de streaming. El único valor válido actualmente es STREAMING_TYPE_REALTIME.• Tipo de contenido de medios. Para ver la transmisión en el visor de la consola, establezca este valor en"video/h264".

• Latencia de medios. En la actualidad, este valor no se utiliza y debe establecerse en 0.• Duración de la reproducción de cada fragmento.• Escala de código temporal de medios.• Si los medios utilizan fragmentación de fotogramas claves.• Si los medios utilizan códigos de tiempo.• Si los medios utilizan tiempos de fragmentos absolutos.

Inserción de un fotograma en la transmisión de vídeo de KinesisPuede insertar medios en la Transmisión de vídeo de Kinesis medianteKinesisVideoStream::putFrame, pasando un objeto Frame que contenga el encabezado y los datosmultimedia. En el ejemplo se llama a putFrame en el archivo ProducerApiTest.cpp:

frame.duration = FRAME_DURATION_IN_MICROS * HUNDREDS_OF_NANOS_IN_A_MICROSECOND; frame.size = SIZEOF(frameBuffer_); frame.frameData = frameBuffer_;

43

Page 49: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 2: escribir y examinar el código

MEMSET(frame.frameData, 0x55, frame.size);

while (!stop_producer_) { // Produce frames timestamp = std::chrono::duration_cast<std::chrono::nanoseconds>( std::chrono::system_clock::now().time_since_epoch()).count() / DEFAULT_TIME_UNIT_IN_NANOS; frame.index = index++; frame.decodingTs = timestamp; frame.presentationTs = timestamp;

// Key frame every 50th frame.flags = (frame.index % 50 == 0) ? FRAME_FLAG_KEY_FRAME : FRAME_FLAG_NONE; ...

EXPECT_TRUE(kinesis_video_stream->putFrame(frame));

Note

En el ejemplo anterior de productor C++ se envía un búfer de datos de prueba. En una aplicaciónreal, debe obtener el búfer y el tamaño del fotograma a partir de los datos del fotograma de unorigen de medios (como una cámara).

El objeto Frame tiene los siguientes campos:

• Índice de fotograma. Este valor debe incrementarse de forma monotónica.• Indicadores asociados con el fotograma. Por ejemplo, si el codificador se ha configurado para producir

un fotograma clave, a este fotograma se le asignará el indicador FRAME_FLAG_KEY_FRAME.• Marca temporal de descodificación.• Marca temporal de presentación.• Duración del fotograma (en unidades de 100 ns).• Tamaño del fotograma en bytes.• Datos de fotograma.

Para obtener más información acerca del formato de los fotogramas, consulte Modelo de datos deTransmisión de vídeo de Kinesis.

Métricas y registro de métricasEl SDK de C++ Producer incluye funciones para métricas y el registro de métricas.

Puede utilizar las API getKinesisVideoMetrics y getKinesisVideoStreamMetrics para recuperarinformación sobre Transmisión de vídeo de Kinesis y sus transmisiones activas.

El siguiente código procede del archivo kinesis-video-pic/src/client/include/com/amazonaws/kinesis/video/client/Include.h.

/*** Gets information about the storage availability.** @param 1 CLIENT_HANDLE - the client object handle.* @param 2 PKinesisVideoMetrics - OUT - Kinesis Video metrics to be filled.** @return Status of the function call.*/PUBLIC_API STATUS getKinesisVideoMetrics(CLIENT_HANDLE, PKinesisVideoMetrics);

44

Page 50: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 3: ejecutar y verificar el código

/*** Gets information about the stream content view.** @param 1 STREAM_HANDLE - the stream object handle.* @param 2 PStreamMetrics - Stream metrics to fill.** @return Status of the function call.*/PUBLIC_API STATUS getKinesisVideoStreamMetrics(STREAM_HANDLE, PStreamMetrics);

El objeto PClientMetrics rellenado por getKinesisVideoMetrics contiene la siguiente información:

• contentStoreSize: el tamaño total en bytes del almacén de contenido (la memoria utilizada paraalmacenar datos de streaming).

• contentStoreAvailableSize: la memoria disponible en el almacén de contenido, en bytes.• contentStoreAllocatedSize: la memoria asignada en el almacén de contenido.• totalContentViewsSize: la memoria total utilizada para la vista de contenido. (La vista de contenido es

una serie de índices de información del almacén de contenido).• totalFrameRate: el número total de fotogramas por segundo en todas las transmisiones activas.• totalTransferRate: el total de bits por segundo que se envían en todas las transmisiones.

El objeto PStreamMetrics rellenado por getKinesisVideoStreamMetrics contiene la siguienteinformación:

• currentViewDuration: la diferencia en unidades de 100 ns entre el encabezado de la vista de contenido(cuando se codifican los fotogramas) y la posición actual (cuando se envían los datos del fotograma aTransmisión de vídeo de Kinesis).

• overallViewDuration: la diferencia en unidades de 100 ns entre el encabezado de la vista de contenido(cuando se codifican los fotogramas) y la cola (cuando se vacían los fotogramas de la memoria, bienporque se supera el espacio total asignado a la vista de contenido, bien porque se recibe un mensajePersistedAck de Transmisión de vídeo de Kinesis y se vacían los fotogramas que se sabe que sonpersistentes).

• currentViewSize: el tamaño en bytes de la vista de contenido desde el encabezado (cuando se codifican)hasta la posición actual (cuando se envían los fotogramas a Transmisión de vídeo de Kinesis).

• overallViewSize: el tamaño total en bytes de la vista de contenido.• currentFrameRate: la última velocidad medida de la transmisión, en fotogramas por segundo.• currentTransferRate: la última velocidad medida de la transmisión, en bytes por segundo.

Paso siguientethe section called “Paso 3: ejecutar y verificar el código” (p. 45)

Paso 3: ejecutar y verificar el códigoPara ejecutar y verificar el código para el procedimiento de C++ Producer Library, haga lo siguiente:

1. Consulte Requisitos previos para conocer los requisitos de credenciales, certificados y compilación.2. Cree el proyecto mediante el script /kinesis-video-native-build/install-script. Al

ejecutar el script de instalación se instalan las siguientes dependencias de código abierto:

• curl lib• openssl (crypto y ssl)

45

Page 51: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideUso del SDK C++ Producer como

complemento de GStreamer• log4cplus• jsoncpp

Note

Para configurar log4cplus, establezca el siguiente valor de PlatformUtils.h para queapunte a su función de registro:

#define __LOG(p1, p2, p3, ...) printf(p3, ##__VA_ARGS__)

3. El ejecutable se compila en kinesis-video-native-build/start. Láncelo para ejecutar laprueba de unidad e iniciar el streaming de imagen ficticia.

4. Para habilitar los logs detallados, defina las instrucciones "define" de C HEAP_DEBUG yLOG_STREAMING quitando la marca de comentario de las líneas de CMakeList.txtcorrespondientes.

Puede monitorear el progreso del conjunto de pruebas en la salida de depuración de su IDE. Tambiénpuede monitorear el tráfico de su transmisión analizando las métricas asociadas con su transmisión en laconsola de Amazon CloudWatch, como por ejemplo PutMedia.IncomingBytes.

Note

Dado que la herramienta de ejecución de pruebas solo envía fotogramas de bytes vacíos, laconsola no muestra los datos en forma de transmisión de vídeo.

Uso del SDK C++ Producer como complemento deGStreamerGStreamer es un marco multimedia popular que utilizan multitud de cámaras y fuentes de vídeo para crearcanalizaciones multimedia personalizadas combinando complementos modulares. El complemento deTransmisión de vídeo de Kinesis GStreamer simplifica notablemente la integración de su canalizaciónmultimedia existente de GStreamer con Transmisión de vídeo de Kinesis.

Para obtener más información sobre el uso del SDK C++ Producer como complemento de GStreamer,consulte Ejemplo: complemento GStreamer del SDK Producer de Transmisión de vídeo deKinesis (p. 104).

Uso del SDK C++ Producer como complemento deGStreamer en un contenedor de DockerGStreamer es un marco multimedia popular que utilizan multitud de cámaras y fuentes de vídeo para crearcanalizaciones multimedia personalizadas combinando complementos modulares. El complemento deTransmisión de vídeo de Kinesis GStreamer simplifica notablemente la integración de su canalizaciónmultimedia existente de GStreamer con Transmisión de vídeo de Kinesis.

Además, el uso de Docker para crear la canalización de GStreamer estandariza el entorno operativopara Transmisión de vídeo de Kinesis, lo que simplifica notablemente la compilación y ejecución de laaplicación.

Para obtener más información sobre el uso del SDK C++ Producer como complemento de GStreameren un contenedor de Docker, consulte Ejecute el elemento de GStreamer en un contenedor deDocker (p. 108).

46

Page 52: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Uso del SDK C++ Producer en Raspberry Pi

Apéndice: uso del SDK C++ Producer en Raspberry PiEl Raspberry Pi es un equipo pequeño y económico que se puede utilizar para enseñar y aprenderhabilidades básicas de programación informática. En este tutorial se describe cómo puede configurar yutilizar el SDK C++ Producer de Amazon Transmisión de vídeo de Kinesis en un dispositivo RaspberryPi. Los pasos también incluyen cómo verificar la instalación utilizando la aplicación de demostraciónGStreamer.

Temas• Requisitos previos (p. 47)• Cree un usuario de IAM con permiso para escribir en Transmisión de vídeo de Kinesis (p. 47)• Conectar su Raspberry Pi a la red wifi (p. 48)• Conexión remota a su Raspberry Pi (p. 49)• Configure la cámara de Raspberry Pi (p. 49)• Instalar requisitos previos de software (p. 50)• Descargue y cree el SDK C++ Producer de Transmisión de vídeo de Kinesis (p. 50)• Transmitir vídeo a su secuencia de vídeo de Kinesis y ver la secuencia en directo (p. 51)

Requisitos previosAntes de configurar el SDK C++ Producer en su Raspberry Pi, asegúrese de que cumple los siguientesrequisitos previos:

• Un dispositivo Raspberry Pi con la siguiente configuración:• Versión de placa: 3 Modelo B o posterior.• Un módulo de cámara conectado.• Una tarjeta SD con una capacidad de al menos 8 GB.• El sistema operativo Raspbian (versión de kernel 4.9 o posterior) instalado. Puede descargar

la imagen de Raspbian más reciente desde el sitio web de la Fundación Raspberry Pi. Siga lasinstrucciones de Raspberry Pi para instalar la imagen descargada en una tarjeta SD.

• Una cuenta de AWS con una Transmisión de vídeo de Kinesis. Para obtener más información, consulteIntroducción a secuencias de vídeo de Kinesis.

Cree un usuario de IAM con permiso para escribir en Transmisiónde vídeo de KinesisSi aún no lo ha hecho, configure un usuario de AWS Identity and Access Management (IAM) con permisospara escribir en un Transmisión de vídeo de Kinesis.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en https://console.aws.amazon.com/iam/.

2. En el menú de navegación de la izquierda, elija Users (Usuarios).3. Para crear un nuevo usuario, seleccione Add user (Añadir usuario).4. Proporcione un User name (Nombre de usuario) descriptivo como, por ejemplo, kinesis-video-

raspberry-pi-producer.5. En Access type (Tipo de acceso), seleccione Programmatic access (Acceso mediante programación).6. Elija Next: Permissions.

47

Page 53: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Uso del SDK C++ Producer en Raspberry Pi

7. En Set permissions for kinesis-video-raspberry-pi-producer (Configurar permisos para kinesis-video-raspberry-pi-producer), elija Attach existing policies directly (Adjuntar políticas existentesdirectamente).

8. Elija Create Policy. Se abre la página Create policy (Crear política) en una nueva pestaña delnavegador web.

9. Seleccione la pestaña JSON.10. Copie la siguiente política JSON y péguela en el área de texto. Esta política concede a su usuario

permiso para crear y escribir datos en Transmisión de vídeo de Kinesis.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kinesisvideo:DescribeStream", "kinesisvideo:CreateStream", "kinesisvideo:GetDataEndpoint", "kinesisvideo:PutMedia" ], "Resource": [ "*" ] }]}

11. Elija Review policy.12. Proporcione un Name (Nombre) a su política, como, por ejemplo, kinesis-video-stream-write-

policy.13. Elija Create Policy.14. Vuelva a la pestaña Add user (Añadir usuario) en su navegador y elija Refresh (Actualizar).15. En el cuadro de búsqueda, escriba el nombre de la política que ha creado.16. Seleccione la casilla de verificación situada junto a la nueva política en la lista.17. Elija Next: Review.18. Seleccione la opción Create user.19. La consola muestra el Access key ID (ID de clave de acceso) del nuevo usuario. Elija Show (Mostrar)

para mostrar la Secret access key (Clave de acceso secreta). Anote estos valores, ya que sonnecesarios a la hora de configurar la aplicación.

Conectar su Raspberry Pi a la red wifiPuede utilizar el Raspberry Pi en modo sin periféricos, es decir, sin conectar el teclado, el monitor oel cable de red. Si utiliza un monitor y teclado conectados, vaya a Configure la cámara de RaspberryPi (p. 49).

1. En el equipo, cree un archivo denominado wpa_supplicant.conf.2. Copie el siguiente texto y péguelo en el archivo wpa_supplicant.conf (o descargue un archivo

wpa_supplicant.conf de muestra):

country=USctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1

network={ssid="<YOUR_WIFI_SSID>"scan_ssid=1

48

Page 54: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Uso del SDK C++ Producer en Raspberry Pi

key_mgmt=WPA-PSKpsk="<YOUR_WIFI_PASSWORD>"}

Reemplace los valores ssid y psk por la información de su red wifi.3. Copie el archivo wpa_supplicant.conf en la tarjeta SD. Se debe copiar en la raíz del volumen

boot.4. Inserte la tarjeta SD en el Raspberry Pi y encienda el dispositivo. Se conecta a su red wifi y SSH está

habilitado.

Conexión remota a su Raspberry PiPuede conectarse de manera remota a su Raspberry Pi en modo sin periféricos. Si utiliza su Raspberry Picon un monitor y el teclado conectados, vaya a Configure la cámara de Raspberry Pi (p. 49).

1. Antes de conectarse a su dispositivo Raspberry Pi de forma remota, realice una de las siguientesoperaciones para determinar su dirección IP:

• Si tiene acceso al router wifi de su red, mire los dispositivos wifi conectados. Busque el dispositivodenominado Raspberry Pi para encontrar la dirección IP del dispositivo.

• Si no tiene acceso al router wifi de su red, puede utilizar otro software para buscar dispositivos en sured. Fing es una aplicación popular que está disponible tanto para dispositivos Android como iOS.Puede utilizar la versión gratuita de esta aplicación para buscar las direcciones IP de dispositivos ensu red.

2. Cuando sepa la dirección IP del dispositivo Raspberry Pi, puede utilizar cualquier aplicación determinal para conectarse.

• En macOS o Linux, utilice ssh:

$ ssh pi@<IP address>

• En Windows, utilice PuTTY, un cliente SSH gratuito para Windows.

En una nueva instalación de Raspbian, el nombre de usuario es pi y la contraseña es raspberry. Lerecomendamos que cambie la contraseña predeterminada.

Configure la cámara de Raspberry PiSiga estos pasos para configurar la cámara de Raspberry Pi para enviar vídeo desde el dispositivo a unaTransmisión de vídeo de Kinesis.

1. Abra un editor para actualizar el archivo modules con el siguiente comando:

$ sudo nano /etc/modules

2. Añada la siguiente línea al final del archivo, si aún no se ha añadido:

bcm2835-v4l2

3. Guarde el archivo y salga del editor (Ctrl-X).4. Reinicie el Raspberry Pi:

$ sudo reboot

49

Page 55: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Uso del SDK C++ Producer en Raspberry Pi

5. Cuando el dispositivo se reinicie, vuelva a conectarse a través de su aplicación de terminal si se estáconectando de forma remota.

6. Abrir raspi-config:

$ sudo raspi-config

7. Elija Interfacing Options (Opciones de interfaz), Camera (Cámara). Habilite la cámara si aún no estáhabilitada y reiníciela si se le solicita.

8. Compruebe que la cámara funciona escribiendo el siguiente comando:

$ raspistill -v -o test.jpg

La pantalla muestra una vista previa de cinco segundos desde la cámara, toma una fotografía(guardada en test.jpg) y muestra mensajes informativos.

Instalar requisitos previos de softwareEl SDK C++ Producer requiere la instalación de los siguientes requisitos previos de software en RaspberryPi.

1. Instale Git:

$ sudo apt-get update$ sudo apt-get install git

2. Instale Yacc, Lex y OpenJDK (Open Java Development Kit):

$ sudo apt-get install byacc flex$ sudo apt-get install openjdk-8-jdk

3. Establezca la variable de entorno JAVA_HOME:

$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-armhf/

Note

Si reinicia el dispositivo antes de crear el SDK, debe repetir este paso. También puede definiresta variable de entorno en su archivo ~/.profile.

4. CMake se utiliza para crear el SDK. Instale CMake con el comando siguiente:

$ sudo apt-get install cmake

5. Copie el siguiente archivo PEM en /etc/ssl/cert.pem:

https://www.amazontrust.com/repository/SFSRootCAG2.pem

Descargue y cree el SDK C++ Producer de Transmisión de vídeode Kinesis1. Instale el SDK C++ Producer:

$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp

50

Page 56: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Uso del SDK C++ Producer en Raspberry Pi

2. Cambie el directorio de trabajo actual al directorio de instalación:

$ cd amazon-kinesis-video-stream-producer-sdk-cpp/kinesis-video-native-build

3. Haga que el script de instalación sea ejecutable:

$ chmod +x install-script

4. Ejecute el script de instalación. El script descarga el origen y crea varios proyectos de código abierto.Es posible que tarde varias horas en ejecutarse la primera vez que se ejecuta:

$ ./install-script

5. Escriba Y para verificar. A continuación, se ejecuta el script de compilación.

Transmitir vídeo a su secuencia de vídeo de Kinesis y ver lasecuencia en directo1. Para ejecutar la aplicación de ejemplo, necesita la siguiente información:

• El nombre de la secuencia que creó en la sección Requisitos previos (p. 47).• Las credenciales de cuenta (ID de clave de acceso y clave de acceso secreta) que creó en Cree un

usuario de IAM con permiso para escribir en Transmisión de vídeo de Kinesis (p. 47).2. Ejecute la aplicación de ejemplo usando el siguiente comando:

$ export AWS_ACCESS_KEY_ID=<Access Key ID> export AWS_SECRET_ACCESS_KEY=<Secret Access Key> ./kinesis_video_gstreamer_sample_app Stream Name

3. Puede especificar el tamaño de la imagen, la velocidad de fotogramas y la tasa de bits tal y como seindica a continuación:

$ export AWS_ACCESS_KEY_ID=<Access Key ID> export AWS_SECRET_ACCESS_KEY=<Secret Access Key> ./kinesis_video_gstreamer_sample_app -w <width> -h <height> -f <framerate> -b <bitrateInKBPS> Stream Name

4. Si la aplicación de ejemplo se cierra con un error library not found, escriba los siguientescomandos para comprobar que el proyecto está correctamente vinculado a sus dependencias decódigo abierto:

$ rm -rf ./kinesis-video-native-build/CMakeCache.txt ./kinesis-video-native-build/CMakeFiles$ ./kinesis-video-native-build/install-script

5. Abra la consola de Transmisión de vídeo de Kinesis en https://console.aws.amazon.com/kinesisvideo/.6. Elija el Stream name (Nombre de secuencia) de la secuencia que ha creado.

En la consola aparece la transmisión de vídeo enviada desde el Raspberry Pi.

Cuando la secuencia se está reproduciendo, puede experimentar con las siguientes características de laconsola de Transmisión de vídeo de Kinesis:

• En la sección Video preview (Vista previa de vídeo), utilice los controles de navegación para rebobinar oavanzar la secuencia.

51

Page 57: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia

• En la sección Stream info (Información de secuencia), observe el códec, la resolución y la tasa debits de la secuencia. La resolución y la tasa de bits se definen con valores bajos a propósito en elRaspberry Pi para minimizar el uso de ancho de banda para este tutorial. Para ver las métricas deAmazon CloudWatch que se están creando para su secuencia, elija View stream metrics in CloudWatch(Ver métricas de secuencia en CloudWatch).

• En Data retention period (Período de retención de datos), observe que la secuencia de vídeo seconserva durante un día. Puede editar este valor y establecerlo en No data retention (Sin retención dedatos) o establecer un valor desde un día hasta varios años.

En el cifrado del lado del servidor, observe que sus datos se cifran en reposo mediante una clave quemantiene el AWS Key Management Service (AWS KMS).

Referencia del SDK de ProducerEsta sección contiene límites, códigos de error y otra información de referencia para el Transmisión devídeo de Kinesis Producer Libraries (p. 28).

Temas• Límites de SDK Producer (p. 52)• Referencia de códigos de error (p. 54)• Referencia de marcas de adaptación de capa de abstracción de red (NAL) (p. 77)• Estructuras de Producer SDK (p. 78)• Estructuras de secuencia de vídeo de Kinesis (p. 79)• Devoluciones de llamada de SDK Producer (p. 91)

Límites de SDK ProducerLa siguiente tabla contiene los límites actuales para los valores en las Producer libraries (p. 28).

Note

Antes de configurar estos valores, debe validar sus entradas. El SDK no valida estos límites y seproduce un error en tiempo de ejecución si se superen los límites.

Valor Límite Notas

Recuento máximo de secuencias 128 El número máximo desecuencias que puede crearun objeto de Producer. Setrata de un límite flexible(puede solicitar un aumento).Garantiza que el Producer nocree accidentalmente secuenciasde forma recursiva.

Longitud máxima de nombre dedispositivo

128 caracteres  

Recuento máximo de etiquetas 50 por secuencia  

Longitud máxima de nombre desecuencia

256 caracteres  

52

Page 58: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Límites de SDK Producer

Valor Límite Notas

Tamaño mínimo dealmacenamiento

10 MiB = 10 * 1024 * 1024 bytes  

Tamaño máximo dealmacenamiento

10 GiB = 10 * 1024 * 1024 * 1024bytes

 

Longitud máxima de ruta dedirectorio raíz

4,096 caracteres  

Longitud máxima de informaciónde autenticación

10,000 bytes  

Longitud máxima de cadena URI 10,000 caracteres  

Longitud máxima de nombre deetiqueta

128 caracteres  

Longitud máxima de valor deetiqueta

1,024 caracteres  

Período mínimo de token deseguridad

30 segundos  

Período de gracia de token deseguridad

40 minutos Si la duración especificada essuperior, se limita a este valor.

Período de retención 0 o mayor que una hora 0 indica que no hay ningunaretención.

Duración mínima de clúster 1 segundo El valor está especificado enunidades de 100 ms, que es elestándar de SDK.

Duración máxima de clúster 30 segundos El valor está especificado enunidades de 100 ms, que esel estándar de SDK. El API debackend podría obligar a unaduración de clúster más breve.

Tamaño máximo de fragmento 50 MB Para obtener más información,consulte Límites de Transmisiónde vídeo de Kinesis (p. 129).

Duración máxima de fragmento 10 segundos Para obtener más información,consulte Límites de Transmisiónde vídeo de Kinesis (p. 129).

Duración máxima de conexión 45 minutos El backend cierra la conexióndespués de este tiempo. El SDKgira el token y establece unanueva conexión dentro de estetiempo.

Longitud máxima de segmentoACK

1,024 caracteres Longitud máxima del segmentodel reconocimiento enviado a lafunción de analizador ACK.

53

Page 59: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Valor Límite Notas

Longitud máxima de cadena detipo de contenido

128 caracteres  

Longitud máxima de cadena deID de códec

32 caracteres  

Longitud máxima de cadena denombre de pista

32 caracteres  

Longitud máxima de datosprivados de códec

1 MiB = 1 * 1024 * 1024 bytes  

Longitud mínima de valor deescala de código temporal

100 ns El valor de escala mínimo decódigo temporal para representarlas marcas temporales delfotograma en el clúster deMKV resultante. El valor estáespecificado en incrementos de100 ns, que es el estándar deSDK.

Longitud máxima de valor deescala de código temporal

1 segundo El valor de escala máximo decódigo temporal para representarlas marcas temporales delfotograma en el clúster deMKV resultante. El valor estáespecificado en incrementos de100 ns, que es el estándar deSDK.

Recuento mínimo de elementode vista de contenido

10  

Duración mínima de búfer 20 segundos El valor está especificado enincrementos de 100 ns, que es elestándar de SDK.

Longitud máxima de versión deactualización

128 caracteres  

Longitud máxima de ARN 1024 caracteres  

Longitud máxima de secuenciade fragmento

128 caracteres  

Periodo de retención máximo 10 años  

Referencia de códigos de errorEsta sección contiene información sobre códigos de error y estado para el Producer libraries (p. 28).

Para obtener información sobre las soluciones a problemas comunes, consulte Solución de problemas deTransmisión de vídeo de Kinesis (p. 132).

54

Page 60: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Códigos de error y estado devueltos por devoluciones dellamadas a PutFrameLas siguientes secciones contienen información sobre los estados y errores que devuelven lasdevoluciones de llamada de la operación PutFrame.

Temas• Códigos de estado y error devueltos por la biblioteca Client (p. 55)• Códigos de estado y error devueltos por la biblioteca Duration (p. 69)• Códigos de estado y error devueltos por la biblioteca Common (p. 69)• Códigos de estado y error devueltos por la biblioteca Heap (p. 70)• Códigos de estado y error devueltos por la biblioteca MKVGen (p. 72)• Códigos de estado y error devueltos por la biblioteca Trace (p. 75)• Códigos de estado y error devueltos por la biblioteca Utils (p. 75)• Códigos de estado y error devueltos por la biblioteca View (p. 76)

Códigos de estado y error devueltos por la biblioteca Client

La tabla siguiente contiene información sobre estados y errores que devuelven los métodos de la bibliotecaClient de Transmisión de vídeo de Kinesis.

Code Message Descripción Acción recomendada

0x52000001 STATUS_MAX_STREAM_COUNTSe ha alcanzado elrecuento máximo desecuencia.

Especifique un recuentode secuencia máximode mayor tamaño enDeviceInfo tal y comose especifica en Límites deSDK Producer (p. 52).

0x52000002 STATUS_MIN_STREAM_COUNTError mínimode recuento desecuencia.

Especifique el númeromáximo de secuenciasmayores que 0 enDeviceInfo.

0x52000003 STATUS_INVALID_DEVICE_NAME_LENGTHLongitud de nombrede dispositivo noválida.

Consulte la longitud máximadel nombre de dispositivoen caracteres que se haespecificado en Límites deSDK Producer (p. 52).

0x52000004 STATUS_INVALID_DEVICE_INFO_VERSIONVersión de estructurade DeviceInfo noválida.

Especifique la versión actualcorrecta de la estructura.

0x52000005 STATUS_MAX_TAG_COUNT Se ha alcanzado elrecuento máximo deetiquetas.

Consulte el recuento máximode etiquetas actual que seespecifica en Límites deSDK Producer (p. 52).

0x52000006 STATUS_DEVICE_FINGERPRINT_LENGTH

55

Page 61: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x52000007 STATUS_INVALID_CALLBACKS_VERSIONVersión de estructurade Callbacks noválida.

Especifique la versión actualcorrecta de la estructura.

0x52000008 STATUS_INVALID_STREAM_INFO_VERSIONVersión de estructurade StreamInfo noválida.

Especifique la versión actualcorrecta de la estructura.

0x52000009 STATUS_INVALID_STREAM_NAME_LENGTHLongitud de nombrede secuencia noválida.

Consulte la longitud máximadel nombre de secuenciaen caracteres que se haespecificado en Límites deSDK Producer (p. 52).

0x5200000a STATUS_INVALID_STORAGE_SIZESe ha especificadoun tamaño dealmacenamiento noválido.

El tamaño dealmacenamiento en bytesdeben estar dentro delos límites especificadosen Límites de SDKProducer (p. 52).

0x5200000b STATUS_INVALID_ROOT_DIRECTORY_LENGTHLongitud de cadenade directorio raíz noválida.

Consulte la longitudmáxima de la ruta deldirectorio raíz que se haespecificado en Límites deSDK Producer (p. 52).

0x5200000c STATUS_INVALID_SPILL_RATIOProporción dedesbordamiento noválida.

Expresa la proporción dedesbordamiento comoporcentaje de 0 a 100.

0x5200000d STATUS_INVALID_STORAGE_INFO_VERSIONVersión de estructurade StorageInfo noválida.

Especifique la versión actualcorrecta de la estructura.

0x5200000e STATUS_INVALID_STREAM_STATELa secuencia estáen un estado que nopermite la operaciónactual.

Normalmente, este errorse produce cuando elSDK no logra alcanzarel estado que necesitapara realizar la operaciónsolicitada. Por ejemplo,ocurre si la llamada al APIGetStreamingEndpointdevuelve un error y laaplicación cliente hace casoomiso del mismo y siguecolocando fotogramas en lasecuencia.

56

Page 62: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x5200000f STATUS_SERVICE_CALL_CALLBACKS_MISSINGEn la estructuraCallbacks faltanpuntos de entrada defunción para algunasfunciones obligatorias.

Asegúrese de que lasdevoluciones de llamadaobligatorias se implementenen la aplicación cliente.Este error se exponeúnicamente a clientes PIC(código independientede la plataforma). C++ yotros contenedores de nivelsuperior cumplen estasllamadas.

0x52000010 STATUS_SERVICE_CALL_NOT_AUTHORIZED_ERRORNo tiene autorización. Compruebe el token deseguridad/certificado/integración de token deseguridad/vencimiento.Asegúrese de que eltoken tenga los derechosadecuados asociados almismo. Para las aplicacionesde muestra de Transmisiónde vídeo de Kinesis,asegúrese de que lavariable de entorno se hayaestablecido correctamente.

0x52000011 STATUS_DESCRIBE_STREAM_CALL_FAILEDError de API deDescribeStream.

Este error se devuelvedespués del errorde reintento del APIDescribeStream. Elcliente PIC devuelve esteerror después de dejar dereintentarlo.

0x52000012 STATUS_INVALID_DESCRIBE_STREAM_RESPONSEEstructuraDescribeStreamResponseno válida.

La estructura quese transfirió alDescribeStreamResultEventes nula o bien contieneelementos no válidos comoun Nombre de recurso deAmazon (ARN) nulo.

0x52000013 STATUS_STREAM_IS_BEING_DELETED_ERRORLa secuencia se estáeliminando.

La eliminación de lasecuencia provocó unerror de API. Asegúrese deque no haya ningún otroproceso intentando eliminarla secuencia mientras estáen uso.

0x52000014 STATUS_SERVICE_CALL_INVALID_ARG_ERRORSe han especificadoargumentos noválidos para lallamada de servicio.

El backend devuelve esteerror cuando un argumentode llamada de servicio no esválido o cuando el SDK seencuentra con un error queno puede interpretar.

57

Page 63: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x52000015 STATUS_SERVICE_CALL_DEVICE_NOT_FOUND_ERRORNo se ha encontradoel dispositivo.

Asegúrese de que eldispositivo no se eliminemientras esté en uso.

0x52000016 STATUS_SERVICE_CALL_DEVICE_NOT_PROVISIONED_ERRORNo se haaprovisionado eldispositivo.

Asegúrese de que eldispositivo se hayaaprovisionado.

0x52000017 STATUS_SERVICE_CALL_RESOURCE_NOT_FOUND_ERROREl servicio ha devueltoun recurso genéricono encontrado.

Este error se producecuando el servicio no puedelocalizar el recurso (porejemplo, una secuencia).Podría significar cosasdistintas en diferentescontextos, pero es probableque la causa sea el uso delos API antes de la creaciónde la secuencia. El usodel SDK garantiza que lasecuencia se cree en primerlugar.

0x52000018 STATUS_INVALID_AUTH_LENLongitud no válidade información deautenticación.

Consulte los valoresactuales que se especificanen Límites de SDKProducer (p. 52).

0x52000019 STATUS_CREATE_STREAM_CALL_FAILEDLa llamada al APICreateStream no serealizó correctamente.

Consulte la cadena de errorpara obtener informaciónmás detallada acerca depor qué la operación no serealizó correctamente.

0x5200002a STATUS_GET_STREAMING_TOKEN_CALL_FAILEDLa llamada aGetStreamingTokenno se realizócorrectamente.

Consulte la cadena de errorpara obtener informaciónmás detallada acerca depor qué la operación no serealizó correctamente.

0x5200002b STATUS_GET_STREAMING_ENDPOINT_CALL_FAILEDLa llamada al APIGetStreamingEndpointno se realizócorrectamente.

Consulte la cadena de errorpara obtener informaciónmás detallada acerca depor qué la operación no serealizó correctamente.

0x5200002c STATUS_INVALID_URI_LENEl APIGetStreamingEndpointdevolvió una longitudde cadena URI noválida.

Consulte los valoresmáximos actuales que seespecifican en Límites deSDK Producer (p. 52).

0x5200002d STATUS_PUT_STREAM_CALL_FAILEDLa llamada al APIPutMedia no serealizó correctamente.

Consulte la cadena de errorpara obtener informaciónmás detallada acerca depor qué la operación no serealizó correctamente.

58

Page 64: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x5200002e STATUS_STORE_OUT_OF_MEMORYEl almacén decontenido se haquedado sin memoria.

El almacén de contenidose comparte entre lassecuencias y debe tenercapacidad suficiente paraalmacenar las duracionesmáxima para todas lassecuencias + ~ 20%(teniendo en cuenta ladesfragmentación). Esimportante no desbordarel almacenamiento. Elijavalores para la duraciónmáxima por secuencia quese correspondan con eltamaño de almacenamientoacumulado y las toleranciasde latencia. Es mejor colocarlos fotogramas a medida quesalen de la ventana de lavista de contenido en lugarde solo ponerlos (presiónde memoria de almacén decontenido). Esto se debea que la colocación de losfotogramas desencadenadevoluciones de llamada denotificación de presión desecuencia. A continuación, laaplicación puede ajustar loscomponentes multimedia desubida (como el codificador)para reducir la tasa de bits,anular fotogramas o actuaren consecuencia.

0x5200002f STATUS_NO_MORE_DATA_AVAILABLENo hay másdatos disponiblesactualmente para unasecuencia.

Se trata de un posibleresultado válido cuando lacanalización multimediagenera fotogramas a unavelocidad menor que losconsume el subprocesode red para enviarlos alservicio. Los clientes de nivelsuperior (por ejemplo, C++, Java o Android) no venesta advertencia, ya que segestiona internamente.

0x52000030 STATUS_INVALID_TAG_VERSIONVersión de estructurade Tag no válida.

Especifique la versión actualcorrecta de la estructura.

0x52000031 STATUS_SERVICE_CALL_UNKOWN_ERRORLa pila de redesha devuelto unerror genérico odesconocido.

Consulte los logs para verinformación más detallada.

59

Page 65: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x52000032 STATUS_SERVICE_CALL_RESOURCE_IN_USE_ERRORRecurso en uso. Se devuelve desde elservicio. Para obtenermás información consultela Referencia del API deTransmisión de vídeo deKinesis.

0x52000033 STATUS_SERVICE_CALL_CLIENT_LIMIT_ERRORLímite de cliente. Se devuelve desde elservicio. Para obtenermás información consultela Referencia del API deTransmisión de vídeo deKinesis.

0x52000034 STATUS_SERVICE_CALL_DEVICE_LIMIT_ERRORLímite de dispositivos. Se devuelve desde elservicio. Para obtenermás información consultela Referencia del API deTransmisión de vídeo deKinesis.

0x52000035 STATUS_SERVICE_CALL_STREAM_LIMIT_ERRORLímite de secuencia. Se devuelve desde elservicio. Para obtenermás información consultela Referencia del API deTransmisión de vídeo deKinesis.

0x52000036 STATUS_SERVICE_CALL_RESOURCE_DELETED_ERROREl recurso se haeliminado o se estáeliminando.

Se devuelve desde elservicio. Para obtenermás información consultela Referencia del API deTransmisión de vídeo deKinesis.

0x52000037 STATUS_SERVICE_CALL_TIMEOUT_ERRORSe ha agotado eltiempo de espera dela llamada de servicio.

Llamar a un API de servicioconcreto ha dado lugar aque se supere el tiempode espera. Asegúrese dedisponer de una conexiónde red válida. El PIC volveráa intentar la operación deforma automática.

0x52000038 STATUS_STREAM_READY_CALLBACK_FAILEDNotificación desecuencia lista.

Esta notificación se envíadesde el PIC al cliente paraindicar que se ha creado lasecuencia asíncrona.

0x52000039 STATUS_DEVICE_TAGS_COUNT_NON_ZERO_TAGS_NULLSe han especificadoetiquetas no válidas.

El recuento de etiquetas noes cero, pero las etiquetasestán vacías. Asegúresede que las etiquetas seespecifiquen o de que elrecuento sea igual a cero.

60

Page 66: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x5200003a STATUS_INVALID_STREAM_DESCRIPTION_VERSIONVersión deestructura deStreamDescriptionno válida.

Especifique la versión actualcorrecta de la estructura.

0x5200003b STATUS_INVALID_TAG_NAME_LENLongitud de nombrede etiqueta no válida.

Consulte los límites para elnombre de la etiqueta quese especifican en Límites deSDK Producer (p. 52).

0x5200003c STATUS_INVALID_TAG_VALUE_LENLongitud de valor deetiqueta no válida.

Consulte los límites para elvalor de la etiqueta que seespecifican en Límites deSDK Producer (p. 52).

0x5200003d STATUS_TAG_STREAM_CALL_FAILEDEl API TagResourceha devuelto un error.

La llamada al APITagResource no se realizócorrectamente. Compruebesi hay una conexión dered válida. Consulte loslogs para obtener másinformación sobre el error.

0x5200003e STATUS_INVALID_CUSTOM_DATADatos personalizadosno válidos llamando alos API de PIC.

Se han especificado datospersonalizados no válidosen una llamada a los APIde PIC. Esto puede ocurrirúnicamente en los clientesque usan PIC directamente.

0x5200003f STATUS_INVALID_CREATE_STREAM_RESPONSEEstructuraCreateStreamResponseno válida.

La estructura o suscampos de miembro noson válidos (es decir, elARN es nulo o mayor delespecificado en Límites deSDK Producer (p. 52)).

0x52000040 STATUS_CLIENT_AUTH_CALL_FAILEDError en autenticaciónde cliente.

El PIC no ha podidoobtener la información deautenticación correcta (esdecir, AccessKeyId oSecretAccessKey) trasuna serie de reintentos.Compruebe la integraciónde autenticación. Lasaplicaciones de muestrautilizan variables de entornopara transferir informaciónde credenciales a labiblioteca C++ Producer.

0x52000041 STATUS_GET_CLIENT_TOKEN_CALL_FAILEDError al obtener lallamada del token deseguridad.

Esta situación puede darsepara clientes que utilizan PICdirectamente. Después deuna serie de reintentos, lallamada devuelve este error.

61

Page 67: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x52000042 STATUS_CLIENT_PROVISION_CALL_FAILEDError deaprovisionamiento.

El aprovisionamiento no estáimplementado.

0x52000043 STATUS_CREATE_CLIENT_CALL_FAILEDNo se pudo crear elProducer Client.

El PIC ha devuelto un errorgenérico tras una seriede reintentos cuando lacreación de cliente devuelveun error.

0x52000044 STATUS_CLIENT_READY_CALLBACK_FAILEDError al llevar elProducer Client a unestado LISTO.

Devuelto por la máquinade estado de PIC si elPIC genera un error aldesplazarse al estadoLISTO. Consulte loslogs para obtener másinformación sobre la causaraíz.

0x52000045 STATUS_TAG_CLIENT_CALL_FAILEDEl TagResource delProducer Client hafallado.

La llamada al APITagResource ha devueltoun error para ProducerClient. Consulte los logs paraobtener más informaciónsobre la causa raíz.

0x52000046 STATUS_INVALID_CREATE_DEVICE_RESPONSEError en la creaciónde Dispositivo/Producer.

Los SDK de nivel más alto(por ejemplo, C++ o Java)no implementan aún el APIde creación de dispositivo/Producer. Los clientes queutilizan PIC directamentepueden indicar un errormediante la notificación deresultado.

0x52000047 STATUS_ACK_TIMESTAMP_NOT_IN_VIEW_WINDOWLa marca temporalde la ACK recibida noestá en la vista.

Este error se produce si elfotograma correspondientea la ACK recibida caefuera de la ventana de lavista de contenido. Por logeneral, esto ocurre si laentrega de ACK es lenta.Se puede interpretar comouna advertencia y unaindicación de que el enlacede descarga es lento.

0x52000048 STATUS_INVALID_FRAGMENT_ACK_VERSIONVersión de estructurade FragmentAck noválida.

Especifique la versión actualcorrecta de la estructuraFragmentAck.

62

Page 68: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x52000049 STATUS_INVALID_TOKEN_EXPIRATIONVencimiento de tokende seguridad noválido.

El vencimiento del token deseguridad debe tener unamarca temporal absolutaen el futuro que sea mayorque la marca temporalactual, con un período degracia. Para los límitespara el periodo de gracia,consulte el Límites de SDKProducer (p. 52).

0x5200004a STATUS_END_OF_STREAM Indicador definalización desecuencia (EOS).

En la llamada al APIGetStreamData, indica quela sesión de control de cargaha finalizado. Esto ocurre sila sesión finaliza o generaerrores o si el token de lasesión ha vencido y la sesiónse está girando.

0x5200004b STATUS_DUPLICATE_STREAM_NAMEDuplicar nombre desecuencia.

Varias secuencias no puedetener el mismo nombre desecuencia. Elija un nombreexclusivo para la secuencia.

0x5200004c STATUS_INVALID_RETENTION_PERIODPeríodo de retenciónno válido.

Se especifica un períodode retención no válido enla estructura StreamInfo.Para obtener informaciónacerca del rango de valoresválido para el periodo deretención, consulte Límitesde SDK Producer (p. 52).

0x5200004d STATUS_INVALID_ACK_KEY_STARTNo válidoFragmentAck.

No se ha podido analizar lacadena ACK del fragmento.Indicador de inicio de claveno válido. La cadena ACKdel fragmento podría estardañada. Se puede corregirautomáticamente, y esteerror se puede tratar comouna advertencia.

0x5200004e STATUS_INVALID_ACK_DUPLICATE_KEY_NAMENo válidoFragmentAck.

No se ha podido analizar lacadena ACK del fragmento.Varias claves tienen elmismo nombre. La cadenaACK del fragmento podríaestar dañada. Se puedecorregir automáticamente,y este error se puede tratarcomo una advertencia.

63

Page 69: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x5200004f STATUS_INVALID_ACK_INVALID_VALUE_STARTNo válidoFragmentAck.

No se pudo analizar lacadena ACK del fragmentodebido a un indicador deinicio de valor de clave noválido. La cadena ACKdel fragmento podría estardañada. Se puede corregirautomáticamente, y esteerror se puede tratar comouna advertencia.

0x52000050 STATUS_INVALID_ACK_INVALID_VALUE_ENDNo válidoFragmentAck.

No se pudo analizar lacadena ACK del fragmentodebido a un indicador definalización de valor de claveno válido. La cadena ACKdel fragmento podría estardañada. Se puede corregirautomáticamente, y esteerror se puede tratar comouna advertencia.

0x52000051 STATUS_INVALID_PARSED_ACK_TYPENo válidoFragmentAck.

No se pudo analizar lacadena ACK del fragmentoporque se especificó un tipode fragmento ACK no válido.

0x52000052 STATUS_STREAM_HAS_BEEN_STOPPEDLa secuencia sedetuvo.

La secuencia se ha detenido,pero todavía se estácolocando un fotograma enla secuencia.

0x52000053 STATUS_INVALID_STREAM_METRICS_VERSIONVersión de estructurade StreamMetricsno válida.

Especifique la versión actualcorrecta de la estructuraStreamMetrics.

0x52000054 STATUS_INVALID_CLIENT_METRICS_VERSIONVersión de estructurade ClientMetricsno válida.

Especifique la versión actualcorrecta de la estructuraClientMetrics.

0x52000055 STATUS_INVALID_CLIENT_READY_STATENo se pudo inicializarel Producer paraalcanzar un estadoLISTO.

No se pudo alcanzar elestado LISTO durante lainicialización del ProducerClient. Consulte los logs paraobtener más información.

0x52000056 STATUS_STATE_MACHINE_STATE_NOT_FOUNDError interno demáquina de estado.

No es un error visiblepúblicamente.

0x52000057 STATUS_INVALID_FRAGMENT_ACK_TYPETipo ACK noválido especificadoen la estructuraFragmentAck.

La estructura FragmentAckdebe contener los tiposde ACK definidos en elencabezado público.

64

Page 70: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x52000058 STATUS_INVALID_STREAM_READY_STATEError interno detransición de máquinade estado.

No es un error visiblepúblicamente.

0x52000059 STATUS_CLIENT_FREED_BEFORE_STREAMEl objeto de lasecuencia se liberódespués de liberar elProducer.

Se ha producido un intentode liberar un objeto desecuencia después de liberarel objeto de Producer. Estopuede ocurrir únicamenteen los clientes que usan PICdirectamente.

0x5200005a STATUS_ALLOCATION_SIZE_SMALLER_THAN_REQUESTEDError dealmacenamientointerno.

Un error interno que indicaque el tamaño de asignaciónreal del almacén decontenido es más pequeñoque el tamaño del fragmento/fotograma empaquetado.

0x5200005b STATUS_VIEW_ITEM_SIZE_GREATER_THAN_ALLOCATIONError dealmacenamientointerno.

El tamaño almacenado dela asignación en la vista decontenido es mayor que eltamaño de asignación en elalmacén de contenido.

0x5200005c STATUS_ACK_ERR_STREAM_READ_ERRORACK de error delectura de secuencia.

Un error que la ACKdevuelve desde el backendindicando un error de lectura/análisis de secuencia. Estoocurre por lo general cuandoel backend devuelve un erroral recuperar la secuencia.El restreaming automáticonormalmente puede corregireste error.

65

Page 71: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x5200005d STATUS_ACK_ERR_FRAGMENT_SIZE_REACHEDSe ha alcanzado eltamaño máximo defragmento.

El tamaño máximo defragmento en bytes sedefine en Límites deSDK Producer (p. 52).Este error indica que hayfotogramas muy grandes obien que no hay fotogramasclave para crear fragmentosde tamaño manejable.Compruebe la configuracióndel codificador y asegúresede que los fotogramasprincipales se hayanproducido correctamente.Para secuencias que tenganuna densidad muy alta,configure el codificador paraproducir fragmentos conduraciones más pequeñaspara administrar el tamañomáximo.

0x5200005e STATUS_ACK_ERR_FRAGMENT_DURATION_REACHEDSe ha alcanzado laduración máxima defragmento.

La duración máximade fragmento se defineen Límites de SDKProducer (p. 52). Esteerror indica que hay unatasa de fotogramas porsegundo muy baja o bienque no hay fotogramasclave para crear fragmentosde duración manejable.Compruebe la configuracióndel codificador y asegúresede que los fotogramasprincipales se hayanproducido correctamente aintervalos regulares.

0x5200005f STATUS_ACK_ERR_CONNECTION_DURATION_REACHEDSe ha alcanzado laduración máxima deconexión.

Transmisión de vídeo deKinesis obliga la duraciónde conexión máxima quese especifica en Límites deSDK Producer (p. 52).El SDK Producer giraautomáticamente lasecuencia/token antes dealcanzar el máximo y, deeste modo, los clientes queutilizan el SDK no debenrecibir este error.

66

Page 72: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x52000060 STATUS_ACK_ERR_FRAGMENT_TIMECODE_NOT_MONOTONICLos códigostemporales noaumentan de formamonótona.

El SDK Producer aplicamarcas temporales, de modoque los clientes que utilizanel SDK no debe recibir esteerror.

0x52000061 STATUS_ACK_ERR_MULTI_TRACK_MKVVarias pistas en elMKV.

El SDK Producer aplicasecuencias de pista única,de modo que los clientesque utilizan el SDK no debenrecibir este error.

0x52000062 STATUS_ACK_ERR_INVALID_MKV_DATADatos de MKV noválidos.

El analizador de MKV debackend ha encontradoun error al analizar lasecuencia. Los clientesque utilizan el SDK podríanencontrar este error si lasecuencia está dañadaen la transición o si laspresiones del búfer fuerzanal SDK a anular fotogramasfinales que se transmitenparcialmente. En este últimocaso, es recomendablereducir el FPS/resolución,aumentar la tasa decompresión o (en el casode una red "por ráfagas")permitir un mayor almacénde contenido y duración delbúfer para adaptarse a laspresiones temporales.

0x52000063 STATUS_ACK_ERR_INVALID_PRODUCER_TIMESTAMPMarca temporal deProducer no válida.

El servicio devuelve esteACK de error si el relojdel Producer está muyadelantado. Los SDK denivel superior (por ejemplo,Java o C++) utilizan algunaversión del reloj del sistemapara satisfacer la devoluciónde llamada de hora actualdesde PIC. Asegúrese deque el reloj del sistema estáconfigurado correctamente.Los clientes que utilizan elPIC directamente debenasegurarse de que susfunciones de devolución dellamada devuelvan la marcatemporal correcta.

67

Page 73: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x52000064 STATUS_ACK_ERR_STREAM_NOT_ACTIVESecuencia inactiva. Se realizó una llamada alAPI de backend mientrasla secuencia no estaba enestado "Activo". Esto ocurrecuando el cliente crea lasecuencia e inmediatamentecontinua para insertarfotogramas en la misma. ElSDK gestiona esta situacióna través de la máquina deestado y el mecanismo derecuperación.

0x52000065 STATUS_ACK_ERR_KMS_KEY_ACCESS_DENIEDError de accesodenegado de AWSKMS.

Se devuelve cuando lacuenta no tiene acceso a laclave especificada.

0x52000066 STATUS_ACK_ERR_KMS_KEY_DISABLEDLa clave AWS KMSestá deshabilitada

La clave especificada se hadeshabilitado.

0x52000067 STATUS_ACK_ERR_KMS_KEY_VALIDATION_ERRORError de validación declave de AWS KMS.

Error de validacióngenérico. Para obtenermás información, consultela AWS Key ManagementService API Reference.

0x52000068 STATUS_ACK_ERR_KMS_KEY_UNAVAILABLEClave de AWS KMSno disponible.

La clave no está disponible.Para obtener másinformación, consulte laAWS Key ManagementService API Reference.

0x52000069 STATUS_ACK_ERR_KMS_KEY_INVALID_USAGEUso no válido de laclave de AWS KMS.

La clave de AWS KMSno está configuradapara utilizarse en estecontexto. Para obtener másinformación, consulte laAWS Key ManagementService API Reference.

0x5200006a STATUS_ACK_ERR_KMS_KEY_INVALID_STATEEstado no válido deAWS KMS.

Para obtener másinformación, consulte laAWS Key ManagementService API Reference.

0x5200006b STATUS_ACK_ERR_KMS_KEY_NOT_FOUNDNo se encuentra laclave de AWS KMS.

No se ha encontrado laclave. Para obtener másinformación, consulte laAWS Key ManagementService API Reference.

0x5200006c STATUS_ACK_ERR_STREAM_DELETEDLa secuencia se haeliminado o se estáeliminando.

La secuencia se estáeliminando mediante otraaplicación o a través de laConsola de administraciónde AWS.

68

Page 74: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción Acción recomendada

0x5200006d STATUS_ACK_ERR_ACK_INTERNAL_ERRORError interno. Error interno de serviciogenérico.

0x5200006e STATUS_ACK_ERR_FRAGMENT_ARCHIVAL_ERRORError de archivado defragmento.

Se devuelve cuando elservicio no persiste deforma duradera e indexael fragmento. Aunque esraro, puede ocurrir pordiversos motivos. De formapredeterminada, el SDKvuelve a intentar enviar elfragmento.

0x5200006f STATUS_ACK_ERR_UNKNOWN_ACK_ERRORError desconocido. El servicio ha devuelto unerror desconocido.

0x52000070 STATUS_MISSING_ERR_ACK_IDFalta información deACK.

El analizador de ACK hacompletado el análisis,pero falta la información deFragmentAck.

0x52000071 STATUS_INVALID_ACK_SEGMENT_LENLongitud de segmentode ACK no válida.

Se ha especificado unacadena de segmento ACKcon una longitud no válidaal analizador ACK. Paraobtener más información,consulte Límites de SDKProducer (p. 52).

Códigos de estado y error devueltos por la biblioteca DurationLa tabla siguiente contiene información sobre estados y errores que devuelven los métodos de la bibliotecaDuration.

Code Message

0xFFFFFFFFFFFFFFFF INVALID_DURATION_VALUE

Códigos de estado y error devueltos por la biblioteca CommonLa tabla siguiente contiene información sobre estados y errores que devuelven los métodos de la bibliotecaCommon.

Note

Estos códigos de información sobre estados y errores son comunes a muchos API.

Code Message Descripción

0x00000001 STATUS_NULL_ARG Se ha transferido NULL para unargumento obligatorio.

0x00000002 STATUS_INVALID_ARG Se ha especificado un valor noválido para un argumento.

69

Page 75: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción

0x00000003 STATUS_INVALID_ARG_LEN Se ha especificado una longitudde argumento no válida.

0x00000004 STATUS_NOT_ENOUGH_MEMORY No se ha podido asignarmemoria suficiente.

0x00000005 STATUS_BUFFER_TOO_SMALL El tamaño del búfer especificadoes demasiado pequeño.

0x00000006 STATUS_UNEXPECTED_EOF Se ha alcanzado un final dearchivo inesperado.

0x00000007 STATUS_FORMAT_ERROR Se encontró un formato noválido.

0x00000008 STATUS_INVALID_HANDLE_ERRORValor de controlador no válido.

0x00000009 STATUS_OPEN_FILE_FAILED Error al abrir un archivo.

0x0000000a STATUS_READ_FILE_FAILED Error al leer desde un archivo.

0x0000000b STATUS_WRITE_TO_FILE_FAILEDError al escribir en un archivo.

0x0000000c STATUS_INTERNAL_ERROR Un error interno quenormalmente no ocurre y podríaindicar un error de API deservicio o SDK.

0x0000000d STATUS_INVALID_OPERATION Se ha producido una operaciónno válida o la operación no estápermitida.

0x0000000e STATUS_NOT_IMPLEMENTED La característica no estáimplementada.

0x0000000f STATUS_OPERATION_TIMED_OUT La operación ha agotado eltiempo de espera.

0x00000010 STATUS_NOT_FOUND No se ha encontrado un recursonecesario.

Códigos de estado y error devueltos por la biblioteca Heap

La tabla siguiente contiene información sobre estados y errores que devuelven los métodos de la bibliotecaHeap.

Code Message Descripción

0x01000001 STATUS_HEAP_FLAGS_ERROR Se ha especificado unacombinación no válida demarcadores.

0x01000002 STATUS_HEAP_NOT_INITIALIZEDSe ha intentado realizar unaoperación antes de que seinicializara el montón.

70

Page 76: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción

0x01000003 STATUS_HEAP_CORRUPTED El montón estaba dañadoo se sobrescribió la bandade protección (en modo dedepuración). Un desbordamientodel búfer en el código del clientepodría dar lugar a una corrupcióndel montón.

0x01000004 STATUS_HEAP_VRAM_LIB_MISSINGLa biblioteca de modo de kernelo el usuario de VRAM (vídeoRAM) no se puede cargar ofalta. Compruebe si la plataformasubyacente es compatible conasignaciones de VRAM.

0x01000005 STATUS_HEAP_VRAM_LIB_REOPENError al abrir la biblioteca deVRAM.

0x01000006 STATUS_HEAP_VRAM_INIT_FUNC_SYMBOLError al cargar la exportación dela función INIT.

0x01000007 STATUS_HEAP_VRAM_ALLOC_FUNC_SYMBOLError al cargar la exportación dela función ALLOC.

0x01000008 STATUS_HEAP_VRAM_FREE_FUNC_SYMBOLError al cargar la exportación dela función FREE.

0x01000009 STATUS_HEAP_VRAM_LOCK_FUNC_SYMBOLError al cargar la exportación dela función LOCK.

0x0100000a STATUS_HEAP_VRAM_UNLOCK_FUNC_SYMBOLError al cargar la exportación dela función UNLOCK.

0x0100000b STATUS_HEAP_VRAM_UNINIT_FUNC_SYMBOLError al cargar la exportación dela función UNINIT.

0x0100000c STATUS_HEAP_VRAM_GETMAX_FUNC_SYMBOLError al cargar la exportación dela función GETMAX.

0x0100000d STATUS_HEAP_DIRECT_MEM_INITError al inicializar el grupo demontón principal en el montónhíbrido.

0x0100000e STATUS_HEAP_VRAM_INIT_FAILEDError de inicialización dinámicade VRAM.

0x0100000f STATUS_HEAP_LIBRARY_FREE_FAILEDError al eliminar la asignación yliberar la biblioteca de VRAM.

0x01000010 STATUS_HEAP_VRAM_ALLOC_FAILEDError de asignación de VRAM.

0x01000011 STATUS_HEAP_VRAM_FREE_FAILEDError de liberación de VRAM.

0x01000012 STATUS_HEAP_VRAM_MAP_FAILEDError de mapeo de VRAM.

0x01000013 STATUS_HEAP_VRAM_UNMAP_FAILEDError de desmapeo de VRAM.

71

Page 77: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción

0x01000014 STATUS_HEAP_VRAM_UNINIT_FAILEDError de desinicialización deVRAM.

Códigos de estado y error devueltos por la biblioteca MKVGen

La tabla siguiente contiene información sobre estados y errores que devuelven los métodos de la bibliotecaMKVGen.

Code Message Descripción / Acciónrecomendada

0x32000001 STATUS_MKV_INVALID_FRAME_DATAMiembros no válidos de laestructura de datos Frame.Asegúrese de que la duración,el tamaño y los datos defotogramas sean válidos yestén dentro de los límitesespecificados en Límites de SDKProducer (p. 52).

0x32000002 STATUS_MKV_INVALID_FRAME_TIMESTAMPMarca temporal no válida.La PTS (marca temporalde presentación) calculaday DTS (marca temporal dedecodificación) son mayores oiguales que la marca temporaldel fotograma de inicio delfragmento. Esto es unaindicación de un posible reiniciode canalización multimedia ode un problema de estabilidadde codificador. Para obtenerinformación sobre la resoluciónde problemas, consulte Error:"Failed to submit frame to KinesisVideo client" (No se pudo enviarel fotograma al cliente de KinesisVideo) (p. 136)

0x32000003 STATUS_MKV_INVALID_CLUSTER_DURATIONSe ha especificado una duraciónde fragmento no válida. Paraobtener más información,consulte Límites de SDKProducer (p. 52).

0x32000004 STATUS_MKV_INVALID_CONTENT_TYPE_LENGTHLongitud de cadena de tipode contenido no válida. Paraobtener más información,consulte Límites de SDKProducer (p. 52).

0x32000005 STATUS_MKV_NUMBER_TOO_BIG Se ha producido un intentode codificar un número quees demasiado grande para

72

Page 78: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción / Acciónrecomendadarepresentarlo en formatoEBML (Metalenguaje binarioextensible). No deberíaexponerse a los clientes de SDK.

0x32000006 STATUS_MKV_INVALID_CODEC_ID_LENGTHLongitud de cadena de IDde códec no válida. Paraobtener más información,consulte Límites de SDKProducer (p. 52).

0x32000007 STATUS_MKV_INVALID_TRACK_NAME_LENGTHLongitud de cadena de nombrede pista no válida. Paraobtener más información,consulte Límites de SDKProducer (p. 52).

0x32000008 STATUS_MKV_INVALID_CODEC_PRIVATE_LENGTHLongitud de datos privadosde códec no válida. Paraobtener más información,consulte Límites de SDKProducer (p. 52).

0x32000009 STATUS_MKV_CODEC_PRIVATE_NULLLos datos privados de códec(CPD) son NULL, mientras que eltamaño de CPD es mayor que 0.

0x3200000a STATUS_MKV_INVALID_TIMECODE_SCALEValor de escala de códigotemporal no válida. Paraobtener más información,consulte Límites de SDKProducer (p. 52).

0x3200000b STATUS_MKV_MAX_FRAME_TIMECODEEl código temporal del fotogramaes mayor que el máximo. Paraobtener más información,consulte Límites de SDKProducer (p. 52).

0x3200000c STATUS_MKV_LARGE_FRAME_TIMECODESe ha alcanzado el códigotemporal máximo de fotograma.El formato MKV utiliza 16 bitsfirmados para representar elcódigo temporal relativo delfotograma al principio del clúster.El error se genera si el códigotemporal del fotograma no sepuede representar. Este errorindica una selección de escalade código temporal deficienteo que la duración del clúster esdemasiado larga, de modo quela representación del códigotemporal del fotograma desbordael espacio de 16 bits con signo.

73

Page 79: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción / Acciónrecomendada

0x3200000d STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATASe ha encontrado un código deinicio de Anexo B no válido. Porejemplo, se especificó la marcade adaptación de Anexo B y elcódigo encuentra una secuenciade inicio no válida de más detres ceros. Un formato de AnexoB válido debe disponer de unasecuencia de "prevención deemulación" para escapar deuna secuencia de tres o másceros en la secuencia de bytes.Para obtener más información,consulte la especificación MPEG.

0x3200000e STATUS_MKV_INVALID_AVCC_NALU_IN_FRAME_DATAEmpaquetado NALu AVCC noválido cuando se ha especificadola marca AVCC de adaptación.Asegúrese de que la secuenciade bytes se encuentre en unformato AVCC válido. Paraobtener más información,consulte la especificación MPEG.

0x3200000f STATUS_MKV_BOTH_ANNEXB_AND_AVCC_SPECIFIEDSe especificaron NAL de AnexoB y AVCC de adaptación.Especifique uno o especifiqueninguno.

0x32000010 STATUS_MKV_INVALID_ANNEXB_NALU_IN_CPDFormato de Anexo B de CPD noválido cuando se ha especificadola marca de Anexo B deadaptación. Asegúrese de que elCPD se encuentre en un formatoAnexo B válido. De lo contrario,quite la marca de adaptación deAnexo B de CPD.

0x32000011 STATUS_MKV_PTS_DTS_ARE_NOT_SAMETransmisión de vídeo de Kinesisobliga a que PTS (marcatemporal de presentación)y DTS (marca temporal dedecodificación) sean la mismapara los fotogramas de iniciode fragmento. Estos son losfotogramas principales queinician el fragmento.

0x32000012 STATUS_MKV_INVALID_H264_H265_CPDError al analizar los datosprivados del códec H264/H265.

0x32000013 STATUS_MKV_INVALID_H264_H265_SPS_WIDTHError al extraer la anchura de losdatos privados de códec.

74

Page 80: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Code Message Descripción / Acciónrecomendada

0x32000014 STATUS_MKV_INVALID_H264_H265_SPS_HEIGHTError al extraer la altura de losdatos privados de códec.

0x32000015 STATUS_MKV_INVALID_H264_H265_SPS_NALUNALu SPS H264/H265 no válido.

0x32000016 STATUS_MKV_INVALID_BIH_CPD Formato de encabezado deinformación de mapa de bits noválido en los datos privados delcódec.

Códigos de estado y error devueltos por la biblioteca Trace

La tabla siguiente contiene información sobre estados y errores que devuelven los métodos de la bibliotecaTrace.

Code Message

0x10100001 STATUS_MIN_PROFILER_BUFFER

Códigos de estado y error devueltos por la biblioteca Utils

La tabla siguiente contiene información sobre estados y errores que devuelven los métodos de la bibliotecaUtils.

Code Message

0x40000001 STATUS_INVALID_BASE64_ENCODE

0x40000002 STATUS_INVALID_BASE

0x40000003 STATUS_INVALID_DIGIT

0x40000004 STATUS_INT_OVERFLOW

0x40000005 STATUS_EMPTY_STRING

0x40000006 STATUS_DIRECTORY_OPEN_FAILED

0x40000007 STATUS_PATH_TOO_LONG

0x40000008 STATUS_UNKNOWN_DIR_ENTRY_TYPE

0x40000009 STATUS_REMOVE_DIRECTORY_FAILED

0x4000000a STATUS_REMOVE_FILE_FAILED

0x4000000b STATUS_REMOVE_LINK_FAILED

0x4000000c STATUS_DIRECTORY_ACCESS_DENIED

0x4000000d STATUS_DIRECTORY_MISSING_PATH

0x4000000e STATUS_DIRECTORY_ENTRY_STAT_ERROR

75

Page 81: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de códigos de error

Códigos de estado y error devueltos por la biblioteca ViewLa tabla siguiente contiene información sobre estados y errores que devuelven los métodos de la bibliotecaView.

Code Message Descripción

0x30000001 STATUS_MIN_CONTENT_VIEW_ITEMSSe ha especificado un recuentode elemento de vista decontenido no válido. Paraobtener más información,consulte Límites de SDKProducer (p. 52).

0x30000002 STATUS_INVALID_CONTENT_VIEW_DURATIONSe ha especificado una duraciónvista de contenido no válida.Para obtener más información,consulte Límites de SDKProducer (p. 52).

0x30000003 STATUS_CONTENT_VIEW_NO_MORE_ITEMSSe ha realizado un intento desuperar la posición de cabeza.

0x30000004 STATUS_CONTENT_VIEW_INVALID_INDEXSe ha especificado un índice noválido.

0x30000005 STATUS_CONTENT_VIEW_INVALID_TIMESTAMPSe ha producido un solapamientode marca temporal o una marcatemporal no válida. La marcatemporal de decodificación delfotograma debe ser mayor oigual que la marca temporal defotograma anterior, además de laduración de fotograma anterior:`DTS(n) >= DTS(n-1)+ Duration(n-1)`. Esteerror a menudo indica uncodificador "inestable". Elcodificador produce una ráfagade fotogramas codificados y susmarcas temporales son máspequeñas que las duracionesdentro del fotograma. O lasecuencia está configuradapara utilizar marcas temporalesde SDK y los fotogramasse envían a una velocidadsuperior a las duraciones delfotograma. Para contribuir a la"fluctuación" en el codificador,especifique una duración defotograma menor en la estructuraStreamInfo.StreamCaps.Por ejemplo, si la secuenciaes 25FPS, la duración de cadafotograma es de 40 ms. Sinembargo, para gestionar lafluctuación en el codificador, le

76

Page 82: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Marcas de adaptación de NAL

Code Message Descripciónrecomendamos utilizar la mitadde esa duración de fotograma(20 ms). Algunas secuenciasrequieren un control más precisodurante la sincronización paradetección de errores.

0x30000006 STATUS_INVALID_CONTENT_VIEW_LENGTHSe ha especificado una longitudde datos de elemento de vista decontenido no válida.

Referencia de marcas de adaptación de capa deabstracción de red (NAL)Esta sección contiene información sobre las marcas disponibles para la enumeraciónStreamInfo.NalAdaptationFlags.

La secuencia elemental de una aplicación puede tener formato Annex-B o AVCC:

• El formato Annex-B delimita las NALU (unidades de capa de abstracción de red) con dos bytes deceros, seguidos de uno o tres bytes de ceros, seguidos del número 1 (se denomina código de inicio, porejemplo, 00000001).

• El formato AVCC también incluye NALU, pero cada NALU está precedida por un valor que indica sutamaño (normalmente, cuatro bytes).

Muchos codificadores producen el formato de secuencia de bits Annex-B. Algunos procesadores desecuencia de bits de nivel superior (como un motor de reproducción o el reproductor Media SourceExtensions (MSE) de la Consola de administración de AWS) utilizan el formato AVCC para sus fotogramas.

Los datos privados del códec (CPD), que son SPS/PPS (conjunto de parámetros de secuencia/conjuntode parámetros de imagen) para el códec H.264, también pueden estar en formato Annex-B o AVCC. Sinembargo, para los CPD, los formatos son distintos de los descritos anteriormente.

Las marcas indican al SDK que adapte las NALU al formato AVCC o Annex-B para los datos de fotogramay CPD del siguiente modo:

Marca Adaptación

NAL_ADAPTATION_FLAG_NONE Sin adaptación

NAL_ADAPTATION_ANNEXB_NALS Adaptar NALU de Annex-B aNALU de AVCC

NAL_ADAPTATION_AVCC_NALS Adaptar NALU de AVCC a NALUde Annex-B

NAL_ADAPTATION_ANNEXB_CPD_NALSAdaptar NALU de Annex-B paralos datos privados del códec aNALU de formato AVCC

NAL_ADAPTATION_ANNEXB_CPD_AND_FRAME_NALSAdaptar NALU de Annex-B paralos datos privados de códec y

77

Page 83: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Producer

Marca Adaptaciónfotograma a NALU de formatoAVCC

Para obtener más información sobre los tipos de NALU, consulte Sección 1.3: Tipos de unidad de capa deabstracción de red en RFC 3984.

Estructuras de Producer SDKEsta sección incluye información sobre estructuras que puede utilizar para proporcionar datos al objetoProducer de Transmisión de vídeo de Kinesis.

Temas• DeviceInfo/ DefaultDeviceInfoProvider (p. 78)• StorageInfo (p. 78)

DeviceInfo/ DefaultDeviceInfoProviderLos objetos DeviceInfo y DevaultDeviceInfoProvider controlan el comportamiento del objeto Transmisión devídeo de Kinesis Producer.

Campos de miembro

• version: un valor de número entero utilizado para garantizar que se utiliza la versión correcta de laestructura con la versión actual del código base. La versión actual se especifica utilizando la macroDEVICE_INFO_CURRENT_VERSION.

• name: el nombre en lenguaje natural del dispositivo.• tagCount/ tags: en la actualidad no se utiliza.• streamCount: el número máximo de secuencias que el dispositivo puede gestionar. Este asigna

previamente el almacenamiento de punteros a los objetos de secuencia inicialmente, pero los objetosde secuencia reales se crean posteriormente. El valor predeterminado es 16 secuencias, pero puedecambiar este número en el archivo DefaultDeviceInfoProvider.cpp.

• storageInfo: un objeto que describe la configuración de almacenamiento principal. Para obtener másinformación, consulte StorageInfo (p. 78).

StorageInfoEspecifica la configuración del almacenamiento principal de Transmisión de vídeo de Kinesis.

La implementación predeterminada se basa en una implementación en montón rápida de bajafragmentación, optimizada para streaming. Utiliza el asignador MEMALLOC, que se puede sobrescribir enuna plataforma determinada. Algunas plataformas disponen de asignación de memoria virtual sin contarcon la asignación con páginas físicas. A medida que se utiliza la memoria, las páginas virtuales estánrespaldadas por las páginas físicas. Esto da como resultado una presión de memoria baja en el sistemageneral cuando el almacenamiento está infrautilizado.

Calcule el tamaño de almacenamiento predeterminado con la siguiente fórmula. El parámetroDefragmentationFactor debe estar establecido en 1,2 (20 por ciento).

Size = NumberOfStreams * AverageFrameSize * FramesPerSecond * BufferDurationInSeconds * DefragmentationFactor

78

Page 84: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

En el siguiente ejemplo, un dispositivo tiene secuencias de audio y vídeo. La secuencia de audio tiene 512muestras por segundo, con una muestra media de 100 bytes. La secuencia de vídeo tiene 25 fotogramaspor segundo, con un promedio de 10 000 bytes. Cada secuencia tiene 3 minutos de duración del búfer.

Size = (512 * 100 * (3 * 60) + 25 * 10000 * (3 * 60)) * 1.2 = (9216000 + 45000000) * 1.2 = 65059200 = ~ 66MB.

Si el dispositivo tiene más memoria disponible, se recomienda agregar más memoria para almacenamientopara evitar una seria fragmentación.

Asegúrese de que el tamaño de almacenamiento sea suficiente para que se adapte a los búferescompletos para todas las secuencias con un alto nivel de complejidad de codificación (cuando el tamañode fotograma es mayor debido al elevado movimiento) o cuando el ancho de banda es bajo. Si elproductor genera presión de memoria, emite devoluciones de llamada de presión de desbordamiento dealmacenamiento (StorageOverflowPressureFunc). Sin embargo, cuando no hay memoria disponibleen el almacén de contenido, elimina el fotograma que se envía a Transmisión de vídeo de Kinesis conun error (STATUS_STORE_OUT_OF_MEMORY = 0x5200002e). Para obtener más información, consulteCódigos de estado y error devueltos por la biblioteca Client (p. 55). Esto también puede ocurrir si losreconocimientos (ACK) de la aplicación no están disponibles o se han retrasado los ACK almacenados deforma persistente. En este caso, se rellenan los búferes hasta la capacidad de "duración del búfer" antesde que los fotogramas más antiguos empiecen a desecharse.

Campos de miembro

• version: un valor de número entero utilizado para garantizar que se utiliza la versión correcta de laestructura con la versión actual del código base.

• storageType: una enumeración de DEVICE_STORAGE_TYPE que especifica elrespaldo/implementación subyacente del almacenamiento. Actualmente el único valoradmitido es DEVICE_STORAGE_TYPE_IN_MEM. Una próxima implementación admitiráDEVICE_STORAGE_TYPE_HYBRID_FILE, lo que indica que el almacenamiento utiliza el almacén decontenido con respaldo de archivos.

• storageSize: el tamaño de almacenamiento en bytes para asignar previamente. La asignación mínimapermitida es de 10 MB; y la máxima es de 10 GB. (Esto cambiará con la implementación futura delalmacén de contenido respaldado por archivos).

• spillRatio: un valor de número entero que representa el porcentaje del almacenamiento que se debeasignar desde el tipo de almacenamiento de memoria directa (RAM), en oposición al almacenamiento dedesbordamiento secundario (almacenamiento de archivos). En la actualidad no se utiliza.

• rootDirectory: ruta del directorio donde se encuentra el almacén de contenido respaldado por archivos.En la actualidad no se utiliza.

Estructuras de secuencia de vídeo de KinesisPuede utilizar las siguientes estructuras para proporcionar datos a una instancia de un Transmisión devídeo de Kinesis.

Temas• StreamDefinition/ StreamInfo (p. 80)• ClientMetrics (p. 89)• StreamMetrics (p. 90)

79

Page 85: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

StreamDefinition/ StreamInfoEl objeto StreamDefinition en la capa de C++ envuelve el objeto StreamInfo en el códigoindependiente de plataforma y proporciona algunos valores predeterminados en el constructor.

Campos de miembro

Campo Tipos de datos Descripción Valor predeterminado

stream_name string Nombre de secuenciaopcional. Para obtenermás información acercade la longitud delnombre de secuencia,consulte Límites de SDKProducer (p. 52).Cada secuencia debetener un nombre único.

Si no se especificaningún nombre, segenera uno de formaaleatoria.

retention_period duration<uint64_t,ratio<3600>>

El periodo de retenciónde la secuencia, ensegundos. Especificar0 indica que no hayninguna retención.

3600 (una hora)

tags const map<string,string>*

Un mapa de paresclave/valor que contieneinformación de usuario.Si la secuencia yatiene un conjunto deetiquetas, las nuevasetiquetas se añaden alconjunto de etiquetasexistente.

No hay etiquetas

kms_key_id string El ID de clave de AWSKMS que se va autilizar para cifrar lasecuencia. Para obtenermás información,consulte Uso del cifradoen el servidor conTransmisión de vídeo deKinesis (p. 14).

La clave de KMSpredeterminada (aws/kinesis-video.)

streaming_type Enumeración deSTREAMING_TYPE

El único valoradmitido esSTREAMING_TYPE_REALTIME.

 

content_type string El formato del contenidode la secuencia. Laconsola Transmisión devídeo de Kinesis puedereproducir contenidocon el formato video/h264.

video/h264

80

Page 86: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripción Valor predeterminado

max_latency duration<uint64_t,milli>

La latencia máximaen milisegundosde la secuencia. Ladevolución de llamadade presión de latenciade secuencia (si seha especificado) seinvoca cuando sesupera la duracióndel búfer este tiempo.Especificar 0 indica queno se invocará ningunadevolución de llamadade presión de latenciade secuencia.

milliseconds::zero()

fragment_duration duration<uint64_t> La duración delfragmento quedesea, en segundos.Este valor se utilizaen combinacióncon el valorkey_frame_fragmentation.Si este valor es false,Transmisión de vídeode Kinesis generafragmentos en unfotograma clavedespués de estetiempo. Por ejemplo,una secuencia deaudio AdvancedAudio Coding (AAC)tiene cada fotogramacomo fotogramaclave. Si se especificakey_frame_fragmentation= false, lafragmentación se realizaen un fotograma clavedespués de que expireeste tiempo, lo quegenerará fragmentos de2 segundos.

2

81

Page 87: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripción Valor predeterminado

timecode_scale duration<uint64_t,milli>

La escala de códigode tiempo de MKVen milisegundos,que especifica lagranularidad de loscódigos de tiempopara los fotogramasdentro del clúster deMKV. El código detiempo del fotogramade MKV siempre tienerelación con el iniciodel clúster. MKV utilizaun valor de 16 bitsfirmado (0-32767) pararepresentar el código detiempo dentro del clúster(fragmento). Por lotanto, debe asegurarsede que el código detiempo del marco sepueda representar conla escala de códigotemporal dada. El valorde escala de código detiempo predeterminadode 1 ms garantiza queel marco mayor quese puede representarsea 32767 ms ~=32 segundos. Estosupera la duración defragmento máxima quese especifica en Límitesde Transmisión de vídeode Kinesis (p. 129),que es 10 segundos.

1

key_frame_fragmentation bool Si se producenfragmentos en unfotograma clave. Si estrue, el SDK produceun inicio del fragmentocada vez que haya unfotograma clave. Si esfalse, Transmisiónde vídeo de Kinesisespera al menosfragment_durationy produce un nuevofragmento en elfotograma clavesiguiente.

true

82

Page 88: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripción Valor predeterminado

frame_timecodes bool Si se utilizan códigosde tiempo de fotogramao se generan marcasde tiempo utilizando ladevolución de llamadade tiempo actual.Muchos codificadoresno producen marcastemporales con losfotogramas. Por lotanto, especificar falsepara este parámetrogarantiza que la marcade tiempo de los marcosse realice a medidaque se colocan enTransmisión de vídeo deKinesis.

true

absolute_fragment_times bool Transmisión de vídeode Kinesis utiliza MKVcomo su mecanismode empaquetadosubyacente. Laespecificación MKVes estricta acercade los códigos detiempo de fotogramarelativos al inicio declúster (fragmento).Sin embargo, loscódigos de tiempo delclúster pueden serabsolutos o relativos ala hora de inicio parala transmisión. Si lasmarcas temporales sonrelativas, la llamadaa la API de servicioPutMedia utiliza lamarca temporal deinicio de la secuenciaopcional y ajustará lasmarcas temporalesdel clúster. El serviciosiempre almacena losfragmentos con susmarcas temporalesabsolutas.

true

fragment_acks bool Si se recibe o no ACK(reconocimientos) defragmentos de nivel deaplicaciones.

true, lo que significaque el SDK recibirálos ACK y actuará enconsecuencia.

83

Page 89: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripción Valor predeterminado

restart_on_error bool Si se reinicia anteerrores específicos.

true, lo que significaque el SDK intentareiniciar el streaming sise producen errores.

recalculate_metrics bool Si se vuelven a calcularlas métricas. Cadallamada para recuperarlas métricas puederecalcularlos paraobtener el valor de"ejecución" másreciente, lo que podríatener un pequeñoimpacto en la CPU.Es posible que tengaque establecerse enfalse en dispositivosde huella/potenciaextremadamente bajapara ahorrar ciclos de laCPU. En caso contrario,no se aconseja usarfalse para este valor.

true

84

Page 90: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripción Valor predeterminado

nal_adaptation_flags uint32_t Especifica las marcasde adaptación deunidad de capa deabstracción de red(NALU). Si la secuenciade bits está codificadaen formato H.264,se puede procesarcomo sin procesaro empaquetadasen las NALU. Estasse encuentran en elAnexo B o en formatoAVCC. La mayoríade los productores/consumidores desecuencias elementales(codificadores/descodificadores delectura) utiliza el formatoAnexo B, ya que tienealgunas ventajas,como, por ejemplo,la recuperación deerrores. Los sistemasde nivel superior utilizanel formato AVCC,que es el formatopredeterminado paraMPEG, HLS, DASH,etc. La reproducciónde consola utiliza lasMSE (extensiones defuente multimedia)del navegador paradescodificar y reproducirla secuencia que utilizael formato AVCC.Para H.264 (y paraM-JPEG y H.265),el SDK proporcionacapacidades deadaptación.

Muchas secuenciaselementales seencuentran en elsiguiente formato. Eneste ejemplo, Ab esel código de inicio deAnexo B (001 o 0001).

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

El valor predeterminadoconsiste en adaptarel formato de AnexoB al formato AVCCtanto para los datos defotogramas como paralos datos privados decódec.

85

Page 91: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripción Valor predeterminado Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)

En el caso de H.264, losdatos privados de códec(CPD) se encuentranen los parámetros SPS(conjunto de parámetrode secuencia) y PPS(conjunto de parámetrode imagen) y se puedenadaptar al formatoAVCC. A menosque la canalizaciónmultimedia proporcioneel CPD por separado,la aplicación puedeextraer el CPD desdeel fotograma. Puedehacerlo buscando elprimer fotograma deIDR (que debe contenerel SPS/PPS), extraerlas dos NALU (que sonAb(Sps)Ab(Pps))y establecerlaen el CPD enStreamDefinition.

Para obtener másinformación, consulteMarcas de adaptaciónde NAL (p. 77).

frame_rate uint32_t La velocidad defotogramas prevista.Este valor se utilizapara calcular mejor lasnecesidades de búfer.

25

avg_bandwidth_bps uint32_t El ancho de bandamedio previsto para lasecuencia. Este valorse utiliza para calcularmejor las necesidadesde búfer.

4 * 1024 * 1024

86

Page 92: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripción Valor predeterminado

buffer_duration duration<uint64_t> La duración del búferde la secuencia,en segundos. ElSDK mantiene losfotogramas en elalmacén de contenidodurante un máximo debuffer_duration,después de lo cual losfotogramas antiguosse desechan conformeavance la ventana. Siel fotograma que se vaa desechar no se haenviado al backend, seinvoca la devolución dellamada del fotogramadesechado. Si laduración del búferactual es mayor quemax_latency, seinvoca la devoluciónde llamada de presiónde latencia de lasecuencia. El búferse recorta al siguienteinicio de fragmentocuando se recibe elACK almacenado deforma persistente delfragmento. Esto indicaque el contenido se haalmacenado de formapersistente y duraderaen la nube, por lo queya no es necesarioalmacenar el contenidoen el dispositivo local.

120

87

Page 93: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripción Valor predeterminado

replay_duration duration<uint64_t> La duración pararestaurar el lectoractual para reproducirdurante un errorsi está habilitadala reactivación,en segundos. Larestauración se detieneal inicio del búfer (encaso de que se acabede iniciar el streamingo la ACK almacenadade forma persistentehaya llegado). Larestauración intenta ira un fotograma claveque indique un iniciode fragmento. Si elerror que provoca elreinicio no indica unhost muerto (es decir,el host sigue estandovivo y contiene losdatos de fotograma ensus búferes internos),la restauración sedetiene en el últimofotograma ACK recibido.A continuación, avanzaal siguiente fotogramaclave, ya que todoel fragmento estáalmacenado en lamemoria del host.

40

connection_staleness duration<uint64_t> El tiempo en segundostras el que se invoca ladevolución de llamadade obsolescencia de lasecuencia, si el SDK norecibe el ACK. Indicaque los fotogramas seestán enviando desdeel dispositivo, pero elbackend no los estáreconociendo. Estacondición indica uncorte de conexión en elsalto intermedio o en elbalanceador de carga.

30

codec_id string El ID del códec para lapista MKV.

V_MPEG4/ISO/AVC

88

Page 94: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripción Valor predeterminado

track_name string El nombre de la pistaMKV.

kinesis_video

codecPrivateData unsigned char* El búfer de datosprivados de códec(CPD). Si lacanalización multimediatiene la informaciónsobre los CPD antesde que se iniciela secuencia, sepueden configurar enStreamDefinition.codecPrivateData.Los bits copiados yel búfer se puedenvolver a utilizar o liberardespués de la llamadapara crear la secuencia.Si, por el contrario,los datos no estándisponibles cuando secrea la secuencia, sepuede establecer enuna de las sobrecargasde la funciónKinesisVideoStream.start(cpd).

null

codecPrivateDataSize uint32_t El tamaño del búferde datos privados decódec.

0

ClientMetricsEl objeto ClientMetrics se llena llamando a getKinesisVideoMetrics.

Campos de miembro

Campo Tipos de datos Descripción

version UINT32 La versión de la estructura,definida en la macroCLIENT_METRICS_CURRENT_VERSION.

contentStoreSize UINT64 El tamaño del almacén decontenido general en bytes.Este es el valor especificado enDeviceInfo.StorageInfo.storageSize.

contentStoreAvailableSize UINT64 Tamaño de almacenamientoactualmente disponible en bytes.

contentStoreAllocatedSize UINT64 Tamaño actualmente asignado.Los tamaños asignado másdisponible deben ser ligeramente

89

Page 95: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Estructuras de Stream

Campo Tipos de datos Descripciónmás pequeños que el tamaño dealmacenamiento general, debidoa los datos la contabilidad internay la implementación del almacénde contenido.

totalContentViewsSize UINT64 El tamaño de la memoriaasignada para todas las vistasde contenido para todas lassecuencias. Esto no se deducedel tamaño del almacenamiento.Esta memoria se asignamediante la macro MEMALLOC,que se puede sobrescribir paraproporcionar un asignadorpersonalizado.

totalFrameRate UINT64 La velocidad de fotogramatotal observada en todas lassecuencias.

totalTransferRate UINT64 La velocidad total de lasecuencia observada en bytespor segundo en todas lassecuencias.

StreamMetricsEl objeto StreamMetrics se llena llamando a getKinesisVideoMetrics.

Campos de miembro

Campo Tipos de datos Descripción

version UINT32 La versión de la estructura,definida en la macroSTREAM_METRICS_CURRENT_VERSION.

currentViewDuration UINT64 La duración de los fotogramasacumulados. En el caso de redesrápidas, esta duración es 0 o laduración de fotograma (a medidaque se transmite el fotograma).Si la duración se alarga más queel max_latency especificadoen el StreamDefinition, seinvoca la devolución de llamadade latencia de secuencia sise especifica. La duración seespecifica en unidades 100 ns,que es la unidad de tiempopredeterminada para la capaPIC.

90

Page 96: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Devoluciones de llamada

Campo Tipos de datos Descripción

overallViewDuration UINT64 La duración de vista general.Si la secuencia se configurasin ACK o persistencia, estevalor aumenta a medida quelos fotogramas se coloquenen Transmisión de vídeo deKinesis y pasa a ser igual albuffer_duration de laStreamDefinition. Cuandose habilitan ACK y se recibeel ACK almacenado de formapersistente, el búfer se recortaal siguiente fotograma clave,ya que la marca temporal deACK indica el comienzo de todoel fragmento. La duración seespecifica en unidades 100 ns,que es la unidad de tiempopredeterminada para la capaPIC.

currentViewSize UINT64 El tamaño en bytes del búferactual.

overallViewSize UINT64 El tamaño general de vista enbytes.

currentFrameRate UINT64 La velocidad de fotogramasobservada para la secuenciaactual.

currentTransferRate UINT64 La velocidad de transferenciaobservada en bytes por segundopara la secuencia actual.

Devoluciones de llamada de SDK ProducerLas clases y los métodos en el SDK Producer de Amazon Transmisión de vídeo de Kinesis no mantienensus propios procesos. En su lugar, utilizan las llamadas y eventos de función de entrada para programar lacomunicación de las devoluciones de llamadas con la aplicación.

Existen dos patrones de devolución de llamada que puede utilizar la aplicación para interactuar con elSDK:

• CallbackProvider: este objeto expone todas las devoluciones de llamada desde el componente decódigo independiente de plataforma (PIC) a la aplicación. Este patrón permite funcionalidad completa,pero también significa que la implementación debe gestionar todos los métodos de la API pública y lasfirmas en la capa C++.

• StreamCallbackProvider (p. 92) y ClientCallbackProvider (p. 92): estos objetos exponen lasdevoluciones de llamada específicas de la secuencia y del cliente y la capa C++ del SDK expone el restode las devoluciones de llamada. Este es el patrón de devolución de llamada preferido para interactuarcon el SDK Producer.

El siguiente diagrama ilustra el modelo de objeto de los objetos de devolución de llamada:

91

Page 97: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Devoluciones de llamada

En el diagrama anterior, DefaultCallbackProvider se deriva de CallbackProvider (queexpone todas las devoluciones de llamada en el PIC) y contiene StreamCallbackProvider yClientCallbackProvider.

Este tema contiene las siguientes secciones:• ClientCallbackProvider (p. 92)• StreamCallbackProvider (p. 92)• Estructura de ClientCallbacks (p. 93)

ClientCallbackProviderEl objeto ClientCallbackProvider expone funciones de devolución de llamada de nivel de cliente. Losdetalles de las funciones se describen en la sección ClientCallbacks (p. 93).

Métodos de devolución de llamada:

• getClientReadyCallback: notifica un estado listo para el cliente.• getStorageOverflowPressureCallback: notifica desbordamiento de almacenamiento o

presión. Se invoca esta devolución de llamada cuando el uso de almacenamiento supera el valorSTORAGE_PRESSURE_NOTIFICATION_THRESHOLD, que es del 5 por ciento del tamaño dealmacenamiento general. Para obtener más información, consulte StorageInfo (p. 78).

Para obtener el código fuente para ClientCallbackProvider, consulte Include.h.

StreamCallbackProviderEl objeto StreamCallbackProvider expone funciones de devolución de llamada de nivel detransmisión.

Métodos de devolución de llamada:

• getDroppedFragmentReportCallback: notifica un fragmento eliminado.• getDroppedFrameReportCallback: notifica un fotograma eliminado.• getFragmentAckReceivedCallback: notifica que se recibe un fragmento ACK para la transmisión.• getStreamClosedCallback: notifica una condición de secuencia cerrada.• getStreamConnectionStaleCallback: notifica una condición de conexión obsoleta. En esta

condición, el productor envía datos al servicio pero no recibe reconocimientos.• getStreamDataAvailableCallback: informa que los datos están disponibles en la secuencia.• getStreamErrorReportCallback: notifica una condición de error de secuencia.

92

Page 98: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Devoluciones de llamada

• getStreamLatencyPressureCallback: notifica una condición de latencia de secuencia, quees cuando el tamaño de búfer acumulado es mayor que el valor max_latency. Para obtener másinformación, consulte StreamDefinition/ StreamInfo (p. 80).

• getStreamReadyCallback: notifica una condición de secuencia lista.• getStreamUnderflowReportCallback: notifica una condición de secuencia de flujo insuficiente.

Esta función no se utiliza actualmente y se reserva para uso futuro.

Para obtener el código fuente para StreamCallbackProvider, consulte StreamCallbackProvider.h.

Estructura de ClientCallbacksLa estructura de ClientCallbacks contiene los puntos de entrada de la función de devolución dellamada que invoca el PIC cuando se producen eventos específicos. La estructura también contieneinformación de versión en el campo CALLBACKS_CURRENT_VERSION y un campo customData paradatos definidos por el usuario que se devuelve con las funciones de devolución de llamada individuales.

La aplicación cliente puede utilizar un puntero this para que el campo custom_data asigne funciones demiembros a las funciones ClientCallback estáticas en tiempo de ejecución, tal como se muestra en elsiguiente código de ejemplo:

STATUS TestStreamCallbackProvider::streamClosedHandler(UINT64 custom_data, STREAM_HANDLE stream_handle, UINT64 stream_upload_handle) { LOG_INFO("Reporting stream stopped.");

TestStreamCallbackProvider* streamCallbackProvider = reinterpret_cast<TestStreamCallbackProvider*> (custom_data);streamCallbackProvider->streamClosedHandler(...);

Eventos

Función Descripción Tipo

CreateDeviceFunc Actualmente no implementadoen el backend. Esta llamadadevuelve un error cuandollama desde Java o C++. Otrosclientes realizan la inicializaciónespecífica de la plataforma.

API de backend

CreateStreamFunc Se invoca cuando se crea lasecuencia.

API de backend

DescribeStreamFunc Se invoca cuando se invoca aDescribeStream.

API de backend

GetStreamingEndpointFunc Se invoca cuando se invoca aGetStreamingEndpoint.

API de backend

GetStreamingTokenFunc Se invoca cuando se invoca aGetStreamingToken.

API de backend

PutStreamFunc Se invoca cuando se invoca aPutStream.

API de backend

TagResourceFunc Se invoca cuando se invoca aTagResource.

API de backend

     

93

Page 99: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Devoluciones de llamada

Función Descripción Tipo

CreateMutexFunc Crea una exclusión mutua desincronización.

Sincronización

FreeMutexFunc Libera la exclusión mutua. Sincronización

LockMutexFunc Bloquea la exclusión mutua desincronización.

Sincronización

TryLockMutexFunc Intenta bloquear la exclusiónmutua. No implementadaactualmente.

Sincronización

UnlockMutexFunc Desbloquea la exclusión mutua. Sincronización

     

ClientReadyFunc Se invoca cuando el cliente entraen estado listo.

Notificación

DroppedFrameReportFunc Notifica cuando se elimina unfotograma.

Notificación

DroppedFragmentReportFunc Notifica cuando se elimina unfragmento. Esta función no seutiliza actualmente y se reservapara uso futuro.

Notificación

FragmentAckReceivedFunc Se invoca cuando se recibe unACK (almacenado en búfer,recibido, almacenado de formapersistente y error) de fragmento.

Notificación

StorageOverflowPressureFuncSe invoca cuando el uso dealmacenamiento supera el valorSTORAGE_PRESSURE_NOTIFICATION_THRESHOLD,que se define como el 5por ciento del tamaño dealmacenamiento general.

Notificación

StreamClosedFunc Se invoca cuando se transmitenlos últimos bits de los fotogramasrestantes.

Notificación

StreamConnectionStaleFunc Se invoca cuando la transmisiónentra en un estado de conexiónobsoleta. En esta condición, elproductor envía datos al serviciopero no recibe reconocimientos.

Notificación

StreamDataAvailableFunc Se invoca cuando los datos detransmisión están disponibles.

Notificación

StreamErrorReportFunc Se invoca cuando se produceun error de transmisión. ElPIC cierra automáticamente latransmisión con esta condición.

Notificación

94

Page 100: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Devoluciones de llamada

Función Descripción Tipo

StreamLatencyPressureFunc Se invoca cuando latransmisión entra en unacondición de latencia, que escuando el tamaño de búferacumulado es mayor que elvalor max_latency. Paraobtener más información,consulte StreamDefinition/StreamInfo (p. 80).

Notificación

StreamReadyFunc Se invoca cuando la transmisiónentra en estado listo.

Notificación

StreamUnderflowReportFunc Esta función no se utilizaactualmente y se reserva parauso futuro.

Notificación

     

DeviceCertToTokenFunc Devuelve el certificado deconexión como un token.

Integración en la plataforma

GetCurrentTimeFunc Devuelve la hora actual. Integración en la plataforma

GetDeviceCertificateFunc Devuelve el certificado deldispositivo. Esta función no seutiliza actualmente y se reservapara uso futuro.

Integración en la plataforma

GetDeviceFingerprintFunc Devuelve la huella deldispositivo. Esta función no seutiliza actualmente y se reservapara uso futuro.

Integración en la plataforma

GetRandomNumberFunc Devuelve un número aleatorioentre 0 y RAND_MAX.

Integración en la plataforma

GetSecurityTokenFunc Devuelve el token de seguridadque se transfiere a lasfunciones que se comunicancon la API de backend.La implementación puedeespecificar el AccessKeyId enserie, SecretKeyId y el tokende la sesión.

Integración en la plataforma

LogPrintFunc Registra un línea de texto conla etiqueta y el nivel de registro.Para obtener más información,consulte PlatformUtils.h.

Integración en la plataforma

Para las funciones de integración en la plataforma de la tabla anterior, el último parámetro es unaestructura ServiceCallContext, que tiene los siguientes campos:

• version: la versión de la estructura.• callAfter: tiempo absoluto tras el que se invoca la función.

95

Page 101: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Devoluciones de llamada

• timeout: el tiempo de espera de la operación en unidades de 100 nanosegundos.• customData: un valor definido por el usuario que transferir de vuelta al cliente.• pAuthInfo: las credenciales para la llamada. Para obtener más información, consulte la siguiente

estructura (__AuthInfo).

La información de autorización se proporciona mediante la estructura __AuthInfo, que pueden sercredenciales serializadas o un token de autenticación específico del proveedor. Esta estructura tiene loscampos siguientes:

• version: la versión de la estructura __AuthInfo.• type: un valor AUTH_INFO_TYPE que define el tipo de la credencial (certificado o token de seguridad).• data: una matriz de bytes que contiene la información de autenticación.• size: el tamaño del parámetro data.• expiration: el vencimiento de las credenciales en unidades de 100 nanosegundos.

96

Page 102: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Procedimiento: uso de Kinesis Video Stream Parser Library

Kinesis Video Stream Parser LibraryKinesis Video Stream Parser Library es un conjunto de herramientas fáciles de usar que puede emplear enaplicaciones Java para consumir los datos de MKV en una Transmisión de vídeo de Kinesis.

La biblioteca incluye las siguientes herramientas:

• StreamingMkvReader (p. 98): esta clase lee elementos MKV especificados a partir de unatransmisión de vídeo.

• FragmentMetadataVisitor (p. 99): esta clase recupera los metadatos de fragmentos (elementosmultimedia) y pistas (transmisiones de datos individuales que contienen información de medios, comoaudio o subtítulos).

• OutputSegmentMerger (p. 100): esta clase combina fragmentos consecutivos de una transmisión devídeo.

• KinesisVideoExample (p. 101): es una aplicación de ejemplo que muestra cómo usar la Kinesis VideoStream Parser Library.

La biblioteca incluye también pruebas que muestran cómo se utilizan las herramientas.

Procedimiento: uso de Kinesis Video Stream ParserLibrary

Este procedimiento incluye los pasos siguientes:

• the section called “Paso 1: descargar y configurar el código” (p. 98)• the section called “Paso 2: escribir y examinar el código” (p. 98)• the section called “Paso 3: ejecutar y verificar el código” (p. 103)

Requisitos previosDebe tener lo siguiente para examinar y utilizar Kinesis Video Stream Parser Library:

• Una cuenta de Amazon Web Services (AWS). Si aún no tiene una cuenta de AWS, haga lo siguiente:• Abra https://aws.amazon.com/ y, a continuación, elija Create an AWS Account.

Note

Esto podría no estar disponible en el navegador si ha iniciado previamente sesión en laConsola de administración de AWS. En ese caso, seleccione Sign In to the Console ydespués Create a new AWS account.

• Siga las instrucciones en línea.

Parte del procedimiento de inscripción consiste en recibir una llamada telefónica e introducir unnúmero PIN con el teclado del teléfono.

Anote su ID de cuenta de AWS, porque lo necesitará para configurar el acceso mediante programación auna Transmisión de vídeo de Kinesis.

• Un entorno de desarrollo integrado (IDE) de Java, como Eclipse Java Neon o JetBrains IntelliJ Idea.

97

Page 103: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 1: descargar y configurar el código

Paso 1: descargar y configurar el códigoEn esta sección, descargará la biblioteca de Java y el código de prueba, e importará el proyecto en su IDEJava.

Para comprobar los requisitos previos y otros detalles de este procedimiento, consulte Stream ParserLibrary (p. 97).

1. Cree un directorio y clone el código fuente de la biblioteca desde el repositorio GitHub.

$ git clone https://github.com/aws/amazon-kinesis-video-streams-parser-library

2. Abra el IDE de Java que utilice (por ejemplo, Eclipse o IntelliJ IDEA) e importe el proyecto de ApacheMaven que ha descargado:

• En Eclipse: seleccione File, Import..., Maven, Existing Maven Projects y vaya a la carpeta kinesis-video-streams-parser-lib.

• En IntelliJ Idea: seleccione Import. Vaya al archivo pom.xml en la raíz del paquete descargado.

Para obtener más información, consulte la documentación del IDE relacionada.

Paso siguientethe section called “Paso 2: escribir y examinar el código” (p. 98)

Paso 2: escribir y examinar el códigoEn esta sección, puede examinar la biblioteca de Java y el código de prueba y aprender a utilizar lasherramientas de la biblioteca en su propio código.

Kinesis Video Stream Parser Library contiene las herramientas siguientes:

• StreamingMkvReader (p. 98)• FragmentMetadataVisitor (p. 99)• OutputSegmentMerger (p. 100)• KinesisVideoExample (p. 101)

StreamingMkvReaderEsta clase lee elementos MKV especificados de una transmisión sin generar ningún bloqueo.

El siguiente ejemplo de código (de FragmentMetadataVisitorTest) muestra cómo crear y utilizar unStreaming MkvReader para recuperar objetos MkvElement de una transmisión de entrada llamadainputStream:

StreamingMkvReader mkvStreamReader = StreamingMkvReader.createDefault(new InputStreamParserByteSource(inputStream)); while (mkvStreamReader.mightHaveNext()) { Optional<MkvElement> mkvElement = mkvStreamReader.nextIfAvailable(); if (mkvElement.isPresent()) {

98

Page 104: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

FragmentMetadataVisitor

mkvElement.get().accept(fragmentVisitor); ... } } }

FragmentMetadataVisitorEsta clase recupera los metadatos de fragmentos (elementos multimedia) y pistas (transmisiones de datosindividuales que contienen información multimedia, como datos privados del códec, ancho en píxeles o altoen píxeles).

El siguiente ejemplo de código (del archivo FragmentMetadataVisitorTest) muestra cómo utilizarFragmentMetadataVisitor para recuperar datos de un objeto MkvElement:

FragmentMetadataVisitor fragmentVisitor = FragmentMetadataVisitor.create(); StreamingMkvReader mkvStreamReader = StreamingMkvReader.createDefault(new InputStreamParserByteSource(in)); int segmentCount = 0; while(mkvStreamReader.mightHaveNext()) { Optional<MkvElement> mkvElement = mkvStreamReader.nextIfAvailable(); if (mkvElement.isPresent()) { mkvElement.get().accept(fragmentVisitor); if (MkvTypeInfos.SIMPLEBLOCK.equals(mkvElement.get().getElementMetaData().getTypeInfo())) { MkvDataElement dataElement = (MkvDataElement) mkvElement.get(); Frame frame = ((MkvValue<Frame>)dataElement.getValueCopy()).getVal(); MkvTrackMetadata trackMetadata = fragmentVisitor.getMkvTrackMetadata(frame.getTrackNumber()); assertTrackAndFragmentInfo(fragmentVisitor, frame, trackMetadata); } if (MkvTypeInfos.SEGMENT.equals(mkvElement.get().getElementMetaData().getTypeInfo())) { if (mkvElement.get() instanceof MkvEndMasterElement) { if (segmentCount < continuationTokens.size()) { Optional<String> continuationToken = fragmentVisitor.getContinuationToken(); Assert.assertTrue(continuationToken.isPresent()); Assert.assertEquals(continuationTokens.get(segmentCount), continuationToken.get()); } segmentCount++; } } }

}

El ejemplo anterior muestra el siguiente patrón de codificación:

• Cree una clase FragmentMetadataVisitor para analizar los datos y una claseStreamingMkvReader (p. 98) para proporcionar los datos.

• Para cada MkvElement de la transmisión, pruebe si sus metadatos son del tipo SIMPLEBLOCK.• En caso afirmativo, recupere el MkvDataElement del MkvElement.• Recupere el Frame (datos multimedia) del MkvDataElement.• Recupere los MkvTrackMetadata para el Frame del FragmentMetadataVisitor.• Recupere y compruebe los siguientes datos de los objetos Frame y MkvTrackMetadata:

• El número de pista.• La altura en píxeles del fotograma.

99

Page 105: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

OutputSegmentMerger

• La anchura en píxeles del fotograma.• El ID del códec para el códec que utilice para codificar el fotograma.• Que el fotograma haya llegado en orden. Es decir, compruebe que el número de pista del fotograma

anterior, si está presente, sea inferior al del fotograma actual.

Para utilizar FragmentMetadataVisitor en su proyecto, transfiera los objetos MkvElement al visitantecon su método accept:

mkvElement.get().accept(fragmentVisitor);

OutputSegmentMergerEsta clase reúne los metadatos de diferentes pistas en la transmisión en una transmisión con un únicosegmento.

El siguiente ejemplo de código (del archivo FragmentMetadataVisitorTest) muestra cómo utilizarOutputSegmentMerger para combinar metadatos de pistas a partir de una matriz de bytes denominadainputBytes:

FragmentMetadataVisitor fragmentVisitor = FragmentMetadataVisitor.create();

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

OutputSegmentMerger outputSegmentMerger = OutputSegmentMerger.createDefault(outputStream);

CompositeMkvElementVisitor compositeVisitor = new TestCompositeVisitor(fragmentVisitor, outputSegmentMerger);

final InputStream in = TestResourceUtil.getTestInputStream("output_get_media.mkv");

StreamingMkvReader mkvStreamReader = StreamingMkvReader.createDefault(new InputStreamParserByteSource(in)); while (mkvStreamReader.mightHaveNext()) { Optional<MkvElement> mkvElement = mkvStreamReader.nextIfAvailable(); if (mkvElement.isPresent()) { mkvElement.get().accept(compositeVisitor); if (MkvTypeInfos.SIMPLEBLOCK.equals(mkvElement.get().getElementMetaData().getTypeInfo())) { MkvDataElement dataElement = (MkvDataElement) mkvElement.get(); Frame frame = ((MkvValue<Frame>) dataElement.getValueCopy()).getVal(); Assert.assertTrue(frame.getFrameData().limit() > 0); MkvTrackMetadata trackMetadata = fragmentVisitor.getMkvTrackMetadata(frame.getTrackNumber()); assertTrackAndFragmentInfo(fragmentVisitor, frame, trackMetadata); }}

El ejemplo anterior muestra el siguiente patrón de codificación:

• Cree una FragmentMetadataVisitor (p. 99)para recuperar los metadatos de la secuencia.• Cree una transmisión de salida para recibir los metadatos combinados.• Cree un OutputSegmentMerger, transfiriendo el ByteArrayOutputStream.• Cree un CompositeMkvElementVisitor que contenga los dos visitantes.• Cree un InputStream que apunte al archivo especificado.• Combine cada elemento de los datos de entrada en la transmisión de salida.

100

Page 106: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

KinesisVideoExample

KinesisVideoExampleEs una aplicación de ejemplo que muestra cómo usar la Kinesis Video Stream Parser Library.

Esta clase realiza las operaciones siguientes:

• Crea una Transmisión de vídeo de Kinesis. Si ya existe una transmisión con ese nombre, se elimina y sevuelve a crear.

• Llama a PutMedia para transmitir fragmentos de vídeo a la Transmisión de vídeo de Kinesis.• Llama a GetMedia para transmitir fragmentos de vídeo desde la Transmisión de vídeo de Kinesis.• Utiliza StreamingMkvReader (p. 98) para analizar los fragmentos devueltos de la transmisión y utiliza

FragmentMetadataVisitor (p. 99) para registrar los fragmentos.

Eliminación y nueva creación de la transmisiónEl siguiente ejemplo de código (del archivo StreamOps.java) elimina una Transmisión de vídeo deKinesis determinada:

//Delete the streamamazonKinesisVideo.deleteStream(new DeleteStreamRequest().withStreamARN(streamInfo.get().getStreamARN()));

El siguiente ejemplo de código (del archivo StreamOps.java) crea una Transmisión de vídeo de Kinesiscon el nombre especificado:

amazonKinesisVideo.createStream(new CreateStreamRequest().withStreamName(streamName).withDataRetentionInHours(DATA_RETENTION_IN_HOURS).withMediaType("video/h264"));

Llamada a PutMediaEl siguiente ejemplo de código (del archivo PutMediaWorker.java) llama a PutMedia en la transmisión:

putMedia.putMedia(new PutMediaRequest().withStreamName(streamName).withFragmentTimecodeType(FragmentTimecodeType.RELATIVE).withProducerStartTimestamp(new Date()).withPayload(inputStream), new PutMediaAckResponseHandler() {...});

Llamada a GetMediaEl siguiente ejemplo de código (del archivo GetMediaWorker.java) llama a GetMedia en la transmisión:

GetMediaResult result = videoMedia.getMedia(new GetMediaRequest().withStreamName(streamName).withStartSelector(startSelector));

Análisis del resultado de GetMediaEn esta sección se describe cómo utilizar StreamingMkvReader (p. 98),FragmentMetadataVisitor (p. 99) y CompositeMkvElementVisitor para analizar, guardar en archivoy registrar los datos devueltos de GetMedia.

101

Page 107: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

KinesisVideoExample

Lectura de la salida de GetMedia con StreamingMkvReader

El siguiente ejemplo de código (del archivo GetMediaWorker.java) crea unStreamingMkvReader (p. 98) y lo usa para analizar el resultado de la operación de GetMedia:

StreamingMkvReader mkvStreamReader = StreamingMkvReader.createDefault(new InputStreamParserByteSource(result.getPayload()));log.info("StreamingMkvReader created for stream {} ", streamName);try { mkvStreamReader.apply(this.elementVisitor);} catch (MkvElementVisitException e) { log.error("Exception while accepting visitor {}", e);}

En el ejemplo de código anterior, StreamingMkvReader (p. 98) recupera objetos MKVElementde la carga del resultado de GetMedia. En la siguiente sección, los elementos se pasan a unFragmentMetadataVisitor (p. 99).

Recuperación de fragmentos con FragmentMetadataVisitor

Los siguientes ejemplos de código (de los archivos KinesisVideoExample.java yStreamingMkvReader.java) crean un FragmentMetadataVisitor (p. 99). A continuación, los objetosMkvElement por los que ha iterado StreamingMkvReader (p. 98) se pasan al visitante con el métodoaccept.

de KinesisVideoExample.java:

FragmentMetadataVisitor fragmentMetadataVisitor = FragmentMetadataVisitor.create();

de StreamingMkvReader.java:

if (mkvElementOptional.isPresent()) { //Apply the MkvElement to the visitor mkvElementOptional.get().accept(elementVisitor); }

Registro de los elementos y escritura en un archivo

El siguiente ejemplo de código (del archivo KinesisVideoExample.java) crea los siguientes objetos ylos devuelve como parte del valor de retorno de la función GetMediaProcessingArguments:

• Un LogVisitor (una extensión de MkvElementVisitor) que escribe en el log del sistema.• Un OutputStream que escribe los datos entrantes en un archivo MKV.• Un BufferedOutputStream que almacena en búfer los datos vinculados para OutputStream.• Un the section called “OutputSegmentMerger” (p. 100) que fusiona los elementos consecutivos en el

resultado de GetMedia con los mismos datos de pista y EBML.• Un CompositeMkvElementVisitor que compone FragmentMetadataVisitor (p. 99), the section

called “OutputSegmentMerger” (p. 100) y LogVisitor en un solo visitante de elemento

//A visitor used to log as the GetMedia stream is processed. LogVisitor logVisitor = new LogVisitor(fragmentMetadataVisitor);

102

Page 108: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso siguiente

//An OutputSegmentMerger to combine multiple segments that share track and ebml metadata into one //mkv segment. OutputStream fileOutputStream = Files.newOutputStream(Paths.get("kinesis_video_example_merged_output2.mkv"), StandardOpenOption.WRITE, StandardOpenOption.CREATE); BufferedOutputStream outputStream = new BufferedOutputStream(fileOutputStream); OutputSegmentMerger outputSegmentMerger = OutputSegmentMerger.createDefault(outputStream);

//A composite visitor to encapsulate the three visitors. CompositeMkvElementVisitor mkvElementVisitor = new CompositeMkvElementVisitor(fragmentMetadataVisitor, outputSegmentMerger, logVisitor);

return new GetMediaProcessingArguments(outputStream, logVisitor, mkvElementVisitor);

A continuación, los argumentos de procesamiento multimedia se pasan a GetMediaWorker, que, a suvez, se pasan a ExecutorService que ejecuta el proceso de trabajo en un subproceso independiente:

GetMediaWorker getMediaWorker = GetMediaWorker.create(getRegion(), getCredentialsProvider(), getStreamName(), new StartSelector().withStartSelectorType(StartSelectorType.EARLIEST), amazonKinesisVideo, getMediaProcessingArgumentsLocal.getMkvElementVisitor());executorService.submit(getMediaWorker);

Paso siguientethe section called “Paso 3: ejecutar y verificar el código” (p. 103)

Paso 3: ejecutar y verificar el códigoKinesis Video Stream Parser Library contiene herramientas diseñadas para que las utilice en sus propiosproyectos. El proyecto contiene pruebas de unidades de las herramientas que puede ejecutar para verificarsu instalación.

Las siguientes pruebas de unidades están incluidas en la biblioteca:

• mkv• ElementSizeAndOffsetVisitorTest

• MkvValueTest

• StreamingMkvReaderTest

• utilidades• FragmentMetadataVisitorTest

• OutputSegmentMergerTest

103

Page 109: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Requisitos previos

Ejemplos de Amazon Transmisión devídeo de Kinesis

En los siguientes ejemplos de código se muestra cómo trabajar con la API de Transmisión de vídeo deKinesis:

• Complemento de GStreamer (p. 104): muestra cómo compilar el SDK Producer de Transmisión devídeo de Kinesis para utilizarlo como destino de GStreamer.

• Ejemplo: envío de datos a Transmisión de vídeo de Kinesis utilizando la API PutMedia (p. 112): envíelos datos que ya se encuentran en un formato contenedor (MKV) utilizando la API PutMedia.

• Ejemplo: streaming desde una fuente RTSP (p. 116): aplicación de ejemplo que se ejecuta en uncontenedor de Docker y transmite vídeo desde una fuente RTSP.

• Ejemplo: uso de GStreamer con Transmisión de vídeo de Kinesis (p. 117): enviar datos de vídeo aTransmisión de vídeo de Kinesis utilizando el marco multimedia de código abierto de GStreamer.

• Ejemplo: análisis y representación de fragmentos de Transmisión de vídeo de Kinesis (p. 118): analizary representar fragmentos de Transmisión de vídeo de Kinesis utilizando JCodec y JFrame.

• KinesisVideoExample (p. 101): analizar y registrar fragmentos de vídeo mediante Transmisión de vídeode Kinesis Parser Library.

Requisitos previos• En el código de muestra, puede proporcionar las credenciales especificando un perfil definido en su

archivo de perfil de credenciales de AWS o proporcionando las credenciales en las propiedades delsistema Java de entorno de desarrollo integrado (IDE). Por tanto, si aún no lo ha hecho, configure enprimer lugar sus credenciales. Para obtener más información, consulte Configuración de credenciales yregiones de AWS para desarrollo.

• Le recomendamos que utilice un IDE Java para ver y ejecutar el código, como, por ejemplo, uno de lossiguientes:• Eclipse Java Neon• JetBrains IntelliJ IDEA

Ejemplo: complemento GStreamer del SDKProducer de Transmisión de vídeo de Kinesis

Este tema muestra cómo compilar el SDK Producer de Amazon Transmisión de vídeo de Kinesis parautilizarlo como complemento de GStreamer.

Temas• Descargar, compilar y configurar el elemento GStreamer (p. 105)• Ejecutar el elemento GStreamer (p. 106)• Comandos de lanzamiento de GStreamer de ejemplo (p. 106)• Ejecute el elemento de GStreamer en un contenedor de Docker (p. 108)

104

Page 110: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Descargar, compilar y configurar el elemento GStreamer

• Referencia de parámetros de elemento de GStreamer (p. 110)

GStreamer es un marco multimedia popular que utilizan multitud de cámaras y fuentes de vídeo para crearcanalizaciones multimedia personalizadas combinando complementos modulares. El complemento deTransmisión de vídeo de Kinesis GStreamer simplifica notablemente la integración de su canalizaciónmultimedia existente de GStreamer con Transmisión de vídeo de Kinesis. Después de la integraciónde GStreamer, puede comenzar con el streaming vídeo desde una cámara web o una cámara RTSP(Protocolo de Streaming en Tiempo Real) a Transmisión de vídeo de Kinesis para su reproducción entiempo real o reproducción más tarde, almacenamiento y para realizar un análisis adicional.

El complemento de GStreamer administra automáticamente la transferencia de la transmisión de vídeoa Transmisión de vídeo de Kinesis encapsulando la funcionalidad proporcionada por el SDK Producerde Transmisión de vídeo de Kinesis en un elemento receptor de GStreamer, kvssink. El marco deGStreamer proporciona un entorno administrado estándar para la creación de flujo multimedia desdeun dispositivo como una cámara u otra fuente de vídeo para procesamiento adicional, representación oalmacenamiento.

La canalización de GStreamer normalmente se compone del enlace entre una fuente (cámara de vídeo) ydel elemento receptor (bien un reproductor para representar el vídeo o almacenamiento para recuperaciónsin conexión). En este ejemplo, se utiliza el elemento SDK Producer como receptor o destino multimedia,para su fuente de vídeo (cámara web o cámara IP). El elemento de complemento que encapsula el SDKadministra el envío de la secuencia de vídeo a Transmisión de vídeo de Kinesis.

En este tema se muestra cómo construir una canalización multimedia de GStreamer capaz transmitir vídeodesde una fuente de vídeo, como, por ejemplo, una cámara web o una secuencia RTSP, normalmenteconectadas a través de etapas de codificación intermedia (utilizando codificación H.264) a Transmisión devídeo de Kinesis. Cuando la secuencia de vídeo está disponible como Transmisión de vídeo de Kinesis,puede utilizar la Parser Library de Kinesis Video Stream para procesamiento adicional, reproducción,almacenamiento o análisis de la secuencia de vídeo.

Descargar, compilar y configurar el elementoGStreamerEl ejemplo de complemento de GStreamer se incluye con el SDK C++ Producer de Transmisión de vídeode Kinesis. Para obtener información acerca de los requisitos de SDK y de la descarga, consulte Paso 1:descargar y configurar el código de la C++ Producer Library (p. 41).

Para compilar el receptor GStreamer de SDK Producer como biblioteca dinámica en macOS, Ubuntu oRaspberry Pi, ejecute el siguiente comando en el directorio kinesis-video-native-build:

./gstreamer-plugin-install-script

105

Page 111: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideEjecutar el elemento GStreamer

Una vez compilado el receptor, puede ejecutar gst-launch-1.0 desde el siguiente directorio:

<YourSdkFolderPath>/kinesis-video-native-build/downloads/local/bin

Puede ejecutar gst-launch-1.0 desde este directorio o bien agregarlo a la variable de entorno PATH:

$ export PATH=<YourSdkFolderPath>/kinesis-video-native-build/downloads/local/bin:$PATH

Agregue el directorio de la biblioteca a la ruta de modo que el complemento GStreamer se puedaencontrar:

export GST_PLUGIN_PATH=<YourSdkFolderPath>/kinesis-video-native-build/downloads/local/lib:$GST_PLUGIN_PATH

Establezca la ruta de la biblioteca para el SDK:

export LD_LIBRARY_PATH=<YourSdkFolderPath>/kinesis-video-native-build/downloads/local/lib

Ejecutar el elemento GStreamerPara ejecutar GStreamer con el elemento SDK Producer de Transmisión de vídeo de Kinesis comoreceptor, ejecute el comando gst-launch-1.0. Utilice una configuración que sea adecuada para quela utilice el complemento de GStreamer: por ejemplo, v412src para dispositivos v412 en sistemas Linux ortspsrc para dispositivos RTSP. Especifique kvssink como receptor (destino final de la canalización) paraenviar vídeo al SDK Producer.

El elemento kvssink tiene los siguientes parámetros obligatorios:

• stream-name: el nombre del Transmisión de vídeo de Kinesis de destino.• storage-size: el tamaño de almacenamiento del dispositivo en kilobytes. Para obtener información

acerca de la configuración del almacenamiento de dispositivo, consulte StorageInfo (p. 78).• access-key: la clave de acceso de AWS que se utiliza para acceder a Transmisión de vídeo de

Kinesis. Debe proporcionar este parámetro o bien credential-path.• secret-key: la clave secreta de AWS que se utiliza para acceder a Transmisión de vídeo de Kinesis.

Debe proporcionar este parámetro o bien credential-path.• credential-path: una ruta a un archivo que contiene sus credenciales para acceder a Transmisión

de vídeo de Kinesis. Para ver los archivos de credenciales, consulte Sample Static Credential y SampleRotating Credential. Para obtener más información acerca de rotación de las credenciales, consulteAdministración de las claves de acceso de los usuarios de IAM. Debe proporcionar este parámetro obien access-key y secret-key.

Para obtener información acerca de los parámetros opcionales kvssink, consulte Referencia deparámetros de elemento de GStreamer (p. 110).

Para obtener la información más reciente sobre complementos y parámetros de GStramer, consulteComplementos de GStreamer o ejecute el siguiente comando para obtener una lista de opciones:

gst-inspect-1.0 kvssink

Comandos de lanzamiento de GStreamer de ejemploEstos ejemplos muestran cómo utilizar un complemento de GStreamer para transmitir vídeo desdedistintos tipos de dispositivos.

106

Page 112: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Lanzar comandos

Ejemplo 1: transmitir vídeo desde una cámara RTSP en UbuntuEl siguiente comando crea una canalización de GStreamer en Ubuntu que transmite desde una cámaraRTSP en red, utilizando el complemento de GStreamer rtspsrc:

$ gst-launch-1.0 rtspsrc location=“rtsp://YourCameraRtspUrl” short-header=TRUE ! rtph264depay ! video/x-h264, format=avc,alignment=au ! kvssink stream-name=“YourStreamName” storage-size=512 access-key="YourAccessKey" secret-key="YourSecretKey"

Ejemplo 2: codificar y transmitir vídeo desde una cámara USB enUbuntuEl siguiente comando crea una canalización GStreamer en Ubuntu que codifica la secuencia desde unacámara USB en formato H.264 y la transmite a Transmisión de vídeo de Kinesis. En este ejemplo se utilizael complemento de GStreamer v412src.

$ gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480,framerate=30/1 ! x264enc bframes=0 key-int-max=45 bitrate=500 ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name="YourStreamName" storage-size=512 access-key="YourAccessKey" secret-key="YourSecretKey"

Ejemplo 3: transmitir vídeo precodificado desde una cámara USBen UbuntuEl siguiente comando crea una canalización GStreamer en Ubuntu que transmite vídeo que la cámaraya ha codificado en formato H.264 a Transmisión de vídeo de Kinesis. En este ejemplo se utiliza elcomplemento de GStreamer v412src.

$ gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! kvssink stream-name="plugin" storage-size=512 access-key="YourAccessKey" secret-key="YourSecretKey"

Ejemplo 4: transmitir vídeo desde una cámara en red en macOSEl siguiente comando crea una canalización de GStreamer en macOS que transmite vídeo a Transmisiónde vídeo de Kinesis desde una cámara de red. En este ejemplo se utiliza el complemento de GStreamervrtspsrcsrc.

$ gst-launch-1.0 rtspsrc location=rtsp://YourCameraRtspUrl short-header=TRUE ! rtph264depay ! video/x-h264, format=avc,alignment=au ! kvssink stream-name=YourStreamName storage-size=512

Ejemplo 5: transmitir vídeo desde una cámara en Raspberry PiEl siguiente comando crea una canalización de GStreamer en Raspberry Pi que transmite vídeo aTransmisión de vídeo de Kinesis. En este ejemplo se utiliza el complemento de GStreamer v412src.

$ gst-launch-1.0 v4l2src do-timestamp=TRUE device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480,framerate=30/1 ! omxh264enc control-rate=1 target-bitrate=5120000 periodicity-idr=45 inline-header=FALSE ! h264parse ! video/x-h264,stream-

107

Page 113: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideEjecute el elemento de GStreamer

en un contenedor de Dockerformat=avc,alignment=au,width=640,height=480,framerate=30/1,profile=baseline ! kvssink stream-name="YourStreamName" frame-timestamp=dts-only access-key="YourAccessKey" secret-key="YourSecretKey"

Ejecute el elemento de GStreamer en un contenedorde DockerDocker es una plataforma para desarrollar, implementar y ejecutar aplicaciones utilizando contenedores. Eluso de Docker para crear la canalización de GStreamer estandariza el entorno operativo para Transmisiónde vídeo de Kinesis, lo que simplifica notablemente la compilación y la ejecución de la aplicación.

Para instalar y configurar Docker, consulte lo siguiente:

• Instrucciones de descarga de Docker• Introducción a Docker

Después de instalar Docker, puede descargar el SDK C++ Producer de Transmisión de vídeo de Kinesis(y el complemento de GStreamer) desde Amazon EC2 Container Registry utilizando el comando dockerpull.

Para ejecutar GStreamer con el elemento SDK Producer de Transmisión de vídeo de Kinesis comoreceptor en un contenedor de Docker, haga lo siguiente:

Temas• Autentique su cliente de Docker (p. 108)• Descargue la imagen de Docker para Ubuntu, macOS o Raspberry Pi (p. 108)• Ejecutar la imagen de Docker (p. 109)

Autentique su cliente de DockerAutentique su cliente de Docker en el registro de Amazon ECR del que va a extraer la imagen. Debeobtener tokens de autenticación para cada registro usado, cuya validez es de 12 horas. Para obtener másinformación, consulte Autenticación del registro en la Guía del usuario de Amazon EC2 Container Registry.

Example : autenticación con Amazon ECR

aws ecr get-login --no-include-email --region us-west-2 --registry-ids 546150905175

El comando anterior produce un resultado similar al siguiente:

docker login -u AWS -p <Password> https://YourAccountId.dkr.ecr.us-west-2.amazonaws.com

El resultado es un comando login de Docker que se utiliza para autenticar el cliente Docker en el registrode Amazon ECR.

Descargue la imagen de Docker para Ubuntu, macOS oRaspberry PiDescargue la imagen de Docker en su entorno de Docker con uno de los siguientes comandos, en funciónde su sistema operativo:

108

Page 114: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideEjecute el elemento de GStreamer

en un contenedor de DockerDescargue la imagen de Docker para Ubuntu

sudo docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux:latest

Descargue la imagen de Docker para macOS

sudo docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux:latest

Descargue la imagen de Docker para Raspberry Pi

sudo docker pull 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi:latest

Para comprobar que la imagen se ha agregado correctamente, utilice el comando siguiente:

docker images

Ejecutar la imagen de DockerUtilice uno de los comandos siguientes para ejecutar la imagen de Docker, en función de su sistemaoperativo:

Ejecutar la imagen de Docker en Ubuntu

sudo docker run -it --network="host" --device=/dev/video0 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux /bin/bash

Ejecutar la imagen de Docker en macOS

sudo docker run -it --network="host" 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-amazon-linux /bin/bash

Ejecutar la imagen de Docker en Raspberry Pi

sudo docker run -it --device=/dev/video0 --device=/dev/vchiq -v /opt/vc:/opt/vc 546150905175.dkr.ecr.us-west-2.amazonaws.com/kinesis-video-producer-sdk-cpp-raspberry-pi /bin/bash

Docker lanza el contenedor y le presenta un símbolo del sistema para la ejecución de comandos en elcontenedor.

En el contenedor, establezca las variables de entorno utilizando el siguiente comando:

export LD_LIBRARY_PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$LD_LIBRARY_PATHexport PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/bin:$PATHexport GST_PLUGIN_PATH=/opt/awssdk/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$GST_PLUGIN_PATH

Inicie el streaming desde la cámara utilizando el comando gst-launch-1.0 que sea adecuado para sudispositivo.

109

Page 115: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de parámetros

Note

En macOS, solo puede transmitir vídeo desde una cámara de red al ejecutar GStreamer enun contenedor de Docker. No es compatible el streaming de vídeo desde una cámara USB enmacOS en un contenedor de Docker.

Para ver ejemplos de cómo usar el comando gst-launch-1.0 para conectarse a una cámara web local oa una cámara RTSP en red, consulte Lanzar comandos (p. 106).

Referencia de parámetros de elemento de GStreamerPara enviar vídeo al SDK Producer de Amazon Transmisión de vídeo de Kinesis, especifique kvssinkcomo receptor o destino final de la canalización. Esta referencia proporciona información sobreparámetros kvssink obligatorios y opcionales. Para obtener más información, consulte the section called“Complemento de GStreamer” (p. 104).

El elemento kvssink tiene los siguientes parámetros obligatorios:

• stream-name: el nombre del Transmisión de vídeo de Kinesis de destino.• storage-size: el tamaño de almacenamiento del dispositivo en kilobytes. Para obtener información

acerca de la configuración del almacenamiento de dispositivo, consulte StorageInfo (p. 78).• access-key: la clave de acceso de AWS que se utiliza para acceder a Transmisión de vídeo de

Kinesis. Debe proporcionar este parámetro o bien credential-path.• secret-key: la clave secreta de AWS que se utiliza para acceder a Transmisión de vídeo de Kinesis.

Debe proporcionar este parámetro o bien credential-path.• credential-path: una ruta a un archivo que contiene sus credenciales para acceder a Transmisión

de vídeo de Kinesis. Para ver los archivos de credenciales, consulte Sample Static Credential y SampleRotating Credential. Debe proporcionar este parámetro o bien access-key y secret-key.

El elemento kvssink tiene los siguientes parámetros opcionales. Para obtener más información sobreestos parámetros, consulte Estructuras de secuencia de vídeo de Kinesis (p. 79).

Parámetro Descripción Unidad/tipo Valor predeterminado

retention-period El periodo de tiempoque se mantiene lasecuencia.

Hours 2

streaming-type El tipo de streaming.Los valores válidos son:

• 0: tiempo real• 1: casi tiempo

real (no se admiteactualmente)

• 2: sin conexión (no seadmite actualmente)

EnumGstKvsSinkStreamingType

0: tiempo real

content-type El tipo de contenido dela secuencia.

Cadena "video/h264"

max-latency La latencia máxima dela secuencia.

Segundos 60

fragment-duration La duración delfragmento que desea.

Milisegundos 2000

110

Page 116: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Referencia de parámetros

Parámetro Descripción Unidad/tipo Valor predeterminado

timecode-scale La escala de código detiempo de MKV.

Milisegundos 1

key-frame-fragmentation

Si se producenfragmentos en unfotograma clave.

Booleano true

frame-timecodes Si se utilizan códigosde tiempo de fotogramao se generan marcasde tiempo utilizando ladevolución de llamadade tiempo actual.

Booleano true

absolute-fragment-times

Si se utilizan tiempos defragmentos absolutos.

Booleano true

fragment-acks Si se utilizan ACK defragmentos.

Booleano true

restart-on-error Si se reinicia cuando seproduce un error.

Booleano true

recalculate-metrics

Si se vuelven a calcularlas métricas.

Booleano true

framerate La velocidad defotogramas prevista.

Fotogramas porsegundo

25

avg-bandwidth-bps El ancho de bandamedio previsto para lasecuencia.

Bytes por segundo 4194304

buffer-duration La duración del búfer dela secuencia.

Segundos 180

replay-duration La duración pararestaurar el lectoractual para reproducirdurante un error siestá habilitada lareactivación.

Segundos 40

connection-staleness

El tiempo tras elque se invoca ladevolución de llamadade obsolescencia de lasecuencia.

Segundos 60

codec-id El ID del códec de lasecuencia.

Cadena "V_MPEG4/ISO/AVC"

track-name El nombre de la pistaMKV.

Cadena "kinesis_video"

111

Page 117: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

API PutMedia

Parámetro Descripción Unidad/tipo Valor predeterminado

rotation-period El período de rotaciónde claves. Para obtenermás información,consulte Rotación declaves maestras decliente.

Segundos 2400

log-config La ruta de configuraciónde registro.

Cadena "./kvs_log_configuration"

frame-timestamp • (0): pts-only:establezca lamarca temporalde descodificación(DTS) igual a lamarca temporalde presentación(PTS) para cadafotograma enviado aTransmisión de vídeode Kinesis.

• (1): dts-only:establezca PTS iguala DTS para cadafotograma enviado aTransmisión de vídeode Kinesis.

• (2): default-timestamp: pruebea utilizar PTS andDTS. Si una no estádisponible, utilice laotra.

EnumGstKvsSinkFrameTimestampType

default-timestamp

Ejemplo: envío de datos a Transmisión de vídeo deKinesis utilizando la API PutMedia

En este ejemplo se muestra cómo usar la API PutMedia. Muestra cómo enviar los datos que ya seencuentran en un formato contenedor (MKV). Si tiene que dar a los datos un formato contenedor antesde enviarlos (por ejemplo, si va a formatear datos de vídeo de una cámara en fotogramas), consulteTransmisión de vídeo de Kinesis Producer Libraries (p. 28).

Note

La operación PutMedia solo está disponible en los SDK de Java y C++, debido a laadministración de dúplex completo de las conexiones, el flujo de datos y las confirmaciones. Noestá disponible en otros lenguajes.

Este ejemplo incluye los siguientes pasos:• Paso 1: descargar y configurar el código (p. 113)• Paso 2: escribir y examinar el código (p. 113)

112

Page 118: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 1: descargar y configurar el código

• Paso 3: ejecutar y verificar el código (p. 115)

Paso 1: descargar y configurar el códigoEn esta sección del tutorial de la Java Producer Library, descargará el código de ejemplo de Java,importará el proyecto en su IDE Java y configurará el código para usar sus credenciales de AWS.

1. Cree un directorio y clone el código fuente de ejemplo desde el repositorio GitHub. El ejemplo dePutMedia forma parte de la Java Producer Library (p. 29).

$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-java

2. Abra el IDE de Java que utilice (por ejemplo, Eclipse o IntelliJ IDEA) e importe el proyecto de ApacheMaven que ha descargado:

• En Eclipse: seleccione File (Archivo), Import... (Importar...), Maven (Maven), Existing Maven Projects(Proyectos Maven existentes) y vaya a la raíz del paquete descargado. Seleccione el archivopom.xml.

• En IntelliJ Idea: seleccione Import. Vaya al archivo pom.xml en la raíz del paquete descargado.

Para obtener más información, consulte la documentación del IDE relacionada.3. Actualice el proyecto, de modo que el IDE pueda encontrar las bibliotecas que ha importado.

• Para IntelliJ IDEA, realice lo siguiente:

a. Abra el menú contextual (clic secundario) en el directorio lib del proyecto y seleccione Add aslibrary.

b. Seleccione File y luego Project Structure.c. En Project Settings, seleccione Modules.d. En la pestaña Sources, configure Language Level en 7 o más.

• Para Eclipse, haga lo siguiente:

a. Abra el menú contextual (clic secundario) del proyecto y seleccione Properties, Java BuildPath, Source. A continuación, proceda del modo siguiente:

1. En la pestaña Source, haga doble clic en Native library location.2. En el asistente Native Library Folder Configuration, seleccione Workspace.3. En la opción Native Library Folder, seleccione el directorio lib del proyecto.

b. Abra el menú contextual (clic secundario) del proyecto y seleccione Properties. Acontinuación, proceda del modo siguiente:

1. En la pestaña Libraries, elija Add Jars.2. En el asistente JAR selection, seleccione todos los .jars del directorio lib del proyecto.

Paso 2: escribir y examinar el códigoEl ejemplo de API PutMedia () muestra el siguiente patrón de codificación:PutMediaDemo

Temas• Creación del PutMediaClient (p. 114)• Transmisión de medios y pausa del subproceso (p. 115)

113

Page 119: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 2: escribir y examinar el código

Los ejemplos de código de esta sección pertenecen a la clase PutMediaDemo.

Creación del PutMediaClientLa creación del objeto PutMediaClient requiere los siguientes parámetros:

• La URI del punto de conexión PutMedia.• Un InputStream que señale al archivo MKV que se ha de transmitir.• El nombre de la transmisión. En este ejemplo se utiliza la misma transmisión creada en la Uso de la Java

Producer Library (p. 29) (my-stream). Para utilizar otra transmisión, cambie el siguiente parámetro:

private static final String STREAM_NAME="my-stream";

Note

El ejemplo de API PutMedia no crea una secuencia. Debe crear una secuencia mediante laaplicación de prueba para la Uso de la Java Producer Library (p. 29), mediante la consola deTransmisión de vídeo de Kinesis o mediante la AWS CLI.

• Marca temporal actual.• Tipo de código temporal. En el ejemplo se utiliza RELATIVE, que indica que la marca temporal es

relativa al inicio del contenedor.• Un objeto AWSKinesisVideoV4Signer que comprueba que los paquetes recibidos han sido enviados

por el remitente autorizado.• El ancho de banda de subida máximo en Kbps,• Un objeto AckConsumer para recibir los reconocimientos de los paquetes recibidos.

El siguiente código crea el objeto PutMediaClient:

/* actually URI to send PutMedia request */final URI uri = URI.create(KINESIS_VIDEO_DATA_ENDPOINT + PUT_MEDIA_API);

/* input stream for sample MKV file */final InputStream inputStream = new FileInputStream(MKV_FILE_PATH);

/* use a latch for main thread to wait for response to complete */final CountDownLatch latch = new CountDownLatch(1);

/* a consumer for PutMedia ACK events */final AckConsumer ackConsumer = new AckConsumer(latch);

/* client configuration used for AWS SigV4 signer */final ClientConfiguration configuration = getClientConfiguration(uri);

/* PutMedia client */final PutMediaClient client = PutMediaClient.builder() .putMediaDestinationUri(uri) .mkvStream(inputStream) .streamName(STREAM_NAME) .timestamp(System.currentTimeMillis()) .fragmentTimeCodeType("RELATIVE") .signWith(getKinesisVideoSigner(configuration)) .upstreamKbps(MAX_BANDWIDTH_KBPS) .receiveAcks(ackConsumer) .build();

114

Page 120: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Paso 3: ejecutar y verificar el código

Transmisión de medios y pausa del subprocesoTras crear el cliente, la muestra inicia el streaming asincrónico con putMediaInBackground.Posteriormente, el subproceso principal se pausa con latch.await hasta que devuelve AckConsumer yen ese punto se cierra el cliente.

/* start streaming video in a background thread */ client.putMediaInBackground();

/* wait for request/response to complete */ latch.await();

/* close the client */ client.close();

Paso 3: ejecutar y verificar el códigoPara ejecutar el ejemplo de API PutMedia, siga estos pasos:

1. Cree una transmisión denominada my-stream en la consola de Transmisión de vídeo de Kinesis omediante la AWS CLI.

2. Cambie el directorio de trabajo actual al directorio del SDK Producer de Java:

$ cd /<YOUR_FOLDER_PATH_WHERE_SDK_IS_DOWNLOADED>/amazon-kinesis-video-streams-producer-sdk-java/

3. Compile el SDK de Java y la aplicación de demostración:

mvn package

4. Cree un nombre de archivo temporal en el directorio /tmp:

$ jar_files=$(mktemp)

5. Cree una cadena classpath de dependencias desde el repositorio local a un archivo:

$ mvn -Dmdep.outputFile=$jar_files dependency:build-classpath

6. Establezca el valor de la variable de entorno LD_LIBRARY_PATH del modo siguiente:

$ export LD_LIBRARY_PATH=/<YOUR_FOLDER_PATH_WHERE_SDK_IS_DOWNLOADED>/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib:$LD_LIBRARY_PATH$ classpath_values=$(cat $jar_files)

7. Ejecute la demostración desde la línea de comandos, tal y como se indica a continuación,proporcionando sus credenciales de AWS:

$ java -classpath target/kinesisvideo-java-demo-1.0-SNAPSHOT.jar:$classpath_values -Daws.accessKeyId=${ACCESS_KEY} -Daws.secretKey=${SECRET_KEY} -Djava.library.path=/opt/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build com.amazonaws.kinesisvideo.demoapp.DemoAppMain

8. Abra la consola de Transmisión de vídeo de Kinesis en https://console.aws.amazon.com/kinesisvideo/y elija su transmisión en la página Manage Streams. El vídeo se reproduce en el panel Video Preview.

115

Page 121: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

RTSP y Docker

Ejemplo: streaming desde una fuente RTSPEl C++ Producer Library (p. 38) contiene una definición de un contenedor de Docker que se conecta auna cámara de red de RTSP (Real Time Streaming Protocol). El uso de Docker estandariza el entornooperativo para Transmisión de vídeo de Kinesis, lo que simplifica notablemente la compilación y ejecuciónde la aplicación.

Para utilizar la aplicación de demostración RTSP, en primer lugar, instale y compile C++ ProducerLibrary (p. 38).

El siguiente procedimiento demuestra cómo configurar y utilizar la aplicación de demostración RTSP.

Temas• Requisitos previos (p. 116)• Crear la imagen de Docker. (p. 116)• Ejecute la aplicación de ejemplo de RTSP (p. 116)

Requisitos previosPara ejecutar la aplicación de ejemplo de RTSP de Transmisión de vídeo de Kinesis, debe tener losiguiente:

• Docker: para obtener información sobre cómo instalar y utilizar Docker, consulte los siguientes enlaces:• Instrucciones de descarga de Docker• Introducción a Docker

• Origen cámara de red RTSP: para obtener más información acerca de las cámaras recomendadas,consulte Requisitos del sistema (p. 4).

Crear la imagen de Docker.En primer lugar, cree la imagen de Docker que se ejecutará dentro de la aplicación de demostración.

1. Cree un nuevo directorio y copie los siguientes archivos desde el directoriodocker_native_scripts al nuevo directorio:

• Dockerfile

• start_rtsp_in_docker.sh

2. Cambie al directorio que ha creado en el paso anterior.3. Cree la imagen de Docker utilizando el siguiente comando. Este comando crea la imagen y la etiqueta

como rtspdockertest.

docker build -t rtspdockertest .

4. Registre el ID de imagen que se devolvió en el paso anterior (por ejemplo, 54f0d65f69b2).

Ejecute la aplicación de ejemplo de RTSPInicie el contenedor de Docker de Transmisión de vídeo de Kinesis utilizando el comando siguiente.Proporcione el ID de la imagen del paso anterior, sus credenciales de AWS, la dirección URL de su cámarade red RTSP y el nombre de Transmisión de vídeo de Kinesis para enviar los datos.

116

Page 122: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

GStreamer

$ docker run -it <IMAGE_ID> <AWS_ACCESS_KEY_ID> <AWS_SECRET_ACCESS_KEY> <RTSP_URL> <STREAM_NAME>

Para personalizar la aplicación, comentar o quitar el comando ENTRYPOINT en Dockerfile y lanzar elcontenedor con el siguiente comando:

docker run -it <IMAGE_ID> bash

A continuación, se le solicita dentro del contenedor de Docker que personalice la aplicación de ejemplo ycomience el streaming.

Ejemplo: uso de GStreamer con Transmisión devídeo de Kinesis

En C++ Producer Library (p. 38) se incluye una aplicación de demostración para utilizar GStreamer, unmarco multimedia de código abierto, con Amazon Transmisión de vídeo de Kinesis.

El siguiente procedimiento demuestra cómo configurar y utilizar la demostración de GStreamer. Laaplicación envía los datos de vídeo a Transmisión de vídeo de Kinesis en las siguientes plataformas:

• Una cámara integrada en un equipo macOS• Una cámara USB en un dispositivo Linux o Raspberry Pi

Note

El ejemplo de GStreamer no está disponible actualmente para los sistemas Windows.

Requisitos previosEl ejemplo de GStreamer normalmente requiere los siguientes componentes, que puede instalar con lossiguientes comandos:

• Automake: brew install automake• Autoconf: brew install autoconf automake• CMake: brew install cmake• GStreamer: brew install gstreamer gst-plugins-base gst-plugins-bad gst-plugins-good gst-plugins-ugly

• GNU Bison: brew install bison && brew link bison --force

Para obtener una lista más completa de los requisitos, consulte Requisitos previos (p. 39) en ladocumentación del SDK de C++ Producer o el archivo README.md del SDK.

Ejecución del ejemplo de GStreamer1. Cree un directorio y, a continuación, clone el código fuente de ejemplo desde el repositorio GitHub.

$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp

2. Ejecute el siguiente script en el directorio /kinesis-video-native-build para crear el SDK C++Producer:

117

Page 123: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Renderer

./install-script

Este script instala los requisitos previos del SDK y compila los archivos binarios, incluido el ejemplo deGStreamer. Para obtener información sobre la compilación del ejemplo en Ubuntu, consulte la secciónde solución de problemas del archivo README.md del SDK.

3. Después de que se haya instalado y configurado el SDK C++ Producer, ejecute la aplicación con elsiguiente comando (también en el directorio /kinesis-video-native-build):

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLEexport AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYexport AWS_DEFAULT_REGION=<AWS region>./kinesis_video_gstreamer_sample_app stream_name

Proporcione la siguiente información para los parámetros de la aplicación:

• AWS_ACCESS_KEY_ID: el ID de clave de acceso de su cuenta. Consulte Requisitosprevios (p. 104).

• AWS_SECRET_ACCESS_KEY: la clave de acceso secreta de su cuenta. Consulte Requisitosprevios (p. 104).

• AWS_DEFAULT_REGION: su región de AWS, por ejemplo, us-west-2.• stream_name: el nombre de la Transmisión de vídeo de Kinesis a la que se enviarán los datos de la

cámara. La transmisión se creará si no existe.4. Se inicia la aplicación de demostración. En unos segundos, verá los datos de vídeo de su cámara de

vídeo en la consola de Transmisión de vídeo de Kinesis para la transmisión.

Note

Si la aplicación no adquiere la cámara, es posible que aparezca un error Failed tonegotiate pipeline. Para obtener información de solución de problemas, consulte elarchivo README.md en el SDK.

Ejemplo: análisis y representación de fragmentosde Transmisión de vídeo de Kinesis

La Stream Parser Library (p. 97) contiene una aplicación de demostración denominadaKinesisVideoRendererExample que muestra el análisis y la representación de fragmentos de AmazonTransmisión de vídeo de Kinesis. El ejemplo utiliza JCodec para descodificar los fotogramas codificadosen H.264 que se introducen utilizando la aplicación Ejemplo: uso de GStreamer con Transmisión de vídeode Kinesis (p. 117). Después de que el fotograma se descodifique usando JCodec, la imagen visible serepresenta mediante JFrame.

Este ejemplo le muestra cómo hacer lo siguiente:

• Recupere fotogramas desde una Transmisión de vídeo de Kinesis mediante el API GetMedia yrepresente la secuencia para visualización.

• Vea el contenido de vídeo de las secuencias en una aplicación personalizada en lugar de utilizar laconsola de Transmisión de vídeo de Kinesis.

También puede utilizar las clases de este ejemplo para ver contenido de Transmisión de vídeo de Kinesisque no está codificado como H.264, como, por ejemplo, una secuencia de archivos JPEG que no requierendescodificación antes de mostrarse.

118

Page 124: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Requisitos previos

El siguiente procedimiento demuestra cómo configurar y utilizar la aplicación de demostración Renderer.

Requisitos previosPara examinar y utilizar la biblioteca de ejemplos de Renderer, debe tener lo siguiente:

• Una cuenta de Amazon Web Services (AWS). Si aún no tiene una cuenta de AWS, consulte Introduccióna Kinesis Video Streams

• Un entorno de desarrollo integrado (IDE) de Java, como Eclipse Java Neon o JetBrains IntelliJ Idea.

Ejecución del ejemplo de Renderer1. Cree un directorio y, a continuación, clone el código fuente de ejemplo desde el repositorio GitHub.

$ git clone https://github.com/aws/amazon-kinesis-video-streams-parser-library

2. Abra el IDE de Java que utilice (por ejemplo, Eclipse o IntelliJ IDEA) e importe el proyecto de ApacheMaven que ha descargado:

• En Eclipse: seleccione File, Import, Maven, Existing Maven Projects. Vaya al directorio kinesis-video-streams-parser-lib.

• En IntelliJ Idea: seleccione Import. Vaya al archivo pom.xml en la raíz del paquete descargado.

Note

Es posible que tenga que hacer lo siguiente si IntelliJ no puede encontrar susdependencias:• Compilación limpia: elija File (Archivo), Settings (Configuración), Build, Execution,

Deployment (Compilación, ejecución, implementación), Compiler (Compilador).Asegúrese de que Clear output directory on rebuild (Borrar directorio de salida al volver acompilar) esté marcado y, a continuación, elija Build (Compilar), Build Project (Proyectode compilación).

• Volver a importar el proyecto: haga clic con el botón derecho en el proyecto y seleccioneMaven (Maven), Reimport (Volver a importar).

Para obtener más información, consulte la documentación del IDE relacionada.3. Desde su IDE de Java, abra src/test/java/com.amazonaws.kinesisvideo.parser/

examples/KinesisVideoRendererExampleTest.4. Elimine la directiva @Ignore del archivo.5. Actualice el parámetro .stream con el nombre de su Transmisión de vídeo de Kinesis.6. Ejecute la prueba KinesisVideoRendererExample.

FuncionamientoLa aplicación de ejemplo muestra lo siguiente:

• Envío de datos MKV (p. 120)• Análisis de fragmentos MKV en fotogramas (p. 120)• Descodificación y visualización del fotograma (p. 120)

119

Page 125: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Funcionamiento

Envío de datos MKVEl ejemplo envía datos MKV de ejemplo desde el archivo rendering_example_video.mkv, utilizandoPutMedia para enviar datos de vídeo a una secuencia denominada render-example-stream.

La aplicación crea un PutMediaWorker:

PutMediaWorker putMediaWorker = PutMediaWorker.create(getRegion(), getCredentialsProvider(), getStreamName(), inputStream, streamOps.amazonKinesisVideo);executorService.submit(putMediaWorker);

Para obtener más información acerca de la clase PutMediaWorker, consulte Llamada aPutMedia (p. 101) en la documentación de Stream Parser Library (p. 97).

Análisis de fragmentos MKV en fotogramasA continuación, el ejemplo recupera y analiza los fragmentos MKV de la secuencia utilizando unGetMediaWorker:

GetMediaWorker getMediaWorker = GetMediaWorker.create(getRegion(), getCredentialsProvider(), getStreamName(), new StartSelector().withStartSelectorType(StartSelectorType.EARLIEST), streamOps.amazonKinesisVideo, getMediaProcessingArgumentsLocal.getFrameVisitor());executorService.submit(getMediaWorker);

Para obtener más información acerca de la clase GetMediaWorker, consulte Llamada aGetMedia (p. 101) en la documentación de Stream Parser Library (p. 97).

Descodificación y visualización del fotogramaA continuación, el ejemplo descodifica y muestra el fotograma utilizando JFrame.

El siguiente ejemplo de código procede de la clase KinesisVideoFrameViewer, que amplía JFrame:

public void setImage(BufferedImage bufferedImage) { image = bufferedImage; repaint();}

La imagen se muestra como una instancia de java.awt.image.BufferedImage. Para ver ejemplos queilustran cómo trabajar con BufferedImage, consulte Reading/Loading an Image.

120

Page 126: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Monitorización de métricas con CloudWatch

Monitorización de Transmisión devídeo de Kinesis

La monitorización es una parte importante para mantener la fiabilidad, la disponibilidad y el desempeñode Transmisión de vídeo de Kinesis y sus soluciones de AWS. Debe recopilar datos de monitorización detodas las partes de su solución de AWS para que le resulte más sencillo depurar un error que se produceen distintas partes del código, en caso de que ocurra. No obstante, antes de comenzar a monitorizarTransmisión de vídeo de Kinesis, debe crear un plan de monitorización que incluya respuestas a lassiguientes preguntas:

• ¿Cuáles son los objetivos de la monitorización?• ¿Qué recursos va a monitorizar?• ¿Con qué frecuencia va a monitorizar estos recursos?• ¿Qué herramientas de monitorización va a utilizar?• ¿Quién se encargará de realizar las tareas de monitorización?• ¿Quién debería recibir una notificación cuando surjan problemas?

Después de definir los objetivos y de crear el plan de monitorización, el paso siguiente consiste enestablecer un punto de referencia para el desempeño normal de Transmisión de vídeo de Kinesis en elentorno. Conviene medir el desempeño de Transmisión de vídeo de Kinesis en varias ocasiones y condiferentes condiciones de carga. A medida que monitoriza Transmisión de vídeo de Kinesis, guarde unhistorial de los datos de monitorización que recopila. Puede comparar el desempeño actual de Transmisiónde vídeo de Kinesis con estos datos históricos para identificar patrones de desempeño normal y anomalíasen el desempeño, así como desarrollar métodos para solucionar los problemas que puedan presentarse.

Temas• Monitorización de métricas de Transmisión de vídeo de Kinesis con CloudWatch (p. 121)• Registro de llamadas a la API de Transmisión de vídeo de Kinesis con AWS CloudTrail (p. 125)

Monitorización de métricas de Transmisión de vídeode Kinesis con CloudWatch

Puede monitorizar una Transmisión de vídeo de Kinesis mediante Amazon CloudWatch, que recopila yprocesa los datos sin formato de Transmisión de vídeo de Kinesis en métricas legibles y casi en tiemporeal. Estas estadísticas se registran durante un periodo de 15 meses, de forma que pueda obtener accesoa información de historial y obtener una mejor perspectiva acerca del desempeño de su aplicación web oservicio.

Para tener acceso al panel de CloudWatch para una Transmisión de vídeo de Kinesis, elija Viewstream metrics in CloudWatch (Ver métricas de transmisión en CloudWatch) en la sección Stream info(Información de transmisión) de la página de la consola para la transmisión.

Para obtener una lista de las métricas disponibles admitidas por Transmisión de vídeo de Kinesis, consulteMétricas y dimensiones de Transmisión de vídeo de Kinesis.

121

Page 127: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Orientación sobre las métricas de CloudWatch

Orientación sobre las métricas de CloudWatchLas métricas de CloudWatch pueden resultar útiles para encontrar respuestas a las siguientes preguntas:

Temas• ¿Está llegando datos al servicio de Transmisión de vídeo de Kinesis? (p. 122)• ¿Por qué no está recibiendo correctamente los datos el servicio de Transmisión de vídeo de

Kinesis? (p. 122)• ¿Por qué no pueden leerse los datos desde el servicio de Transmisión de vídeo de Kinesis a la misma

velocidad con la que los envía el productor? (p. 123)• ¿Por qué no se ve vídeo en la consola, o por qué se reproduce el vídeo con retraso? (p. 123)• ¿Cuál es el retraso en la lectura de los datos en tiempo real, y por qué se retrasa el cliente con relación

al encabezado de la transmisión? (p. 123)• ¿Lee el cliente lee los datos de la Transmisión de vídeo de Kinesis, y a qué velocidad? (p. 124)• ¿Por qué no puede el cliente leer datos de la Transmisión de vídeo de Kinesis? (p. 124)

¿Está llegando datos al servicio de Transmisión de vídeo deKinesis?Métricas relevantes:

• PutMedia.IncomingBytes

• PutMedia.IncomingFragments

• PutMedia.IncomingFrames

Elementos de acción:

• Si se produce un descenso de estas métricas, compruebe si la aplicación sigue enviando datos alservicio.

• Compruebe el ancho de banda de la red. Si el ancho de banda de la red es insuficiente, podría estarreduciendo la velocidad a la que el servicio recibe los datos.

¿Por qué no está recibiendo correctamente los datos el serviciode Transmisión de vídeo de Kinesis?Métricas relevantes:

• PutMedia.Requests

• PutMedia.ConnectionErrors

• PutMedia.Success

• PutMedia.ErrorAckCount

Elementos de acción:

• Si se produce un aumento de PutMedia.ConnectionErrors, examine los códigos de error/respuestaHTTP recibidos por Producer Client para ver qué errores se producen al establecer la conexión.

• Si se produce un descenso de PutMedia.Success o un aumento de PutMedia.ErrorAckCount,examine el código de error ack en las respuestas ack enviadas por el servicio para ver por qué

122

Page 128: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Orientación sobre las métricas de CloudWatch

la adquisición de datos no se realiza correctamente. Para obtener más información, consulteAckErrorCode.Values.

¿Por qué no pueden leerse los datos desde el servicio deTransmisión de vídeo de Kinesis a la misma velocidad con la quelos envía el productor?Métricas relevantes:

• PutMedia.FragmentIngestionLatency

• PutMedia.IncomingBytes

Elementos de acción:

• Si se produce un descenso de estas métricas, compruebe el ancho de banda de red de las conexiones.Las conexiones con un ancho de banda bajo podrían ser la causa de que los datos lleguen al servicio auna velocidad menor.

¿Por qué no se ve vídeo en la consola, o por qué se reproduce elvídeo con retraso?Métricas relevantes:

• PutMedia.FragmentIngestionLatency

• PutMedia.FragmentPersistLatency

• PutMedia.Success

• ListFragments.Latency

• PutMedia.IncomingFragments

Elementos de acción:

• Si se produce un aumento de PutMedia.FragmentIngestionLatency o un descenso dePutMedia.IncomingFragments, compruebe el ancho de banda de red y si se están enviando losdatos.

• Si se produce un descenso de PutMedia.Success, compruebe los códigos de error ack. Para obtenermás información, consulte AckErrorCode.Values.

• Si se produce un aumento de PutMedia.FragmentPersistLatency o ListFragments.Latency,lo más probable es que exista un problema con el servicio. Si la condición persiste durante un periodode tiempo prolongado, consulte con su contacto del servicio de atención al cliente para ver si hay algúnproblema con el servicio.

¿Cuál es el retraso en la lectura de los datos en tiempo real, ypor qué se retrasa el cliente con relación al encabezado de latransmisión?Métricas relevantes:

• GetMedia.MillisBehindNow

123

Page 129: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Orientación sobre las métricas de CloudWatch

• GetMedia.ConnectionErrors

• GetMedia.Success

Elementos de acción:

• Si se produce un aumento de GetMedia.ConnectionErrors, es posible que el consumidor se retraseal leer la transmisión, debido a que está realizando intentos frecuentes de volver a conectarse a ella.Compruebe los códigos de error/respuesta HTTP que se devuelven para la solicitud GetMedia.

• Si se produce un descenso de GetMedia.Success, es probable que se deba a que el serviciono puede enviar datos al consumidor, lo que daría lugar a la pérdida de la conexión y a que losconsumidores vuelvan a conectarse, lo que provocaría que el consumidor se retrase con relación alencabezado de la transmisión.

• Si se produce un aumento de GetMedia.MillisBehindNow, compruebe los límites de ancho debanda para ver si está recibiendo los datos a una velocidad más lenta debido a un ancho de bandareducido.

¿Lee el cliente lee los datos de la Transmisión de vídeo deKinesis, y a qué velocidad?Métricas relevantes:

• GetMedia.OutgoingBytes

• GetMedia.OutgoingFragments

• GetMedia.OutgoingFrames

• GetMediaForFragmentList.OutgoingBytes

• GetMediaForFragmentList.OutgoingFragments

• GetMediaForFragmentList.OutgoingFrames

Elementos de acción:

• Estas métricas indican a qué velocidad se leen los datos archivados y en tiempo real.

¿Por qué no puede el cliente leer datos de la Transmisión devídeo de Kinesis?Métricas relevantes:

• GetMedia.ConnectionErrors

• GetMedia.Success

• GetMediaForFragmentList.Success

• PutMedia.IncomingBytes

Elementos de acción:

• Si se produce un aumento de GetMedia.ConnectionErrors, examine los códigos de error/respuesta HTTP que devuelve la solicitud GetMedia. Para obtener más información, consulteAckErrorCode.Values.

• Si está intentando leer los datos más recientes/en vivo, compruebe PutMedia.IncomingBytes paraver si hay datos entrantes en la transmisión para que el servicio se los envíe a los consumidores.

124

Page 130: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Registro de llamadas a la API con CloudTrail

• Si se produce un descenso de GetMedia.Success o GetMediaForFragmentList.Success,probablemente se deba a que el servicio no puede enviar datos a los consumidores. Si la condiciónpersiste durante un periodo de tiempo prolongado, consulte con su contacto del servicio de atención alcliente para ver si hay algún problema con el servicio.

Registro de llamadas a la API de Transmisión devídeo de Kinesis con AWS CloudTrail

Amazon Transmisión de vídeo de Kinesis se ha integrado con AWS CloudTrail, que captura las llamadasal API realizadas por Transmisión de vídeo de Kinesis o en su nombre. CloudTrail envía a continuación losarchivos de log de eventos al bucket de Amazon Simple Storage Service (Amazon S3) que se especifique.Puede hacer las llamadas al API indirectamente a través de la consola de Transmisión de vídeo de Kinesiso directamente a través del API de Transmisión de vídeo de Kinesis. Puede usar la información recopiladapor CloudTrail, para identificar la solicitud que se realizó a Transmisión de vídeo de Kinesis, la dirección IPde origen desde la que se realizó la solicitud, quién realizó la solicitud, cuándo se realizó, etcétera. Paraobtener más información acerca de CloudTrail, incluido cómo configurarlo y habilitarlo, consulte la AWSCloudTrail User Guide.

Transmisión de vídeo de Kinesis y CloudTrailEl registro de CloudTrail está deshabilitado de forma predeterminada. Las llamadas realizadas a accionesde Transmisión de vídeo de Kinesis se almacenan en archivos log. Los registros de Transmisión de vídeode Kinesis están escritos en un archivo de registro, junto con los registros de cualquier otro servicio deAWS que se haya habilitado para iniciar sesión en CloudTrail. CloudTrail determina cuándo crear y escribiren un nuevo archivo en función del periodo de tiempo especificado y del tamaño del archivo.

Se admiten las siguientes acciones:

• CreateStream• DeleteStream• DescribeStream• GetDataEndpoint• ListStreams• ListTagsForStream• TagStream• UntagStream• UpdateDataRetention• UpdateStream

Cada entrada del registro contiene información sobre quién generó la solicitud. Por ejemplo, si se envíauna solicitud para crear una secuencia (CreateStream), se registra la identidad de usuario de la persona oel servicio que ha realizado la solicitud. La información de identidad del usuario le ayudará a determinar sila solicitud se hizo con credenciales de usuario raíz o de IAM, con credenciales de seguridad temporalespara un rol o un usuario federado, o mediante otro servicio de AWS. Para obtener más información,consulte el elemento userIdentity en la AWS CloudTrail User Guide.

Puede almacenar los archivos de registro en su bucket durante todo el tiempo que necesite, perotambién puede definir reglas de ciclo de vida de Amazon S3 para archivar o eliminar archivos de registroautomáticamente. De forma predeterminada, los archivos log se cifran con cifrado de servidor de AmazonS3 (SSE).

125

Page 131: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Entradas de archivos de registro deTransmisión de vídeo de Kinesis

También puede agregar archivos de registro de Transmisión de vídeo de Kinesis de varias regiones deAWS y de varias cuentas de AWS en un solo bucket de Amazon S3. Para obtener más información,consulte Aggregating CloudTrail Log Files to a Single Amazon S3 Bucket en la AWS CloudTrail UserGuide.

Puede hacer que CloudTrail publique notificaciones de Amazon Simple Notification Service (Amazon SNS)cuando se entreguen los archivos de registro nuevos si desea actuar rápidamente al recibir un archivolog. Para obtener más información, consulte Configuración de notificaciones de Amazon SNS en la AWSCloudTrail User Guide.

Entradas de archivos de registro de Transmisión devídeo de KinesisLos archivos de registro de CloudTrail contienen una o varias entradas de registro, cada una de las cualesestá compuesta por varios eventos con formato JSON. Una entrada de log representa una única solicitudde cualquier origen e incluye información sobre la acción solicitada, los parámetros, la fecha y la hora de laacción, etcétera. Las entradas de log no se muestran en ningún orden concreto. Es decir, no representanun seguimiento de la pila ordenado de las llamadas al API.

A continuación se muestra una entrada de registro de CloudTrail de ejemplo:

{ "Records": [ { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2018-05-25T00:16:31Z", "eventSource": " kinesisvideo.amazonaws.com", "eventName": "CreateStream", "awsRegion": "us-east-1", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version Linux/x.xx", "requestParameters": { "streamName": "VideoStream", "dataRetentionInHours": 2, "mediaType": "mediaType", "kmsKeyId": "arn:aws:kms::us-east-1:123456789012:alias", "deviceName": "my-device" }, "responseElements": { "streamARN":arn:aws:kinesisvideo:us-east-1:123456789012:stream/VideoStream/12345” }, "requestID": "db6c59f8-c757-11e3-bc3b-57923b443c1c", "eventID": "b7acfcd0-6ca9-4ee1-a3d7-c4e8d420d99b" }, { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice"

126

Page 132: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Entradas de archivos de registro deTransmisión de vídeo de Kinesis

}, "eventTime": "2018-05-25:17:06Z", "eventSource": " kinesisvideo.amazonaws.com”, "eventName": "DeleteStream", "awsRegion": "us-east-1", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version Linux/x.xx", "requestParameters": { "streamARN": "arn:aws:kinesisvideo:us-east-1:012345678910:stream/VideoStream/12345", "currentVersion": "keqrjeqkj9" }, "responseElements": null, "requestID": "f0944d86-c757-11e3-b4ae-25654b1d3136", "eventID": "0b2f1396-88af-4561-b16f-398f8eaea596" }, { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-04-19T00:15:02Z", "eventSource": " kinesisvideo.amazonaws.com”, "eventName": "DescribeStream", "awsRegion": "us-east-1", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version Linux/x.xx", "requestParameters": { "streamName": "VideoStream" }, "responseElements": null, "requestID": "a68541ca-c757-11e3-901b-cbcfe5b3677a", "eventID": "22a5fb8f-4e61-4bee-a8ad-3b72046b4c4d" }, { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-04-19T00:15:03Z", "eventSource": "kinesisvideo.amazonaws.com", "eventName": "GetDataEndpoint", "awsRegion": "us-east-1", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version Linux/x.xx", "requestParameters": { "streamName": "VideoStream", "aPIName": "LIST_FRAGMENTS"" }, "responseElements": null, "requestID": "a6e6e9cd-c757-11e3-901b-cbcfe5b3677a", "eventID": "dcd2126f-c8d2-4186-b32a-192dd48d7e33" }, { "eventVersion": "1.05",

127

Page 133: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Entradas de archivos de registro deTransmisión de vídeo de Kinesis

"userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2018-05-25T00:16:56Z", "eventSource": "kinesisvideo.amazonaws.com", "eventName": "ListStreams", "awsRegion": "us-east-1", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version Linux/x.xx", "requestParameters": { "maxResults": 100, "streamNameCondition": {"comparisonValue":"MyVideoStream” comparisonOperator":"BEGINS_WITH"}} }, "responseElements": null, "requestID": "e9f9c8eb-c757-11e3-bf1d-6948db3cd570", "eventID": "77cf0d06-ce90-42da-9576-71986fec411f" } ]}

128

Page 134: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Límites de las API del plano de control

Límites de Transmisión de vídeo deKinesis

Transmisión de vídeo de Kinesis tiene los siguientes límites:

Los límites que se indican a continuación son flexibles [f] (se pueden actualizar enviando una incidencia desoporte técnico) o rígidos [r] (no se pueden aumentar).

Límites de las API del plano de controlEn la siguiente sección se describen los límites de las API del plano de control.

Cuando se alcanza un límite de solicitud de nivel de cuenta, se produce una excepciónClientLimitExceededException.

Cuando se alcanza un límite de transmisiones de nivel de cuenta o un límite de nivel de transmisión, seproduce una excepción StreamLimitExceededException.

Límites de las API del plano de control

API Límite decuenta:solicitud

Límite de nivelde cuenta

Límite de nivelde transmisión

Excepciones y notas importantes

CreateStream 50 TPS [f] 100transmisionespor cuenta [f]

5 TPS [r] Los dispositivos, las CLI, los SDKy la consola pueden invocar estaAPI. Una llamada a la API seejecutará correctamente solo siaún no existe la transmisión.

DescribeStream 300 TPS [r] N/D 5 TPS [r]  

UpdateStream 50 TPS [r] N/D 5 TPS [r]  

ListStreams 300 TPS [r] N/D 5 TPS [r]  

DeleteStream 50 TPS [r] N/D 5 TPS [r]  

GetDataEndpoint 300 TPS [r] N/D 5 TPS [r] En combinación con el límitede cuenta, esto implica que conlas operaciones Put y Readse puede usar un máximode 60 transmisiones (con 4consumidores).

Límites de las API de medios y de mediosarchivados

En la siguiente sección se describen los límites de las API de medios y de medios archivados.

129

Page 135: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Límites de las API de medios y de medios archivados

Cuando se supera un límite de nivel de transmisión, se produce una excepciónStreamLimitExceededException.

Cuando se alcanza un límite de nivel de conexión, se produce una excepciónConnectionLimitExceededException.

Los siguientes errores o acks se producen cuando se alcanza un límite de nivel de fragmento:

• Se devuelve un ack MIN_FRAGMENT_DURATION_REACHED para un fragmento inferior a la duraciónmínima.

• Se devuelve un ack MAX_FRAGMENT_DURATION_REACHED para un fragmento superior a la duraciónmáxima.

• Se devuelve un ack MAX_FRAGMENT_SIZE para un fragmento superior al tamaño máximo de datos.• Se produce una excepción FragmentLimitExceeded si se alcanza un límite de fragmentos en una

operación GetMediaForFragmentList.

Límites de las API del plano de datos

API Límite denivel detransmisión

Límite denivel deconexión

Límite deancho debanda

Límite denivel defragmento

Excepciones y notasimportantes

PutMedia 5 TPS [r] 1 [s] 12,5 MB/segundo o100 Mbps [s]

• Duraciónmínimadelfragmento:1 segundo[h]

• Duraciónmáximadelfragmento:10segundos[h]

• Tamañomáximodelfragmento:50 MB [h]

Una solicitud PutMediatípica contendrá datos devarios segundos, lo quedará lugar a un número deTPS menor por transmisión.En el caso de variasconexiones simultáneasque superen los límites, seacepta la última conexión.

GetMedia 5 TPS [r] 3 [s] 25 MB/segundo o200 Mbps [s]

N/D Solo tres clientes puedenrecibir simultáneamentecontenido de la transmisiónmultimedia en un momentodeterminado. Lasconexiones de clienteadicionales se rechazarán.Un único cliente consumidorno debería necesitar másde 2 o 3 TPS, ya que unavez establecida la conexión,esperamos que la aplicaciónlea de manera continuada.

Si un fragmento típico esaproximadamente de 5

130

Page 136: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Límites de las API de medios y de medios archivados

API Límite denivel detransmisión

Límite denivel deconexión

Límite deancho debanda

Límite denivel defragmento

Excepciones y notasimportantes

MB, este límite significará~75 MB/segundo portransmisión de vídeo deKinesis. En una transmisióncomo esta, la velocidadde bits de salida sería eldoble de la velocidad de bitsde entrada máxima de lastransmisiones.

ListFragments 5 TPS [r] 5 [s] N/D N/D Cinco aplicacionesconsumidoras basadasen fragmentos puedenmostrar fragmentos deforma simultánea enfunción de los requisitos deprocesamiento.

GetMediaForFragmentList5 TPS [r] 5 [s] 25 MB/s o200 MbpsA[s]

Númeromáximo defragmentos:1000 [h]

Cinco aplicacionesconsumidoras basadas enfragmentos pueden obtenercontenido multimediasimultáneamente. Lasconexiones adicionales serechazarán.

131

Page 137: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideSolución de problemas generales

Solución de problemas deTransmisión de vídeo de Kinesis

Utilice la siguiente información para solucionar problemas comunes que pueden producirse con AmazonTransmisión de vídeo de Kinesis.

Temas• Solución de problemas generales (p. 132)• Solución de problemas del uso compartido de recursos entre orígenes (API) (p. 132)• Solución de problemas de Java (p. 134)• Solución de problemas de Producer Library (p. 134)• Solución de problemas de Stream Parser Library (p. 138)

Solución de problemas generalesEn esta sección se describen los problemas generales que podrían producirse cuando se trabaja conTransmisión de vídeo de Kinesis.

Problemas• Latencia demasiado alta (p. 132)

Latencia demasiado altaLa latencia puede ser provocada por la duración de los fragmentos que se envían al servicio deTransmisión de vídeo de Kinesis. Una forma de reducir la latencia entre el productor y el servicio consisteen configurar la canalización de medios para que genere fragmentos de menor duración.

Para reducir el número de fotogramas enviados en cada fragmento y, por lo tanto, la duración de cadafragmento, reduzca el valor siguiente en kinesis_video_gstreamer_sample_app.cpp:

g_object_set(G_OBJECT (data.encoder), "bframes", 0, "key-int-max", 45, "bitrate", 512, NULL);

Solución de problemas del uso compartido derecursos entre orígenes (API)

En esta sección se describen los problemas de la API que podrían producirse cuando se trabaja conTransmisión de vídeo de Kinesis.

Problemas• Error: “No se puede determinar el nombre del servicio o la operación que se debe autorizar” (p. 133)

132

Page 138: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Error: “No se puede determinar el nombre delservicio o la operación que se debe autorizar”

• Error: “Error al colocar un fotograma en la transmisión” (p. 133)• Error: “El servicio cerró la conexión antes de que se recibiera el AckEvent final” (p. 133)• Error: "STATUS_STORE_OUT_OF_MEMORY" (p. 133)

Error: “No se puede determinar el nombre del servicioo la operación que se debe autorizar”GetMedia puede generar el siguiente error:

Unable to determine service/operation name to be authorized

Este error podría producirse si no se especifica correctamente el punto de enlace. Cuando obtenga elpunto de enlace, asegúrese de incluir el parámetro siguiente en la llamada a GetDataEndpoint, según laAPI a la que se llame:

--api-name GET_MEDIA--api-name PUT_MEDIA--api-name GET_MEDIA_FOR_FRAGMENT_LIST--api-name LIST_FRAGMENTS

Error: “Error al colocar un fotograma en la transmisión”PutMedia puede generar el siguiente error:

Failed to put a frame in the stream

Este error podría producirse si la conectividad o los permisos no están disponibles para el servicio. Ejecutelo siguiente en la AWS CLI y compruebe que puede recuperarse la información de la transmisión:

aws kinesisvideo describe-stream --stream-name StreamName --endpoint https://ServiceEndpoint.kinesisvideo.region.amazonaws.com

Si la llamada no se realiza, consulte Solución de errores de la AWS CLI para obtener más información.

Error: “El servicio cerró la conexión antes de que serecibiera el AckEvent final”PutMedia puede generar el siguiente error:

com.amazonaws.SdkClientException: Service closed connection before final AckEvent was received

Este error podría producirse si PushbackInputStream no está implementado correctamente. Asegúresede que los métodos unread() se han implementado correctamente.

Error: "STATUS_STORE_OUT_OF_MEMORY"PutMedia puede generar el siguiente error:

133

Page 139: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideSolución de problemas de Java

The content store is out of memory.

Este error se produce cuando el almacén de contenido no se asigna con tamaño suficiente. Para aumentarel tamaño del almacén de contenido, aumente el valor de StorageInfo.storageSize. Para obtenermás información, consulte StorageInfo (p. 78).

Solución de problemas de JavaEn esta sección se describe cómo solucionar los problemas comunes de Java que pueden producirsecuando se trabaja con Transmisión de vídeo de Kinesis.

Problemas• Habilitar los logs de Java (p. 134)

Habilitar los logs de JavaPara solucionar problemas con muestras y bibliotecas Java, es útil habilitar y examinar los logs dedepuración. Para habilitar los logs de depuración, haga lo siguiente:

1. Agregue log4j al archivo pom.xml en el nodo dependencies:

<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version></dependency>

2. En el directorio target/classes, cree un archivo denominado log4j.properties con elcontenido siguiente:

# Root logger optionlog4j.rootLogger=DEBUG, stdout

# Redirect log messages to consolelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.logger.org.apache.http.wire=DEBUG

Los logs de depuración imprimirán en la consola del IDE.

Solución de problemas de Producer LibraryEn esta sección se describen los problemas que podrían producirse cuando se utiliza Producerlibraries (p. 28).

Problemas

134

Page 140: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

No se puede compilar el SDK de Producer

• No se puede compilar el SDK de Producer (p. 135)• La transmisión de vídeo no aparece en la consola (p. 135)• Error: "Security token included in the request is invalid" (El token de seguridad incluido en la

solicitud no es válido) durante el streaming de datos mediante la aplicación de demostraciónGStreamer (p. 136)

• Error: "Failed to submit frame to Kinesis Video client" (No se pudo enviar el fotograma al cliente deKinesis Video) (p. 136)

• La aplicación GStreamer se detiene con el mensaje "transmisión detenida, motivo no negociado" enOS X (p. 136)

• Error: "Failed to allocate heap" (No se puede asignar el montón) al crear el cliente de Kinesis Video enla demostración de GStreamer en un dispositivo Raspberry Pi (p. 137)

• Error: "Instrucción ilegal" al ejecutar la demostración de GStreamer en un dispositivo RaspberryPi (p. 137)

• La cámara no se carga en un dispositivo Raspberry Pi (p. 137)• No se puede encontrar la cámara en macOS High Sierra (p. 138)• No se ha encontrado el archivo jni.h al compilar en macOS High Sierra (p. 138)• Errores de cURL al ejecutar la aplicación de demostración GStreamer (p. 138)• Aserción de rango/marca temporal en el tiempo de ejecución en un dispositivo Raspberry Pi (p. 138)• Aserción en gst_value_set_fraction_range_full en un dispositivo Raspberry Pi (p. 138)

No se puede compilar el SDK de ProducerCompruebe que las bibliotecas necesarias se encuentran en la ruta. Para ello, utilice el comando siguiente:

$ env | grep LD_LIBRARY_PATHLD_LIBRARY_PATH=/home/local/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib

La transmisión de vídeo no aparece en la consolaPara mostrar la secuencia de vídeo en la consola, debe codificarse mediante H.264 en formato AvCC. Sino aparece la secuencia , verifique lo siguiente:

• Su Marcas de adaptación de NAL (p. 77) se establece en NAL_ADAPTATION_ANNEXB_NALS |NAL_ADAPTATION_ANNEXB_CPD_NALS si la secuencia original está en formato Anexo B. Este es elvalor predeterminado en el constructor StreamDefinition.

• Está facilitando los datos privados del códec correctamente. Para H.264, estos son el conjunto deparámetros de secuencia (SPS) y el conjunto de parámetros de imagen (PPS). Dependiendo del origende medios, estos datos se pueden recuperar del origen multimedia por separado o codificados en elfotograma.

Muchas secuencias elementales tienen el siguiente formato, donde 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)

Los CPD (datos privados de códec), que en el caso de H.264 se encuentran en la secuencia como SPSy PPS, se pueden adaptar al formato AvCC. A menos que la canalización multimedia proporcione losCPD por separado, la aplicación puede extraer los CPD del fotograma buscando el primer fotograma

135

Page 141: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Error: "Security token included in the requestis invalid" (El token de seguridad incluido en la

solicitud no es válido) durante el streaming de datosmediante la aplicación de demostración GStreamer

IDR (que debe contener el SPS/PPS), extraer las dos NALU [que serán Ab(Sps)Ab(Pps)] y configurarlaen los CPD en StreamDefinition.

Error: "Security token included in the request isinvalid" (El token de seguridad incluido en la solicitudno es válido) durante el streaming de datos mediantela aplicación de demostración GStreamerSi se produce este error, existe un problema con las credenciales. Compruebe lo siguiente:

• Si está utilizando credenciales temporales, debe especificar el token de sesión.• Compruebe que las credenciales temporales no hayan caducado.• Compruebe que tiene configurados los derechos adecuados.• En macOS, verifique que no tiene credenciales almacenadas en caché en Keychain.

Error: "Failed to submit frame to Kinesis Videoclient" (No se pudo enviar el fotograma al cliente deKinesis Video)Si se produce este error, las marcas temporales no están configuradas correctamente en la transmisión deorigen. Pruebe lo siguiente:

• Utilice la muestra de SDK más reciente, ya que es posible que incluya una actualización que solucione elproblema.

• Establezca la transmisión de alta calidad en una velocidad de bits superior, y corrija cualquier fluctuaciónen la transmisión de origen si la cámara lo admite.

La aplicación GStreamer se detiene con el mensaje"transmisión detenida, motivo no negociado" en OS XEl streaming puede detenerse en OS X con el siguiente mensaje:

Debugging information: gstbasesrc.c(2939): void gst_base_src_loop(GstPad *) (): /GstPipeline:test-pipeline/GstAutoVideoSrc:source/GstAVFVideoSrc:source-actual-src-avfvide:streaming stopped, reason not-negotiated (-4)

Una posible solución provisional consiste en eliminar los parámetros de velocidad de fotogramas de lallamada a gst_caps_new_simple en kinesis_video_gstreamer_sample_app.cpp:

GstCaps *h264_caps = gst_caps_new_simple("video/x-h264", "profile", G_TYPE_STRING, "baseline", "stream-format", G_TYPE_STRING, "avc", "alignment", G_TYPE_STRING, "au", "width", GST_TYPE_INT_RANGE, 320, 1920, "height", GST_TYPE_INT_RANGE, 240, 1080, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30, 1,

136

Page 142: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Error: "Failed to allocate heap" (No se puede asignarel montón) al crear el cliente de Kinesis Video en la

demostración de GStreamer en un dispositivo Raspberry Pi NULL);

Error: "Failed to allocate heap" (No se puede asignarel montón) al crear el cliente de Kinesis Video enla demostración de GStreamer en un dispositivoRaspberry PiLa aplicación de ejemplo de GStreamer intenta asignar 512 MB de RAM, que podrían noestar disponibles en el sistema. Puede reducir esta asignación si reduce el valor siguiente enKinesisVideoProducer.cpp:

device_info.storageInfo.storageSize = 512 * 1024 * 1024;

Error: "Instrucción ilegal" al ejecutar la demostraciónde GStreamer en un dispositivo Raspberry PiSi detecta el error siguiente al ejecutar la demostración de GStreamer, asegúrese de que ha compilado laaplicación para la versión correcta de su dispositivo. (Por ejemplo, asegúrese de que no está compilándolapara un dispositivo Raspberry Pi 3 y ejecutándola en un dispositivo Raspberry Pi 2).

INFO - Initializing curl.Illegal instruction

La cámara no se carga en un dispositivo Raspberry PiPara comprobar si se ha cargado la cámara, ejecute lo siguiente:

$ ls /dev/video*

Si no encuentra nada, ejecute lo siguiente:

$ vcgencmd get_camera

El resultado debería tener un aspecto similar al siguiente:

supported=1 detected=1

Si el controlador no detecta la cámara, haga lo siguiente:

1. Compruebe la configuración física de la cámara y verifique que está conectada correctamente.2. Ejecute lo siguiente para actualizar el firmware:

$ sudo rpi-update

3. Reinicie el dispositivo.4. Ejecute lo siguiente para cargar el controlador:

$ sudo modprobe bcm2835-v4l2

137

Page 143: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

No se puede encontrar la cámara en macOS High Sierra

5. Compruebe que la cámara se ha detectado:

$ ls /dev/video*

No se puede encontrar la cámara en macOS HighSierraEn macOS High Sierra, la aplicación de demostración no encuentra la cámara si hay más de una cámaradisponible.

No se ha encontrado el archivo jni.h al compilar enmacOS High SierraPara solucionar este error, actualice su instalación de Xcode a la versión más reciente.

Errores de cURL al ejecutar la aplicación dedemostración GStreamerPara solucionar los errores de cURL al ejecutar la aplicación de demostración GStreamer, copie estearchivo de certificado en /etc/ssl/cert.pem.

Aserción de rango/marca temporal en el tiempo deejecución en un dispositivo Raspberry PiSi se produce una aserción de rango o de marca temporal en el tiempo de ejecución, actualice el firmwarey reinicie el dispositivo:

$ sudo rpi-update $ sudo reboot

Aserción en gst_value_set_fraction_range_full en undispositivo Raspberry PiLa siguiente aserción aparece si se está ejecutando el servicio uv4l:

gst_util_fraction_compare (numerator_start, denominator_start, numerator_end, denominator_end) < 0' failed

Si ocurre esto, detenga el servicio uv4l y reinicie la aplicación.

Solución de problemas de Stream Parser LibraryEn esta sección se describen los problemas que podrían producirse cuando se utiliza Stream ParserLibrary (p. 97).

138

Page 144: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideNo se puede tener acceso a unsolo fotograma de la transmisión

Problemas• No se puede tener acceso a un solo fotograma de la transmisión (p. 139)• Error de descodificación de fragmentos (p. 139)

No se puede tener acceso a un solo fotograma de latransmisiónPara tener acceso a un solo fotograma de un origen de streaming en la aplicación consumidora, asegúresede que la transmisión contiene los datos privados del códec correctos. Para obtener información sobre elformato de los datos de una transmisión, consulte Modelo de datos (p. 17).

Para obtener información sobre cómo utilizar los datos privados del códec para teneracceso a un fotograma, consulte el siguiente archivo de prueba en el sitio web de GitHub:KinesisVideoRendererExampleTest.java

Error de descodificación de fragmentosSi los fragmentos no están correctamente codificados en un formato H.264 y en un nivel admitido por elnavegador, es posible que aparezca el siguiente error al reproducir la transmisión en la consola:

Fragment Decoding ErrorThere was an error decoding the video data. Verify that the stream contains valid H.264 content

Si esto ocurre, verifique lo siguiente:

• La resolución de los fotogramas coincide con la resolución especificada en los datos privados del códec.• El perfil H.264 y el nivel de los fotogramas codificados coincide con el perfil y el nivel especificados en

los datos privados del códec.• El navegador admite la combinación de perfil y nivel. La mayoría de los navegadores actuales admiten

todas las combinaciones de perfil y nivel.• Las marcas temporales son precisas y están en el orden correcto, y no se crean marcas temporales

duplicadas.• La aplicación está codificando los datos de fotogramas con el formato H.264.

139

Page 145: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Historial de documentos de AmazonKinesis Video Streams

En la siguiente tabla se describen los cambios importantes que se han realizado en la documentacióndesde la última versión de Amazon Transmisión de vídeo de Kinesis.

• Última versión de la API: 29-11-2017• Última actualización de la documentación 20 de junio de 2018

Cambio Descripción Fecha

Streaming desde una fuenteRTSP

Aplicación de ejemplo paraTransmisión de vídeo de Kinesisque se ejecuta en un contenedorde Docker y transmite vídeodesde una fuente RTSP. Paraobtener más información,consulte RTSP y Docker (p. 116).

20 de junio de 2018

Complemento GStreamer delSDK C++ Producer

Muestra cómo compilar el C++ Producer Library (p. 38)para utilizarlo como destinode GStreamer. Paraobtener más información,consulte Complemento deGStreamer (p. 104).

15 de junio de 2018

Documentación de referencia dedevolución de llamadas de SDKProducer

Documentación de referenciapara las devoluciones de llamadautilizadas por Transmisión devídeo de Kinesis ProducerLibraries (p. 28). Para obtenermás información, consulteDevoluciones de llamada de SDKProducer (p. 91).

12 de junio de 2018

Requisitos del sistema Documentación de requisitosde memoria y almacenamientopara dispositivos de productoresy SDK. Para obtener másinformación, consulte Requisitosdel sistema de Transmisión devídeo de Kinesis (p. 4).

30 de mayo de 2018

Compatibilidad con CloudTrail Documentación para utilizarCloudTrail para monitorear eluso de la API. Para obtener másinformación, consulte Registro dellamadas a la API de Transmisiónde vídeo de Kinesis con AWSCloudTrail (p. 125).

24 de mayo de 2018

140

Page 146: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Cambio Descripción Fecha

Documentación de referencia deestructuras de SDK Producer

Documentación de referenciapara las estructuras utilizadas porTransmisión de vídeo de KinesisProducer Libraries (p. 28).Para obtener más información,consulte Estructuras de ProducerSDK (p. 78) y Estructurasde secuencia de vídeo deKinesis (p. 79).

7 de mayo de 2018

Documentación de ejemplo deRenderer

Documentación para laaplicación de ejemplo Renderer,que muestra cómo descodificary mostrar fotogramas de unaTransmisión de vídeo de Kinesis.Para obtener más información,consulte Ejemplo: análisis yrepresentación de fragmentosde Transmisión de vídeo deKinesis (p. 118).

15 de marzo de 2018

Documentación de referencia delímites de SDK Producer

Información sobre límites paraoperaciones en la C++ ProducerLibrary (p. 38). Para obtener másinformación, consulte Límites deSDK Producer (p. 52).

13 de marzo de 2018

SDK C++ Producer paraRaspberry Pi

Procedimiento para configurary ejecutar la C++ ProducerLibrary (p. 38) en un dispositivoRaspberry Pi. Para obtener másinformación, consulte Uso delSDK C++ Producer en RaspberryPi (p. 47).

13 de marzo de 2018

Monitorización Información sobre lamonitorización de las métricasde Transmisión de vídeo deKinesis y llamadas al APIutilizando Amazon CloudWatchy AWS CloudTrail. Para obtenermás información, consulteMonitorización de Transmisión devídeo de Kinesis (p. 121).

5 de febrero de 2018

Referencia de marcas deadaptación de capa deabstracción de red (NAL)

Información sobre laconfiguración de las marcas deadaptación de NAL al consumirvídeo en streaming. Para obtenermás información, consulteMarcas de adaptación deNAL (p. 77).

15 de enero de 2018

141

Page 147: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Cambio Descripción Fecha

Compatibilidad de Android paravídeo en streaming

Transmisión de vídeo de Kinesisahora admite vídeo en streamingdesde dispositivos Android.Para obtener más información,consulte Android ProducerLibrary (p. 33).

12 de enero de 2018

Documentación de ejemplo deKinesis Video

Documentación para laaplicación de ejemplo de KinesisVideo, en la que se muestracómo usar Kinesis VideoStream Parser Library (p. 97)en una aplicación. Para obtenermás información, consulteKinesisVideoExample (p. 101).

9 de enero de 2018

Documentación de ejemplo deGStreamer

Documentación para laaplicación de ejemplo deGStreamer que se incluyeen el SDK de C++ Producer.Para obtener más información,consulte Ejemplo: uso deGStreamer con Transmisión devídeo de Kinesis (p. 117).

5 de enero de 2018

Se publicó la documentación deTransmisión de vídeo de Kinesis

Esta es la versión inicial de laGuía para desarrolladores deAmazon Kinesis Video Streams.

29 de noviembre de 2017

142

Page 148: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Actions

Referencia de la APIEsta sección contiene la documentación de referencia de la API.

ActionsThe following actions are supported by Amazon Kinesis Video Streams:

• CreateStream (p. 145)• DeleteStream (p. 149)• DescribeStream (p. 151)• GetDataEndpoint (p. 154)• ListStreams (p. 157)• ListTagsForStream (p. 160)• TagStream (p. 163)• UntagStream (p. 166)• UpdateDataRetention (p. 168)• UpdateStream (p. 171)

The following actions are supported by Amazon Kinesis Video Streams Media:

• GetMedia (p. 174)• PutMedia (p. 178)

The following actions are supported by Amazon Kinesis Video Streams Archived Media:

• GetHLSStreamingSessionURL (p. 184)• GetMediaForFragmentList (p. 191)• ListFragments (p. 194)

Amazon Kinesis Video StreamsThe following actions are supported by Amazon Kinesis Video Streams:

• CreateStream (p. 145)• DeleteStream (p. 149)• DescribeStream (p. 151)• GetDataEndpoint (p. 154)• ListStreams (p. 157)• ListTagsForStream (p. 160)• TagStream (p. 163)• UntagStream (p. 166)• UpdateDataRetention (p. 168)• UpdateStream (p. 171)

143

Page 149: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

144

Page 150: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

CreateStreamService: Amazon Kinesis Video Streams

Creates a new Kinesis video stream.

When you create a new stream, Kinesis Video Streams assigns it a version number. When you change thestream's metadata, Kinesis Video Streams updates the version.

CreateStream is an asynchronous operation.

For information about how the service works, see How it Works.

You must have permissions for the KinesisVideo:CreateStream action.

Request Syntax

POST /createStream HTTP/1.1Content-type: application/json

{ "DataRetentionInHours": number, "DeviceName": "string", "KmsKeyId": "string", "MediaType": "string", "StreamName": "string"}

URI Request ParametersThe request does not use any URI parameters.

Request BodyThe request accepts the following data in JSON format.

DataRetentionInHours (p. 145)

The number of hours that you want to retain the data in the stream. Kinesis Video Streams retains thedata in a data store that is associated with the stream.

The default value is 0, indicating that the stream does not persist data.

When the DataRetentionInHours value is 0, consumers can still consume the fragments thatremain in the service host buffer, which has a retention time limit of 5 minutes and a retention memorylimit of 200 MB. Fragments are removed from the buffer when either limit is reached.

Type: Integer

Valid Range: Minimum value of 0.

Required: NoDeviceName (p. 145)

The name of the device that is writing to the stream.

Note

In the current implementation, Kinesis Video Streams does not use this name.

Type: String

145

Page 151: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: [a-zA-Z0-9_.-]+

Required: NoKmsKeyId (p. 145)

The ID of the AWS Key Management Service (AWS KMS) key that you want Kinesis Video Streams touse to encrypt stream data.

If no key ID is specified, the default, Kinesis Video-managed key (aws/kinesisvideo) is used.

For more information, see DescribeKey.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 2048.

Required: NoMediaType (p. 145)

The media type of the stream. Consumers of the stream can use this information when processingthe stream. For more information about media types, see Media Types. If you choose to specify theMediaType, see Naming Requirements for guidelines.

To play video on the console, the media must be H.264 encoded, and you need to specify this videotype in this parameter as video/h264.

This parameter is optional; the default value is null (or empty in JSON).

Type: String

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: [\w\-\.\+]+/[\w\-\.\+]+

Required: NoStreamName (p. 145)

A name for the stream that you are creating.

The stream name is an identifier for the stream, and must be unique for each account and region.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: Yes

Response Syntax

HTTP/1.1 200Content-type: application/json

{ "StreamARN": "string"}

146

Page 152: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Response ElementsIf the action is successful, the service sends back an HTTP 200 response.

The following data is returned in JSON format by the service.

StreamARN (p. 146)

The Amazon Resource Name (ARN) of the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

ErrorsFor information about the errors that are common to all actions, see Common Errors (p. 207).

AccountStreamLimitExceededException

The number of streams created for the account is too high.

HTTP Status Code: 400ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400DeviceStreamLimitExceededException

Not implemented.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400InvalidDeviceException

Not implemented.

HTTP Status Code: 400ResourceInUseException

The stream is currently not available for this operation.

HTTP Status Code: 400

See AlsoFor more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET

147

Page 154: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

DeleteStreamService: Amazon Kinesis Video Streams

Deletes a Kinesis video stream and the data contained in the stream.

This method marks the stream for deletion, and makes the data in the stream inaccessible immediately.

To ensure that you have the latest version of the stream before deleting it, you can specify the streamversion. Kinesis Video Streams assigns a version to each stream. When you update a stream, KinesisVideo Streams assigns a new version number. To get the latest stream version, use the DescribeStreamAPI.

This operation requires permission for the KinesisVideo:DeleteStream action.

Request Syntax

POST /deleteStream HTTP/1.1Content-type: application/json

{ "CurrentVersion": "string", "StreamARN": "string"}

URI Request ParametersThe request does not use any URI parameters.

Request BodyThe request accepts the following data in JSON format.

CurrentVersion (p. 149)

Optional: The version of the stream that you want to delete.

Specify the version as a safeguard to ensure that your are deleting the correct stream. To get thestream version, use the DescribeStream API.

If not specified, only the CreationTime is checked before deleting the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 64.

Pattern: [a-zA-Z0-9]+

Required: NoStreamARN (p. 149)

The Amazon Resource Name (ARN) of the stream that you want to delete.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: Yes

149

Page 155: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Response Syntax

HTTP/1.1 200

Response Elements

If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400NotAuthorizedException

The caller is not authorized to perform this operation.

HTTP Status Code: 401ResourceNotFoundException

Amazon Kinesis Video Streams can't find the stream that you specified.

HTTP Status Code: 404

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

150

Page 156: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

DescribeStreamService: Amazon Kinesis Video Streams

Returns the most current information about the specified stream. You must specify either the StreamNameor the StreamARN.

Request Syntax

POST /describeStream HTTP/1.1Content-type: application/json

{ "StreamARN": "string", "StreamName": "string"}

URI Request Parameters

The request does not use any URI parameters.

Request Body

The request accepts the following data in JSON format.

StreamARN (p. 151)

The Amazon Resource Name (ARN) of the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName (p. 151)

The name of the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: No

Response Syntax

HTTP/1.1 200Content-type: application/json

{ "StreamInfo": { "CreationTime": number, "DataRetentionInHours": number, "DeviceName": "string", "KmsKeyId": "string",

151

Page 157: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

"MediaType": "string", "Status": "string", "StreamARN": "string", "StreamName": "string", "Version": "string" }}

Response Elements

If the action is successful, the service sends back an HTTP 200 response.

The following data is returned in JSON format by the service.

StreamInfo (p. 151)

An object that describes the stream.

Type: StreamInfo (p. 198) object

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400NotAuthorizedException

The caller is not authorized to perform this operation.

HTTP Status Code: 401ResourceNotFoundException

Amazon Kinesis Video Streams can't find the stream that you specified.

HTTP Status Code: 404

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript

152

Page 158: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

153

Page 159: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

GetDataEndpointService: Amazon Kinesis Video Streams

Gets an endpoint for a specified stream for either reading or writing. Use this endpoint in your application toread from the specified stream (using the GetMedia or GetMediaForFragmentList operations) or writeto it (using the PutMedia operation).

Note

The returned endpoint does not have the API name appended. The client needs to add the APIname to the returned endpoint.

In the request, specify the stream either by StreamName or StreamARN.

Request Syntax

POST /getDataEndpoint HTTP/1.1Content-type: application/json

{ "APIName": "string", "StreamARN": "string", "StreamName": "string"}

URI Request ParametersThe request does not use any URI parameters.

Request BodyThe request accepts the following data in JSON format.

APIName (p. 154)

The name of the API action for which to get an endpoint.

Type: String

Valid Values: PUT_MEDIA | GET_MEDIA | LIST_FRAGMENTS |GET_MEDIA_FOR_FRAGMENT_LIST

Required: YesStreamARN (p. 154)

The Amazon Resource Name (ARN) of the stream that you want to get the endpoint for. You mustspecify either this parameter or a StreamName in the request.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName (p. 154)

The name of the stream that you want to get the endpoint for. You must specify either this parameter ora StreamARN in the request.

Type: String

154

Page 160: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: No

Response Syntax

HTTP/1.1 200Content-type: application/json

{ "DataEndpoint": "string"}

Response ElementsIf the action is successful, the service sends back an HTTP 200 response.

The following data is returned in JSON format by the service.

DataEndpoint (p. 155)

The endpoint value. To read data from the stream or to write data to it, specify this endpoint in yourapplication.

Type: String

ErrorsFor information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400NotAuthorizedException

The caller is not authorized to perform this operation.

HTTP Status Code: 401ResourceNotFoundException

Amazon Kinesis Video Streams can't find the stream that you specified.

HTTP Status Code: 404

See AlsoFor more information about using this API in one of the language-specific AWS SDKs, see the following:

155

Page 162: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

ListStreamsService: Amazon Kinesis Video Streams

Returns an array of StreamInfo objects. Each object describes a stream. To retrieve only streams thatsatisfy a specific condition, you can specify a StreamNameCondition.

Request Syntax

POST /listStreams HTTP/1.1Content-type: application/json

{ "MaxResults": number, "NextToken": "string", "StreamNameCondition": { "ComparisonOperator": "string", "ComparisonValue": "string" }}

URI Request ParametersThe request does not use any URI parameters.

Request BodyThe request accepts the following data in JSON format.

MaxResults (p. 157)

The maximum number of streams to return in the response. The default is 10,000.

Type: Integer

Valid Range: Minimum value of 1. Maximum value of 10000.

Required: NoNextToken (p. 157)

If you specify this parameter, when the result of a ListStreams operation is truncated, the call returnsthe NextToken in the response. To get another batch of streams, provide this token in your nextrequest.

Type: String

Length Constraints: Minimum length of 0. Maximum length of 512.

Required: NoStreamNameCondition (p. 157)

Optional: Returns only streams that satisfy a specific condition. Currently, you can specify only theprefix of a stream name as a condition.

Type: StreamNameCondition (p. 200) object

Required: No

Response Syntax

HTTP/1.1 200

157

Page 163: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Content-type: application/json

{ "NextToken": "string", "StreamInfoList": [ { "CreationTime": number, "DataRetentionInHours": number, "DeviceName": "string", "KmsKeyId": "string", "MediaType": "string", "Status": "string", "StreamARN": "string", "StreamName": "string", "Version": "string" } ]}

Response ElementsIf the action is successful, the service sends back an HTTP 200 response.

The following data is returned in JSON format by the service.

NextToken (p. 157)

If the response is truncated, the call returns this element with a token. To get the next batch of streams,use this token in your next request.

Type: String

Length Constraints: Minimum length of 0. Maximum length of 512.StreamInfoList (p. 157)

An array of StreamInfo objects.

Type: Array of StreamInfo (p. 198) objects

ErrorsFor information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400

See AlsoFor more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface

158

Page 165: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

ListTagsForStreamService: Amazon Kinesis Video Streams

Returns a list of tags associated with the specified stream.

In the request, you must specify either the StreamName or the StreamARN.

Request Syntax

POST /listTagsForStream HTTP/1.1Content-type: application/json

{ "NextToken": "string", "StreamARN": "string", "StreamName": "string"}

URI Request Parameters

The request does not use any URI parameters.

Request Body

The request accepts the following data in JSON format.

NextToken (p. 160)

If you specify this parameter and the result of a ListTagsForStream call is truncated, the responseincludes a token that you can use in the next request to fetch the next batch of tags.

Type: String

Length Constraints: Minimum length of 0. Maximum length of 512.

Required: NoStreamARN (p. 160)

The Amazon Resource Name (ARN) of the stream that you want to list tags for.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName (p. 160)

The name of the stream that you want to list tags for.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: No

160

Page 166: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Response Syntax

HTTP/1.1 200Content-type: application/json

{ "NextToken": "string", "Tags": { "string" : "string" }}

Response ElementsIf the action is successful, the service sends back an HTTP 200 response.

The following data is returned in JSON format by the service.

NextToken (p. 161)

If you specify this parameter and the result of a ListTags call is truncated, the response includes atoken that you can use in the next request to fetch the next set of tags.

Type: String

Length Constraints: Minimum length of 0. Maximum length of 512.Tags (p. 161)

A map of tag keys and values associated with the specified stream.

Type: String to string map

Key Length Constraints: Minimum length of 1. Maximum length of 128.

Value Length Constraints: Minimum length of 0. Maximum length of 256.

ErrorsFor information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400InvalidResourceFormatException

The format of the StreamARN is invalid.

HTTP Status Code: 400NotAuthorizedException

The caller is not authorized to perform this operation.

161

Page 167: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

HTTP Status Code: 401ResourceNotFoundException

Amazon Kinesis Video Streams can't find the stream that you specified.

HTTP Status Code: 404

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

162

Page 168: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

TagStreamService: Amazon Kinesis Video Streams

Adds one or more tags to a stream. A tag is a key-value pair (the value is optional) that you can define andassign to AWS resources. If you specify a tag that already exists, the tag value is replaced with the valuethat you specify in the request. For more information, see Using Cost Allocation Tags in the AWS Billingand Cost Management User Guide.

You must provide either the StreamName or the StreamARN.

This operation requires permission for the KinesisVideo:TagStream action.

Kinesis video streams support up to 50 tags.

Request Syntax

POST /tagStream HTTP/1.1Content-type: application/json

{ "StreamARN": "string", "StreamName": "string", "Tags": { "string" : "string" }}

URI Request ParametersThe request does not use any URI parameters.

Request BodyThe request accepts the following data in JSON format.

StreamARN (p. 163)

The Amazon Resource Name (ARN) of the resource that you want to add the tag or tags to.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName (p. 163)

The name of the stream that you want to add the tag or tags to.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: NoTags (p. 163)

A list of tags to associate with the specified stream. Each tag is a key-value pair (the value is optional).

163

Page 169: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Type: String to string map

Key Length Constraints: Minimum length of 1. Maximum length of 128.

Value Length Constraints: Minimum length of 0. Maximum length of 256.

Required: Yes

Response Syntax

HTTP/1.1 200

Response Elements

If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400InvalidResourceFormatException

The format of the StreamARN is invalid.

HTTP Status Code: 400NotAuthorizedException

The caller is not authorized to perform this operation.

HTTP Status Code: 401ResourceNotFoundException

Amazon Kinesis Video Streams can't find the stream that you specified.

HTTP Status Code: 404TagsPerResourceExceededLimitException

You have exceeded the limit of tags that you can associate with the resource. Kinesis video streamssupport up to 50 tags.

HTTP Status Code: 400

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

164

Page 171: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

UntagStreamService: Amazon Kinesis Video Streams

Removes one or more tags from a stream. In the request, specify only a tag key or keys; don't specify thevalue. If you specify a tag key that does not exist, it's ignored.

In the request, you must provide the StreamName or StreamARN.

Request Syntax

POST /untagStream HTTP/1.1Content-type: application/json

{ "StreamARN": "string", "StreamName": "string", "TagKeyList": [ "string" ]}

URI Request ParametersThe request does not use any URI parameters.

Request BodyThe request accepts the following data in JSON format.

StreamARN (p. 166)

The Amazon Resource Name (ARN) of the stream that you want to remove tags from.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName (p. 166)

The name of the stream that you want to remove tags from.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: NoTagKeyList (p. 166)

A list of the keys of the tags that you want to remove.

Type: Array of strings

Array Members: Minimum number of 1 item. Maximum number of 50 items.

Length Constraints: Minimum length of 1. Maximum length of 128.

Required: Yes

166

Page 172: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Response Syntax

HTTP/1.1 200

Response Elements

If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400InvalidResourceFormatException

The format of the StreamARN is invalid.

HTTP Status Code: 400NotAuthorizedException

The caller is not authorized to perform this operation.

HTTP Status Code: 401ResourceNotFoundException

Amazon Kinesis Video Streams can't find the stream that you specified.

HTTP Status Code: 404

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

167

Page 173: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

UpdateDataRetentionService: Amazon Kinesis Video Streams

Increases or decreases the stream's data retention period by the value that you specify. To indicatewhether you want to increase or decrease the data retention period, specify the Operation parameter inthe request body. In the request, you must specify either the StreamName or the StreamARN.

Note

The retention period that you specify replaces the current value.

This operation requires permission for the KinesisVideo:UpdateDataRetention action.

Changing the data retention period affects the data in the stream as follows:

• If the data retention period is increased, existing data is retained for the new retention period. Forexample, if the data retention period is increased from one hour to seven hours, all existing data isretained for seven hours.

• If the data retention period is decreased, existing data is retained for the new retention period. Forexample, if the data retention period is decreased from seven hours to one hour, all existing data isretained for one hour, and any data older than one hour is deleted immediately.

Request Syntax

POST /updateDataRetention HTTP/1.1Content-type: application/json

{ "CurrentVersion": "string", "DataRetentionChangeInHours": number, "Operation": "string", "StreamARN": "string", "StreamName": "string"}

URI Request Parameters

The request does not use any URI parameters.

Request Body

The request accepts the following data in JSON format.

CurrentVersion (p. 168)

The version of the stream whose retention period you want to change. To get the version, call eitherthe DescribeStream or the ListStreams API.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 64.

Pattern: [a-zA-Z0-9]+

Required: YesDataRetentionChangeInHours (p. 168)

The retention period, in hours. The value you specify replaces the current value.

168

Page 174: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Type: Integer

Valid Range: Minimum value of 1.

Required: YesOperation (p. 168)

Indicates whether you want to increase or decrease the retention period.

Type: String

Valid Values: INCREASE_DATA_RETENTION | DECREASE_DATA_RETENTION

Required: YesStreamARN (p. 168)

The Amazon Resource Name (ARN) of the stream whose retention period you want to change.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName (p. 168)

The name of the stream whose retention period you want to change.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: No

Response Syntax

HTTP/1.1 200

Response Elements

If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

169

Page 175: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

HTTP Status Code: 400NotAuthorizedException

The caller is not authorized to perform this operation.

HTTP Status Code: 401ResourceInUseException

The stream is currently not available for this operation.

HTTP Status Code: 400ResourceNotFoundException

Amazon Kinesis Video Streams can't find the stream that you specified.

HTTP Status Code: 404VersionMismatchException

The stream version that you specified is not the latest version. To get the latest version, use theDescribeStream API.

HTTP Status Code: 400

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

170

Page 176: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

UpdateStreamService: Amazon Kinesis Video Streams

Updates stream metadata, such as the device name and media type.

You must provide the stream name or the Amazon Resource Name (ARN) of the stream.

To make sure that you have the latest version of the stream before updating it, you can specify the streamversion. Kinesis Video Streams assigns a version to each stream. When you update a stream, KinesisVideo Streams assigns a new version number. To get the latest stream version, use the DescribeStreamAPI.

UpdateStream is an asynchronous operation, and takes time to complete.

Request Syntax

POST /updateStream HTTP/1.1Content-type: application/json

{ "CurrentVersion": "string", "DeviceName": "string", "MediaType": "string", "StreamARN": "string", "StreamName": "string"}

URI Request Parameters

The request does not use any URI parameters.

Request Body

The request accepts the following data in JSON format.

CurrentVersion (p. 171)

The version of the stream whose metadata you want to update.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 64.

Pattern: [a-zA-Z0-9]+

Required: YesDeviceName (p. 171)

The name of the device that is writing to the stream.

Note

In the current implementation, Kinesis Video Streams does not use this name.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: [a-zA-Z0-9_.-]+

171

Page 177: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Required: NoMediaType (p. 171)

The stream's media type. Use MediaType to specify the type of content that the stream contains to theconsumers of the stream. For more information about media types, see Media Types. If you choose tospecify the MediaType, see Naming Requirements.

To play video on the console, you must specify the correct video type. For example, if the video in thestream is H.264, specify video/h264 as the MediaType.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: [\w\-\.\+]+/[\w\-\.\+]+

Required: NoStreamARN (p. 171)

The ARN of the stream whose metadata you want to update.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName (p. 171)

The name of the stream whose metadata you want to update.

The stream name is an identifier for the stream, and must be unique for each account and region.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: No

Response Syntax

HTTP/1.1 200

Response Elements

If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

172

Page 178: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400NotAuthorizedException

The caller is not authorized to perform this operation.

HTTP Status Code: 401ResourceInUseException

The stream is currently not available for this operation.

HTTP Status Code: 400ResourceNotFoundException

Amazon Kinesis Video Streams can't find the stream that you specified.

HTTP Status Code: 404VersionMismatchException

The stream version that you specified is not the latest version. To get the latest version, use theDescribeStream API.

HTTP Status Code: 400

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

Amazon Kinesis Video Streams MediaThe following actions are supported by Amazon Kinesis Video Streams Media:

• GetMedia (p. 174)• PutMedia (p. 178)

173

Page 179: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

GetMediaService: Amazon Kinesis Video Streams Media

Use this API to retrieve media content from a Kinesis video stream. In the request, you identify the streamname or stream Amazon Resource Name (ARN), and the starting chunk. Kinesis Video Streams thenreturns a stream of chunks in order by fragment number.

Note

You must first call the GetDataEndpoint API to get an endpoint. Then send the GetMediarequests to this endpoint using the --endpoint-url parameter.

When you put media data (fragments) on a stream, Kinesis Video Streams stores each incoming fragmentand related metadata in what is called a "chunk." For more information, see PutMedia (p. 178). TheGetMedia API returns a stream of these chunks starting from the chunk that you specify in the request.

The following limits apply when using the GetMedia API:

• A client can call GetMedia up to five times per second per stream.• Kinesis Video Streams sends media data at a rate of up to 25 megabytes per second (or 200 megabits

per second) during a GetMedia session.

Request Syntax

POST /getMedia HTTP/1.1Content-type: application/json

{ "StartSelector": { "AfterFragmentNumber": "string", "ContinuationToken": "string", "StartSelectorType": "string", "StartTimestamp": number }, "StreamARN": "string", "StreamName": "string"}

URI Request ParametersThe request does not use any URI parameters.

Request BodyThe request accepts the following data in JSON format.

StartSelector (p. 174)

Identifies the starting chunk to get from the specified stream.

Type: StartSelector (p. 201) object

Required: YesStreamARN (p. 174)

The ARN of the stream from where you want to get the media content. If you don't specify thestreamARN, you must specify the streamName.

Type: String

174

Page 180: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName (p. 174)

The Kinesis video stream name from where you want to get the media content. If you don't specify thestreamName, you must specify the streamARN.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: No

Response Syntax

HTTP/1.1 200Content-Type: ContentType

Payload

Response ElementsIf the action is successful, the service sends back an HTTP 200 response.

The response returns the following HTTP headers.

ContentType (p. 175)

The content type of the requested media.

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: ^[a-zA-Z0-9_\.\-]+$

The response returns the following as the HTTP body.

Payload (p. 175)

The payload Kinesis Video Streams returns is a sequence of chunks from the specified stream. Forinformation about the chunks, see PutMedia (p. 178). The chunks that Kinesis Video Streams returnsin the GetMedia call also include the following additional Matroska (MKV) tags:• AWS_KINESISVIDEO_CONTINUATION_TOKEN (UTF-8 string) - In the event your GetMedia call

terminates, you can use this continuation token in your next request to get the next chunk where thelast request terminated.

• AWS_KINESISVIDEO_MILLIS_BEHIND_NOW (UTF-8 string) - Client applications can use this tagvalue to determine how far behind the chunk returned in the response is from the latest chunk on thestream.

• AWS_KINESISVIDEO_FRAGMENT_NUMBER - Fragment number returned in the chunk.• AWS_KINESISVIDEO_SERVER_TIMESTAMP - Server time stamp of the fragment.• AWS_KINESISVIDEO_PRODUCER_TIMESTAMP - Producer time stamp of the fragment.

The following tags will be present if an error occurs:

175

Page 181: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

• AWS_KINESISVIDEO_ERROR_CODE - String description of an error that caused GetMedia to stop.• AWS_KINESISVIDEO_ERROR_ID: Integer code of the error.

The error codes are as follows:• 3002 - Error writing to the stream• 4000 - Requested fragment is not found• 4500 - Access denied for the stream's KMS key• 4501 - Stream's KMS key is disabled• 4502 - Validation error on the Stream's KMS key• 4503 - KMS key specified in the stream is unavailable• 4504 - Invalid usage of the KMS key specified in the stream• 4505 - Invalid state of the KMS key specified in the stream• 4506 - Unable to find the KMS key specified in the stream• 5000 - Internal error

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400ConnectionLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientconnections.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400InvalidEndpointException

Status Code: 400, Caller used wrong endpoint to write data to a stream. On receiving such anexception, the user must call GetDataEndpoint with AccessMode set to "READ" and use theendpoint Kinesis Video returns in the next GetMedia call.

HTTP Status Code: 400NotAuthorizedException

Status Code: 403, The caller is not authorized to perform an operation on the given stream, or thetoken has expired.

HTTP Status Code: 401ResourceNotFoundException

Status Code: 404, The stream with the given name does not exist.

HTTP Status Code: 404

176

Page 183: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

PutMediaService: Amazon Kinesis Video Streams Media

Use this API to send media data to a Kinesis video stream.

Note

Before using this API, you must call the GetDataEndpoint API to get an endpoint. You thenspecify the endpoint in your PutMedia request.

In the request, you use the HTTP headers to provide parameter information, for example, stream name,time stamp, and whether the time stamp value is absolute or relative to when the producer startedrecording. You use the request body to send the media data. Kinesis Video Streams supports only theMatroska (MKV) container format for sending media data using this API.

You have the following options for sending data using this API:

• Send media data in real time: For example, a security camera can send frames in real time as itgenerates them. This approach minimizes the latency between the video recording and data sent onthe wire. This is referred to as a continuous producer. In this case, a consumer application can read thestream in real time or when needed.

• Send media data offline (in batches): For example, a body camera might record video for hours andstore it on the device. Later, when you connect the camera to the docking port, the camera can start aPutMedia session to send data to a Kinesis video stream. In this scenario, latency is not an issue.

When using this API, note the following considerations:

• You must specify either streamName or streamARN, but not both.• You might find it easier to use a single long-running PutMedia session and send a large number of

media data fragments in the payload. Note that for each fragment received, Kinesis Video Streams sendsone or more acknowledgements. Potential network considerations might cause you to not get all theseacknowledgements as they are generated.

• You might choose multiple consecutive PutMedia sessions, each with fewer fragments to ensure thatyou get all acknowledgements from the service in real time.

Note

If you send data to the same stream on multiple simultaneous PutMedia sessions, the mediafragments get interleaved on the stream. You should make sure that this is OK in your applicationscenario.

The following limits apply when using the PutMedia API:

• A client can call PutMedia up to five times per second per stream.• A client can send up to five fragments per second per stream.• Kinesis Video Streams reads media data at a rate of up to 12.5 MB/second, or 100 Mbps during aPutMedia session.

Note the following constraints. In these cases, Kinesis Video Streams sends the Error acknowledgement inthe response.

• Fragments that have time codes spanning longer than 10 seconds and that contain more than 50megabytes of data are not allowed.

178

Page 184: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

• An MKV stream containing more than one MKV segment or containing disallowed MKV elements (liketrack*) also results in the Error acknowledgement.

Kinesis Video Streams stores each incoming fragment and related metadata in what is called a "chunk."The fragment metadata includes the following:

• The MKV headers provided at the start of the PutMedia request• The following Kinesis Video Streams-specific metadata for the fragment:

• server_timestamp - Time stamp when Kinesis Video Streams started receiving the fragment.• producer_timestamp - Time stamp, when the producer started recording the fragment. Kinesis

Video Streams uses three pieces of information received in the request to calculate this value.• The fragment timecode value received in the request body along with the fragment.• Two request headers: producerStartTimestamp (when the producer started recording) andfragmentTimeCodeType (whether the fragment timecode in the payload is absolute or relative).

Kinesis Video Streams then computes the producer_timestamp for the fragment as follows:

If fragmentTimeCodeType is relative, then

producer_timestamp = producerStartTimeStamp + fragment timecode

If fragmentTimeCodeType is absolute, then

producer_timestamp = fragment timecode (converted to milliseconds)• Unique fragment number assigned by Kinesis Video Streams.

Note

When you make the GetMedia request, Kinesis Video Streams returns a stream of these chunks.The client can process the metadata as needed.Note

This operation is only available for the AWS SDK for Java. It is not supported in AWS SDKs forother languages.

Request Syntax

POST /putMedia HTTP/1.1x-amzn-stream-name: StreamNamex-amzn-stream-arn: StreamARNx-amzn-fragment-timecode-type: FragmentTimecodeTypex-amzn-producer-start-timestamp: ProducerStartTimestamp

Payload

URI Request ParametersThe request requires the following URI parameters.

FragmentTimecodeType (p. 179)

You pass this value as the x-amzn-fragment-timecode-type HTTP header.

Indicates whether timecodes in the fragments (payload, HTTP request body) are absolute or relativeto producerStartTimestamp. Kinesis Video Streams uses this information to compute theproducer_timestamp for the fragment received in the request, as described in the API overview.

179

Page 185: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

Valid Values: ABSOLUTE | RELATIVEProducerStartTimestamp (p. 179)

You pass this value as the x-amzn-producer-start-timestamp HTTP header.

This is the producer time stamp at which the producer started recording the media (not the time stampof the specific fragments in the request).

StreamARN (p. 179)

You pass this value as the x-amzn-stream-arn HTTP header.

Amazon Resource Name (ARN) of the Kinesis video stream where you want to write the mediacontent. If you don't specify the streamARN, you must specify the streamName.

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+StreamName (p. 179)

You pass this value as the x-amzn-stream-name HTTP header.

Name of the Kinesis video stream where you want to write the media content. If you don't specify thestreamName, you must specify the streamARN.

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Request Body

The request accepts the following binary data.

Payload (p. 179)

The media content to write to the Kinesis video stream. In the current implementation, Kinesis VideoStreams supports only the Matroska (MKV) container format with a single MKV segment. A segmentcan contain one or more clusters.

Note

Each MKV cluster maps to a Kinesis video stream fragment. Whatever cluster duration youchoose becomes the fragment duration.

Response Syntax

HTTP/1.1 200

Payload

Response Elements

If the action is successful, the service sends back an HTTP 200 response.

The response returns the following as the HTTP body.

180

Page 186: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

Payload (p. 180)

After Kinesis Video Streams successfully receives a PutMedia request, the service validates therequest headers. The service then starts reading the payload and first sends an HTTP 200 response.

The service then returns a stream containing a series of JSON objects (Acknowledgement objects)separated by newlines. The acknowledgements are received on the same connection on whichthe media data is sent. There can be many acknowledgements for a PutMedia request. EachAcknowledgement consists of the following key-value pairs:• AckEventType - Event type the acknowledgement represents.

• Buffering: Kinesis Video Streams has started receiving the fragment. Kinesis Video Streams sendsthe first Buffering acknowledgement when the first byte of fragment data is received.

• Received: Kinesis Video Streams received the entire fragment. If you did not configure thestream to persist the data, the producer can stop buffering the fragment upon receiving thisacknowledgement.

• Persisted: Kinesis Video Streams has persisted the fragment (for example, to Amazon S3). Youget this acknowledgement if you configured the stream to persist the data. After you receive thisacknowledgement, the producer can stop buffering the fragment.

• Error: Kinesis Video Streams ran into an error while processing the fragment. You can review theerror code and determine the next course of action.

• Idle: The PutMedia session is in-progress. However, Kinesis Video Streams is currently notreceiving data. Kinesis Video Streams sends this acknowledgement periodically for up to 30seconds after the last received data. If no data is received within the 30 seconds, Kinesis VideoStreams closes the request.

Note

This acknowledgement can help a producer determine if the PutMedia connection isalive, even if it is not sending any data.

• FragmentTimeCode - Fragment timecode for which acknowledgement is sent.

The element can be missing if the AckEventType is Idle.• FragmentNumber - Kinesis Video Streams-generated fragment number for which the

acknowledgement is sent.• ErrorId and ErrorCode - If the AckEventType is ErrorId, this field provides corresponding error

code. The following is the list of error codes:• 4000 - Error reading the data stream.• 4001 - Fragment size is greater than maximum limit, 50 MB, allowed.• 4002 - Fragment duration is greater than maximum limit, 10 seconds, allowed.• 4003 - Connection duration is greater than maximum allowed threshold.• 4004 - Fragment timecode is less than the timecode previous time code (within a PutMedia call,

you cannot send fragments out of order).• 4005 - More than one track is found in MKV.• 4006 - Failed to parse the input stream as valid MKV format.• 4007 - Invalid producer timestamp.• 4008 - Stream no longer exists (deleted).• 4500 - Access to the stream's specified KMS key is denied.• 4501 - The stream's specified KMS key is disabled.• 4502 - The stream's specified KMS key failed validation.• 4503 - The stream's specified KMS key is unavailable.• 4504 - Invalid usage of the stream's specified KMS key.• 4505 - The stream's specified KMS key is in an invalid state.

181

Page 187: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

• 4506 - The stream's specified KMS key is not found.• 5000 - Internal service error• 5001 - Kinesis Video Streams failed to persist fragments to the data store.

Note

The producer, while sending the payload for a long running PutMedia request, should readthe response for acknowledgements. A producer might receive chunks of acknowledgementsat the same time, due to buffering on an intermediate proxy server. A producer that wants toreceive timely acknowledgements can send fewer fragments in each PutMedia request.

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400ConnectionLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientconnections.

HTTP Status Code: 400InvalidArgumentException

The value for this input parameter is invalid.

HTTP Status Code: 400InvalidEndpointException

Status Code: 400, Caller used wrong endpoint to write data to a stream. On receiving such anexception, the user must call GetDataEndpoint with AccessMode set to "READ" and use theendpoint Kinesis Video returns in the next GetMedia call.

HTTP Status Code: 400NotAuthorizedException

Status Code: 403, The caller is not authorized to perform an operation on the given stream, or thetoken has expired.

HTTP Status Code: 401ResourceNotFoundException

Status Code: 404, The stream with the given name does not exist.

HTTP Status Code: 404

Example

Acknowledgement Format

The format of the acknowledgement is as follows:

182

Page 188: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

{ Acknowledgement : { “EventType”: enum "FragmentTimecode": Long, “FragmentNumber”: Long, “ErrorId” : String }}

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

Amazon Kinesis Video Streams Archived MediaThe following actions are supported by Amazon Kinesis Video Streams Archived Media:

• GetHLSStreamingSessionURL (p. 184)• GetMediaForFragmentList (p. 191)• ListFragments (p. 194)

183

Page 189: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

GetHLSStreamingSessionURLService: Amazon Kinesis Video Streams Archived Media

Retrieves an HTTP Live Streaming (HLS) URL for the stream. You can then open the URL in a browser ormedia player to view the stream contents.

You must specify either the StreamName or the StreamARN.

An Amazon Kinesis video stream has the following requirements for providing data through HLS:

• The media type must be video/h264.• Data retention must be greater than 0.• The fragments must contain codec private data in the AVC (Advanced Video Coding) for H.264 format

(MPEG-4 specification ISO/IEC 14496-15). For information about adapting stream data to a given format,see NAL Adaptation Flags.

Kinesis Video Streams HLS sessions contain fragments in the fragmented MPEG-4 form (also calledfMP4 or CMAF), rather than the MPEG-2 form (also called TS chunks, which the HLS specification alsosupports). For more information about HLS fragment types, see the HLS specification.

The following procedure shows how to use HLS with Kinesis Video Streams:

1. Get an endpoint using GetDataEndpoint, specifying GET_HLS_STREAMING_SESSION_URL for theAPIName parameter.

2. Retrieve the HLS URL using GetHLSStreamingSessionURL. Kinesis Video Streams createsan HLS streaming session to be used for accessing content in a stream using the HLS protocol.GetHLSStreamingSessionURL returns an authenticated URL (that includes an encrypted sessiontoken) for the session's HLS master playlist (the root resource needed for streaming with HLS).

Note

Don't share or store this token where an unauthorized entity could access it. The token providesaccess to the content of the stream. Safeguard the token with the same measures that youwould use with your AWS credentials.

The media that is made available through the playlist consists only of the requested stream, time range,and format. No other media data (such as frames outside the requested window or alternate bit rates) ismade available.

3. Provide the URL (containing the encrypted session token) for the HLS master playlist to a media playerthat supports the HLS protocol. Kinesis Video Streams makes the HLS media playlist, initializationfragment, and media fragments available through the master playlist URL. The initialization fragmentcontains the codec private data for the stream, and other data needed to set up the video decoder andrenderer. The media fragments contain H.264-encoded video frames and time stamps.

4. The media player receives the authenticated URL and requests stream metadata and media datanormally. When the media player requests data, it calls the following actions:• GetHLSMasterPlaylist: Retrieves an HLS master playlist, which contains a URL for theGetHLSMediaPlaylist action, and additional metadata for the media player, including estimated bitrate and resolution.

• GetHLSMediaPlaylist: Retrieves an HLS media playlist, which contains a URL to access the MP4initialization fragment with the GetMP4InitFragment action, and URLs to access the MP4 mediafragments with the GetMP4MediaFragment actions. The HLS media playlist also contains metadataabout the stream that the player needs to play it, such as whether the PlaybackMode is LIVEor ON_DEMAND. The HLS media playlist is typically static for sessions with a PlaybackType ofON_DEMAND. The HLS media playlist is continually updated with new fragments for sessions with aPlaybackType of LIVE.

184

Page 190: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

• GetMP4InitFragment: Retrieves the MP4 initialization fragment. The media player typically loads theinitialization fragment before loading any media fragments. This fragment contains the "fytp" and"moov" MP4 atoms, and the child atoms that are needed to initialize the media player decoder.

The initialization fragment does not correspond to a fragment in a Kinesis video stream. It containsonly the codec private data for the stream, which the media player needs to decode video frames.

• GetMP4MediaFragment: Retrieves MP4 media fragments. These fragments contain the "moof" and"mdat" MP4 atoms and their child atoms, containing the encoded fragment's video frames and theirtime stamps.

Note

After the first media fragment is made available in a streaming session, any fragments thatdon't contain the same codec private data are excluded in the HLS media playlist. Therefore,the codec private data does not change between fragments in a session.

Data retrieved with this action is billable. See Pricing for details.

Note

The following restrictions apply to HLS sessions:

• A streaming session URL should not be shared between players. The service might throttle asession if multiple media players are sharing it. For connection limits, see Kinesis Video StreamsLimits.

• A Kinesis video stream can have a maximum of five active HLS streaming sessions. If a newsession is created when the maximum number of sessions is already active, the oldest (earliestcreated) session is closed. The number of active GetMedia connections on a Kinesis videostream does not count against this limit, and the number of active HLS sessions does not countagainst the active GetMedia connection limit.

You can monitor the amount of data that the media player consumes by monitoring theGetMP4MediaFragment.OutgoingBytes Amazon CloudWatch metric. For information about usingCloudWatch to monitor Kinesis Video Streams, see Monitoring Kinesis Video Streams. For pricinginformation, see Amazon Kinesis Video Streams Pricing and AWS Pricing. Charges for both HLS sessionsand outgoing AWS data apply.

For more information about HLS, see HTTP Live Streaming on the Apple Developer site.

Request Syntax

POST /getHLSStreamingSessionURL HTTP/1.1Content-type: application/json

{ "DiscontinuityMode": "string", "Expires": number, "HLSFragmentSelector": { "FragmentSelectorType": "string", "TimestampRange": { "EndTimestamp": number, "StartTimestamp": number } }, "MaxMediaPlaylistFragmentResults": number, "PlaybackMode": "string", "StreamARN": "string", "StreamName": "string"

185

Page 191: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

}

URI Request Parameters

The request does not use any URI parameters.

Request Body

The request accepts the following data in JSON format.

DiscontinuityMode (p. 185)

Specifies when flags marking discontinuities between fragments will be added to the media playlists.The default is ALWAYS when HLSFragmentSelector (p. 205) is SERVER_TIMESTAMP, and NEVERwhen it is PRODUCER_TIMESTAMP.

Media players typically build a timeline of media content to play, based on the time stampsof each fragment. This means that if there is any overlap between fragments (as is typical ifHLSFragmentSelector (p. 205) is SERVER_TIMESTAMP), the media player timeline has smallgaps between fragments in some places, and overwrites frames in other places. When there arediscontinuity flags between fragments, the media player is expected to reset the timeline, resulting inthe fragment being played immediately after the previous fragment. We recommend that you alwayshave discontinuity flags between fragments if the fragment time stamps are not accurate or if fragmentsmight be missing. You should not place discontinuity flags between fragments for the player timeline toaccurately map to the producer time stamps.

Type: String

Valid Values: ALWAYS | NEVER

Required: NoExpires (p. 185)

The time in seconds until the requested session expires. This value can be between 300 (5 minutes)and 43200 (12 hours).

When a session expires, no new calls to GetHLSMasterPlaylist, GetHLSMediaPlaylist,GetMP4InitFragment, or GetMP4MediaFragment can be made for that session.

The default is 300 (5 minutes).

Type: Integer

Valid Range: Minimum value of 300. Maximum value of 43200.

Required: NoHLSFragmentSelector (p. 185)

The time range of the requested fragment, and the source of the time stamps.

This parameter is required if PlaybackMode is ON_DEMAND. This parameter is optional ifPlaybackMode is LIVE. If PlaybackMode is LIVE, the FragmentSelectorType can beset, but the TimestampRange should not be set. If PlaybackMode is ON_DEMAND, bothFragmentSelectorType and TimestampRange must be set.

Type: HLSFragmentSelector (p. 205) object

Required: No

186

Page 192: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

MaxMediaPlaylistFragmentResults (p. 185)

The maximum number of fragments that are returned in the HLS media playlists.

When the PlaybackMode is LIVE, the most recent fragments are returned up to this value. When thePlaybackMode is ON_DEMAND, the oldest fragments are returned, up to this maximum number.

When there are a higher number of fragments available in a live HLS media playlist, video playersoften buffer content before starting playback. Increasing the buffer size increases the playback latency,but it decreases the likelihood that rebuffering will occur during playback. We recommend that a liveHLS media playlist have a minimum of 3 fragments and a maximum of 10 fragments.

The default is 5 fragments if PlaybackMode is LIVE, and 1,000 if PlaybackMode is ON_DEMAND.

The maximum value of 1,000 fragments corresponds to more than 16 minutes of video on streams with1-second fragments, and more than 2 1/2 hours of video on streams with 10-second fragments.

Type: Long

Valid Range: Minimum value of 1. Maximum value of 1000.

Required: NoPlaybackMode (p. 185)

Whether to retrieve live or archived, on-demand data.

Features of the two types of session include the following:• LIVE : For sessions of this type, the HLS media playlist is continually updated with the latest

fragments as they become available. We recommend that the media player retrieve a new playliston a one-second interval. When this type of session is played in a media player, the user interfacetypically displays a "live" notification, with no scrubber control for choosing the position in theplayback window to display.

Note

In LIVE mode, the newest available fragments are included in an HLS media playlist, evenif there is a gap between fragments (that is, if a fragment is missing). A gap like this mightcause a media player to halt or cause a jump in playback. In this mode, fragments are notadded to the HLS media playlist if they are older than the newest fragment in the playlist.If the missing fragment becomes available after a subsequent fragment is added to theplaylist, the older fragment is not added, and the gap is not filled.

• ON_DEMAND : For sessions of this type, the HLS media playlist contains all the fragments for thesession, up to the number that is specified in MaxMediaPlaylistFragmentResults. The playlistmust be retrieved only once for each session. When this type of session is played in a media player,the user interface typically displays a scrubber control for choosing the position in the playbackwindow to display.

In both playback modes, if FragmentSelectorType is PRODUCER_TIMESTAMP, and if there aremultiple fragments with the same start time stamp, the fragment that has the larger fragment number(that is, the newer fragment) is included in the HLS media playlist. The other fragments are notincluded. Fragments that have different time stamps but have overlapping durations are still included inthe HLS media playlist. This can lead to unexpected behavior in the media player.

The default is LIVE.

Type: String

Valid Values: LIVE | ON_DEMAND

Required: No

187

Page 193: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

StreamARN (p. 185)

The Amazon Resource Name (ARN) of the stream for which to retrieve the HLS master playlist URL.

You must specify either the StreamName or the StreamARN.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName (p. 185)

The name of the stream for which to retrieve the HLS master playlist URL.

You must specify either the StreamName or the StreamARN.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: No

Response Syntax

HTTP/1.1 200Content-type: application/json

{ "HLSStreamingSessionURL": "string"}

Response ElementsIf the action is successful, the service sends back an HTTP 200 response.

The following data is returned in JSON format by the service.

HLSStreamingSessionURL (p. 188)

The URL (containing the session token) that a media player can use to retrieve the HLS masterplaylist.

Type: String

ErrorsFor information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400

188

Page 194: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

InvalidArgumentException

A specified parameter exceeds its restrictions, is not supported, or can't be used.

HTTP Status Code: 400InvalidCodecPrivateDataException

The Codec Private Data in the video stream is not valid for this operation.

HTTP Status Code: 400MissingCodecPrivateDataException

No Codec Private Data was found in the video stream.

HTTP Status Code: 400NoDataRetentionException

A PlaybackMode of ON_DEMAND was requested for a stream that does not retain data (that is, has aDataRetentionInHours of 0).

HTTP Status Code: 400NotAuthorizedException

Status Code: 403, The caller is not authorized to perform an operation on the given stream, or thetoken has expired.

HTTP Status Code: 401ResourceNotFoundException

GetMedia throws this error when Kinesis Video Streams can't find the stream that you specified.

GetHLSStreamingSessionURL throws this error if a session with a PlaybackMode of ON_DEMANDis requested for a stream that has no fragments within the requested time range, or if a session with aPlaybackMode of LIVE is requested for a stream that has no fragments within the last 30 seconds.

HTTP Status Code: 404UnsupportedStreamMediaTypeException

An HLS streaming session was requested for a stream with a media type that is not video/h264.

HTTP Status Code: 400

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

189

Page 195: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

190

Page 196: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

GetMediaForFragmentListService: Amazon Kinesis Video Streams Archived Media

Gets media for a list of fragments (specified by fragment number) from the archived data in an AmazonKinesis video stream.

The following limits apply when using the GetMediaForFragmentList API:

• A client can call GetMediaForFragmentList up to five times per second per stream.• Kinesis Video Streams sends media data at a rate of up to 25 megabytes per second (or 200 megabits

per second) during a GetMediaForFragmentList session.

Request Syntax

POST /getMediaForFragmentList HTTP/1.1Content-type: application/json

{ "Fragments": [ "string" ], "StreamName": "string"}

URI Request ParametersThe request does not use any URI parameters.

Request BodyThe request accepts the following data in JSON format.

Fragments (p. 191)

A list of the numbers of fragments for which to retrieve media. You retrieve these values withListFragments (p. 194).

Type: Array of strings

Array Members: Minimum number of 1 item. Maximum number of 1000 items.

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: ^[0-9]+$

Required: YesStreamName (p. 191)

The name of the stream from which to retrieve fragment media.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: Yes

Response Syntax

HTTP/1.1 200

191

Page 197: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

Content-Type: ContentType

Payload

Response Elements

If the action is successful, the service sends back an HTTP 200 response.

The response returns the following HTTP headers.

ContentType (p. 191)

The content type of the requested media.

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: ^[a-zA-Z0-9_\.\-]+$

The response returns the following as the HTTP body.

Payload (p. 191)

The payload that Kinesis Video Streams returns is a sequence of chunks from the specified stream.For information about the chunks, see PutMedia. The chunks that Kinesis Video Streams returns in theGetMediaForFragmentList call also include the following additional Matroska (MKV) tags:• AWS_KINESISVIDEO_FRAGMENT_NUMBER - Fragment number returned in the chunk.• AWS_KINESISVIDEO_SERVER_SIDE_TIMESTAMP - Server-side time stamp of the fragment.• AWS_KINESISVIDEO_PRODUCER_SIDE_TIMESTAMP - Producer-side time stamp of the

fragment.

The following tags will be included if an exception occurs:• AWS_KINESISVIDEO_FRAGMENT_NUMBER - The number of the fragment that threw the

exception• AWS_KINESISVIDEO_EXCEPTION_ERROR_CODE - The integer code of the exception• AWS_KINESISVIDEO_EXCEPTION_MESSAGE - A text description of the exception

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

HTTP Status Code: 400InvalidArgumentException

A specified parameter exceeds its restrictions, is not supported, or can't be used.

HTTP Status Code: 400NotAuthorizedException

Status Code: 403, The caller is not authorized to perform an operation on the given stream, or thetoken has expired.

192

Page 198: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

HTTP Status Code: 401ResourceNotFoundException

GetMedia throws this error when Kinesis Video Streams can't find the stream that you specified.

GetHLSStreamingSessionURL throws this error if a session with a PlaybackMode of ON_DEMANDis requested for a stream that has no fragments within the requested time range, or if a session with aPlaybackMode of LIVE is requested for a stream that has no fragments within the last 30 seconds.

HTTP Status Code: 404

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

193

Page 199: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

ListFragmentsService: Amazon Kinesis Video Streams Archived Media

Returns a list of Fragment (p. 203) objects from the specified stream and start location within the archiveddata.

Request Syntax

POST /listFragments HTTP/1.1Content-type: application/json

{ "FragmentSelector": { "FragmentSelectorType": "string", "TimestampRange": { "EndTimestamp": number, "StartTimestamp": number } }, "MaxResults": number, "NextToken": "string", "StreamName": "string"}

URI Request ParametersThe request does not use any URI parameters.

Request BodyThe request accepts the following data in JSON format.

FragmentSelector (p. 194)

Describes the time stamp range and time stamp origin for the range of fragments to return.

Type: FragmentSelector (p. 204) object

Required: NoMaxResults (p. 194)

The total number of fragments to return. If the total number of fragments available is more than thevalue specified in max-results, then a ListFragments:NextToken (p. 195) is provided in the outputthat you can use to resume pagination.

Type: Long

Valid Range: Minimum value of 1. Maximum value of 1000.

Required: NoNextToken (p. 194)

A token to specify where to start paginating. This is the ListFragments:NextToken (p. 195) from apreviously truncated response.

Type: String

Length Constraints: Minimum length of 1.

Required: No

194

Page 200: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

StreamName (p. 194)

The name of the stream from which to retrieve a fragment list.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: Yes

Response Syntax

HTTP/1.1 200Content-type: application/json

{ "Fragments": [ { "FragmentLengthInMilliseconds": number, "FragmentNumber": "string", "FragmentSizeInBytes": number, "ProducerTimestamp": number, "ServerTimestamp": number } ], "NextToken": "string"}

Response Elements

If the action is successful, the service sends back an HTTP 200 response.

The following data is returned in JSON format by the service.

Fragments (p. 195)

A list of fragment numbers that correspond to the time stamp range provided.

Type: Array of Fragment (p. 203) objectsNextToken (p. 195)

If the returned list is truncated, the operation returns this token to use to retrieve the next page ofresults. This value is null when there are no more results to return.

Type: String

Length Constraints: Minimum length of 1.

Errors

For information about the errors that are common to all actions, see Common Errors (p. 207).

ClientLimitExceededException

Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed clientcalls. Try making the call later.

195

Page 201: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Data Types

HTTP Status Code: 400InvalidArgumentException

A specified parameter exceeds its restrictions, is not supported, or can't be used.

HTTP Status Code: 400NotAuthorizedException

Status Code: 403, The caller is not authorized to perform an operation on the given stream, or thetoken has expired.

HTTP Status Code: 401ResourceNotFoundException

GetMedia throws this error when Kinesis Video Streams can't find the stream that you specified.

GetHLSStreamingSessionURL throws this error if a session with a PlaybackMode of ON_DEMANDis requested for a stream that has no fragments within the requested time range, or if a session with aPlaybackMode of LIVE is requested for a stream that has no fragments within the last 30 seconds.

HTTP Status Code: 404

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS Command Line Interface• AWS SDK for .NET• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for JavaScript• AWS SDK for PHP V3• AWS SDK for Python• AWS SDK for Ruby V2

Data TypesThe following data types are supported by Amazon Kinesis Video Streams:

• StreamInfo (p. 198)• StreamNameCondition (p. 200)

The following data types are supported by Amazon Kinesis Video Streams Media:

• StartSelector (p. 201)

The following data types are supported by Amazon Kinesis Video Streams Archived Media:

• Fragment (p. 203)• FragmentSelector (p. 204)

196

Page 202: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

• HLSFragmentSelector (p. 205)• HLSTimestampRange (p. 206)• TimestampRange (p. 207)

Amazon Kinesis Video StreamsThe following data types are supported by Amazon Kinesis Video Streams:

• StreamInfo (p. 198)• StreamNameCondition (p. 200)

197

Page 203: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

StreamInfoService: Amazon Kinesis Video Streams

An object describing a Kinesis video stream.

Contents

CreationTime

A time stamp that indicates when the stream was created.

Type: Timestamp

Required: NoDataRetentionInHours

How long the stream retains data, in hours.

Type: Integer

Valid Range: Minimum value of 0.

Required: NoDeviceName

The name of the device that is associated with the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: [a-zA-Z0-9_.-]+

Required: NoKmsKeyId

The ID of the AWS Key Management Service (AWS KMS) key that Kinesis Video Streams uses toencrypt data on the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 2048.

Required: NoMediaType

The MediaType of the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: [\w\-\.\+]+/[\w\-\.\+]+

Required: NoStatus

The status of the stream.

Type: String

198

Page 204: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams

Valid Values: CREATING | ACTIVE | UPDATING | DELETING

Required: NoStreamARN

The Amazon Resource Name (ARN) of the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 1024.

Pattern: arn:aws:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

Required: NoStreamName

The name of the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: NoVersion

The version of the stream.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 64.

Pattern: [a-zA-Z0-9]+

Required: No

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for Ruby V2

199

Page 205: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

StreamNameConditionService: Amazon Kinesis Video Streams

Specifies the condition that streams must satisfy to be returned when you list streams (see theListStreams API). A condition has a comparison operation and a value. Currently, you can specify onlythe BEGINS_WITH operator, which finds streams whose names start with a given prefix.

Contents

ComparisonOperator

A comparison operator. Currently, you can specify only the BEGINS_WITH operator, which findsstreams whose names start with a given prefix.

Type: String

Valid Values: BEGINS_WITH

Required: NoComparisonValue

A value to compare.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 256.

Pattern: [a-zA-Z0-9_.-]+

Required: No

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for Ruby V2

Amazon Kinesis Video Streams MediaThe following data types are supported by Amazon Kinesis Video Streams Media:

• StartSelector (p. 201)

200

Page 206: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Media

StartSelectorService: Amazon Kinesis Video Streams Media

Identifies the chunk on the Kinesis video stream where you want the GetMedia API to start returningmedia data. You have the following options to identify the starting chunk:

• Choose the latest (or oldest) chunk.• Identify a specific chunk. You can identify a specific chunk either by providing a fragment number or time

stamp (server or producer).• Each chunk's metadata includes a continuation token as a Matroska (MKV) tag

(AWS_KINESISVIDEO_CONTINUATION_TOKEN). If your previous GetMedia request terminated, youcan use this tag value in your next GetMedia request. The API then starts returning chunks startingwhere the last API ended.

Contents

AfterFragmentNumber

Specifies the fragment number from where you want the GetMedia API to start returning thefragments.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: ^[0-9]+$

Required: NoContinuationToken

Continuation token that Kinesis Video Streams returned in the previous GetMedia response. TheGetMedia API then starts with the chunk identified by the continuation token.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: ^[a-zA-Z0-9_\.\-]+$

Required: NoStartSelectorType

Identifies the fragment on the Kinesis video stream where you want to start getting the data from.• NOW - Start with the latest chunk on the stream.• EARLIEST - Start with earliest available chunk on the stream.• FRAGMENT_NUMBER - Start with the chunk containing the specific fragment. You must also

specify the StartFragmentNumber.• PRODUCER_TIMESTAMP or SERVER_TIMESTAMP - Start with the chunk containing a

fragment with the specified producer or server time stamp. You specify the time stamp by addingStartTimestamp.

• CONTINUATION_TOKEN - Read using the specified continuation token.

Note

If you choose the NOW, EARLIEST, or CONTINUATION_TOKEN as thestartSelectorType, you don't provide any additional information in the startSelector.

201

Page 207: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

Type: String

Valid Values: FRAGMENT_NUMBER | SERVER_TIMESTAMP | PRODUCER_TIMESTAMP | NOW |EARLIEST | CONTINUATION_TOKEN

Required: YesStartTimestamp

A time stamp value. This value is required if you choose the PRODUCER_TIMESTAMP or theSERVER_TIMESTAMP as the startSelectorType. The GetMedia API then starts with the chunkcontaining the fragment that has the specified time stamp.

Type: Timestamp

Required: No

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for Ruby V2

Amazon Kinesis Video Streams Archived MediaThe following data types are supported by Amazon Kinesis Video Streams Archived Media:

• Fragment (p. 203)• FragmentSelector (p. 204)• HLSFragmentSelector (p. 205)• HLSTimestampRange (p. 206)• TimestampRange (p. 207)

202

Page 208: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

FragmentService: Amazon Kinesis Video Streams Archived Media

Represents a segment of video or other time-delimited data.

Contents

FragmentLengthInMilliseconds

The playback duration or other time value associated with the fragment.

Type: Long

Required: NoFragmentNumber

The index value of the fragment.

Type: String

Length Constraints: Minimum length of 1.

Required: NoFragmentSizeInBytes

The total fragment size, including information about the fragment and contained media data.

Type: Long

Required: NoProducerTimestamp

The time stamp from the producer corresponding to the fragment.

Type: Timestamp

Required: NoServerTimestamp

The time stamp from the AWS server corresponding to the fragment.

Type: Timestamp

Required: No

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for Ruby V2

203

Page 209: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

FragmentSelectorService: Amazon Kinesis Video Streams Archived Media

Describes the time stamp range and time stamp origin of a range of fragments.

Contents

FragmentSelectorType

The origin of the time stamps to use (Server or Producer).

Type: String

Valid Values: PRODUCER_TIMESTAMP | SERVER_TIMESTAMP

Required: YesTimestampRange

The range of time stamps to return.

Type: TimestampRange (p. 207) object

Required: Yes

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for Ruby V2

204

Page 210: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

HLSFragmentSelectorService: Amazon Kinesis Video Streams Archived Media

Contains the range of time stamps for the requested media, and the source of the time stamps.

Contents

FragmentSelectorType

The source of the time stamps for the requested media.

When FragmentSelectorType is set to PRODUCER_TIMESTAMP andGetHLSStreamingSessionURL:PlaybackMode (p. 187) is ON_DEMAND, the first fragment ingestedwith a producer time stamp within the specified FragmentSelector:TimestampRange (p. 204)is included in the media playlist. In addition, the fragments with producer time stampswithin the TimestampRange ingested immediately following the first fragment (up to theGetHLSStreamingSessionURL:MaxMediaPlaylistFragmentResults (p. 187) value) are included.

Fragments that have duplicate producer time stamps are deduplicated. This means that if producersare producing a stream of fragments with producer time stamps that are approximately equal to thetrue clock time, the HLS media playlists will contain all of the fragments within the requested timestamp range. If some fragments are ingested within the same time range and very different points intime, only the oldest ingested collection of fragments are returned.

When FragmentSelectorType is set to PRODUCER_TIMESTAMP andGetHLSStreamingSessionURL:PlaybackMode (p. 187) is LIVE, the producer time stamps are used inthe MP4 fragments and for deduplication. But the most recently ingested fragments based on servertime stamps are included in the HLS media playlist. This means that even if fragments ingested in thepast have producer time stamps with values now, they are not included in the HLS media playlist.

The default is SERVER_TIMESTAMP.

Type: String

Valid Values: PRODUCER_TIMESTAMP | SERVER_TIMESTAMP

Required: NoTimestampRange

The start and end of the time stamp range for the requested media.

This value should not be present if PlaybackType is LIVE.

Type: HLSTimestampRange (p. 206) object

Required: No

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for Ruby V2

205

Page 211: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Amazon Kinesis Video Streams Archived Media

HLSTimestampRangeService: Amazon Kinesis Video Streams Archived Media

The start and end of the time stamp range for the requested media.

This value should not be present if PlaybackType is LIVE.

Note

The values in the HLSTimestampRange are inclusive. Fragments that begin before the start timebut continue past it, or fragments that begin before the end time but continue past it, are includedin the session.

Contents

EndTimestamp

The end of the time stamp range for the requested media. This value must be within 3 hours of thespecified StartTimestamp, and it must be later than the StartTimestamp value.

If FragmentSelectorType for the request is SERVER_TIMESTAMP, this value must be in the past.

If the HLSTimestampRange value is specified, the EndTimestamp value is required.

Note

This value is inclusive. The EndTimestamp is compared to the (starting) time stamp of thefragment. Fragments that start before the EndTimestamp value and continue past it areincluded in the session.

Type: Timestamp

Required: NoStartTimestamp

The start of the time stamp range for the requested media.

If the HLSTimestampRange value is specified, the StartTimestamp value is required.

Note

This value is inclusive. Fragments that start before the StartTimestamp and continue pastit are included in the session. If FragmentSelectorType is SERVER_TIMESTAMP, theStartTimestamp must be later than the stream head.

Type: Timestamp

Required: No

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for Ruby V2

206

Page 212: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Common Errors

TimestampRangeService: Amazon Kinesis Video Streams Archived Media

The range of time stamps for which to return fragments.

Contents

EndTimestamp

The ending time stamp in the range of time stamps for which to return fragments.

Type: Timestamp

Required: YesStartTimestamp

The starting time stamp in the range of time stamps for which to return fragments.

Type: Timestamp

Required: Yes

See Also

For more information about using this API in one of the language-specific AWS SDKs, see the following:

• AWS SDK for C++• AWS SDK for Go• AWS SDK for Java• AWS SDK for Ruby V2

Common ErrorsThis section lists the errors common to the API actions of all AWS services. For errors specific to an APIaction for this service, see the topic for that API action.

AccessDeniedException

You do not have sufficient access to perform this action.

HTTP Status Code: 400IncompleteSignature

The request signature does not conform to AWS standards.

HTTP Status Code: 400InternalFailure

The request processing has failed because of an unknown error, exception or failure.

HTTP Status Code: 500InvalidAction

The action or operation requested is invalid. Verify that the action is typed correctly.

207

Page 213: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Common Errors

HTTP Status Code: 400InvalidClientTokenId

The X.509 certificate or AWS access key ID provided does not exist in our records.

HTTP Status Code: 403InvalidParameterCombination

Parameters that must not be used together were used together.

HTTP Status Code: 400InvalidParameterValue

An invalid or out-of-range value was supplied for the input parameter.

HTTP Status Code: 400InvalidQueryParameter

The AWS query string is malformed or does not adhere to AWS standards.

HTTP Status Code: 400MalformedQueryString

The query string contains a syntax error.

HTTP Status Code: 404MissingAction

The request is missing an action or a required parameter.

HTTP Status Code: 400MissingAuthenticationToken

The request must contain either a valid (registered) AWS access key ID or X.509 certificate.

HTTP Status Code: 403MissingParameter

A required parameter for the specified action is not supplied.

HTTP Status Code: 400OptInRequired

The AWS access key ID needs a subscription for the service.

HTTP Status Code: 403RequestExpired

The request reached the service more than 15 minutes after the date stamp on the request or morethan 15 minutes after the request expiration date (such as for pre-signed URLs), or the date stamp onthe request is more than 15 minutes in the future.

HTTP Status Code: 400ServiceUnavailable

The request has failed due to a temporary failure of the server.

HTTP Status Code: 503

208

Page 214: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Common Parameters

ThrottlingException

The request was denied due to request throttling.

HTTP Status Code: 400ValidationError

The input fails to satisfy the constraints specified by an AWS service.

HTTP Status Code: 400

Common ParametersThe following list contains the parameters that all actions use for signing Signature Version 4 requests witha query string. Any action-specific parameters are listed in the topic for that action. For more informationabout Signature Version 4, see Signature Version 4 Signing Process in the Amazon Web Services GeneralReference.

Action

The action to be performed.

Type: string

Required: YesVersion

The API version that the request is written for, expressed in the format YYYY-MM-DD.

Type: string

Required: YesX-Amz-Algorithm

The hash algorithm that you used to create the request signature.

Condition: Specify this parameter when you include authentication information in a query string insteadof in the HTTP authorization header.

Type: string

Valid Values: AWS4-HMAC-SHA256

Required: ConditionalX-Amz-Credential

The credential scope value, which is a string that includes your access key, the date, the region youare targeting, the service you are requesting, and a termination string ("aws4_request"). The value isexpressed in the following format: access_key/YYYYMMDD/region/service/aws4_request.

For more information, see Task 2: Create a String to Sign for Signature Version 4 in the Amazon WebServices General Reference.

Condition: Specify this parameter when you include authentication information in a query string insteadof in the HTTP authorization header.

Type: string

209

Page 215: Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream Parser Library ... para el procesamiento de vídeo en tiempo real o el análisis de vídeo

Transmisiones de vídeo deAmazon Kinesis Developer Guide

Common Parameters

Required: ConditionalX-Amz-Date

The date that is used to create the signature. The format must be ISO 8601 basic format(YYYYMMDD'T'HHMMSS'Z'). For example, the following date time is a valid X-Amz-Date value:20120325T120000Z.

Condition: X-Amz-Date is optional for all requests; it can be used to override the date used for signingrequests. If the Date header is specified in the ISO 8601 basic format, X-Amz-Date is not required.When X-Amz-Date is used, it always overrides the value of the Date header. For more information, seeHandling Dates in Signature Version 4 in the Amazon Web Services General Reference.

Type: string

Required: ConditionalX-Amz-Security-Token

The temporary security token that was obtained through a call to AWS Security Token Service (AWSSTS). For a list of services that support temporary security credentials from AWS Security TokenService, go to AWS Services That Work with IAM in the IAM User Guide.

Condition: If you're using temporary security credentials from the AWS Security Token Service, youmust include the security token.

Type: string

Required: ConditionalX-Amz-Signature

Specifies the hex-encoded signature that was calculated from the string to sign and the derived signingkey.

Condition: Specify this parameter when you include authentication information in a query string insteadof in the HTTP authorization header.

Type: string

Required: ConditionalX-Amz-SignedHeaders

Specifies all the HTTP headers that were included as part of the canonical request. For moreinformation about specifying signed headers, see Task 1: Create a Canonical Request For SignatureVersion 4 in the Amazon Web Services General Reference.

Condition: Specify this parameter when you include authentication information in a query string insteadof in the HTTP authorization header.

Type: string

Required: Conditional

210