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.
Temas
Solución de problemas generales
En esta sección se describen los problemas generales que puede encontrar al trabajar con Kinesis Video Streams.
Problemas
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.
Problemas
- Error: "Opciones desconocidas"
- 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)
- Error: "Failed to put a frame in the stream" (Error al colocar un fotograma en la transmisión)
- Error: «El servicio cerró la conexión antes de recibir AckEvent la conexión definitiva»
- Error: "STATUS_STORE_OUT_OF_MEMORY"
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
--endpointhttps://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.
Problemas
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:
-
Agregue
log4j
al archivopom.xml
en el nodo
dependencies
:<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
-
En el directorio
target/classes
, cree un archivo denominadolog4j.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.
Problemas
- No se puede compilar el SDK de Producer
- La transmisión de vídeo no aparece en la consola
- 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
- Error: "Failed to submit frame to Kinesis Video client" (No se pudo enviar el fotograma al cliente de Kinesis Video)
- La aplicación GStreamer se detiene con el mensaje "transmisión detenida, motivo no negociado" en OS X
- 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
- Error: "Instrucción ilegal" al ejecutar la demostración de GStreamer en un dispositivo Raspberry Pi
- La cámara no se carga en un dispositivo Raspberry Pi
- No se puede encontrar la cámara en macOS High Sierra
- No se ha encontrado el archivo jni.h al compilar en macOS High Sierra
- Errores de cURL al ejecutar la aplicación de demostración GStreamer
- Aserción de rango/marca temporal en el tiempo de ejecución en un dispositivo Raspberry Pi
- Aserción en gst_value_set_fraction_range_full en un dispositivo Raspberry Pi
- Error STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATA (0x3200000d) en Android
- Error: se alcanzó la duración máxima del fragmento
- Error «Nombre de objeto no válido pasado» al utilizar la autorización de IoT
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 constructorStreamDefinition
. -
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 CPD
StreamDefinition
.
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:
-
Compruebe la configuración física de la cámara y verifique que está conectada correctamente.
-
Ejecute lo siguiente para actualizar el firmware:
$ sudo rpi-update
-
Reinicie el dispositivo.
-
Ejecute lo siguiente para cargar el controlador:
$ sudo modprobe bcm2835-v4l2
-
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/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:
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.
Problemas
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.
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.