Solución de problemas de Kinesis Video Streams - Amazon Kinesis Video Streams

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

Solución de problemas de Kinesis Video Streams

Utilice la siguiente información para solucionar los problemas habituales que se producen con Amazon Kinesis Video Streams.

Problemas generales

En esta sección se describen los problemas generales que puede encontrar al trabajar con Kinesis Video Streams.

Latencia demasiado alta

La latencia puede deberse a la duración de los fragmentos que se envían al servicio Kinesis Video Streams. Una forma de reducir la latencia entre el productor y el servicio consiste en 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, reduzca el siguiente valor enkinesis_video_gstreamer_sample_app.cpp:

g_object_set(G_OBJECT (data.encoder), "bframes", 0, "key-int-max", 45, "bitrate", 512, NULL);
nota

Las latencias son más altas en el navegador Mozilla Firefox debido a la implementación interna de la representación de vídeo.

Problemas con API

En esta sección se describen API los problemas que pueden surgir al trabajar con Kinesis Video Streams.

Error: "Opciones desconocidas"

GetMedia y GetMediaForFragmentList pueden generar el siguiente error:

Unknown options: <filename>.mkv

Este error se produce si lo configuró AWS CLI con un output tipo dejson. Vuelva a AWS CLI configurarlo con el tipo de salida predeterminado (none). Para obtener información sobre cómo configurar el AWS CLI, consulte configure en la Referencia de AWS CLI comandos.

Error: "Unable to determine service/operation name to be authorized" (No se puede determinar el nombre del servicio o 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. Al acceder al punto final, asegúrese de incluir el siguiente parámetro en la GetDataEndpoint llamada, en función del dispositivo al API que se vaya a llamar:

--api-name GET_MEDIA --api-name PUT_MEDIA --api-name GET_MEDIA_FOR_FRAGMENT_LIST --api-name LIST_FRAGMENTS

Error: "Failed to put a frame in the stream" (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. Ejecute lo siguiente en y compruebe que se pueda recuperar la información de la transmisión: AWS CLI

aws kinesisvideo describe-stream --stream-name StreamName --endpoint https://ServiceEndpoint.kinesisvideo.region.amazonaws.com

Si la llamada falla, consulta Solución de AWS CLI errores para obtener más información.

Error: «El servicio cerró la conexión antes de recibir AckEvent la conexión definitiva»

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. Compruebe que los unread() métodos estén implementados correctamente.

Error: "STATUS_ STORE _ OUT MEMORY _OF_»

PutMedia puede generar el siguiente error:

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 aumentar el tamaño del almacén de contenido, aumente el valor de StorageInfo.storageSize. Para obtener más información, consulte StorageInfo.

Error: «La credencial debe estar limitada a una región válida».

Este error se produce si la región de firma no coincide con la región del punto final.

Por ejemplo, si especificas us-west-2 como región de firma, pero intentas conectarte al punto final kinesisvideo.us-east-1.amazonaws.com (us-east-1), recibirás este error.

En algunas aplicaciones, como kvssink, la cadena alternativa de regiones es la predeterminada. us-west-2 Comprueba que has configurado tu región correctamente según la aplicación que estés utilizando.

Problemas con HLS

Si la transmisión de vídeo no se reproduce correctamente, consulteSolución de problemas con HLS.

Problemas con Java

En esta sección se describe cómo solucionar los problemas comunes de Java que se producen al trabajar con Kinesis Video Streams.

Habilitar los logs de Java

Para solucionar problemas con las bibliotecas y muestras de Java, resulta útil habilitar y examinar los registros de depuració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 el contenido siguiente:

    # Root logger option log4j.rootLogger=DEBUG, stdout # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n log4j.logger.org.apache.http.wire=DEBUG

A continuación, los registros de depuración se imprimen en la consola. IDE

Problemas con la biblioteca del productor

En esta sección se describen los problemas que podrían producirse cuando se utiliza Cargar a Kinesis Video Streams.

No se puede compilar el productor SDK

Compruebe que las bibliotecas necesarias se encuentran en la ruta. Para ello, utilice el comando siguiente:

env | grep LD_LIBRARY_PATH LD_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 consola

Para mostrar la secuencia de vídeo en la consola, debe codificarse mediante H.264 en formato AvCC. Si no aparece la secuencia , verifique lo siguiente:

  • Su NALindicadores de adaptación se establece en NAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALS si la secuencia original está en formato Anexo B. Este es el valor predeterminado en el constructor StreamDefinition.

  • Está facilitando los datos privados del códec correctamente. Para H.264, este es el conjunto de parámetros de secuencia (SPS) y el conjunto de parámetros de imagen (PPS). Dependiendo del origen de medios, estos datos se pueden recuperar del origen multimedia por separado o codificados en el fotograma.

    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 del códec), si H.264 está en la transmisión como SPS yPPS, se pueden adaptar al formato aVCC. A menos que el canal multimedia lo CPD proporcione por separado, la aplicación puede extraerlo CPD del fotograma buscando el primer fotograma Idr (que debe contener la SPS yPPS), extraer los dos NALUs (que serán Ab (Sps) Ab (Pps)) y colocarlos en el formato in. CPD StreamDefinition

Error: «El token de seguridad incluido en la solicitud no es válido» al transmitir datos mediante la aplicación de demostración GStreamer

Si 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 Video client" (No se pudo enviar el fotograma al cliente de Kinesis Video)

Si se produce este error, las marcas temporales no están configuradas correctamente en la secuencia de origen. Pruebe lo siguiente:

  • Usa el SDK ejemplo más reciente, que podría tener una actualización que solucione el problema.

  • Ajuste la transmisión de alta calidad a una velocidad de bits más alta y corrija cualquier fluctuación en la transmisión de origen si la cámara lo permite.

GStreamerla aplicación se detiene con el mensaje «la transmisión se ha detenido, no se ha negociado el motivo» en OS X

El 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 para esto es eliminar los parámetros de velocidad de fotogramas de la gst_caps_new_simple llamada 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, NULL);

