David Bařina. 3. listopadu 2013. David Bařina FFmpeg 3. listopadu 2013 1 / 28

Podobné dokumenty
Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Seznam. Technologie Konfigurace. FFserver. Miroslav Slugeň. Teramos Multimedia, s.r.o. May 15, 2012

Digitální video, formáty a kódování. Jan Vrzal, verze 0.8

Multimediální frameworky

Datové formáty videa, jejich specifikace a možnost využití. Petr Halama

Vstupní a vstupní proudy v C++

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Embedded vývoj v Clutteru a Mx

Počítačová gramotnost II Mgr. Jiří Rozsypal aktualizace

DIGITÁLNÍ VIDEO. pokus o poodhalení jeho neskutečné obludnosti (bez jednosměrné jízdenky do blázince)

Datové formáty videa a jejich využití. Tomáš Kvapil, Filip Le Manažerská informatika Multimédia

Digitální video v teorii

Zpracování zvuku v prezentacích

Streaming multimediálního obsahu s

Multimediální formáty

VIDEO DATOVÉ FORMÁTY, JEJICH SPECIFIKACE A MOŽNOSTI VYUŽITÍ SMOLOVÁ BÁRA

Videosekvence. vznik, úpravy, konverze formátů, zachytávání videa...

Sportovní brýle s kamerou Full HD 1080P. Návod na použití. Před použitím si tento návod pečlivě přečtěte a uschovejte ho pro potřebu příštího použití.

Milesight C2962-FPB Full HD,IP SIP/VoIP,obj.7-22mm,IR60m,mot.z.,WDRult.

Videokamera, základy editace videa

PREPROCESOR POKRAČOVÁNÍ

Vlastnosti Picodome DDF4220HDV je hybridní WDR HD dome kamera.

GUI ke stavbe grafu filtru pro FFmpeg

18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

KAPITOLA 13. Grafika a zvuk. Linux a grafika

Počítačová grafika a vizualizace I

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

IIS Media Services. David Gešvindr MSP MCT MCITP

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Charakteristiky zvuk. záznamů

Uživatelský manuál. Format Convert V3.1

Základní pojmy. Multimédia. Multimédia a interaktivita

Multimediální systémy. 08 Zvuk

Programování v Javě I. Leden 2008

Multimediální systémy. 10 Komprese videa, formáty

LuxRiot uživatelský manuál verze Uživatelský manuál Verze , Stasa s.r.o.,pokorného 14, , PRAHA

SROVNÁNÍ MULTIMEDIÁLNÍCH FRAMEWORKŮ COMPARISON OF MULTIMEDIA FRAMEWORKS

Fakulta informačních technologií VUT v Brně Ústav počítačových systémů Periferní zařízení, cvičení IPZ Analýza komunikace na sběrnici USB

Digitální učební materiály ve škole, registrační číslo projektu CZ.1.07/1.5.00/

Obsah. Předmluva 9 1. Potřebné vybavení Z jakých částí se skládá kamera 19

Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

Programování v Javě I. Únor 2009

Obsah OBSAH. Export videa 19. Jak číst tuto knihu 11. Album 16 Okno Film 16

Megapixelová síťová kamera: PIXORD P606 (2.0 Mpx, H.264, IR)

Převody datových formátů

ANCA. (Amazing NetCall Application) dokumentace

Přehrávač pro interaktivní video. Mikuláš Krupička

MATURITNÍ PRÁCE dokumentace

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

ZÁPADOČESKÁ UNIVERZITA V PLZNI

VIDEO MIXER/TRANSLÁTOR PRO WEBOVÉ VIDEOKONFERENCE

Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

Komprese zvuku. Ing. Jan Přichystal, Ph.D. 14. března PEF MZLU v Brně

PROGRAMOVÁNÍ V C++ CVIČENÍ

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

1. POPIS 2. SPECIFIKACE. ECLIPSERA s.r.o. Distributor pro ČR. VÝROBNÍ ČÍSLO. Tento malý a kompaktní modul je schopen určit vaši polohu

čtvrtek, 18. března 2010 Digitální zpracování zvuku a videa 1

Multiplatformní GUI toolkity

1. GRAFIKA. grafika vektorová - křivky grafika bitmapová (rastrová, bodová) pixely VLASTNOSTI BITMAPOVÉ GRAFIKY (FOTOGRAFIE)

Datové formáty videa a jejich využití. Pavel Čejka, Michaela Koucká

