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.
Transmita vídeo a su transmisión de vídeo de Kinesis
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.
-
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 Kinesis Video Streams.
GStreamer es capaz de localizar el
kvssinkplugin. Para obtener más información, consulte Descargue y cree el SDK para productores de Kinesis Video Streams C++.
Establece las credenciales y la región.
export AWS_ACCESS_KEY_ID=YourAccessKeyexport AWS_SECRET_ACCESS_KEY=YourSecretKeyexport AWS_DEFAULT_REGION=us-west-2Para ver otros métodos de autenticación, consulteProporcione las credenciales a kvssink.
nota
El SDK para productores de C++ usa la región EE.UU. Oeste (Oregón) (
us-west-2) de forma predeterminada. Para usar la opción predeterminada, Región de AWS cree su transmisión de vídeo de Kinesis en la región EE.UU. Oeste (Oregón).Para usar una región diferente para la transmisión de vídeo de Kinesis, defina la siguiente variable de entorno en su región (por ejemplo,
us-east-1):export AWS_DEFAULT_REGION=us-east-1En función del medio de entrada, elija una de las siguientes opciones:
Utiliza el hardware
Algunos modelos de Raspberry Pi vienen con codificadores acelerados por hardware H.264 . Puede usarlos en lugar dex264enc, que es un codificador de software.
-
Asegúrese de que los complementos de GStreamer estén instalados:
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-bad -
Escriba:
gst-inspect-1.0 | grep h264Determina si los siguientes elementos están disponibles:
-
omxh264enc
-
v4l2h264enc
Si están disponibles, puede utilizarlos. Estos son algunos ejemplos de canalizaciones en las que se utilizan esos elementos:
omxh264enc:gst-launch-1.0 v4l2src device=/dev/video0 \ ! videoconvert \ ! video/x-raw,format=I420,width=640,height=480 \ !omxh264enccontrol-rate=2 target-bitrate=512000 periodicity-idr=45 inline-header=FALSE \ ! h264parse ! video/x-h264,stream-format=avc,alignment=au,profile=baseline \ ! kvssink stream-name="raspberry"v4l2h264encyv4l2convert:gst-launch-1.0 libcamerasrc \ ! video/x-raw,width=640,height=480,framerate=30/1,format=I420 \ !v4l2convert\ !v4l2h264encextra-controls="controls,repeat_sequence_header=1" \ ! video/x-h264,level='(string)4' \ ! h264parse \ ! video/x-h264,stream-format=avc,alignment=au,width=640,height=480,framerate=30/1 \ ! kvssink stream-name="test-stream" -
Problemas de tiempo de ejecución
A continuación, se muestran algunos de los problemas de tiempo de ejecución más frecuentes y cómo solucionarlos.
No existe el elemento «xxxxxxxxx»
Si recibes un error como el siguiente, significa que te falta un plugin de GStreamer:
WARNING: erroneous pipeline: no element "videoconvert"
Solución:
En función del elemento que falte, determina la acción adecuada:
-
kvssink: Consulte Descargue y cree el SDK para productores de Kinesis Video Streams C++. libcamerasrc: Consulte Error «Falló la activación del grupo de búferes» para instalar el elementolibcamerasrcGStreamer.omxh264enco bien:v4l2h264encSiga Requisitos previos de instalación del software para instalar todas las bibliotecas de GStreamer. Si las has instalado todas y estos elementos no aparecen, significa que tu Raspberry Pi no tiene el hardware necesario. En su
x264enclugar, usa el codificador de software.Otros: Siga Requisitos previos de instalación del software para instalar todas las bibliotecas de GStreamer. Hay diferentes elementos de GStreamer en los distintos grupos de plugins de GStreamer (buenos, malos, feos), así que asegúrate de instalarlos todos.
Error «Falló la activación del grupo de búferes»
Si recibes un error como el siguiente, significa que la canalización que se está utilizando se está utilizandov4l2src, pero debería usarla libcamerasrc en su lugar.
ERROR bufferpool gstbufferpool.c:572:gst_buffer_pool_set_active:source:pool0:src start failed
WARN v4l2src gstv4l2src.c:976:gst_v4l2src_decide_allocation: error: Failed to allocate required memory.
WARN v4l2src gstv4l2src.c:976:gst_v4l2src_decide_allocation: error: Buffer pool activation failed
WARN basesrc gstbasesrc.c:3352:gst_base_src_prepare_allocation: Subclass failed to decide allocation
Error received from element source: Failed to allocate required memory.
WARN basesrc gstbasesrc.c:3132:gst_base_src_loop: error: Internal data stream error.
Debugging information: ../sys/v4l2/gstv4l2src.c(976): gst_v4l2src_decide_allocation (): /GstPipeline:live-kinesis-pipeline/GstV4l2Src:source:
Buffer pool activation failed
WARN basesrc gstbasesrc.c:3132:gst_base_src_loop: error: streaming stopped, reason not-negotiated (-4)
Por ejemplo, si utilizas la siguiente canalización con el módulo de cámara 2 sin estar libcamerasrc instalado, es posible que encuentres este error cuando GStreamer intente detectar automáticamente qué elementos utilizar.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
Solución:
Asegúrese de que libcamerasrc esté instalado y utilícelo como elemento fuente, en lugar de hacerlo. v4l2src Escriba lo siguiente para instalar el elemento libcamerasrc GStreamer:
sudo apt-get update sudo apt-get install gstreamer1.0-libcamera
Una vez libcamerasrc instalado, si estás usando el autovideosrc elemento, GStreamer debería cambiar automáticamente para usar la fuente correcta en su lugar. libcamerasrc v4l2src
Error de bus
Si recibes un error de bus poco después del arranque kvssink (normalmente, cuando PutMedia finaliza la llamada HTTP), significa que tu Raspberry Pi no admite el acceso no alineado a la memoria. Los registros tendrán el siguiente aspecto:
INFO Camera camera.cpp:1197 configuring streams: (0) 640x480-YUV420
INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@88000/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected CFE format: 1536x864-PC1B
[INFO ] kinesisVideoStreamFormatChanged(): Stream format changed.
[DEBUG] setRequestHeader(): Appending header to request: user-agent -> AWS-SDK-KVS-CPP-CLIENT/3.4.2/1.5.3 GCC/12.2.0 Linux/6.6.51+rpt-rpi-v8 aarch64 CPPSDK
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-stream-name -> demo-stream
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-producer-start-timestamp -> 1732012345.678
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-fragment-acknowledgment-required -> 1
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-fragment-timecode-type -> ABSOLUTE
[DEBUG] setRequestHeader(): Appending header to request: transfer-encoding -> chunked
[DEBUG] setRequestHeader(): Appending header to request: connection -> keep-alive
[INFO ] putStreamResultEvent(): Put stream result event. New upload handle 0
[WARN ] notifyDataAvailable(): [demo-stream] Failed to un-pause curl with error: 43. Curl object 0xe2f6f418
Bus error
El PIC de Kinesis Video Streams utiliza un acceso a la memoria no alineado para optimizar el uso de la memoria, lo que no es compatible con todos los dispositivos.
Solución:
Para usar el SDK en el modo de acceso a memoria alineado, debe establecer explícitamente el indicador ALIGNED_MEMORY_MODEL CMake ON al compilarkvssink, ya que su valor predeterminado es. OFF Consulte Descargue y cree el SDK para productores de Kinesis Video Streams C++ para obtener instrucciones más detalladas.
La marca de tiempo se congela y la tubería se detiene
Si lo utilizas x264enc en una canalización de GStreamer, puedes encontrarte con situaciones en las que la cronología de la canalización se ralentice considerablemente o se detenga por completo en unos pocos segundos.
Esto se debe a que la configuración x264enc predeterminada puede introducir una latencia de codificación elevada, que supera la capacidad del búfer de entrada predeterminado. Como resultado, el búfer de entrada se llena, lo que provoca que los elementos anteriores se bloqueen y que la tubería se atasque.
Para obtener más información, consulta la documentación de GStreamer
Solución:
Configure x264enc con la opción de zerolatency ajuste. Esto reduce significativamente la latencia de codificación al optimizarla para escenarios en tiempo real, lo que garantiza que los fotogramas se procesen y emitan con mayor rapidez.
Ejemplo de configuración:
... ! x264enctune=zerolatencybyte-stream=true speed-preset=ultrafast bframes=0 key-int-max=60 ! ...
nota
Si bien esta solución evita eficazmente el estancamiento de la canalización, puede afectar a la eficiencia y la calidad de la codificación. Para los escenarios que requieren baja latencia y alta calidad, considere enfoques alternativos, como utilizar optimizaciones de hardware o buscar una cámara web que emita H.264 directamente, omitiendo este paso de codificación.
Para obtener más información, consulte Utiliza el hardware.
No se pueden ejecutar varias canalizaciones desde el mismo dispositivo v4l2 al mismo tiempo
A estos dispositivos solo se /dev/video0 puede acceder mediante un proceso a la vez. Si varios procesos intentan acceder a él al mismo tiempo, el segundo proceso espera a que se complete el primero.
Solución:
Cree un dispositivo de bucle invertido que permita que varios procesos utilicen la interfaz de bucle invertido al mismo tiempo. Para obtener más información, consulte Stack Exchange.
Error interno en el flujo de datos
Al crear una canalización de GStreamer, los elementos se conectan enlazando el panel de origen de un elemento con el panel de destino de otro elemento. Este proceso de enlace permite el flujo de datos desde el elemento fuente al elemento receptor, formando una canalización de datos.
El mensaje de error «Error en el enlace del teclado» que aparece en el registro indica que GStreamer ha detectado un problema al intentar establecer una conexión (enlace) entre los módulos de dos elementos de la canalización.
Pad link failed
Error received from element udpsrc0: Internal data stream error.
Solución:
Determina qué elementos no se enlazan entre sí. Para reducir el alcance de la tubería, retire los elementos de la tubería. Sustituya el elemento situado más a la derecha por uno fakesink y extráigalos uno por uno.
Es posible que tengas que ajustar las tapas y los elementos filtrantes
Los casos más comunes son pedir una cámara framerate o una cámara resolution que no sea compatible. gst-device-monitor-1.0Úselo en el terminal para obtener el soporte frameratesresolutions, yformats. Puede utilizar el elemento GStreamer a escala de vídeo
Para comprobar los formatos compatibles con un elemento de GStreamer individual, escribe en el terminal. gst-inspect-1.0 element-name