As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Transmita vídeo para seu stream de vídeo do Kinesis
Para executar o aplicativo de amostra, você precisa das seguintes informações:
-
O nome do streaming que você criou na seção Pré-requisitos.
-
As credenciais da conta (ID de chave de acesso e chave de acesso secreta) que você criou em Crie um usuário do IAM com permissão para gravar no Kinesis Video Streams.
O GStreamer é capaz de localizar o
kvssinkplugin. Consulte Baixe e crie o SDK do produtor de C++ do Kinesis Video Streams para obter mais informações.
Defina as credenciais e a região.
export AWS_ACCESS_KEY_ID=YourAccessKeyexport AWS_SECRET_ACCESS_KEY=YourSecretKeyexport AWS_DEFAULT_REGION=us-west-2Para outros métodos de autenticação, consulteForneça credenciais para kvssink.
nota
O SDK do produtor de C++ usa a região Oeste dos EUA (Oregon) (
us-west-2) por padrão. Para usar o padrão, Região da AWS crie seu stream de vídeo do Kinesis na região Oeste dos EUA (Oregon).Para usar uma região diferente para seu stream de vídeo do Kinesis, defina a seguinte variável de ambiente para sua região (por exemplo,
us-east-1):export AWS_DEFAULT_REGION=us-east-1Dependendo da mídia de entrada, escolha uma das seguintes opções:
Utilize hardware
Alguns modelos de Raspberry Pi vêm com codificadores acelerados por hardware H.264 . Você pode usá-los no lugar dex264enc, que é um codificador de software.
-
Certifique-se de que os plug-ins do GStreamer estejam instalados:
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-bad -
Tipo:
gst-inspect-1.0 | grep h264Determine se os seguintes elementos estão disponíveis:
-
omxh264enc
-
v4l2h264enc
Se estiverem disponíveis, você poderá usá-los. Aqui estão alguns exemplos de funil usando esses 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"v4l2h264encev4l2convert: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 tempo de execução
Veja a seguir alguns problemas de tempo de execução frequentemente encontrados e como solucioná-los.
Esse elemento não existe “xxxxxxxxx”
Se você receber um erro como o seguinte, significa que está faltando um plugin do GStreamer:
WARNING: erroneous pipeline: no element "videoconvert"
Resolução:
Com base no elemento que está faltando, determine a ação apropriada:
-
kvssink: Consulte Baixe e crie o SDK do produtor de C++ do Kinesis Video Streams. libcamerasrc: Consulte Erro “Falha na ativação do buffer pool” para instalar o elementolibcamerasrcGStreamer.omxh264encouv4l2h264enc:Siga Pré-requisitos de instalação de software para instalar todas as bibliotecas do GStreamer. Se você instalou todos eles e esses elementos não aparecem, isso significa que seu Raspberry Pi não tem o hardware.
x264encEm vez disso, use o codificador de software.Outros: Siga Pré-requisitos de instalação de software para instalar todas as bibliotecas do GStreamer. Diferentes elementos do GStreamer são encontrados nos vários grupos de plugins do GStreamer (bons, ruins, feios), então certifique-se de instalar todos eles.
Erro “Falha na ativação do buffer pool”
Se você receber um erro como o seguinte, significa que o pipeline que está sendo usado está sendo usadov4l2src, mas deveria ser usado libcamerasrc em vez disso.
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 exemplo, se você estiver usando o seguinte pipeline com o módulo 2 da câmera sem libcamerasrc instalado, poderá encontrar esse erro quando o GStreamer estiver tentando detectar automaticamente quais elementos usar.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
Resolução:
Certifique-se de que libcamerasrc esteja instalado e use-o como elemento de origem, em vez dev4l2src. Digite o seguinte para instalar o elemento libcamerasrc GStreamer:
sudo apt-get update sudo apt-get install gstreamer1.0-libcamera
Uma vez libcamerasrc instalado, se você estiver usando o autovideosrc elemento, o GStreamer deve alternar automaticamente para usar a fonte correta libcamerasrc em vez de. v4l2src
Erro de barramento
Se você receber um erro de barramento logo após o início kvssink (normalmente, na época em que a chamada HTTP for PutMedia concluída), isso significa que seu Raspberry Pi não oferece suporte ao acesso desalinhado à memória. Os registros terão a seguinte aparência:
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
O Kinesis Video Streams PIC usa acesso não alinhado à memória para otimizar o uso da memória, o que não é suportado por todos os dispositivos.
Resolução:
Para usar o SDK no modo de acesso à memória alinhado, você precisa definir explicitamente o sinalizador ALIGNED_MEMORY_MODEL CMake como ON ao compilarkvssink, já que o padrão é. OFF Consulte Baixe e crie o SDK do produtor de C++ do Kinesis Video Streams para obter instruções mais detalhadas.
O carimbo de data/hora congela e o oleoduto para
Ao usar x264enc em um pipeline do GStreamer, você pode encontrar situações em que o cronograma do pipeline diminui significativamente ou fica completamente paralisado em alguns segundos.
Isso ocorre porque as configurações x264enc padrão podem introduzir uma alta latência de codificação, que excede a capacidade do buffer de entrada padrão. Como resultado, o buffer de entrada é preenchido, fazendo com que os elementos upstream sejam bloqueados e o pipeline pare.
Para obter mais informações, consulte a documentação do GStreamer.
Resolução:
Configure x264enc com a opção zerolatency de ajuste. Isso reduz significativamente a latência de codificação otimizando para cenários em tempo real, garantindo que os quadros sejam processados e produzidos mais rapidamente.
Exemplo de configuração:
... ! x264enctune=zerolatencybyte-stream=true speed-preset=ultrafast bframes=0 key-int-max=60 ! ...
nota
Embora essa solução evite efetivamente a paralisação da tubulação, ela pode afetar a eficiência e a qualidade da codificação. Para cenários que exigem baixa latência e alta qualidade, considere abordagens alternativas, como usar otimizações de hardware ou encontrar uma webcam com saída H.264 direta, ignorando essa etapa de codificação.
Para obter mais informações, consulte Utilize hardware.
Não é possível executar vários pipelines do mesmo dispositivo v4l2 ao mesmo tempo
Dispositivos como esses só /dev/video0 podem ser acessados por um processo por vez. Se vários processos tentarem acessá-lo ao mesmo tempo, o segundo aguardará até que o primeiro seja concluído.
Resolução:
Crie um dispositivo de loopback, permitindo que vários processos usem a interface de loopback ao mesmo tempo. Para obter mais informações, consulte Stack Exchange
Erro interno do fluxo de dados
Ao criar um pipeline do GStreamer, você conecta elementos vinculando o bloco de origem de um elemento ao painel coletor de outro elemento. Esse processo de vinculação permite o fluxo de dados do elemento de origem para o elemento coletor, formando um pipeline de dados.
A mensagem de erro “Falha no link do teclado” no registro indica que o GStreamer encontrou um problema ao tentar estabelecer uma conexão (link) entre os blocos de dois elementos em seu pipeline.
Pad link failed
Error received from element udpsrc0: Internal data stream error.
Resolução:
Determine quais elementos não estão se vinculando uns aos outros. Para restringir o escopo do pipeline, remova os elementos do pipeline. Substitua o elemento mais à direita fakesink e remova os elementos um por vez.
Talvez seja necessário ajustar os elementos capsfilter e and/or alterar quais
Casos comuns são solicitar um framerate ou resolution que a câmera não suporta. Use gst-device-monitor-1.0 no terminal para obter o frameratesresolutions, e. suportadoformats. Você pode usar o elemento videoscale
Para inspecionar os formatos suportados por um elemento individual do GStreamer, digite gst-inspect-1.0 element-name no terminal.