Comment diffuser une vidéo de la caméra Raspberry Pi et la regarder en direct


93

Je suis nouveau sur le Raspberry Pi et même nouveau sur l'appareil photo Raspberry Pi. J'ai vu beaucoup de tutoriels en ligne pour la caméra Raspberry Pi, mais je n'ai pas encore trouvé de solution qui me permet de diffuser directement depuis la caméra Raspberry Pi comme avec une webcam (avec SimpleCV ou OpenCV). J'espérais que quelqu'un pourrait me diriger dans la bonne direction.


avez-vous essayé mjpgstreamer? Shell je poste la solution?
jaromrax

3
Les personnes qui recherchent une solution sans latence doivent se
renseigner auprès de

Si vous avez ssh et mpv: ssh raspberrypi raspivid -o - -t 0 -fps 25 -w 640 -h 360 | mpv - --speed 2 --fps 25(la "--speed 2" l'empêche de prendre trop de temps).
Métamorphique

Réponses:


81

La solution suggérée par Diego est bonne, sauf qu’elle est assez lente et que la vidéo retarde énormément puisque le vlc diffuse à nouveau un flux du raspvid. Depuis 12/2013, un pilote officiel v4l2 est disponible: http://www.ics.com/blog/raspberry-pi-camera-module#.VJFhbyvF-b8 Cela rend la rediffusion en continu obsolète. Il suffit de charger le module et de l’utiliser:

sudo modprobe bcm2835-v4l2
cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}'

Cela crée un flux http sur le port 12345, vous pouvez également utiliser d'autres formats, comme le format rtcp de la réponse de Diego. Pour en savoir plus, cliquez ici: https://web.archive.org/web/20151012014829/http://www.videolan.org:80/doc/streaming-howto/fr/ch03.html


2
Dans cette réponse , il est suggéré d'ajouter :demux=264à CVLC parce que le flux est RAW h264 et vous devez définir l'demuxer: cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}' :demux=264. Cela rend possible de regarder le flux dans VLC pour Android, par exemple.
Jaime M.

8
Dans le lien fourni, à la place de autoreconf -vfivous devriez maintenant utiliser./bootstrap.sh
JuJoDi

1
Existe-t-il un moyen qui me permette à la fois de diffuser la vidéo et de l'enregistrer sur la carte SD RPi?
Ou Weinberger


4
Je pense qu'il pourrait être intéressant de noter / confirmer que cette méthode ne fonctionne pas dans un environnement sans tête. Je reçois des erreurs, dont l'une parle de X11
Nick

41

