Come trasmettere video in streaming dalla videocamera Raspberry Pi e guardarlo dal vivo


93

Sono nuovo di Raspberry Pi e persino nuovo di Raspberry Pi. Ho visto molti tutorial online per la fotocamera Raspberry Pi, ma non ho ancora trovato che mi permetta di trasmettere in streaming direttamente dalla fotocamera Raspberry Pi come puoi con una webcam (usando SimpleCV o OpenCV). Speravo che qualcuno potesse indicarmi la giusta direzione.


hai provato mjpgstreamer? Shell inserisco la soluzione?
Jaromrax,

3
Le persone che cercano una soluzione a latenza zero dovrebbero controllare raspberrypi.stackexchange.com/a/32521/30681
igaurav

Se hai ssh e mpv: ssh raspberrypi raspivid -o - -t 0 -fps 25 -w 640 -h 360 | mpv - --speed 2 --fps 25("--speed 2" gli impedisce di rallentare troppo).
Metamorfico

Risposte:


81

La soluzione suggerita da Diego è buona, tranne per il fatto che è piuttosto lenta e presenta un enorme ritardo video poiché la VLC re-streaming un flusso di raspvid. Dal 12/2013 è disponibile un driver v4l2 ufficiale: http://www.ics.com/blog/raspberry-pi-camera-module#.VJFhbyvF-b8 Questo rende obsoleto il re-streaming menzionato. Basta caricare il modulo e usarlo:

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}'

Questo crea un flusso http sulla porta 12345, puoi usare anche altri formati, come quello rtcp dalla risposta di Diego. Maggiori informazioni qui: https://web.archive.org/web/20151012014829/http://www.videolan.org:80/doc/streaming-howto/en/ch03.html


2
In questo risposta , si suggerisce di aggiungere :demux=264al CVLC perché il flusso è H264 RAW ed è necessario impostare il 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. Ciò rende possibile guardare lo streaming in VLC per Android, ad esempio.
Jaime M.

8
Nel link fornito, invece di autoreconf -vfite ora dovresti usare./bootstrap.sh
JuJoDi

1
C'è un modo che mi permetterà sia di trasmettere il video sia di salvarlo sulla scheda SD RPi?
O Weinberger il


4
Penso che valga la pena notare / confermare che questo metodo non funziona in un ambiente senza testa. Ricevo errori, uno dei quali parla di X11
Nick

41

Esistono diverse opzioni tra cui scegliere. Nel mio lavoro stiamo usando VLC per trasmettere in streaming video acquisiti da Raspberry Pi Camera dalle nostre sale server all'ufficio. Un aspetto negativo di questo è che ci sono circa 5 secondi di ritardo e non ho trovato una soluzione a questo. Di seguito è la nostra configurazione:

  1. Raspbian è installato e aggiornato e assicurati che la tua videocamera sia abilitata (abilitala eseguendo sudo raspi-config e scegli Abilita videocamera)

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

    sudo apt-get install vlc
    
  3. Crea uno script per avviare lo stream con il seguente contenuto o esegui il comando (non puoi fare altro se esegui semplicemente il comando).

    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. Rendi eseguibile lo script

    sudo chmod +x myscript.sh
    
  5. Se vuoi avviare automaticamente il flusso devi aggiungere lo script a crontab. Per farlo funzionare ho dovuto creare un altro script gestito da cron (OBS! VLC non può essere eseguito come sudo, quindi assicurati di essere nel cron giusto). sudo nano myscript2.sh:

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

    Poi:

    sudo chmod +x myscript2.sh
    crontab -e
    @reboot /path/to/myscript2.sh
    
  6. Per guardare la videostream, apri VLC su un computer sulla stessa rete del raspberry pi che stai utilizzando per lo streaming. Premere Media -> Apri Networkstream e incollare quanto segue nel campo:

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

Se non ti interessa l'FPS (frame al secondo) e non desideri alcun ritardo, puoi usare MJPEG. Puoi leggere di più su questo QUI

Guarda QUESTA wiki sul modulo videocamera Raspberry Pi. Spero che tu possa trovare quello che stai cercando.