Error: «No se pudo asignar el montón» al crear el Kinesis Video Client GStreamer en una demostración en Raspberry Pi

La aplicación GStreamer de ejemplo intenta asignar 512 MB deRAM, que podrían no estar disponibles en su sistema. Puede reducir esta asignación si reduce el valor siguiente en KinesisVideoProducer.cpp:

device_info.storageInfo.storageSize = 512 * 1024 * 1024;

Error: «Instrucción ilegal» al ejecutar la GStreamer demostración en Raspberry Pi

Si aparece el siguiente error al ejecutar la GStreamer demostración, compruebe que ha compilado la aplicación para la versión correcta de su dispositivo. (Por ejemplo, comprueba que no estás compilando para Raspberry Pi 3 cuando utilizas Raspberry Pi 2).

INFO - Initializing curl. Illegal instruction

La cámara no se carga en un dispositivo Raspberry Pi

Para 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
  5. Compruebe que la cámara se ha detectado:

    ls /dev/video*

No se puede encontrar la cámara en macOS High Sierra

En macOS High Sierra, la aplicación de demostración no encuentra la cámara si hay más de una cámara disponible.

No se ha encontrado el archivo jni.h al compilar en macOS High Sierra

Para solucionar este error, actualice su instalación de Xcode a la versión más reciente.

Errores de Curl al ejecutar la aplicación de demostración GStreamer

Para resolver los errores de curl al ejecutar la aplicación de GStreamer demostración, copie este archivo de certificado en. /etc/ssl/cert.pem

Aserción de rango/marca temporal en el tiempo de ejecución en un dispositivo Raspberry Pi

Si se produce una aserción de rango o de marca temporal en el tiempo de ejecución, actualice el firmware y reinicie el dispositivo:

sudo rpi-update $ sudo reboot

Aserción en gst_value_set_fraction_range_full en un dispositivo Raspberry Pi

La 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.

STATUSError _ MKV _ INVALID _ ANNEXB NALU _IN_ FRAME _ DATA (0x3200000d) en Android

