Ho ottenuto il Pi B + e la videocamera Pi e ora sto cercando di trovare la configurazione più efficiente (CPU bassa) e latenza più bassa per lo streaming di video con codifica H.264 dalla videocamera al mio server di casa.
Ho letto quanto segue:
(Tutti i collegamenti usano gstreamer-1.0 da deb http://vontaene.de/raspbian-updates/ . main
.)
Molto è stato fatto in questo senso negli ultimi anni.
Inizialmente, abbiamo dovuto reindirizzare l'output di raspivid
in gst-launch-1.0
(vedi link 1).
Quindi (link 2) è stato creato il driver V4L2 ufficiale, che ora è standard, e consente di ottenere direttamente i dati senza pipe, usando solo gstreamer (vedi in particolare il post di towolf »sab 07 dic 2013 15:34 in link 2):
Mittente (Pi): gst-launch-1.0 -e v4l2src do-timestamp=true ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.178.20 port=5000
Ricevitore: gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
Se ho capito bene, entrambi i modi usano la GPU per eseguire la decodifica H264, ma quest'ultima è un po 'più efficiente dal momento che non ha bisogno di passare attraverso il kernel un'altra volta poiché non c'è pipe tra i processi coinvolti.
Ora ho alcune domande a riguardo.
Quest'ultimo è ancora il modo più recente per ottenere in modo efficiente H264 dalla fotocamera? Ho letto
gst-omx
, che consente pipeline gstreamer come... video/x-raw ! omxh264enc ! ...
. Questo fa qualcosa di diverso dal solo utilizzovideo/x-h264
o potrebbe anche essere più efficiente? Qual è la differenza?Come faccio a sapere quale plug-in di codifica gstreamer viene effettivamente utilizzato quando utilizzo la
video/x-h264 ...
pipeline? Questo sembra solo specificare il formato che desidero, rispetto alle altre parti della pipeline, dove chiamo esplicitamente il componente (codice) (comeh264parse
ofpsdisplaysink
).In questa risposta al collegamento 1 Mikael Lepistö menziona "Ho rimosso un passaggio filtro non necessario dal lato streaming" , il che significa che ha eliminato il
gdppay
egdpdepay
. Cosa fanno quelli? Perché sono necessari? Posso davvero toglierli?Egli menziona anche che specificando i
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96"
parametri per iludpsrc
lato ricevente, è in grado di avviare / riprendere lo streaming nel mezzo del flusso. Cosa ottengono questi tappi, perché queste scelte specifiche, dove posso leggere di più su di loro?Quando faccio quanto suggerito nelle domande 3 e 4 (aggiungendo
caps
, rilasciandogdppay
egdpdepay
) la mia latenza video peggiora (e sembra accumularsi, la latenza aumenta nel tempo e dopo pochi minuti il video si interrompe)! Perché potrebbe essere? Vorrei ottenere la latenza ottenuta con il comando originale, ma ho anche la caratteristica di poter unire il flusso in qualsiasi momento.Ho letto che RTSP + RTP di solito usano una combinazione di TCP e UDP: TCP per i messaggi di controllo e altre cose che non devono perdersi e UDP per la trasmissione effettiva dei dati video. Nelle configurazioni sopra, lo sto effettivamente usando o sto solo usando UDP? È un po 'opaco per me se gstreamer se ne occupi o no.
Gradirei qualsiasi risposta anche a una sola di queste domande!
cat file | grep ...
invece di grep ... file
. La pipe aggiunge un altro livello di copia da e verso il kernel, che è facilmente misurabile, specialmente su dispositivi con larghezza di banda di memoria ridotta. Se gstreamer è in grado di leggere direttamente dal file del dispositivo, perché non utilizzarlo? Per quanto riguarda il tuoraspivid | cvlc
suggerimento: lo stavo usando prima di passare alla soluzione basata su gstreamer, ha una latenza fino a 3 secondi in più rispetto a gstreamer (non so perché).
cvlc
usa ~ 45%, ma semplicemente scorrendo un tubo a quella velocità di dati (tenendo presente di nuovo, il tubo non lo sta rallentando ), a mala pena spostare l'ago, penso. Come <5%. Non è del tutto insignificante se vuoi farlo nel modo più efficiente possibile ovviamente ...
raspivid | cvlc
quello del 40-50%. Le persone possono rispondere meglio a una domanda che li sfida a migliorare su una figura specifica. In questo momento stai chiedendo molto perché, senza spiegare perché ognuno dei quali è significativo.
|
crei problemi in questo contesto è un incredibile pezzo di BS Hai provato qualcheraspivid | cvlc
metodo? Non ho avuto la fotocamera per molto o troppo tempo per giocarci, ma usarlo per produrre un flusso http (visualizzabile su Linux dall'altra parte w /vlc
) sembra funzionare bene.