Ridurre la latenza con FFplay per encoder HDMI | Exvist Support

Domande frequenti: Ridurre la latenza con FFplay per Codificatore

Guida passo passo per ridurre la latenza con FFplay

1. Installare FFmpeg e FFplay

Assicurarsi che FFmpeg (che include FFplay) sia installato sul sistema. È possibile verificare se è installato eseguendo:
  1. ffplay -version
Se non è installato, è possibile scaricare e installare FFmpeg dalsito ufficialeoppure utilizzare un gestore di pacchetti comeapt or brewin base al sistema operativo.

2. Aprire FFplay con lo stream RTSP

Iniziare eseguendo FFplay con l'URL dello stream RTSP:
  1. ffplay rtsp://192.168.1.120:554/live/1_0
Sostituirertsp://192.168.1.120:554/live/1_0con l'URL RTSP effettivo del proprio encoder video.

3. Regolare la dimensione del buffer

Ridurre la dimensione predefinita del buffer per minimizzare il ritardo. Utilizzare il flag -rtsp_transport per selezionare il protocollo di trasporto (TCP o UDP). UDP in genere comporta una latenza inferiore.
Comando di esempio:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0
Spiegazione:
  1. -rtsp_transport udp: Forza il trasporto UDP, che generalmente ha una latenza inferiore rispetto a TCP.
  2. -fflags nobuffer: Disabilita il buffering per ridurre la latenza.
  3. -analyzeduration 0: Limita il tempo che FFplay impiega ad analizzare lo stream, contribuendo ad avviare la riproduzione più rapidamente.
  4. -probesize 32: Limita la quantità di dati utilizzati per sondare lo stream, il che riduce ulteriormente la latenza.

4. Regolare il ritardo dell'uscita video

Utilizzare il flag -sync per regolare la sincronizzazione video. Impostandolo su video si forza FFplay a sincronizzarsi con lo stream video, il che può aiutare a ridurre la latenza.
Comando di esempio:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

5. Ridurre il buffering video e audio

Disabilita o riduci al minimo la riproduzione audio con -vn (nessun video) o regola le dimensioni del buffer audio usando -an (nessun audio) se l'audio non è necessario per il test.
Esempio:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Ottimizzare le opzioni di decodifica

Aggiungi opzioni per ottimizzare le prestazioni di decodifica e ridurre al minimo la latenza. Ad esempio:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an -flags low_delay rtsp://192.168.1.120:554/live/1_0

7. Ottimizzazioni aggiuntive (opzionale)

Puoi ottimizzare ulteriormente FFplay utilizzando i flag -x e -y per specificare la dimensione della finestra video, e -framedrop per scartare i frame se non possono essere elaborati abbastanza rapidamente:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an -framedrop -flags low_delay -x 640 -y 360 rtsp://192.168.1.120:554/live/1_0
Spiegazione:
  1. -framedrop: Scarta i frame quando il sistema non riesce a stare al passo con la decodifica, riducendo il buffering.
  2. -x 640 -y 360: Specifica la risoluzione per riprodurre il video, riducendo il carico di decodifica.

Esempio di comando finale

  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an -framedrop -flags low_delay -x 640 -y 360 rtsp://192.168.1.120:554/live/1_0

8. Monitorare la latenza

Dopo la configurazione, monitora la riproduzione per osservare la riduzione della latenza. Puoi utilizzare strumenti come FFprobe per misurare la latenza in tempo reale ispezionando i dettagli del flusso.
Esempio di comando FFprobe per verificare le statistiche del flusso:
  1. ffprobe -v quiet -print_format json -show_streams rtsp://192.168.1.120:554/live/1_0
Utilizzando i comandi sopra e modificando i vari flag, puoi ridurre efficacemente la latenza durante il test del flusso RTSP dal tuo encoder video.

Guida passo passo per ridurre ulteriormente la latenza con FFplay

Se riscontri un aumento della latenza dopo aver seguito le istruzioni fornite, potrebbero esserci diverse ragioni. Ecco alcune possibili cause e come affrontarle:

1. Impostazioni di buffering (regolazione del buffer errata)

Il-fflags nobufferflag è pensato per ridurre al minimo il buffering, ma in alcuni casi può causare instabilità o aumento della latenza, soprattutto se le condizioni di rete non sono ideali. FFplay potrebbe avere difficoltà a elaborare i frame in modo fluido senza un buffer sufficiente, causando ulteriori ritardi nella riproduzione.

