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.

Solución de 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.

Solución de problemas con la API

En esta sección se describen los problemas de API que puede encontrar 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. Cuando accedas al punto final, asegúrate de incluir el siguiente parámetro en la GetDataEndpoint llamada, en función de la API a la 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. Ejecuta lo siguiente en y comprueba 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_OF_MEMORY"

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.

Solución de problemas de HLS

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

Solución de problemas de 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

Los logs de depuración imprimirán en la consola del IDE.

Solución de problemas con la biblioteca de productores

En esta sección se describen los problemas que podrían producirse cuando se utiliza Producer Libraries.

No se puede compilar el SDK de Producer

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 Marcas de adaptación de NAL 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, estos son 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)

    El CPD (códec de datos privados), si el H.264 está en la transmisión como SPS y PPS, se puede adaptar al formato AVCC. A menos que la canalización multimedia proporcione el CPD por separado, la aplicación puede extraer el CPD de la trama buscando la primera trama Idr (que debe contener el SPS y el PPS), extraer las dos NALU (que serán Ab (Sps) Ab (Pps)) y colocarlas en el CPDStreamDefinition.

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ó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:

  • Utilice la muestra de SDK más reciente, ya que es posible que incluya 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.

La aplicación GStreamer se detiene con el mensaje "transmisión detenida, motivo no negociado" 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 ello es eliminar los parámetros de velocidad de fotogramas de la gst_caps_new_simple llamada: 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: "Failed to allocate heap" (No se puede asignar el montón) al crear el cliente de Kinesis Video en la demostración de GStreamer en un dispositivo Raspberry Pi

La aplicación de ejemplo de GStreamer intenta asignar 512 MB de RAM, que podrían no estar disponibles en el 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 demostración de GStreamer en un dispositivo Raspberry Pi

Si se produce el siguiente error al ejecutar la demostración de GStreamer, 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 solucionar los errores de cURL al ejecutar la aplicación de demostración GStreamer, 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.

Error STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATA (0x3200000d) en Android

El siguiente error aparece si Marcas de adaptación de NAL 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 Producer Library:

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

Error: se alcanzó 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 API multimedia y multimedia archivada sección.

Pruebe lo siguiente para resolver este problema:

  • Si utiliza una cámara web/USB, realice alguna de las siguientes operaciones:

    • 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ónPaso 2: escribir y examinar 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 canalización de GStreamer, puedes establecer un valor para el key-int-max atributo en un plazo de 10 segundos. Por ejemplo, key-int-max configúrelo en 60 y en 30 fps para activar los fotogramas clave cada 2 segundos.

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

  • Si utilizas una cámara IP (RTSP), establece el tamaño del GOP 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 Referencia de parámetros del elemento GStreamer.

Solución de problemas con la biblioteca Stream Parser

En esta sección se describen los problemas que podrían producirse cuando se utiliza Stream Parser Library.

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.