Qualche idea sul perché avrei ottenuto quanto segue su VLC su Windows? Impossibile aprire il tuo input: VLC non è in grado di aprire l'MRL "rtsp: //192.168.1.78: 8554". Controlla il registro per i dettagli. Il lato Pi sembra essere ok - nessun errore e sembra reagire al client connesso?
monojohnny

@monojohnny Il raspberry pi è in streaming? Verifica se il video funziona effettivamente collegando una schermata. Se il video funziona, dovresti vedere lo stream sullo schermo collegato a Raspberry Pi.
Diego,

@monojohnny Grazie per il commento Diego ... funziona perfettamente al primo tentativo! monojohnny ... devi mettere il finale "/" altrimenti Vlc si lamenta. Prova questo: rtsp: //192.168.1.78: 8554 /
Sujay Phadke

Grazie @Diego questo ha funzionato alla grande per me ma come posso chiudere il mio stream?
Denoteone

Ho lo stesso problema su Windows e non riesco a trasmettere il video dal mio pi. dato che vedo lo streaming video dalla telecamera pi su uno schermo collegato al pi ma non tramite VLC installato sul mio PC Windows 10.
Mostafa,

23

Ho provato alcune opzioni. Tuttavia, ho trovato il miglior risultato usando quel progetto: RPi-Cam-Web-Interface dalla comunità di eLinux

il flusso ha un ritardo quasi zero.

in bocca al lupo :)


4
Le persone in cerca di latenza zero, controlla questo sicuramente. Puntelli a @ user2998302. Non ci posso credere, per un anno non ci sono voti (riconoscimenti) su questo.
igaurav,

Sebbene si tratti di una configurazione semplice e veloce, il software è tutt'altro che ottimizzato, quindi, nonostante la sua bassa latenza (niente come la latenza zero), l'interfaccia è molto loquace e utilizza alcuni cicli CPU aggiuntivi. Non è un problema se non stai eseguendo nient'altro, ma potrebbe esserlo se lo sei, soprattutto su un Pi 1.
Nick

Questo e spettacolare!
Hamza Ouaghad,

Lo streaming video web più veloce finora tra quelli che ho testato (anche il driver nativo v4l2 trasmesso in streaming tramite vlc), quasi zero latenza. Non c'è motivo di lamentarsi dell'ottimizzazione mentre ogni risorsa su Internet relativa a questo problema non otterrà risultati migliori rispetto a questa applicazione.
Gabber,

woah, devo ammettere che questo è incredibile!
L.Trabacchin,

18

Il modo più semplice che ho trovato, per ottenere un video in diretta da un lampone pi senza testa, con una videocamera pi lampone.

Questa soluzione funziona immediatamente, senza installare software aggiuntivo sul PI.

Sul PI:

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

Sul computer, è possibile eseguire lo streaming con VLC:

vlc tcp/h264://192.168.66.154:3333

