Streaming H264 con Logitech C920


13

Ho una webcam logitech C920. Ha la capacità di codificare direttamente il video in H264.

Voglio riprodurre ciò che è stato fatto con un Beaglebone, ma usando un Raspberry Pi: inviare un flusso H264 alla rete . Il Raspberry Pi è quindi solo qui per impacchettare lo stream in RTP, la compressione video viene effettuata dalla webcam stessa. La modalità H264 è imposta usando video4linux.

Finora, e se uso un computer comune con l'ultima versione di Ubuntu, funziona usando VLC come server o GStreamer. Ad esempio, se lancio su Raspberry Pi un server VLC usando il comando:

cvlc --sout=#rtp{sdp=rtsp://:8554/test} 'v4l2:///dev/video0:chroma=H264:width=800:height=600:fps=30'

... e poi se leggo il flusso con VLC su un altro computer, va bene.

Tuttavia, se uso Raspberry Pi per inviare lo streaming video, il risultato è piuttosto scarso. Molta immondizia nell'immagine non appena qualcosa si muove. I tasti immagine vengono ben ricevuti ogni 10 secondi, ma nel frattempo non sono abbastanza buoni rispetto al flusso da un computer comune.

Ho anche provato il metodo descritto per il beaglebone con l' utility "cattura" fornita : ok se eseguo lo streaming da un computer reale, lo stesso problema di immondizia se eseguo lo streaming da un Raspberry Pi.

Non è un problema di rete: ho fatto alcuni controlli di rete con Wireshark e le statistiche di VLC, non ho perdita di pacchetti. Ho provato con Raspbian e Arch Linux per Raspi (gstreamer 0.10 in raspbian, gstreamer 1.0 in Arch Linux).

Non so se sia rilevante o meno, ma ho anche testato con la versione di supporto float di Raspbian. Per poter usare un kernel 3.2 è necessario prima un aggiornamento; ma stesso problema, il video ha dei rifiuti.

Qualche idea su cosa potrei fare per migliorare la qualità del video?


Prova a ridurre la frequenza dei fotogrammi. La CPU di rPi è molto scarsa, quindi immagino che trasmettere un'immagine 800x600 a 30FPS sia troppo. Solo la nuova scheda videocamera rPI che è collegata tramite il connettore MIPI / CIS (anziché USB) trasmette 1080p a 15-30 FPS.
Matthias,

Non è FPS. Il Pi può gestire l'HD a 60FPS senza problemi usando il modulo Pi Camera. Se la videocamera Logitech invia il video H264 è già codificato e il Pi deve trasmettere nuovamente i pacchetti ... di cui è completamente capace. In effetti, può ritrasmettere fino a 6 stream HD @ 25FPS prima di raggiungere il massimo. Deve essere il driver V4L che corrompe i pacchetti
Piotr Kula,

So che è un vecchio thread, ma hai finalmente trovato qualcosa che funziona? Sto cercando di fare qualcosa di simile e bloccato
Ajith

Ho usato un Beaglebone e ha funzionato meglio. Il problema era a causa di un cattivo driver USB per RaspberryPi in Raspbian. Per quanto mi ricordo, in seguito ho provato lo stesso sistema con una versione successiva di Raspbian e avevo meno spazzatura. Potrei aver fatto un aggiornamento rpi (come detto in una delle risposte), ma non ricordo bene. Ma ciò che è certo è che le prestazioni erano migliori dopo aver utilizzato un firmware / sistema operativo aggiornato.
Vincent Hiribarren,

Vincent, visualizzo l'errore "Impossibile aprire v4l2 url". Questo comando è ora obsoleto?
Dalanmiller,

Risposte:


5

Ho avuto lo stesso problema, ho trovato questo thread durante la ricerca di un codificatore hardware, non per problemi c920.

Tuttavia, esegui un aggiornamento del firmware per Raspberry Pi e la spazzatura dovrebbe essere sparita

$> sudo rpi-update

Io stesso ho trovato la soluzione qui: http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi


Per chiudere questa domanda, accetto quella risposta. Il problema era a causa di un driver USB rotto, si è verificata una perdita di pacchetti nella comunicazione USB. Un sistema / firmware aggiornato dovrebbe fare il trucco.
Vincent Hiribarren,

2

Puoi provare a utilizzare FFMPEG. Ma il problema non è usare la versione dei repository perché è obsoleta. Esiste una versione biforcuta che funziona davvero bene.

Dovrai compilarlo che richiede circa 5 ore o scaricare un binario precompilato.

È quindi possibile reindirizzare i dati dal driver V4L a FFMPEG con queste impostazioni. Dove -i "fifo"dovrebbe essere solo il -icaputre del flusso di pipe e -fsarà necessario ricontrollare come output H264. il FLV lo riconfeziona in FLV che può essere giocato con lettori HTML.

ffmpeg -y \  
  -f h264 \  
  -i "$fifo" \  
  -c:v copy \  
  -map 0:0 \  
  -f flv "$urllocal"   

o un esempio ho scoperto che i target V4L direttamente, ma devi avere la videocamera presente /dev/video* dove * è 1o più ...

ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 out.avi

la -findica il formato di output in. Questo non significa che sarà transcodificarlo come H264 FLV appena viene avvolto nel formato FLV. quindi cambia l'indirizzo sul tuo lettore VLC client. per esempio-f mpegts udp:192.168.1.19:1234

VLC non sembra funzionare troppo bene sul Pi. Ho avuto pochissimo successo spingendo il modulo Pi cmaera sul mio PC usando UDP. Funzionava ma non era stabile.

Puoi anche guardare installare nginx con il modulo rtmp che funziona a meraviglia. Guarda questa guida ma dovrai modificare un po 'le impostazioni. Quindi connetti il ​​tuo lettore VLC al flusso nginx-rtmp e funzionerà come un fascino.


1
Quale versione biforcuta è quella che funziona bene?
Brian,

1

Questo sembra funzionare per me, almeno ... cvlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy


0

Prova con un buffer più grande sul client che visualizza il video. Per me c'è una differenza drammatica tra il buffer da 1000ms e il buffer da 200ms. Il buffer da 5000 ms è migliore del buffer da 1000 ms.

: Network-caching = 2000


Dovrebbe funzionare con la memorizzazione nella cache 0 con il jittering dispari su LAN. Ho fatto funzionare il modulo videocamera Pi senza problemi.
Piotr Kula,

0

Ho pubblicato una possibile soluzione nel forum Raspberry utilizzando un server RTSP leggero basato su live555 che acquisisce H264 da un driver V4L2. È disponibile da github h264_v4l2_rtspserver

Questo è stato fatto per la raspicamera, ma dovrebbe funzionare con qualsiasi dispositivo V4L2 che fornisce H264.


-1

Se ho capito bene la tua situazione, vuoi che Raspberry transcodifichi il video in H264? Penso che sia per questo che si ottengono cattive prestazioni, perché VLC utilizza la codifica software e Raspberry non è potente per questo compito.

Suggerirei di provare con Gstreamer e gst-omxplugin . C'è un elemento per la codifica video hardware che renderebbe un buon server dal tuo Raspberry.


1
Come ha detto, la videocamera Logitech fornisce già H.264. Quindi rPi trasporta solo frame ma non esegue alcuna codifica.
Matthias,

Non sta transcodificando. Sto solo ritrasmettendo i dati. Come in esso utilizza direttamente il flusso.
Piotr Kula,
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.