Transmissão UDP RTSP GStreamer & Correção de latência para câmeras térmicas

Streaming RTSP com GStreamer – Uma verdadeira pergunta do cliente&Um caso (UDP versus TCP)

Este artigo documenta uma conversa real de suporte ao cliente sobre streaming RTSP de nosso câmeras térmicas usando GStreamer.
Estamos compartilhando isso em um Q&Um formato de diálogo para que outros clientes que enfrentam problemas semelhantes possam seguir rapidamente o processo de solução de problemas.


1. Endereço de fluxo RTSP

Cliente:
Olá, recebemos suas câmeras térmicas, tudo funciona bem, obrigado, mas não conseguimos encontrar o endereço do fluxo RTSP. Qual é o /stream/sub?

Apoio, suporte:
O URL do stream RTSP da nossa câmera é:

rtsp://192.168.2.254:554/live

2. Preocupação com latência RTSP

Cliente:
Testamos o stream RTSP e notamos uma latência considerável em comparação com a visualização do painel de gerenciamento.

Apoio, suporte:
Este é o comportamento esperado. A visualização de gerenciamento da web usa um pipeline interno otimizado, enquanto o RTSP depende das condições da rede e do buffer do cliente.


3. Requisito de streaming UDP

Cliente:
O stream RTSP também não funciona no meu player que espera UDP. Como posso obter um fluxo UDP?

Apoio, suporte:
Posso saber qual player você está usando? VLC?

Cliente:
Meu player é GStreamer integrado em um aplicativo Android.


4. Unicast UDP versus Multicast UDP

Apoio, suporte:
Se o cliente GStreamer acessar o dispositivo usando Multicast UDP, isso é atualmente não suportado.
Precisamos esclarecer se você está usando Unicast UDP ou Multicast UDP.

Cliente:
Meu pipeline GStreamer usa rtspsrc com udp definido no protocols parâmetro.
eu não usei o udp-mcast valor, então deveria ser unicast UDP.


5. Esclarecimento da plataforma

Apoio, suporte:
Este GStreamer está rodando no Windows?, Linux, ou Android?
Nosso engenheiro de software gostaria de testar do nosso lado.

Cliente:
Meu aplicativo usa GStreamer no Android, mas rtspsrc também pode ser testado em Linux.


6. Problema conhecido do Linux GStreamer (Caso de referência)

Apoio, suporte:
Encontramos um problema semelhante discutido em um fórum técnico chinês.

Solução:
Desinstale o seguinte plugin:

sudo apt-get remove gstreamer1.0-plugins-ugly

Este plugin pode enviar cabeçalhos RTSP que algumas câmeras não conseguem reconhecer, resultando em um erro de negação de serviço.

RTSP GStreamer UDP Streaming & Latency Fix for Thermal Cameras 1

Referência:
https://forums.developer.nvidia.com/t/rtsp-gstreamer-simple-recieve-and-store-in-file/157535/14

Você poderia fornecer seu rtspsrc gasoduto (Linux preferido)? Uma versão do aplicativo também é aceitável para teste.


7. Compatibilidade de cabeçalho RTSP DESCRIBE

Apoio, suporte:
Outra possível razão é que se o RTSP DESCREVER solicitação não contém:

application/sdp

o dispositivo pode recusar o serviço.

Esta lógica de validação pode ser muito rígida, e planejamos relaxar essa condição em futuras atualizações de firmware.


8. Confirmação da versão do Android GStreamer

Cliente:
No Android, estou usando:

  • gstreamer-1.0-android-universal-1.26.8

Não inclui plugins feios. Meu Makefile contém:

GSTREAMER_PLUGINS := \
    coreelements \
    playback \
    typefindfunctions \
    rtsp \
    rtp \
    rtpmanager \
    udp \
    tcp \
    videoparsersbad \
    androidmedia \
    opengl

9. Parâmetros de tempo de execução sugeridos do GStreamer

Apoio, suporte:
Recomendamos tentar short-header=true dentro rtspsrc.

Cliente:
Esse cabeçalho é para UDP?

Apoio, suporte:
É uma opção de cabeçalho RTSP e geralmente melhora a compatibilidade.

Exemplos:

gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> short-header=true
gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> do-rtcp=false short-header=true

10. Resultados de testes internos (Linux)

Apoio, suporte:
Nosso engenheiro testou o fluxo RTSP usando GStreamer 1.0 no Linux, e funcionou corretamente.

GStream-1 test on linux
Teste Gstream-1 no Linux
GStream-1 test on linux working well
Teste Gstream-1 no Linux funcionando bem

Exemplo TCP:

gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
  name=src \
  latency=0 \
  protocols=tcp \
src. \
  ! decodebin \
  ! autovideosink

Exemplo UDP (remover protocols=tcp):

gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
  name=src \
  latency=0 \
src. \
  ! decodebin \
  ! autovideosink

A lógica interna entre Linux e Android GStreamer é a mesma, portanto, o comportamento deve ser consistente em todas as plataformas.


11. Conclusão

Este caso destaca vários pontos importantes ao usar RTSP com GStreamer:

  • URL RTSP: rtsp://<camera_ip>:554/live
  • UDP unicast é suportado; Multicast UDP não é
  • Evite plug-ins problemáticos (Somente Linux)
  • Tentar short-header=true para melhor compatibilidade
  • Os resultados dos testes do Linux geralmente podem ser aplicados ao Android

Se você encontrar problemas semelhantes, por favor forneça seu Pipeline GStreamer ou cliente de teste, e nossa equipe de engenharia ajudará ainda mais.

Faça uma pergunta

← Voltar

Sua mensagem foi enviada