Soluzione: Prova a regolare la strategia di buffering. Invece di disabilitare completamente il buffering, potresti usare un'impostazione del buffer più conservativa o rimuovere il-fflags nobufferflag:

  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

2. Protocollo di trasporto RTSP (UDP vs TCP)

Passare aUDPè generalmente più veloce di TCP per lo streaming RTSP, ma può causare perdita di pacchetti o jitter in determinate condizioni di rete, causando un ritardo nell'elaborazione da parte del decoder. Se la rete non è stabile, l'uso diUDPpuò aumentare involontariamente la latenza poiché FFplay tenta di compensare i pacchetti persi o corrotti.

Soluzione: Prova con il trasportoTCPe verifica se la latenza migliora. Usa il flag-rtsp_transport tcpper forzare TCP:
ffplay -rtsp_transport tcp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

3. Frame Dropping

Il flag-framedropindica a FFplay di scartare i frame se non riesce a decodificarli in tempo, il che dovrebbe ridurre la latenza. Tuttavia, se vengono scartati troppi frame, ciò può portare a ritardi maggiori poiché FFplay potrebbe impiegare più tempo per recuperare e risincronizzarsi.

Soluzione: Se il frame dropping è eccessivo, prova a rimuovere il flag-framedropo a ridurne l'impatto:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0
In alternativa, puoi provare a regolare il comportamento di -framedrop per vedere se aiuta a ridurre il ritardo:
  1. ffplay -framedrop 0 -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

4. Condizioni di rete e jitter

IlUDPtrasporto potrebbe non essere ideale in una rete ad alta latenza o instabile. UDP non garantisce la consegna dei pacchetti, il che può causare jitter e ritardi di buffering sul lato client. Sebbene UDP possa ridurre la latenza in condizioni di rete perfette, spesso causa più problemi in presenza di instabilità o congestione della rete.

Soluzione: Testare con una rete stabile e meno congestionata, oppure tornare aTCPse la rete presenta jitter elevato o perdita di pacchetti.

5. Sovraccarico del decoder

Se il flag-flags low_delayviene utilizzato insieme a flussi video di grandi dimensioni o risoluzioni più elevate, potrebbe causare un sovraccarico del decoder in cui FFplay tenta di decodificare i fotogrammi troppo rapidamente, il che può introdurre ulteriori ritardi di elaborazione.

Soluzione: Ridurre la risoluzione del video per alleggerire il carico sul decoder o disattivare i flag di bassa latenza se stanno causando problemi:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Analisi e probing eccessivi

I flag-analyzeduration 0e-probesize 32sono pensati per limitare il tempo che FFplay dedica all'analisi del flusso e la dimensione del probe iniziale dei pacchetti, il che dovrebbe velocizzare l'avvio. Tuttavia, se questi valori sono troppo restrittivi, potrebbero costringere FFplay a operare con informazioni incomplete, causando ritardi di sincronizzazione o un aumento della latenza complessiva mentre tenta di recuperare dai dati mancanti.

Soluzione: Aumentare leggermente i valori di-analyzeduratione-probesizeper consentire a FFplay di raccogliere più dati durante l'avvio senza aumentare significativamente la latenza:
  1. ffplay -rtsp_transport udp -analyzeduration 5000000 -probesize 5000000 -sync video rtsp://192.168.1.120:554/live/1_0

7. Modalità di sincronizzazione video

Il-sync videoIl flag indica a FFplay di sincronizzare i fotogrammi video con precisione, il che può causare ritardi quando deve attendere il fotogramma successivo. Se il frame rate di output dell'encoder non si allinea bene con le aspettative di sincronizzazione di FFplay, ciò può portare a ritardi non necessari.

Soluzione: Puoi sperimentare la sincronizzazione conaudio or timestampanziché con il video:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync audio rtsp://192.168.1.120:554/live/1_0
In alternativa, rimuovere completamente il flag -sync potrebbe aiutare:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0

Conclusione:

Per ridurre la latenza, sperimenta con il bilanciamento della strategia di buffering, del protocollo di trasporto e delle impostazioni di decodifica. UDP di solito offre una latenza inferiore ma richiede una rete stabile, mentre TCP potrebbe essere più affidabile se la qualità della rete è incoerente. Anche la regolazione delle dimensioni del buffer, del comportamento di probing e delle impostazioni di frame dropping può aiutare a mitigare la latenza eccessiva. Continua a testare diverse configurazioni per trovare la configurazione ottimale per il tuo caso d'uso specifico.