Jakie rozwiązanie do przesyłania strumieniowego dla Picam ma najmniejsze opóźnienie?

9

Ten post pokazuje, jak przesyłać strumieniowo za pomocą VLC. Działa ładnie i jest prosty, ale daje mi około drugiego opóźnienia. Ten post używa GStreamera i ma 0,3 sekundy opóźnienia; Chciałbym mniej.

Czy można przyspieszyć kodowanie za pomocą układu graficznego Raspberry Pi?

Antonvh
źródło
Nie jest to jeszcze możliwe. Opóźnienie 0,3 ms jest bardzo dobre i nie poprawisz się (na razie), ponieważ brak V2L. Może to pomoże
Piotr Kula
@ppumkin Myślę, że OP powiedział, że opóźnienie wynosi 0,3 sekundy, a nie milisekundy. Masz na myśli także V4L?
syb0rg
Tak 3ms myślałem. Sterownik Video4Linux? A może nazywa się to czymś innym. Wiesz. Natywny sterownik.
Piotr Kula
@pumkin Ahh, wtedy się mylisz. Sterowniki V4L2 zostały zawarte w NOOBS v1.3.3 .
syb0rg

Odpowiedzi:

9

Z Ubuntu 14.10 i Gstreamer osiągam opóźnienie od 100 do 116 ms przy 1280 x 720 @ 60Hz.

Dziękuję @Antonvh, który stawia mnie na właściwej drodze. Odtwarzam tutaj rozwiązanie dla późniejszego odniesienia.

Aby przesyłać strumieniowo z 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

Aby otrzymać go na komputerze z gst-0.10 i wysłać do wirtualnego urządzenia v4l2 (w rzeczywistości potrzebujesz v4l2loopback ):

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

Następnie możesz otworzyć urządzenie /dev/video1w dowolnym oprogramowaniu obsługującym przechwytywanie v4l2.

W przypadku rozwiązania gst-1.0 (v4l2loopback nie działa z gst-1.0), pozwalam ci zobaczyć post na blogu Antonvh .

antoine
źródło
4

Osiągnąłem opóźnienie 200 ms! Sztuczka: wysyłaj mniej ramek z Pi niż czytasz po zdalnej stronie, dzięki temu bufor pozostaje pusty.

Oto zdjęcie, które zrobiłem, gdy RPi filmuje stoper. Pokazuje różnicę czasu.

To jest przepis, którego używam. Najpierw na laptopie (Mac) wykonaj następujące czynności:

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

następnie w RPI rozpocznij streaming:

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

Upewnij się:

  • Najpierw zainstaluj mplayer. Tylko metoda Homebrew działała dla mnie. Regularne pobieranie zostało zepsute.
  • Zmień powyższy numer ip na numer swojego laptopa.
Antonvh
źródło
To sprytna sztuczka! Zastanawiam się, czy to działa również dla nowego sterownika UV4L
Piotr Kula
Problem z tym rozwiązaniem polega na tym, że wprowadza dużo jąkania od strony odtwarzania. Zastanawiałem się, czy znalazłeś rozwiązanie tego problemu.
9a3eedi
1

Korzystam z tego przepisu wideo: http://archpi.dabase.com/#sending-and-receiving-pi-camera-video-over-the-network

Czy próbowałeś https://github.com/thaytan/gst-rpicamsrc ? To powinno być nieco bardziej usprawnione. Tbh, nie mogę się tym przejmować.

Opóźnienie 0,3 s jest naprawdę dobre.

hendry
źródło
1
Dzięki za linki! Wydaje mi się, że mam opóźnienie mniejsze niż 0,3 s, nadal muszę udokumentować rozwiązanie i dokładnie je zmierzyć. Wkrótce opublikuje. Jeśli moje pomiary wykażą, że jest to więcej niż 0,3, spróbuję zastosować inny przepis.
Antonvh,
@Antonvh Jak idą badania / pomiary? Czy ta odpowiedź zapewnia lepsze wyniki?
RPiAwesomeness