Qual solução de streaming para o Picam tem o menor atraso?

9

Este post mostra como transmitir usando o VLC. Funciona bem e é simples, mas me dá um segundo atraso. Este post usa o GStreamer e possui um atraso de 0,3 segundos; Eu gostaria menos.

É possível usar o chip gráfico Raspberry Pi para acelerar a codificação?

Antonvh
fonte
Ainda não é possível. O atraso de 0,3 ms é muito bom e você não ficará melhor (a partir de agora) devido à falta de V2L. Talvez isso ajude
Piotr Kula
@ppumkin Acho que o OP disse que o atraso foi de 0,3 segundos, e não milissegundos. Além disso, você quer dizer V4L?
syb0rg 02/02
Sim 3ms eu estava pensando. Driver Video4Linux? Ou é chamado de outra coisa. Você sabe. O driver nativo.
Piotr Kula
@ppumkin Ahh, então você estaria errado. Os drivers V4L2 foram incluídos no NOOBS v1.3.3 .
syb0rg 02/02

Respostas:

9

Com o Ubuntu 14.10 e o Gstreamer, alcanço uma latência de 100 a 116 ms com 1280 x 720 a 60Hz.

Tanques para @Antonvh, que me coloca no caminho certo. Eu reproduzo aqui a solução para referência posterior.

Para transmitir a partir do Pi:

raspivid -t 0 -b 2000000  -fps 60 -w 1280 -h 720 -o - \
  | gst-launch-1.0 -e -vvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 \ 
  ! udpsink host=10.42.0.1 port=5001

Para recebê-lo em seu computador com gst-0.10 e enviá-lo para um dispositivo virtual v4l2 (na verdade você precisa do v4l2loopback ):

gst-launch -v udpsrc port=5001 ! application/x-rtp, payload=96 ! rtph264depay \ 
! ffdec_h264 ! ffmpegcolorspace ! v4l2sink device=/dev/video1

Em seguida, você pode abrir o dispositivo /dev/video1em qualquer software que suporte a captura v4l2.

Para uma solução gst-1.0 (v4l2loopback não funciona com gst-1.0), deixo você ver a postagem do blog Antonvh .

antoine
fonte
4

Eu consegui um atraso de 200ms! O truque: envie menos quadros do Pi do que você lê no lado remoto, isso garante que o buffer permaneça vazio.

Aqui está uma foto que tirei do RPi filmando um cronômetro. Mostra a diferença horária.

Esta é a receita que eu uso. Primeiro no laptop (Mac), faça o seguinte:

nc -l 5001 | mplayer -fps 24 -cache 1024 -

Em seguida, no RPI, comece a transmitir:

raspivid -t 999999 -w 1280 -h 720 -fps 20 -o - | nc 192.168.178.22 5001

Tenha certeza de:

  • Instale o mplayer primeiro. Apenas o método Homebrew funcionou para mim. O download regular foi interrompido.
  • Mude o número de ip acima para o número do seu laptop.
Antonvh
fonte
Este é um truque inteligente! Eu me pergunto se ele funciona para o novo driver UV4L também
Piotr Kula
O problema com esta solução é que ela apresenta muita gagueira do lado da reprodução. Eu queria saber se você encontrou uma solução para isso.
9a3eedi
1

Eu uso esta receita de vídeo: http://archpi.dabase.com/#sending-and-receiving-pi-camera-video-over-the-network

Você já tentou https://github.com/thaytan/gst-rpicamsrc ? Isso deve ser um pouco mais simplificado. Não posso me incomodar em tentar.

O atraso de 0,3s é muito bom.

Hendry
fonte
11
Obrigado pelos links! Acho que tenho um atraso menor que 0,3s agora, ainda tenho que documentar a solução e medi-la com precisão. Será publicado em breve. Se minhas medições provarem que é superior a 0,3, tentarei a outra receita.
precisa saber é o seguinte
@Antonvh Como vão as pesquisas / medições? Esta resposta está obtendo melhores resultados?
RPiAwesomeness 25/03