Video. Co je to video. Vlastnosti videa. Frame rate. Prokládání

DS-427DVR. Kamera s automatickým záznamem videa integrovaná do zpětného zrcátka. Uživatelská příručka

OBSAH CO JE CO ANEB 0 DIGITÁLNÍ MAGII 1 OBRAZ A ZVUK V ŘEČI JEDNIČEK A NUL 7

, Brno Připravil: Ing. Jaromír Landa. Postprocessing videa

Opakování k maturitní zkoušce z informatických předmětů

Milesight C2163-FPNA HD, Remote Zoom, IP SIP/VoIP, IR, out.

Z V U K 1 ANALOGOVÝ ZÁZNAM ZVUKU

Specifikace reklamních formátů HTML 5 pro nasazení do ibillboard Ad Server Verze 2/2015

Příloha č.1 Technická specifikace

ArduinotechGSMShield knihovna

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Měřič krevního tlaku. 1 Měření krevního tlaku. 1.1 Princip oscilometrické metody 2007/

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Obsah. Úvod 15. Vše potřebné o psaní a plánování 27. Oddíl I Preprodukce

Maturitní témata. Informační a komunikační technologie. Gymnázium, Střední odborná škola a Vyšší odborná škola Ledeč nad Sázavou.

OBSAH Popis Instalace Programování pomocí HE-programovacího softwaru Zásady programování pomocí KC3 ovlada Programování pomocí KC3

DS-72xxHFI/HVI-SH/SV řada DVR Rychlý průvodce

Základy programování (IZP)

Formáty videa. David Bařina. 5. dubna David Bařina Formáty videa 5. dubna / 46

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Operační systémy. Cvičení 3: Programování v C pod Unixem

M a r t i n Z m r h a l

Projekt: 1.5, Registrační číslo: CZ.1.07/1.5.00/ Komprese videa

Základy programování (IZP)

Algoritmizace a programování

OSNOVA. 1. Definice zvuku a popis jeho šíření. 2. Rozdělení zvukových záznamů (komprese) 3. Vlastnosti jednotlivých formátů

Inteligentní řešení kamerového systému

Příloha č. 5. Technické zadání. Smržovka Vybudování MKDS v rámci mikroregionu Tanvaldsko

Video dohled bez limitů Made in Germany. Profesionální řešení. Záznamový a klientský software

Milesight C2963-FPB Full HD,IP SIP/VoIP,IR,PoE,motoriz.zoom

UNIVERZITA OBRANY. Knihovna HLAGate. Programátorská dokumentace. Petr Františ

Internet protokol, IP adresy, návaznost IP na nižší vrstvy

NÁVOD K POUŽITÍ Kamera CEL-TEC S3000 Wifi IR

Yealink VC110 videokonferenční endpoint

Starting Guide - Poseidon 3266 THset První kroky s měřením teploty, vlhkosti a otevření dveří

Špionážní tužka s HD kamerou Manual. (typ - propiska)

Popis programu řádkové kamery USB Video Interface

EEG Application for Emotiv

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Transkript:

David Bařina 3. listopadu 2013 David Bařina FFmpeg 3. listopadu 2013 1 / 28

Multimédia multimédia: text, zvuk, statický obraz, video, metainformace,... potřeba: získávat (kamera), ukládat (pevný disk, komprese), vyhledávat (podle popisu), přehrávat, upravovat (střih videa),... ukládání: kontejner + kodeky David Bařina FFmpeg 3. listopadu 2013 2 / 28

Multimediální framework vše zaobaluje knihovny (API), nástroje (přehrávač, CLI) formáty: kontejnery, kodeky, protokoly,... požadavky: modularita, široká podpora formátů, intuitivní použití, dokumentace, výkon, platforma,... problém: žádný neumí vše David Bařina FFmpeg 3. listopadu 2013 3 / 28

Multimediální framework nástroje přehrávače audia/videa editory videa streamovací server ripování CD/DVD VoIP/video telefonie Multimediální framework zachytávací zařízení přístupové protokoly renderovací zařízení kodéry a dekodéry muxery a demuxery filtry David Bařina FFmpeg 3. listopadu 2013 4 / 28

Graf filtrů dekodér videa změna rozměrů renderovací zařízení soubor clock.avi demuxer formátu AVI dekodér audia převzork. audia zvukový subsystém pojmy: kontejnerový formát, muxer, demuxer/splitter formát datového toku, coder, decoder, kodek tee, overlay David Bařina FFmpeg 3. listopadu 2013 5 / 28