El siguiente error aparece si NALindicadores de adaptación son incorrectos para la secuencia multimedia:

putKinesisVideoFrame(): Failed to put a frame with status code 0x3200000d

Si se produce este error, proporcione la marca .withNalAdaptationFlags correcta para su medio (por ejemplo, NAL_ADAPTATION_ANNEXB_CPD_NALS). Proporcione esta marca en la siguiente línea de la Android:

https://github.com/awslabs/aws-sdk-android-samplesblob/master/AmazonKinesisVideoDemoApp/src/main/java/com/amazonaws/kinesisvideo/demoapp/fragment/StreamConfigurationFragment/.java #L169

Error al alcanzar la duración máxima del fragmento

Este error se produce cuando un fragmento multimedia de una secuencia supera el límite máximo de duración de fragmento. Consulte el límite máximo de duración de los fragmentos en la Cuotas de servicios de medios y archivos API sección.

Pruebe lo siguiente para resolver este problema:

  • Si utiliza una cámara web o USB cámara, realice una de las siguientes acciones:

    • Si utilizas la fragmentación basada en fotogramas clave, configura el codificador para que proporcione fotogramas clave en 10 segundos.

    • Si no utilizas la fragmentación basada en fotogramas clave, al definir la transmisiónEscriba y examine el código, establece el límite máximo de duración del fragmento en un valor inferior a 10 segundos.

    • Si utilizas codificadores de software (como x264) en la GStreamer canalización, puedes establecer el key-int-max atributo en un valor en un plazo de 10 segundos. Por ejemplo, key-int-max configúrelo en 60, con fps en 30, para habilitar los fotogramas clave cada 2 segundos.

  • Si utilizas una RPI cámara, establece el atributo keyframe-interval en menos de 10 segundos.

  • Si utilizas una cámara IP (RTSP), establece el GOP tamaño en 60.

Error «Nombre de objeto no válido pasado» al utilizar la autorización de IoT

Para evitar este error (HTTP Error 403: Response: {"message":"Invalid thing name passed"}) cuando utilice credenciales de IoT para la autorización, asegúrese de que el valor de stream-name (un parámetro obligatorio del kvssink elemento) sea idéntico al valor deiot-thingname. Para obtener más información, consulte GStreamerreferencia de parámetros de elementos.

Problemas con la biblioteca de analizadores de flujo

En esta sección se describen los problemas que podrían producirse cuando se utiliza Transmita usando la biblioteca de analizadores.

No se puede tener acceso a un solo fotograma de la transmisión

Para acceder a un único fotograma desde una fuente de streaming en su aplicación de consumo, compruebe que la transmisión contenga los datos privados del códec correctos. Para obtener información sobre el formato de los datos de una transmisión, consulte Modelo de datos.

Para aprender a usar los datos privados del códec para acceder a un marco, consulta el siguiente archivo de prueba en el GitHub sitio web: .java KinesisVideoRendererExampleTest

Error de descodificación de fragmentos

Si los fragmentos no están correctamente codificados en un formato H.264 y en un nivel admitido por el navegador, es posible que aparezca el siguiente error al reproducir la transmisión en la consola:

Fragment Decoding Error There 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.

Problemas de red

Si ve errores de conexión, como «Tiempo de espera de conexión» o «Fallo de conexión», al intentar conectarse a Kinesis Video Streams, es posible que se deba a restricciones de rango de direcciones IP en su configuración de red.

Si su configuración tiene restricciones de rango de direcciones IP para Kinesis Video Streams, actualice la configuración de red para incluir en una lista los rangos de direcciones IP de Kinesis Video Streams.

importante

La lista de rangos de IP no es una lista exhaustiva de direcciones IP de Kinesis Video Streams. Incluya los rangos de direcciones IP que ve y tenga en cuenta que las direcciones IP pueden cambiar con el tiempo.

Para obtener más información, consulte Intervalos de AWS IP. Para recibir una notificación cuando cambien los rangos de IP, sigue el procedimiento de suscripción.