
gstreamer
Atviro kodo Python biblioteka multimedijos apdorojimui
Kurkite transliacijos medijos programas su GStreamer: garso/vaizdo konvejeriai, formatų tvarkymas ir realaus laiko apdorojimas.
Kas yra gstreamer?
GStreamer yra galinga atviro kodo multimedijos sistema, kuri leidžia kūrėjams kurti sudėtingas transliacijos medijos programas. Ji suteikia lankstią, konvejerio pagrindu veikiantį architektūrą garso ir vaizdo srautų tvarkymui, palaikantį platų formatų, protokolų ir įskiepių spektrą. Naudojant Python sąsajas, kūrėjai gali greitai kurti prototipus ir įdiegti medijos apdorojimo darbo srautus, įskaitant tiesioginę transliaciją, įrašymą, transkoduotę ir realaus laiko efektus. Sistema plačiai naudojama įterptinėse sistemose, darbalaukio programose ir debesų pagrindu veikiančiose medijos paslaugose.
Pačios esmės GStreamer naudoja modulinių įskiepių sistemą, kuri leidžia sklandžiai integruoti pasirinktinius kodekus, filtrus ir šaltinius. Jo kryžminės platformos palaikymas apima Linux, Windows, macOS ir mobilias aplinkas, todėl tai yra idealus nešiojamiems medijos sprendimams. Kūrėjai gali naudoti Python, kad valdytų konvejerio kūrimą, elementų konfigūraciją ir įvykių tvarkymą, tuo pačiu naudodamiesi aukštos našumo C lygio apdorojimu. Projektas aktyviai prižiūrimas freedesktop.org bendruomenės ir apima išsamų dokumentaciją, mokymus ir pavyzdžius, kad pagreitintų kūrimą.
Pradžia su gstreamer
Norėdami pradėti naudoti GStreamer su Python, įdiekite pagrindinę biblioteką ir Python ryšius. Paprasčiausias metodas – per pip: `pip install pygobject` ir įsitikinkite, kad sistemos paketai, tokie kaip `gstreamer1.0`, yra įdiegti. Plėtrai klonuokite oficialų saugyklą iš [gstreamer GitHub](https://github.com/GStreamer/gstreamer) ir sukurkite iš šaltinio naudodami Meson. GStreamer palaiko Python 3.8+ ir integruojasi su pagrindinėmis Linux distribucijomis, Windows ir macOS. Įdiegus galite programuoti medijos konvejerius naudodami Python objektus ir metodus, leidžiančius greitai kurti multimedijos programų prototipus.
Įdiekite GStreamer per Pip (Python sąsajos)
pip install pygobject
# On Ubuntu/Debian: sudo apt install gir1.2-gstreamer-1.0 gstreamer1.0-plugins-base
# On macOS: brew install gstreamer pygobject3
Kurkite medijos konvejerius su Python
GStreamer's vamzdynų architektūra leidžia kūrėjams sujungti elementus, tokius kaip šaltiniai, filtrai ir imtuvai, kad apdorotų medijos srautus. Naudojant Python, galite programiškai kurti, konfigūruoti ir valdyti šiuos vamzdynus. Elementai bendrauja per pad'us ir palaiko dinaminį susiejimą, leidžiantį sudėtingus darbo srautus, tokius kaip transkoderiavimas, įrašymas ar tiesioginis transliavimas. Python sąsajos atskleidžia visą GStreamer API, įskaitant magistralės pranešimų tvarkymą, būsenų pokyčius ir savybių manipuliavimą. Tai leidžia kurti reaguojančias programas, kurios realiu laiku reaguoja į medijos įvykius, klaidas ar srauto pabaigos sąlygas. Vamzdynus galima apibrėžti naudojant `gst_parse_launch` funkciją arba sukurti elementas po elemento, siekiant smulkių valdymo galimybių.
Sukurkite paprastą vaizdo konvejerį per Python
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
pipeline = Gst.parse_launch("videotestsrc ! autovideosink")
pipeline.set_state(Gst.State.PLAYING)
# Wait for EOS or error
bus = pipeline.get_bus()
msg = bus.timed_pop_filtered(Gst.CLOCK_TIME_NONE, Gst.MessageType.EOS | Gst.MessageType.ERROR)
pipeline.set_state(Gst.State.NULL)
Realiojo laiko srautinimas ir tinklo palaikymas
GStreamer puikiai veikia realaus laiko transliacijų srityje, suteikdamas patikimą palaikymą protokolams, tokiems kaip RTSP, RTP, HLS ir DASH. Kūrėjai gali kurti tiesioginės transliacijos serverius arba klientus naudodami Python, kad valdytų šaltinius, kodavimo įrenginius ir tinklo išvestis. Sistema skaidriai tvarko sinchronizavimą, drebėjimo buferizavimą ir paketų praradimo kompensavimą. Naudodami elementus, tokius kaip `tcpserversink`, `udpsink` ir `rtspclientsink`, galite transliuoti vaizdą iš kamerų arba failų per vietinius tinklus arba internetą. Python skriptai gali dinamiškai reguliuoti bitų spartą, rezoliuciją arba kodavimo parametrus, atsižvelgdami į tinklo sąlygas arba vartotojo įvestį, leidžiantys adaptacines transliacijos sprendimus. GStreamer modulinis dizainas taip pat palaiko pasirinktinius protokolo įskiepius specializuotoms naudojimo atvejams.
Srautinė vaizdo transliacija per RTSP naudojant Python
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GObject
Gst.init(None)
pipeline = Gst.parse_launch("videotestsrc ! x264enc ! rtspclientsink location=rtsp://localhost:8554/stream")
pipeline.set_state(Gst.State.PLAYING)
loop = GObject.MainLoop()
try:
loop.run()
except KeyboardInterrupt:
pass
pipeline.set_state(Gst.State.NULL)
Aparatinės įrangos spartinimas ir įskiepių išplečiamumas
GStreamer suteikia sklandų integravimą su aparatinės įrangos akseleratoriais, tokiais kaip NVIDIA CUDA, Intel Quick Sync ir ARM Mali, per specialius įskiepius. Kūrėjai gali pasinaudoti GPU spartinimu vaizdo dekodavimui, kodavimui ir komponavimui be pagrindinės logikos perrašymo. Įskiepių sistema leidžia kurti pasirinktinius elementus C, Python arba kitomis kalbomis ir dinamiškai juos įkelti. Python įskiepiai gali būti kuriami naudojant `Gst.ElementFactory` ir registruojami vykdymo metu, leidžiant greitai eksperimentuoti. Šis lankstumas palaiko tokias naudojimo atvejus kaip pasirinktini filtrai, AI inferencijos konvejeriai arba nuosavybiniai kodekai. Įskiepiai automatiškai aptinkami per `gst-inspect-1.0`, o jų galimybės gali būti užklausiamos programiškai Python kalba, siekiant sukurti adaptacinius konvejerius.
Įgalinkite aparatinės įrangos spartinimą dekodavimui naudojant Python
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
# Example for VAAPI on Linux with Intel GPU
pipeline = Gst.parse_launch("filesrc location=video.mp4 ! qtdemux ! h264parse ! vaapih264dec ! autovideosink")
pipeline.set_state(Gst.State.PLAYING)
# Run pipeline...
Medijos apdorojimo ir efektų konvejeris
GStreamer apima gausų įmontuotų elementų rinkinį garso/vaizdo apdorojimui, tokių kaip mastelio keitimas, spalvų konvertavimas, apkirpimas, suliejimas ir garso maišymas. Kūrėjai gali sujungti šiuos elementus, kad sukurtų sudėtingas efektų grandines – pvz., taikydami filtrus, persidengimus arba laiko pagrindu vykstančius transformavimus – visiškai Python kalba. Tokie elementai kaip `videoscale`, `videoconvert`, `textoverlay` ir `audioresample` suteikia aukštos kokybės apdorojimą su minimalia konfigūracija. Individualūs efektai gali būti įgyvendinti naudojant `GstBase.BaseTransform` arba `GstBase.BaseAggregator` Python kalba, leidžiant realaus laiko manipuliavimą medijos srautais. Tai daro GStreamer idealų programoms, tokioms kaip vaizdo konferencijos, tiesioginė transliacija arba turinio kūrimo įrankiai, kur kritiškai svarbus žemas vėlavimas.
Pridėkite teksto perdangą ir keiskite vaizdo dydį naudojant Python
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
pipeline = Gst.parse_launch("videotestsrc ! textoverlay text='Hello GStreamer' font-desc='Sans 24' ! videoscale ! videoconvert ! autovideosink")
pipeline.set_state(Gst.State.PLAYING)
# Run pipeline...
