¿Qué solución de transmisión para Picam tiene el menor retraso?


9

Esta publicación muestra cómo transmitir usando VLC. Funciona bien y es simple, pero me da un segundo retraso. Esta publicación usa GStreamer, y tiene 0.3 segundos de retraso; Me gustaría menos

¿Es posible usar el chip gráfico Raspberry Pi para acelerar la codificación?


Aún no es posible. El retraso de 0.3 ms es muy bueno y no mejorará (a partir de ahora) debido a la falta de V2L. Tal vez esto ayude
Piotr Kula

@ppumkin Creo que el OP dijo que el retraso fue de .3 segundos, no milisegundos. Además, ¿te refieres a V4L?
syb0rg

Sí 3ms estaba pensando. Video4Linux driver? ¿O se llama algo más? Ya sabes. El conductor nativo.
Piotr Kula

@ppumkin Ahh, entonces estarías equivocado. Los controladores V4L2 se incluyeron en NOOBS v1.3.3 .
syb0rg

Respuestas:


9

Con Ubuntu 14.10 y Gstreamer alcanzo una latencia de 100 a 116 ms con 1280 x 720 a 60Hz.

Gracias a @Antonvh que me pone en el camino correcto. Reproduzco aquí la solución para esta última referencia.

Para transmitir desde el 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 recibirlo en su computadora con gst-0.10 y enviarlo a un dispositivo virtual v4l2 (de hecho, necesita v4l2loopback ):

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

Luego puede abrir el dispositivo /dev/video1en cualquier software que admita la captura v4l2.

Para una solución gst-1.0 (v4l2loopback no funciona con gst-1.0), te dejo ver la publicación del blog de Antonvh .


4

¡Logré un retraso de 200 ms! El truco: envíe menos fotogramas desde el Pi de lo que leyó en el lado remoto, esto asegura que el búfer permanezca vacío.

Aquí hay una foto que tomé del RPi filmando un cronómetro. Muestra la diferencia horaria.

Esta es la receta que uso. Primero en la computadora portátil (Mac) haga esto:

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

luego en el RPI comenzar a transmitir:

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

Asegurate que:

  • Instale mplayer primero. Solo el método Homebrew funcionó para mí. La descarga regular se interrumpió.
  • Cambie el número de IP anterior al número de su computadora portátil.

Este es un truco inteligente! Me pregunto si también funciona para el nuevo controlador UV4L
Piotr Kula

El problema con esta solución es que introduce mucho tartamudeo desde el lado de la reproducción. Me preguntaba si encontraste una solución para eso.
9a3eedi

1

Utilizo esta receta en video: http://archpi.dabase.com/#sending-and-receiving-pi-camera-video-over-the-network

¿Has probado https://github.com/thaytan/gst-rpicamsrc ? Eso debería ser un poco más aerodinámico. Tbh, no me molesto en probarlo.

0.3s de retraso es bastante bueno.


1
Gracias por los enlaces! Creo que ahora tengo un retraso de menos de 0.3s, todavía tengo que documentar la solución y medirla con precisión. Publicaremos pronto. Si mis mediciones prueban que es más de 0.3, probaré la otra receta.
Antonvh

@Antonvh ¿Cómo van las investigaciones / mediciones? ¿Esta respuesta te está dando mejores resultados?
RPiAwesomeness
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.