Minska latensen med FFplay för HDMI-kodare | Exvist Support

Vanliga frågor: Minska latensen med FFplay för kodare

Steg-för-steg-guide för att minska latens med FFplay

1. Installera FFmpeg och FFplay

Se till att FFmpeg (som inkluderar FFplay) är installerat på ditt system. Du kan kontrollera om det är installerat genom att köra:
  1. ffplay -version
Om det inte är installerat kan du ladda ner och installera FFmpeg frånofficiella webbplatseneller använda en pakethanterare somapt or brewberoende på ditt operativsystem.

2. Öppna FFplay med RTSP-ström

Börja med att köra FFplay med din RTSP-ström-URL:
  1. ffplay rtsp://192.168.1.120:554/live/1_0
Ersättrtsp://192.168.1.120:554/live/1_0med den faktiska RTSP-URL:en för din videokodare.

3. Justera buffertstorlek

Minska standardbuffertstorleken för att minimera fördröjning. Använd flaggan -rtsp_transport för att välja transportprotokoll (TCP eller UDP). UDP resulterar vanligtvis i lägre latens.
Exempelkommando:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0
Förklaring:
  1. -rtsp_transport udp: Tvingar UDP-transport, vilket i allmänhet ger lägre latens än TCP.
  2. -fflags nobuffer: Inaktiverar buffring för att minska latensen.
  3. -analyzeduration 0: Begränsar tiden FFplay ägnar åt att analysera strömmen, vilket hjälper till att starta uppspelningen snabbare.
  4. -probesize 32: Begränsar mängden data som används för att undersöka strömmen, vilket också minskar latensen.

4. Justera videoutgångsfördröjning

Använd flaggan -sync för att justera videosynkronisering. Genom att ställa in den på video tvingar du FFplay att synkronisera med videoströmmen, vilket kan hjälpa till att minska latensen.
Exempelkommando:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

5. Minska video- och ljudbuffring

Inaktivera eller minimera ljuduppspelning med -vn (ingen video) eller justera ljudbuffertstorlekar med -an (inget ljud) om ljud inte är nödvändigt för testet.
Exempel:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Finjustera avkodningsalternativ

Lägg till alternativ för att optimera avkodningsprestanda och minimera latens. Till exempel:
  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. Ytterligare optimeringar (valfritt)

Du kan finjustera FFplay ytterligare genom att använda -x och -y flaggor för att ange storleken på videofönstret, och -framedrop för att kasta bort bildrutor om de inte kan bearbetas tillräckligt snabbt:
  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
Förklaring:
  1. -framedrop: Kastar bort bildrutor när systemet inte kan hålla jämna steg med avkodningen, vilket minskar buffringen.
  2. -x 640 -y 360: Anger upplösningen för videouppspelning, vilket minskar avkodningsbelastningen.

Exempel på slutligt kommando

  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. Övervaka latens

Efter installationen, övervaka uppspelningen för att observera minskningen av latens. Du kan använda verktyg som FFprobe för att mäta latens i realtid genom att inspektera strömmens detaljer.
Exempel på FFprobe-kommando för att kontrollera strömmens statistik:
  1. ffprobe -v quiet -print_format json -show_streams rtsp://192.168.1.120:554/live/1_0
Genom att använda ovanstående kommandon och justera de olika flaggorna kan du effektivt minska latensen vid testning av RTSP-strömmen från din videoencoder.

Steg-för-steg-guide för att minska latensen ytterligare med FFplay

Om du upplever ökad latens efter att ha följt de angivna instruktionerna kan det finnas flera anledningar till att det händer. Här är några potentiella orsaker och sätt att åtgärda dem:

1. Buffringsinställningar (felaktig buffertjustering)

Flaggan-fflags nobufferär avsedd att minimera buffring, men i vissa fall kan detta leda till instabilitet eller ökad latens, särskilt om nätverksförhållandena inte är idealiska. FFplay kan ha svårt att bearbeta bildrutor smidigt utan tillräcklig buffert, vilket orsakar ytterligare fördröjningar i uppspelningen.

Lösning: Försök justera buffringsstrategin. Istället för att helt inaktivera buffring kan du använda en mer konservativ buffringsinställning eller ta bort-fflags nobufferflaggan:

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

