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
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.
Problemas con API
En esta sección se describen API los problemas que pueden surgir 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 MEMORY _OF_»
- Error: «La credencial debe estar limitada a una región válida».
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
--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 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.
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
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.
Problemas
- No se puede compilar el productor SDK
- La transmisión de vídeo no aparece en la consola
- Error: «El token de seguridad incluido en la solicitud no es válido» al transmitir 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)
- GStreamerla aplicación se detiene con el mensaje «la transmisión se ha detenido, no se ha negociado el motivo» en OS X
- Error: «No se pudo asignar el montón» al crear el Kinesis Video Client GStreamer en una demostración en Raspberry Pi
- Error: «Instrucción ilegal» al ejecutar la GStreamer demostración en 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
- STATUSError _ MKV _ INVALID _ ANNEXB NALU _IN_ FRAME _ DATA (0x3200000d) en Android
- Error al alcanzar 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 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 constructorStreamDefinition
. -
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:
-
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 resolver los errores de curl al ejecutar la aplicación de GStreamer demostración, 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.
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:
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.
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.
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
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.