Vous pouvez choisir entre plusieurs options. Au cours de mon travail, nous utilisons VLC pour diffuser en continu des vidéos capturées par la caméra Raspberry Pi depuis notre salle des serveurs jusqu'au bureau. Un inconvénient est qu’il ya environ 5 secondes de retard et que je n’ai pas trouvé de solution à ce problème. Ce qui suit est notre configuration:

  1. Raspbian est installé et mis à jour et assurez-vous que votre caméra est activée (vous l'activez en exécutant sudo raspi-config et en sélectionnant Activer la caméra).

    sudo apt-get update
    sudo apt-get upgrade
    
  2. Installer vlc

    sudo apt-get install vlc
    
  3. Créez un script pour démarrer le flux avec le contenu suivant ou exécutez la commande (vous ne pouvez rien faire d'autre si vous exécutez simplement la commande).

    sudo nano myscript.sh
    raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264
    
  4. Rendre le script exécutable

    sudo chmod +x myscript.sh
    
  5. Si vous voulez démarrer le flux automatiquement, vous devez ajouter le script à crontab. Pour que cela fonctionne, je devais créer un autre script exécuté par cron (OBS! VLC ne peut pas être exécuté en tant que sudo, assurez-vous donc que vous êtes dans le bon cron). sudo nano myscript2.sh:

    #!/bin/bash
    /path/to/myscript.sh
    

    Ensuite:

    sudo chmod +x myscript2.sh
    crontab -e
    @reboot /path/to/myscript2.sh
    
  6. Pour regarder le flux vidéo, ouvrez VLC sur un ordinateur du même réseau que le Raspberry Pi que vous utilisez pour la diffusion en continu. Appuyez sur Média -> Ouvrir Networkstream et collez le texte suivant dans le champ:

    rtsp://[IP].[TO].[THE].[PI]:8554/
    

Si vous ne vous souciez pas de FPS (images par seconde) et que vous ne voulez pas de délai, vous pouvez utiliser MJPEG. Vous pouvez en savoir plus à ce sujet ICI

Regardez CE wiki sur le module de caméra Raspberry Pi. J'espère que vous trouverez ce que vous cherchez.


Avez-vous une idée du pourquoi de ce qui suit sur VLC sous Windows? Votre entrée ne peut pas être ouverte: VLC ne peut pas ouvrir la MRL 'rtsp: //192.168.1.78: 8554'. Consultez le journal pour plus de détails. Le côté Pi semble être ok - pas d'erreurs et semble réagir au client connecté?
monojohnny

@monojohnny Le raspberry pi est-il en streaming? Vérifiez si la vidéo fonctionne réellement en branchant un écran. Si la vidéo fonctionne, vous devriez voir le flux à l'écran branché sur le framboise pi.
Diego

@monojohnny Merci pour ce commentaire Diego ... fonctionne parfaitement du premier coup! monojohnny ... vous devez mettre le "/" suivant / sinon vlc se plaint. Essayez ceci: rtsp: //192.168.1.78: 8554 /
Sujay Phadke

Merci @Diego cela a bien fonctionné pour moi, mais comment puis-je quitter mon flux?
Note

J'ai le même problème sur Windows et je ne suis pas en mesure de diffuser la vidéo à partir de mon pi. étant donné que je vois le streaming vidéo de la caméra pi sur un écran connecté au pi mais pas via VLC installé sur mon ordinateur Windows 10.
Mostafa

23

J'ai essayé quelques options. Cependant, j'ai trouvé le meilleur résultat en utilisant ce projet: RPi-Cam-Web-Interface de la communauté eLinux

le flux a presque zéro retard.

bonne chance :)


4
Les gens qui recherchent une latence nulle, vérifiez bien. Les accessoires à @ user2998302. Je ne peux pas croire, pour un an, cela sans avertissement (reconnaissance) à ce sujet.
igaurav

Bien qu’il s’agisse d’une installation rapide et facile, le logiciel est loin d’être optimisé. Par conséquent, même si sa latence est faible (latence nulle), l’interface est très bavarde et utilise des cycles de processeur supplémentaires. Ce n'est pas un problème si vous n'exécutez rien d'autre, mais cela pourrait l'être si vous le faites, surtout sur un Pi 1.
Nick

C'est génial!
Hamza Ouaghad

Le streaming vidéo Web le plus rapide à ce jour parmi ceux que j'ai testés (également le pilote natif v4l2 en streaming via vlc), une latence presque nulle. Inutile de se plaindre de l'optimisation alors que toutes les ressources Internet concernant ce problème ne vous donneront pas un meilleur résultat que cette application.
Gabber

woah, je dois admettre que celui-ci bascule!
L.Trabacchin

18

Le moyen le plus simple que j’ai trouvé est d’obtenir une vidéo en direct avec un appareil photo sans framboise sans tête, avec une caméra framboise.

Cette solution fonctionne immédiatement, sans installation de logiciel supplémentaire sur le PI.

Sur le PI:

raspivid -t 0 -l -o tcp://0.0.0.0:3333

Sur l'ordinateur, on peut diffuser avec VLC:

vlc tcp/h264://192.168.66.154:3333

(en supposant que 192.168.66.154 est l'adresse IP du PI)


Bienvenue sur Raspberry Pi! En général, nous vous déconseillons de copier textuellement vos réponses d’une question à l’autre. Dès que vous aurez atteint 15 représentants, vous pourrez marquer les questions identiques en tant que doublons, de sorte qu’il n’y ait qu’une copie. Merci de partager votre réponse au problème, cependant!
Aurora0001

@Per Hansen Ne travaille pas pour moi ... Il peut y avoir autre chose à faire à part assigner un port.
Amit Ray

Cela fonctionne très bien! Utiliser un RPi3B + et Raspbian 9.4 (stretch) sans tête.
dparkar

5

J'ai posté une solution possible sur le forum framboise en utilisant un serveur RTSP léger basé sur live555 alimenté par un pilote V4L2 prenant en charge la capture H264:

sudo modprobe -v bcm2835-v4l2
git clone https://github.com/mpromonet/v4l2rtspserver.git
cd v4l2rtspserver
cmake .
make install
v4l2rtspserver -H <height> -W <width> -F <fps>

Ensuite, vous devriez pouvoir accéder au flux RTSP en utilisant:

vlc rtsp://<raspberry>:8554/unicast

qu'en est-il du décalage horaire?
Kuhajeyan

plus court que cvlc.
mpromonet

cmake s'est plaint de "Impossible de trouver ALSA (manquant: ALSA_LIBRARY ALSA_INCLUDE_DIR)", jusqu'à ce que j'ajoute quelques packages supplémentaires pour mon projet. La solution est la suivante: "sudo apt-get install libopus-dev libexpat1-dev libasound2-dev libudev-dev libavahi-client-dev" (mon hypothèse est que le son suffit peut-être ici).
MoonCactus

oh, et ça marche plutôt bien (solution légère), merci. Le décalage temporel est correct, environ 2 secondes, si cela se compare avantageusement à d’autres solutions à mon humble avis.
MoonCactus

@ MoonCactus: Je pense avoir corrigé l'installation d'ALSA (il n'a besoin que de libasound2-dev). Le délai devrait être inférieur à une seconde. Si vous utilisez vlc, vous pouvez réduire la mise en mémoire tampon du réseau avec --network-caching 300
mpromonet le

4

UV4L (également) prend en charge la diffusion audio et vidéo au format HTML5 standard sans configuration requise. D'autres options sont également possibles, comme MJPEG sur http.

Mise à jour:

UV4L prend désormais également en charge la diffusion audio et vidéo en direct sur Jitsi Meet Rooms sur le Web. Aucune configuration spéciale n'est requise. C'est aussi simple que de remplir votre nom, votre pièce et de cliquer sur Démarrer .

2ème mise à jour:

UV4L prend désormais en charge la vidéo codée en matériel H264 également, à plein fps, HD et éventuellement Full HD.


1
La seule chose à faire est que vous ne pouvez obtenir que le flux élémentaire que pratiquement tout ne comprend PAS. Pas beaucoup d'utilisation, malheureusement. Vous avez besoin de quelque chose pour émettre WebRTC (que vous pouvez utiliser avec UV4L si vous avez un Pi2 et plus tard. Si vous avez besoin (à cause de contraintes de puissance / taille) d'un Zéro pour le faire, votre SOL.
Svartalf

3

Les deux mjpeg_streameret motionsemblent avoir une meilleure latence que cvlc.

En utilisant mjpg_streamer

mjpeg_streamer nécessite une compilation mais les instructions sur le github sont simples.

Après la compilation, il peut être exécuté en le lançant à start.shpartir du répertoire du projet ou en le lançant directement (dans le répertoire du projet):

./mjpg_streamer -i "./input_uvc.so -rot 180" -o "./output_http.so -w ./www -p 8090"

8090est le port TCP. S'il n'est pas spécifié, le port 8080sera utilisé par défaut. Le start.shscript contient des exemples d'utilisation avec des options supplémentaires.

En utilisant motion

Motion inclut un service systemd qui facilite le démarrage automatique, l’arrêt ou le redémarrage.

Pour l'utiliser en mode webcam IP, les paramètres suivants doivent être définis dans /etc/motion/motion.conf:

daemon on
stream_localhost off
output_pictures off
ffmpeg_output_movies off
stream_maxrate 24
framerate 24
width 640
height 480

Ensuite, dans le /etc/default/motionset:

start_motion_daemon=yes

Pour que le service démarre automatiquement au démarrage:

systemctl enable motion

Utilisez systemctl start/stop/restart motionpour l'action correspondante.

Le port de diffusion par défaut est 8081. Le port est défini sous stream_portdans /etc/motion/motion.conf.


1

Je ne sais pas si vous recherchez un logiciel de surveillance, mais j'ai réussi à installer et à faire fonctionner motionun détecteur de mouvement. Vous devriez jeter un oeil dans le guide officiel .


Motion s'applique uniquement aux caméras USB
geneorama

3
@geneorama motion utilise l'interface video4linux qui n'est pas limitée à la caméra USB, le module bcm2835-v4l2 donne accès à la carte caméra via cette interface.
mpromonet

1

J'ai été capable de diffuser de la vidéo en utilisant uv4l WebRTC sur Raspberry Pi 2. C'est super facile. Suivez simplement ce tutoriel. J'espère que cette aide.


Veuillez inclure ici les parties pertinentes du didacticiel, afin d’empêcher la pourriture des liens.
Bex

Applicable uniquement sur la Pi2 et au-dessus. Ne fonctionne pas avec un 1A / 1A + / zéro. Pas tout à fait sûr de savoir pourquoi il ne le peut pas puisque les gens semblent être capables de le faire, mais bon ...
Svartalf

1

J'avais du mal à obtenir le flux vidéo sur Windows 7. Il y avait beaucoup de solutions Linux, je ne pouvais pas les répliquer sous Windows jusqu'à présent. J'ai finalement eu une solution assez rapide:

  1. obtenez une version Windows de netcat: http://joncraton.org/files/nc111nt.zip , décompressez-le et ajoutez-le au chemin
  2. Obtenez une nouvelle version de mpc-hc, qui peut être lue à partir de stdin: https://mpc-hc.org/downloads/ install et ajouter également son chemin d'accès au chemin (le mien est 64 bits, mais j'espère que 32 bits ainsi que)

Sur framboise pi:

raspivid -t 0 -w 1024 -h 768 -fps 20 -b 1000000 -o - | nc your.receiver.ip.address 5001

Sur la machine Windows:

nc -l -p 5001 | mpc-hc64 -

Ainsi, j'estime que rien n'est remballé ou rediffusé, remuxé ou quoi que ce soit d'autre. Le flux binaire de raspvid est introduit dans mpc et affiché. Ma framboise fonctionne en wifi, alors au début, je reçois un délai raisonnable, qui est réduit en une demi-minute à 0,2-0,3 secondes.

Malheureusement, je ne pouvais pas utiliser vlc de la même manière, car il nc -l -p 5001 | vlc -suffit d’ouvrir la fenêtre vlc sans aucune vidéo.


1

J'ai utilisé Nginx avec le support RTMP pour la diffusion en continu dans le monde entier, ainsi que avconv pour le traitement des entrées de caméra. Le code est disponible sur Github .


Bon, voulez-vous partager une expérience vidéo décalage temporel?
Kuhajeyan

2
Oui, il y a eu un décalage d'environ 5 secondes.
TTT

0

Bien que le code de Peter Hansen fonctionne sans doute très bien sur un réseau local, l’intégralité du protocole: TCP concerne l’intégrité des données en temps réel. Dans un flux en temps réel, une perte de données peut être acceptable pour un affichage en temps voulu. Dans ce cas, UDP peut être meilleur. Je n'ai pas testé ce code.

S'il s'agit d'une caméra de sécurité, la multidiffusion peut être envisagée. Les routeurs modernes peuvent le faire même les modèles à 100 $.


0

J'ai installé une solution ONVIF à partir de https://github.com/BreeeZe/rpos sur mon pi, en suivant les instructions fournies sur README.md .

La seule différence est que j'ai installé node v8.4.0. Cela me permet de voir la sortie de ma caméra dans un NVR connecté sur le même réseau. En outre, la caméra peut être lue directement via le flux réseau du lecteur VLC en utilisant l’adressertsp://192.168.1.3:8554/h264


0

Cela faisait un moment que le problème était similaire:

https://www.npmjs.com/package/ws-avc-player

C'est plus simple que les autres solutions proposées, mais je pense que cela fonctionne bien si une faible latence par rapport au Web est la priorité.

Fonctionne sur la plupart des navigateurs (même mobiles à 480p) sans aucun plugin nécessaire sur le navigateur.


Je n'ai pas écrit le décodeur lui-même, c'est un projet séparé. Github.com/mbebenita/Broadway Cependant, il est étonnamment bien optimisé et, comme je l'ai dit dans la réponse, il peut facilement gérer un 480p sur un droïde. La raison pour laquelle j’ai choisi Brodway est qu’il n’existe pas de codeur matériel vp8 / 9 sur rpi, de sorte que h264 est vraiment la seule option décente. Mais si vous souhaitez utiliser le décodeur h264 natif dans le navigateur, vous pouvez oublier la faible latence.
MatijaG

Cela semble tellement incroyable que je dois l'essayer.
kwasmich

Tous les commentaires seront les bienvenus :)
MatijaG

Seulement maintenant j'avais un peu de temps libre. Je ne parviens pas à obtenir l'exemple pour fonctionner avec le raspividflux de la caméra. Avec ffmpegun autre côté, je n’obtiens qu’un dixième d’images par seconde. J'ai utilisé un Raspbian propre et un Pi Zero. Avez-vous des indices pour moi?
kwasmich

Ouais, avec ffmpeg, le manque d’accélération matérielle est irréalisable. Essayez d'exécuter l'exemple avec: node example/index.js raspividCela devrait fonctionner immédiatement si vous rencontrez des problèmes, essayez de l'exécuter juste node example/index.jset séparément /opt/vc/bin/raspivid -pf baseline -ih -t 0 -w 640 -h 480 -hf -fps 15 -g 30 -o - | nc localhost 5000et voyez si vous obtenez des erreurs de la part de raspivid
MatijaG
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.