2. RTSP-transportprotokoll (UDP vs TCP)

Att byta tillUDPär vanligtvis snabbare än TCP för RTSP-strömning, men det kan resultera i paketförlust eller jitter under vissa nätverksförhållanden, vilket gör att avkodaren fördröjer bearbetningen. Om nätverket inte är stabilt kan användning avUDPoavsiktligt öka latensen när FFplay försöker kompensera för förlorade eller skadade paket.

Lösning: Testa medTCP-transport och se om latensen förbättras. Använd-rtsp_transport tcp-flaggan för att tvinga TCP:
ffplay -rtsp_transport tcp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

3. Bildsläppning

Flaggan-framedroptalar om för FFplay att kasta bildrutor om den inte kan avkoda dem i tid, vilket bör minska latensen. Men om för många bildrutor släpps kan detta leda till ökade fördröjningar eftersom FFplay kan ta längre tid att återhämta sig och synkronisera om.

Lösning: Om bildsläppningen är överdriven, försök ta bort-framedrop-flaggan eller minska dess påverkan:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0
Alternativt kan du försöka justera -framedrop-beteendet för att se om det hjälper till att minska fördröjningen:
  1. ffplay -framedrop 0 -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

4. Nätverksförhållanden och jitter

DenUDPtransporten kanske inte är idealisk i ett nätverk med hög latens eller instabilitet. UDP garanterar inte paketleverans, vilket kan leda till jitter och buffringsfördröjningar på klientsidan. Även om UDP kan minska latensen under perfekta nätverksförhållanden, orsakar det ofta fler problem när det finns nätverksinstabilitet eller överbelastning.

Lösning: Testa med ett stabilt och mindre överbelastat nätverk, eller återgå tillTCPom ditt nätverk har hög jitter eller paketförlust.

5. Avkodaröverbelastning

Om-flags low_delay-flaggan används tillsammans med stora videoströmmar eller högre upplösningar kan det leda till en avkodaröverbelastning där FFplay försöker avkoda bildrutor för snabbt, vilket kan införa fler bearbetningsfördröjningar.

Lösning: Minska videons upplösning för att lätta på belastningen på avkodaren eller stäng av låglatensflaggor om det orsakar problem:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Överdriven analys och sondering

Flaggorna-analyzeduration 0och-probesize 32är avsedda att begränsa hur lång tid FFplay spenderar på att analysera strömmen och storleken på den initiala paketsonderingen, vilket bör snabba upp starten. Men om dessa värden är för restriktiva kan det tvinga FFplay att arbeta med ofullständig information, vilket leder till synkroniseringsfördröjningar eller ökad övergripande latens när den försöker återhämta sig från saknad data.

Lösning: Öka värdena för-analyzedurationoch-probesizenågot för att tillåta FFplay att samla in mer data under starten utan att avsevärt öka latensen:
  1. ffplay -rtsp_transport udp -analyzeduration 5000000 -probesize 5000000 -sync video rtsp://192.168.1.120:554/live/1_0

7. Videosynkroniseringsläge

-sync video-sync videoflaggan talar om för FFplay att synkronisera videoramar exakt, vilket kan orsaka fördröjningar när den behöver vänta på nästa bildruta. Om encoderns utgående bildfrekvens inte stämmer väl överens med FFplays synkroniseringsförväntningar kan detta leda till onödiga fördröjningar.

Lösning: Du kan experimentera med att synkronisera tillljud or tidsstämpelistället för video:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync audio rtsp://192.168.1.120:554/live/1_0
Alternativt kan det hjälpa att ta bort flaggan -sync helt:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0

Slutsats:

För att minska latensen kan du experimentera med att balansera buffringsstrategin, transportprotokollet och avkodningsinställningarna. UDP erbjuder vanligtvis lägre latens men kräver ett stabilt nätverk, medan TCP kan vara mer tillförlitligt om nätverkskvaliteten är inkonsekvent. Justering av buffertstorlekar, probningsbeteende och inställningar för att släppa bildrutor kan också hjälpa till att minska överdriven latens. Fortsätt testa olika konfigurationer för att hitta den optimala inställningen för ditt specifika användningsfall.