Ci sono milioni di forum e discussioni su come sbarazzarsi di una latenza di 5 secondi quando si utilizza un Pi insieme a una PI-Cam come telecamera di sorveglianza. Molti tutorial mostrano come usare vlc per codificare e trasmettere le immagini usando il protocollo RTP che provoca un ritardo di circa 5 secondi.
Secondo me, la ragione è che raspivid sta codificando lo stream in H264, mentre VLC deve decodificarlo di nuovo e ricodificarlo in qualunque RTP sia. La riga di comando è simile alla seguente:
raspivid -w 640 -h 480 -o - -t 0 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
La prima parte dice a raspivid di trasmettere in streaming video all'output standard:
raspivid -w 640 -h 480 -o - -t 0
La parte dopo la pipe, dice a VLC di prenderla e decodificarla usando h264:
cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
Questo mix e demux-ing sono abbastanza una vita di risorse!
Ho trovato le fonti di raspicam su github e penso che si possa fare qualcosa nel metodo encoder_buffer_callback (attualmente alla riga 848) per saltare la codifica. Tuttavia non sono bravo in c, e non ho familiarità con la codifica video, quindi non ho idea di dove cominciare.
Su Github posso vedere 330 fork, ma non sembrano essere specifici per raspicam (piuttosto per l'intero progetto userland). Mi sono perso cercando di trovare un fork che ha rimosso la codifica o implementato qualcosa di più semplice come mjpeg.
Qualcuno con conoscenza di codec video e c potrebbe aiutare me e gli altri utenti gazillion a sbarazzarsi della latenza? Probabilmente la soluzione è già là fuori in una di quelle forcelle, ma ho passato ore a cercarla senza fortuna.
ps Non sto cercando una soluzione browser , ma alla fine voglio trasmetterla a Synology, preferibilmente usando lo streaming mjpeg (ma non tramite una pagina web, piuttosto uno stream mjpeg standard integrato nella maggior parte delle ip-cam commerciali). Il primo passo è sbarazzarsi di h264.