Skip to content

Cum să injectezi date în pipeline cu appsrc în GStreamer

DodaTech Updated 2025-01-15 1 min read

In this tutorial, you'll learn about Cum să injectezi date în pipeline cu appsrc în GStreamer. We cover key concepts, practical examples, and best practices.

În acest ghid vei învăța cum să injectezi date în pipeline folosind elementul appsrc în GStreamer. Appsrc permite aplicațiilor să introducă date personalizate (buffer-e) într-un pipeline GStreamer din cod, fiind esențial pentru integrări aplicative.

The Wrong Way

Folosirea appsrc fără a specifica formatul sau fără a trimite EOS la final:

import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GLib

Gst.init(None)
pipeline = Gst.parse_launch("appsrc ! fakesink")
pipeline.set_state(Gst.State.PLAYING)
# Nu se trimit date și nici EOS

Pipeline-ul așteaptă date la infinit.

The Right Way

Injectare corectă de date cu appsrc în Python:

import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GLib

Gst.init(None)
pipeline = Gst.parse_launch("appsrc name=src caps=video/x-raw,format=RGB,width=320,height=240 ! videoconvert ! autovideosink")
pipeline.set_state(Gst.State.PLAYING)

appsrc = pipeline.get_by_name("src")
buf = Gst.Buffer.new_allocate(None, 320 * 240 * 3, None)
buf.fill(0, 255)  # umple cu date
appsrc.emit("push-buffer", buf)
appsrc.emit("end-of-stream")

Output:

Pipeline rulează și primește datele injectate din aplicație.

Prevenție

  • Specifică întotdeauna caps pe appsrc pentru a permite negocierea
  • Trimite end-of-stream după ce ai terminat de injectat date
  • Folosește push-buffer pentru a trimite buffer-e individual
  • Configurează proprietățile format=time, is-live după necesități

Greșeli Comune

  1. Fără EOS la final — pipeline-ul rămâne în stare de așteptare la infinit
  2. Caps lipsă — fără capabilități, elementele downstream nu pot negocia formatul
  3. Buffer nealocat — buffer-ele trebuie alocate cu Gst.Buffer.new_allocate
  4. Dimensiune buffer greșită — dimensiunea buffer-ului trebuie să corespundă formatului specificat

FAQ

### Cum trimit date în appsrc din C/C++?

Folosește gst_app_src_push_buffer() și setează capabilitățile cu gst_app_src_set_caps().

Ce este modul "pull" în appsrc?

În modul pull, appsrc solicită date de la aplicație când are nevoie, prin semnalul need-data. Modul implicit este push.

Cum gestionez flow-ul de date cu appsrc?

Folosește semnalele need-data și enough-data pentru a controla fluxul și a bufferiza corect datele.

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