Difference between revisions of "GStreamer Tips & Tricks"
From linux360
(→GStreamer Tips & Tricks) |
|||
Line 34: | Line 34: | ||
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect. | Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect. | ||
<code>gst-inspect <nume-element></code> | <code>gst-inspect <nume-element></code> | ||
+ | |||
+ | Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. | ||
+ | |||
+ | Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul "demux". | ||
+ | |||
+ | <code>phaser@diesel:~$ gst-inspect | grep demux | grep mp3 | ||
+ | ffmpeg: ffdemux_mp3: FFMPEG MPEG audio demuxer</code> | ||
+ | |||
+ | Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul "dec". | ||
+ | <code>phaser@diesel:~$ gst-inspect | grep dec | grep mp3 | ||
+ | mad: mad: mad mp3 decoder | ||
+ | ffmpeg: ffdec_mp3on4: FFMPEG MP3ON4 decoder | ||
+ | ffmpeg: ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder | ||
+ | ffmpeg: ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder | ||
+ | flump3dec: flump3dec: Fluendo MP3 Decoder</code> | ||
+ | |||
+ | Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul. | ||
+ | <code>gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink</code> | ||
+ | <code>gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink</code> | ||
+ | |||
+ | Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element. | ||
+ | |||
+ | POZA FRUMOASĂ AICI CARE ARATĂ PIPELINE-UL CA SĂ SE ÎNŢELEAGĂ CONCEPTUL DE PAD |
Revision as of 09:21, 9 March 2007
GStreamer Tips & Tricks
GStreamer este o librărie multimedia open-source construită folosind celebra GLib şi are un API care se ghidează după multe dintre principiile librăriei GTK+. Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.
GStreamer defineşte următoarele:
- element - obiectul de bază - bin - container pentru obiecte - pipeline - un bin specializat - pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.
gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.
gst-inspect | grep sink
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.
gst-inspect <nume-element>
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin.
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul "demux".
phaser@diesel:~$ gst-inspect | grep demux | grep mp3
ffmpeg: ffdemux_mp3: FFMPEG MPEG audio demuxer
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul "dec".
phaser@diesel:~$ gst-inspect | grep dec | grep mp3
mad: mad: mad mp3 decoder
ffmpeg: ffdec_mp3on4: FFMPEG MP3ON4 decoder
ffmpeg: ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder
ffmpeg: ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder
flump3dec: flump3dec: Fluendo MP3 Decoder
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.
gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink
gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.
POZA FRUMOASĂ AICI CARE ARATĂ PIPELINE-UL CA SĂ SE ÎNŢELEAGĂ CONCEPTUL DE PAD