Cum să extragi date din pipeline cu appsink în GStreamer
In this tutorial, you'll learn about Cum să extragi date din pipeline cu appsink în GStreamer. We cover key concepts, practical examples, and best practices.
În acest ghid vei învăța cum să extragi date dintr-un pipeline folosind elementul appsink în GStreamer. Appsink permite aplicațiilor să primească buffer-e de date de la un pipeline GStreamer, fiind esențial pentru procesare personalizată în cod.
The Wrong Way
Folosirea appsink fără a configura capabilitățile sau fără a consuma buffer-ele:
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
pipeline = Gst.parse_launch("videotestsrc ! appsink name=sink")
pipeline.set_state(Gst.State.PLAYING)
# Nu se citesc buffer-ele — pipeline-ul se blochează
Pipeline-ul se blochează când buffer-ele umplu appsink-ul.
The Right Way
Citirea corectă a buffer-elor din appsink:
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
pipeline = Gst.parse_launch("videotestsrc num-buffers=10 ! appsink name=sink emit-signals=true")
pipeline.set_state(Gst.State.PLAYING)
appsink = pipeline.get_by_name("sink")
for _ in range(10):
sample = appsink.emit("pull-sample")
if sample:
buf = sample.get_buffer()
print(f"Buffer primit: dimensiune={buf.get_size()}, durata={buf.duration}")
pipeline.set_state(Gst.State.NULL)
Output:
Buffer primit: dimensiune=307200, durata=33333333
Buffer primit: dimensiune=307200, durata=33333333
...
Prevenție
- Setează
emit-signals=truepentru a primi notificări când buffer-ele sunt disponibile - Folosește
pull-samplepentru a extrage buffer-e blocant - Pentru non-blocant, folosește semnalul
new-sample - Specifică
capspe appsink pentru a controla formatul datelor primite - Consumă buffer-ele suficient de rapid pentru a preveni blocarea pipeline-ului
Greșeli Comune
- Fără consum de buffer-e — neconsumarea buffer-elor blochează pipeline-ul
- Pull-sample fără verificare —
pull-samplepoate returna None la finalul streamului - Caps nepotrivite — formatul buffer-elor poate fi diferit de cel așteptat
- Memorie neeliberată — buffer-ele trebuie procesate și eliberate rapid
FAQ
Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Uneltele DodaTech se integrează perfect cu GStreamer pentru productivitate și securitate sporite.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro