Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream...
Transcript of Transmisiones de vídeo de Amazon Kinesis - … · Procedimiento: uso de Kinesis Video Stream...
Transmisiones de vídeode Amazon Kinesis
Developer Guide
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams
144
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
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
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
Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams
• 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
148
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
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
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
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
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
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
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
Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams
• 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
156
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
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
Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams
• 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
159
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
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
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
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
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
Transmisiones de vídeo deAmazon Kinesis Developer GuideAmazon Kinesis Video Streams
• 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
165
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
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
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
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
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
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
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
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
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
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
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
Transmisiones de vídeo deAmazon Kinesis Developer Guide
Amazon Kinesis Video Streams Media
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
177
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
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
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
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
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
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
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
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
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
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
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
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
Transmisiones de vídeo deAmazon Kinesis Developer Guide
Amazon Kinesis Video Streams Archived Media
190
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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