FFmpeg, knihovny svobodný multiplatformní software využívají jej MPlayer, VLC media player, Avidemux, ffdshow knihovny: libavutil (matematické rutiny, pro zjednodušení programování) libavcodec (audio a video kodeky) libavformat (muxery a demuxery/splittery pro kontejnery) libavdevice (grabování a renderování přes V4L(2), VfW, ALSA) libavfilter (filtry) libswscale (změna rozlišení a barevného modelu obrazu) libswresample (změna vzorkovací frekvence a formátu audia) podporované formáty na http://www.ffmpeg.org/general.html Libav (fork FFmpegu), http://libav.org/ David Bařina FFmpeg 3. listopadu 2013 6 / 28

Nástroje pro CLI ffmpeg ffserver ffplay ffprobe překódování multimediálních souborů streamovací server jednoduchý přehrávač založený na SDL zobrazí informace o multimediálních souborech Příklady ffmpeg -formats ffmpeg -codecs ffmpeg -filters ffmpeg -protocols ffplay clock.avi David Bařina FFmpeg 3. listopadu 2013 7 / 28

Syntaxe příkazů syntaxe příkazů ffmpeg [globalni volby] [[volby pro vstup] [-i vstup]]... [volby pro vystup] vystup... základní parametry -i vstup vstupní soubor vystup výstupní soubor -f format formát vstupu/výstupu zařízení (oss, alsa, x11grab, video4linux2, fbdev, lavfi, sdl) kontejner (avi, image2, rawvideo, flv, rtsp, mpegts, null) David Bařina FFmpeg 3. listopadu 2013 8 / 28

Parametry příkazů výběr kodeku -b bitrate datový tok -c kodek kodek výsek videa -ss cas skok na pozici ve videu -t cas délka videa (trvání) sekundy hh:mm:ss[.xxx] David Bařina FFmpeg 3. listopadu 2013 9 / 28

Parametry příkazů video -vn vypne video -c:v kodek videokodek -b:v bitrate datový tok -r fps snímková frekvence -s rozmery rozměry -vf filtry graf filtrů audio -an vypne audio -c:a kodek audiokodek -b:a bitrate datový tok -af filtry graf filtrů David Bařina FFmpeg 3. listopadu 2013 10 / 28

Skok na pozici -ss cas rychle a nepřesně, -ss pro vstup (před -i) ffmpeg -ss 00:03:00 -i input output pomalu a přesně, -ss pro výstup ffmpeg -i input -ss 00:03:00 output rychle a přesně, -ss pro vstup i pro výstup ffmpeg -ss 00:02:30 -i input -ss 00:00:30 output David Bařina FFmpeg 3. listopadu 2013 11 / 28

Příkaz ffprobe informace o videu ffprobe clock.avi Input #0, avi, from clock.avi : Duration: 00:00:12.00, start: 0.000000, bitrate: 55 kb/s Stream #0:0: Video: msrle ([1][0][0][0] / 0x0001), pal8, 321x321,... Stream #0:1: Audio: truespeech ([34][0][0][0] / 0x0022), 8000 Hz,... informace o snímcích ffprobe -show_frames clock.avi media_type=video key_frame=1 pkt_pts=0 pkt_dts=0 pkt_duration=1 width=321 height=321 pix_fmt=pal8 David Bařina FFmpeg 3. listopadu 2013 12 / 28

Příkaz ffplay přehrání videa ffplay clock.avi skok na pozici ffplay -ss 6 clock.avi David Bařina FFmpeg 3. listopadu 2013 13 / 28

Graf filtrů jediný filtr ffplay -vf vflip clock.avi parametry ffplay -vf crop=256:256:0:0 clock.avi řetězec filtrů ffplay -vf "transpose, negate" clock.avi David Bařina FFmpeg 3. listopadu 2013 14 / 28

Graf filtrů, větve pojmenované pady, větvení ffplay -vf "[in] split [T1], negate, [T2] overlay=0:h/2 [out]; [T1] crop=iw:ih/2:0:ih/2 [T2]" clock.avi in split [T1] crop [T2] overlay out negate David Bařina FFmpeg 3. listopadu 2013 15 / 28

Filtry klíčové snímky ffplay -vf select= eq(pict_type\,i) video.mov dektekce hran ffplay -vf edgedetect -an video.mov některé video filtry colorbalance, delogo, format, hflip, negate, rotate, subtitles, unsharp, yadif dokumentace: http://ffmpeg.org/ffmpeg-filters.html David Bařina FFmpeg 3. listopadu 2013 16 / 28