(supponendo che 192.168.66.154 sia l'indirizzo IP del PI)


Benvenuto in Raspberry Pi! Generalmente scoraggiamo a copiare le risposte testualmente da una domanda all'altra: una volta raggiunti i 15 rappresentanti, sarai in grado di contrassegnare le domande identiche a "duplicate" in modo che ci sia una sola copia della risposta. Grazie per aver condiviso la tua risposta al problema, però!
Aurora0001

@Per Hansen Non funziona per me ... Potrebbe esserci qualcos'altro che deve essere fatto oltre all'assegnazione di una porta.
Amit Ray,

Funziona benissimo! Utilizzo di RPi3B + e Raspbian 9.4 (stretch) senza testa.
dparkar,

5

Ho pubblicato una possibile soluzione nel forum Raspberry utilizzando un server RTSP leggero basato su live555 che viene alimentato con un driver V4L2 che supporta l'acquisizione 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>

Successivamente dovresti essere in grado di accedere allo stream RTSP usando:

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

che dire del ritardo?
kuhajeyan,

più corto di cvlc.
mpromonet

cmake si è lamentato di "Impossibile trovare ALSA (mancante: ALSA_LIBRARY ALSA_INCLUDE_DIR)", fino a quando non ho aggiunto altri pacchetti per il mio progetto. La soluzione è tra questi: "sudo apt-get install libopus-dev libexpat1-dev libasound2-dev libudev-dev libavahi-client-dev" (la mia ipotesi è assurda potrebbe essere sufficiente qui).
MoonCactus,

oh, e funziona abbastanza bene (soluzione leggera), grazie. Il ritardo è decente, circa 2 secondi si confronta favorevolmente con altre soluzioni imho.
MoonCactus,

@MoonCactus: penso di aver corretto l'installazione di ALSA (necessita solo di libasound2-dev). Il ritardo dovrebbe essere inferiore a un secondo, se si utilizza vlc, è possibile ridurre il buffering di rete utilizzando --network-caching 300
mpromonet

4

UV4L (anche) supporta lo streaming audio e video HTML5 standard senza necessità di configurazione. Sono possibili anche altre opzioni, come MJPEG su http.

Aggiornare:

UV4L ora supporta anche trasmissioni audio e video in diretta su Jitsi Meet Rooms sul Web. Non è richiesta alcuna configurazione speciale. È facile come inserire il tuo nome, la tua stanza e fare clic su Avvia .

2 ° aggiornamento:

UV4L ora supporta anche video con codifica hardware H264, a pieno fps, HD e possibilmente Full HD in futuro.


1
L'unica cosa è che sei solo in grado di ottenere il flusso elementare che praticamente tutto NON capisce. Purtroppo non molto. Hai bisogno di qualcosa per emettere WebRTC (che se hai un Pi2 e versioni successive, puoi farlo con UV4L. Se hai bisogno (a causa del vincolo di potenza / dimensione) di uno Zero per farlo, il tuo SOL.
Svartalf

3

Entrambi mjpeg_streamere motionsembrano avere una latenza migliore rispetto a cvlc.

utilizzando mjpg_streamer

mjpeg_streamer richiede compilazione ma le istruzioni su github sono semplici.

Dopo la compilazione può essere eseguito avviando start.shdalla directory del progetto o eseguendo direttamente (nella directory del progetto):

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

dov'è 8090la porta TCP. Se non specificato, la porta 8080verrà utilizzata per impostazione predefinita. Lo start.shscript contiene alcuni esempi di utilizzo con opzioni extra.

utilizzando motion

Motion include un servizio systemd che semplifica l'avvio automatico all'avvio, all'arresto o al riavvio.

Per utilizzarlo in modalità webcam IP, è necessario configurare le seguenti impostazioni /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

Successivamente, nel /etc/default/motionset:

start_motion_daemon=yes

Per avviare automaticamente il servizio all'avvio:

systemctl enable motion

Utilizzare systemctl start/stop/restart motionper l'azione corrispondente.

La porta di streaming predefinita è 8081. La porta è impostata in stream_portin /etc/motion/motion.conf.


1

Non so se stai cercando un software di sorveglianza, ma sono riuscito a installare e utilizzare motionun rilevatore di movimento software. Dovresti dare un'occhiata alla guida ufficiale .


Il movimento si applica solo alle fotocamere USB
geneorama,

3
@geneorama motion usa l'interfaccia video4linux che non è limitata alla videocamera USB, il modulo bcm2835-v4l2 dà accesso alla scheda della videocamera attraverso questa interfaccia.
mpromonet,

1

Sono stato in grado di trasmettere video in streaming usando uv4l WebRTC su Raspberry Pi 2. È semplicissimo. Segui questo tutorial. Spero questo aiuto.


Includere qui le parti pertinenti del tutorial, al fine di prevenire la putrefazione dei collegamenti.
Bex,

Applicabile solo su Pi2 e versioni successive. Non funziona con 1A / 1A + / Zero. Non sono del tutto sicuro del perché non ci riesca dato che le persone sembrano essere in grado di farlo, ma ehi ...
Svartalf,

1

Avevo problemi a ottenere il flusso video su Windows 7. C'erano molte soluzioni Linux, non potevo replicarle su Windows fino ad ora. Alla fine ho ottenuto una soluzione abbastanza veloce:

  1. ottenere una versione Windows di netcat: http://joncraton.org/files/nc111nt.zip , decomprimerlo e aggiungere al percorso
  2. ottenere una nuova versione di mpc-hc, che può leggere da stdin: https://mpc-hc.org/downloads/ install e aggiungere anche il suo percorso al percorso (il mio è a 64 bit, ma si spera che a 32 bit lo faccia anche)

Su Raspberry Pi:

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

Sulla macchina Windows:

nc -l -p 5001 | mpc-hc64 -

Pertanto, ritengo che nulla venga reimballato o reimpostato, rifatto o che mai. Il flusso binario da raspvid viene immesso in mpc e mostrato. Il mio lampone funziona tramite Wi-Fi, quindi all'inizio ricevo un discreto ritardo, che si riduce di mezzo minuto a quei 0,2-0,3 secondi di ritardo.

Sfortunatamente, non potevo usare vlc nello stesso modo, dato nc -l -p 5001 | vlc -che apre semplicemente la finestra di vlc senza alcun video.


1

Ho usato Nginx con supporto RTMP per lo streaming in tutto il mondo, insieme ad avconv per l'elaborazione dell'input della telecamera. Il codice è disponibile su Github .


Bene, vorresti condividere qualche ritardo sull'esperienza video?
kuhajeyan,

2
Sì, c'è stato un ritardo di circa 5 secondi.
TTT,

0

Mentre il codice di Peter Hansen molto probabilmente funziona bene su una LAN, per completezza: TCP riguarda l'integrità dei dati rispetto al tempo reale. In un flusso in tempo reale alcune perdite di dati possono essere accettabili per motivi di visualizzazione tempestiva. In questo caso UDP potrebbe essere migliore. Non ho testato quel codice.

Se si tratta di una videocamera di sicurezza, è possibile prendere in considerazione il multicasting. I router moderni possono farlo anche con i modelli da $ 100.


0

Ho installato una soluzione ONVIF da https://github.com/BreeeZe/rpos sul mio pi, seguendo le istruzioni su README.md .

L'unica differenza è che ho installato node v8.4.0. Questo mi permette di vedere l'output della mia videocamera in un NVR collegato sulla stessa rete. Inoltre, la telecamera può essere riprodotta direttamente attraverso il flusso di rete del lettore VLC utilizzando l'indirizzortsp://192.168.1.3:8554/h264


0

Un po 'di tempo fa si è verificato un problema simile con questo:

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

È più semplice rispetto ad altre soluzioni proposte, ma penso che funzioni bene se la bassa latenza sul web è la priorità.

Funziona sulla maggior parte dei browser (anche mobile a 480p) senza plug-in necessari sul browser.


Non ho scritto il decodificatore stesso, è un progetto separato github.com/mbebenita/Broadway Tuttavia è sorprendentemente ben ottimizzato e, come ho detto nella risposta, può facilmente gestire un 480p su un droide. Il motivo per cui sono andato con Brodway è perché non esiste un codificatore hardware vp8 / 9 su rpi, quindi h264 è davvero l'unica opzione decente. Ma se si desidera utilizzare il decodificatore h264 nativo nel browser, è possibile dimenticare la bassa latenza.
MatijaG

Sembra così incredibile che devo provarlo.
kwasmich,

Qualsiasi commento sarà molto gradito :)
MatijaG

Solo ora ho avuto del tempo libero. Sto riscontrando problemi nell'eseguire l'esempio con il raspividfeed della videocamera. Con ffmpegd'altra parte sto solo ottenendo il decimo di fotogrammi al secondo. Ho usato un Raspbian pulito e un Pi Zero. Hai qualche suggerimento per me?
kwasmich,

Sì, con ffmpeg sarà un no-go perché la mancanza di accelerazione hardware. Prova a eseguire l'esempio con: node example/index.js raspividDovrebbe funzionare immediatamente se hai problemi prova a eseguire solo node example/index.jse separatamente /opt/vc/bin/raspivid -pf baseline -ih -t 0 -w 640 -h 480 -hf -fps 15 -g 30 -o - | nc localhost 5000e vedi se ricevi errori da raspivid
MatijaG
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.