Quelle solution de streaming pour le Picam a le plus petit décalage?

9

Ce message montre comment diffuser en utilisant VLC. Cela fonctionne bien et est simple, mais cela me donne environ un deuxième décalage. Ce message utilise GStreamer, et il a un décalage de 0,3 seconde; J'aimerais moins.

Est-il possible d'utiliser la puce graphique Raspberry Pi pour accélérer l'encodage?

Antonvh
la source
Ce n'est pas encore possible. Un décalage de 0,3 ms est très bon et vous ne vous améliorerez pas (à partir de maintenant) en raison du manque de V2L. Peut-être que cela aidera
Piotr Kula
@ppumkin Je pense que l'OP a dit que le décalage était de 0,3 seconde, pas de millisecondes. Parlez-vous également de V4L?
syb0rg
Oui 3ms je pensais. Pilote Video4Linux? Ou s'appelle-t-il autre chose. Tu sais. Le pilote natif.
Piotr Kula
@ppumkin Ahh, alors vous auriez tort. Les pilotes V4L2 ont été inclus dans NOOBS v1.3.3 .
syb0rg

Réponses:

9

Avec Ubuntu 14.10 et Gstreamer, j'atteins une latence de 100 à 116 ms avec 1280 x 720 à 60 Hz.

Tanks à @Antonvh qui me met sur la bonne voie. Je reproduis ici la solution pour cette dernière référence.

Pour diffuser à partir du 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

Pour le recevoir sur votre ordinateur avec gst-0.10 et l'envoyer à un périphérique virtuel v4l2 (en effet, vous avez besoin de v4l2loopback ):

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

Ensuite, vous pouvez ouvrir l'appareil /dev/video1dans n'importe quel logiciel prenant en charge la capture v4l2.

Pour une solution gst-1.0 (v4l2loopback ne fonctionne pas avec gst-1.0), je vous laisse voir le billet de blog Antonvh .

antoine
la source
4

J'ai atteint un décalage de 200ms! L'astuce: envoyer moins de trames du Pi que vous n'en lisez du côté distant, cela garantit que le tampon reste vide.

Voici une photo que j'ai prise du RPi filmant un chronomètre. Il montre la différence de temps.

Voici la recette que j'utilise. Tout d'abord sur l'ordinateur portable (Mac), procédez comme suit:

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

puis sur le RPI commencer le streaming:

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

Assurez-vous de:

  • Installez d'abord mplayer. Seule la méthode Homebrew a fonctionné pour moi. Le téléchargement régulier a été interrompu.
  • Remplacez le numéro IP ci-dessus par le numéro de votre ordinateur portable.
Antonvh
la source
C'est une astuce astucieuse! Je me demande si cela fonctionne aussi pour le nouveau pilote UV4L
Piotr Kula
Le problème avec cette solution est qu'elle introduit beaucoup de bégaiements du côté de la lecture. Je me demandais si vous aviez trouvé une solution à cela.
9a3eedi
1

J'utilise cette recette vidéo: http://archpi.dabase.com/#sending-and-receiving-pi-camera-video-over-the-network

Avez-vous essayé https://github.com/thaytan/gst-rpicamsrc ? Cela devrait être légèrement plus rationalisé. Tbh, je ne peux pas être dérangé pour l'essayer.

Un décalage de 0,3 s est sacrément bon.

hendry
la source
1
Merci pour les liens! Je pense que j'ai un décalage inférieur à 0,3 s maintenant, je dois encore documenter la solution et la mesurer avec précision. Publiera bientôt. Si mes mesures prouvent que c'est plus de 0,3, j'essaierai l'autre recette.
Antonvh
@Antonvh Comment se passe la recherche / les mesures? Cette réponse vous donne-t-elle de meilleurs résultats?
RPiAwesomeness