Převod videa převod do FFV1 a FLAC v Matroska ffmpeg -i input.avi -c:v ffv1 -c:a flac output.mkv tok videa 64 kbit/s ffmpeg -i input.avi -b:v 64k output.avi formát H.264 (libx264) ffmpeg -i input.avi -c:v libx264 -preset fast output.mkv -preset může být fast, medium, slow (více v x264 --fullhelp) David Bařina FFmpeg 3. listopadu 2013 17 / 28

Práce s webkamerou vstup z kamery ffplay -f video4linux2 /dev/video0 záznam i se zvukem ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 output.mpg David Bařina FFmpeg 3. listopadu 2013 18 / 28

Streamování po síti přes UDP ffmpeg -i file.mkv -c:v h264 -f mpegts udp://localhost:1234 následně např. vlc udp://@:1234 David Bařina FFmpeg 3. listopadu 2013 19 / 28

Streamování po síti přes HTTP pomocí ffserver ffserver.conf Port 8090 BindAddress 0.0.0.0 <Feed feed1.ffm>... </Feed> <Stream live.flv>... </Stream> ffserver -f ffserver.conf ffmpeg -i file.mkv http://localhost:8090/feed1.ffm následně např. http://localhost:8090/live.flv David Bařina FFmpeg 3. listopadu 2013 20 / 28

API 1 nainstalovat/přeložit FFmpeg pkg-config --cflags --libs libavformat 2 překlad aplikace cc -I/usr/include/libavformat app.c -lavformat -o app 3 hlavičkové soubory, např. #include <avformat.h> v C++ obalit extern "C" 4 na začátku zavolat av_register_all(); 5 používat funkce z libavformat David Bařina FFmpeg 3. listopadu 2013 21 / 28

Otevření video stopy #include <avcodec.h> #include <avformat.h> int main(int argc, charg *argv[]) { av_register_all(); AVFormatContext *pformatctx; if(av_open_input_file(&pformatctx, argv[1], NULL, 0, NULL)!= 0) return -1; if(av_find_stream_info(pformatctx) < 0) return -1; AVCodecContext *pcodecctx; if(pformatctx->streams[0]->codec.codec_type!= CODEC_TYPE_VIDEO) return -1; pcodecctx = &pformatctx->streams[0]->codec; David Bařina FFmpeg 3. listopadu 2013 22 / 28

Přehrávač inicializace dekóduj snímek destrukce zobraz snímek David Bařina FFmpeg 3. listopadu 2013 23 / 28

Pojmy barevný model (RGB, YC b C r ) formát pixelu (RGB24) framebuffer bajt pixel { skutečný obraz }řádek framebuffer:... šířka řádku délka kroku David Bařina FFmpeg 3. listopadu 2013 24 / 28

Smyčka přehrávače AVPacket pkt; while( av_read_frame(pformatctx, &pkt) == 0 ) { if( pkt.stream_index == videostream ) { int framefinished = 0; if( avcodec_decode_video2(pcodecctx, pframe, &framefinished, &pkt) < 0 ) abort(); if(framefinished) { // sws_scale // avcodec_encode_video2 } //... } } av_free_packet(&pkt); David Bařina FFmpeg 3. listopadu 2013 25 / 28

Kostra kodeku static int dbv1_decode_frame(avcodeccontext *avctx, void *outdata, int *outdata_size, const uint8_t *buf, int buf_size) { // dekoduj snimek } AVCodec dbv1_decoder = {.name = "dbv1",.type = CODEC_TYPE_VIDEO,.id = CODEC_ID_DBV1,.priv_data_size = sizeof(dbv1context),.init = dbv1_decode_init,.close = dbv1_decode_close,.decode = dbv1_decode_frame,.long_name = NULL_IF_CONFIG_SMALL("DaBler s Video codec v1"),.capabilities = CODEC_CAP_DR1, }; přeložit modul + libavcodec + libavformat David Bařina FFmpeg 3. listopadu 2013 26 / 28

Přehled funkcí avformat_open_input otevře vstupní kontejner, přečte hlavičku avformat_find_stream_info načte z kontejneru informace av_dump_format zobrazí informace o kontejneru a stopách avcodec_find_decoder podle ID kodeku najde dekodér avcodec_find_encoder podle ID kodeku vrátí kodér avcodec_alloc_frame alokuje snímek av_read_frame přečte z kontejneru jeden paket (snímek) avformat_write_header zapíše do kontejneru hlavičku stopy av_write_frame zapíše do kontejneru paket av_write_trailer zapíše do kontejneru patičku stopy avcodec_decode_video2 z paketu dekóduje jeden snímek videa avcodec_encode_video zkomprimuje snímek videa do bufferu avformat_new_stream přidá do kontejneru novou stopu David Bařina FFmpeg 3. listopadu 2013 27 / 28

Zdroje informací man ffmpeg http://trac.ffmpeg.org/wiki http://www.ffmpeg.org/ David Bařina FFmpeg 3. listopadu 2013 28 / 28

David Bařina 3. listopadu 2013 David Bařina GStreamer 3. listopadu 2013 1 / 19

Multimédia multimédia: text, zvuk, statický obraz, video, metainformace,... potřeba: získávat (kamera), ukládat (pevný disk, komprese), vyhledávat (podle popisu), přehrávat, upravovat (střih videa),... ukládání: kontejner + kodeky David Bařina GStreamer 3. listopadu 2013 2 / 19

Multimediální framework nástroje přehrávače audia/videa editory videa streamovací server ripování CD/DVD VoIP/video telefonie Multimediální framework zachytávací zařízení přístupové protokoly renderovací zařízení kodéry a dekodéry muxery a demuxery filtry David Bařina GStreamer 3. listopadu 2013 3 / 19

Graf filtrů dekodér videa změna rozměrů renderovací zařízení soubor clock.avi demuxer formátu AVI dekodér audia převzork. audia zvukový subsystém modely pro přenos dat push zdroj neustále produkuje data, další filtr pasivně přijímá pull filtr aktivně požaduje data (parser od zdroje) data předávána v bufferech stavy: zastaven, pozastaven, spuštěn David Bařina GStreamer 3. listopadu 2013 4 / 19

GStreamer svobodný multiplatformní, 1999 založen na GLib, primárně pro GNOME založen na grafu filtrů (pipeline), jako DirectShow nástroje: gst-launch, gst-inspect, gst-editor terminologie pads = spoje mezi filtry source pad se propojí do sink pad typ dat se zjistí pomocí capabilities element, bin, pipeline tři balíčky pluginů: The Good, the Bad and the Ugly David Bařina GStreamer 3. listopadu 2013 5 / 19

Terminologie elementy zdrojové (source), filtry, cílové (sink) seskupeny do kontejnerů (binů) tvoří pipeline přípojné body (pad) spojují elementy vstupní (sink), výstupní (source) podporovaný typ dat (capabilities) capabilities data identifikována pomocí typů MIME např. audio/x-vorbis, audio/x-raw-float formát dat je třeba vyjednat podle podporovaných David Bařina GStreamer 3. listopadu 2013 6 / 19

Pipeline Sestavení pipeline export GST_PLUGIN_PATH=./.libs gst-launch-0.10 v4l2src device="/dev/video0"! videoscale! video/x-raw-yuv, width=160! ffmpegcolorspace! video/x-raw-gray! abr2! ffmpegcolorspace! videoscale! video/x-raw-rgb, width=640! ximagesink David Bařina GStreamer 3. listopadu 2013 7 / 19

Nástroj gst-inspect gst-inspect-0.10 alsa: alsasrc: Audio source (ALSA) gst-inspect-0.10 alsa Plugin Details: Name: alsa Description: ALSA plugin library Filename: /usr/lib64/gstreamer-0.10/libgstalsa.so alsasink: Audio sink (ALSA) alsasrc: Audio source (ALSA) alsamixer: Alsa mixer gst-inspect-0.10 alsasrc... David Bařina GStreamer 3. listopadu 2013 8 / 19

Nástroj gst-inspect gst-inspect vorbisdec Pad Templates: SRC template: src Availability: Always Capabilities: audio/x-raw-float rate: [ 8000, 50000 ] channels: [ 1, 2 ] endianness: 1234 width: 32 buffer-frames: 0 SINK template: sink Availability: Always Capabilities: audio/x-vorbis David Bařina GStreamer 3. listopadu 2013 9 / 19

Nástroj gst-launch gst-launch-0.10 videotestsrc! ximagesink gst-launch-0.10 videotestsrc! videoflip method="2"! ximagesink David Bařina GStreamer 3. listopadu 2013 10 / 19

Nástroj gst-launch: přehrávač gst-launch-0.10 playbin uri=file:///tmp/clock.avi gst-launch-0.10 filesrc location=/tmp/clock.avi! decodebin! colorspace! ximagesink gst-launch-0.10 filesrc location=/tmp/clock-rle.avi! avidemux! ffdec_msrle! colorspace! ximagesink David Bařina GStreamer 3. listopadu 2013 11 / 19

Nástroj gst-editor, XML Uložení/načtení pipeline gst_xml_write_file (GST_ELEMENT (pipeline), fopen ("xmltest.gst", "w")); xml = gst_xml_new (); ret = gst_xml_parse_file(xml, "xmltest.gst", NULL); g_assert (ret == TRUE); pipeline = gst_xml_get_element (xml, "pipeline"); g_assert (pipeline!= NULL); gst_element_set_state (pipeline, GST_STATE_PLAYING); David Bařina GStreamer 3. listopadu 2013 12 / 19

Vlastní aplikace 1 nainstalovat/přeložit pkg-config --cflags --libs gstreamer-0.10 2 hlavičkový soubor <gst/gst.h> 3 zavolat funcki gst_init() 4 používat funkce gstreameru David Bařina GStreamer 3. listopadu 2013 13 / 19

Triviální aplikace #include <gst/gst.h> int main(int argc, char *argv[]) { gst_init(&argc, &argv); g_print("started...\n"); } return 0; David Bařina GStreamer 3. listopadu 2013 14 / 19

Spojení dvou elementů GstElement *pipeline = gst_pipeline_new("pipeline"); GstElement *source = gst_element_factory_make( "videotestsrc", "source"); GstElement *sink = gst_element_factory_make( "ximagesink", "sink"); gst_bin_add_many(gst_bin(pipeline), source, sink, NULL); gst_element_link(source, sink); gst_element_set_state(pipeline, GST_STATE_PLAYING);... gst_element_set_state(pipeline, GST_STATE_NULL); gst_object_unref(gst_object(pipeline)); David Bařina GStreamer 3. listopadu 2013 15 / 19

Smyčka zpráv static GMainLoop *loop; static gboolean bus_callback(gstbus *bus, GstMessage *message, gpointer data) { if(gst_message_type(message) == GST_MESSAGE_EOS) g_main_loop_quit(loop); return TRUE; } GstBus *bus = gst_pipeline_get_bus( GST_PIPELINE(pipeline)); gst_bus_add_watch(bus, bus_callback, NULL); gst_object_unref(bus); loop = g_main_loop_new(null, FALSE); g_main_loop_run(loop); David Bařina GStreamer 3. listopadu 2013 16 / 19

Zásuvné moduly Plugin $ git clone git://anongit.freedesktop.org/gstreamer/gst-template.git $../tools/make_element abr2 static gboolean abr2_init (GstPlugin * abr2) { //... } static GstFlowReturn gst_abr2_chain (GstPad * pad, GstBuffer * buf) { //... GstStructure *structure = gst_caps_get_structure (pad->caps, 0); gst_structure_get_int (structure, "width", &width); gst_structure_get_int (structure, "height", &height); //... img.imagedata = (char*) GST_BUFFER_DATA(buf); //... } $./autogen.sh $ make $ export GST_PLUGIN_PATH=./.libs $ gst-launch-0.10 v4l2src device="/dev/video0"! videoscale! video/x-raw-yuv, width=160! ffmpegcolorspace! video/x-raw-gray! abr2! ffmpegcolorspace! videoscale! video/x-raw-rgb, width=640! ximagesink kodek: zkompilovat jen plugin David Bařina GStreamer 3. listopadu 2013 17 / 19

Přehled API GstObject základní třída objektové hierarchie GstElement abstraktní třída pro všechny elementy GstElementFactory třída šablony elementu GstPad přípojný bod, má směr GstPadDirection GstCaps formáty dat GstBin kontejner elementů GstPipeline celá pipeline GstBus sběrnice zpráv GstMessage zpráva gst_init inicializuje knihovnu gst_element_factory_make vytvoří element z názvu šablony gst_pipeline_new vytvoří novou pipeline gst_bin_add_many přidá do kontejneru několik elementů gst_pad_link propojí dva pady gst_bus_add_watch přidá ke sběrnici callback funkci David Bařina GStreamer 3. listopadu 2013 18 / 19

Zdroje http://gstreamer.freedesktop.org/documentation/ (Application Development Manual, Plugin Writer s Guide) David Bařina GStreamer 3. listopadu 2013 19 / 19