40
Exorcizando o GStreamer Gabriel L. Oliveira NSI

Exorcisando o GStreamer

Embed Size (px)

Citation preview

Page 1: Exorcisando o GStreamer

Exorcizando o GStreamer

Gabriel L. OliveiraNSI

Page 2: Exorcisando o GStreamer

O Ministério da Saúde adverte:

Material inapropriado para menores de 18 anos!

Page 3: Exorcisando o GStreamer

Solta essa P****!!!

Page 4: Exorcisando o GStreamer

WTF O que é GStreamer?

Page 5: Exorcisando o GStreamer

WTF O que é GStreamer?

GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. GStreamer is released under the LGPL.

Page 6: Exorcisando o GStreamer

Por quê inglês?

Page 7: Exorcisando o GStreamer

Características

Specifically, GStreamer provides: an API for multimedia applications a plugin architecture a pipeline architecture a mechanism for media type handling/negotiation over 150 plug-ins a set of tools

GStreamer plug-ins could be classified into: protocols handling sources: for audio and video (involves protocol plugins) formats: parsers, formaters, muxers, demuxers, metadata, subtitles codecs: coders and decoders filters: converters, mixers, effects, … sinks: for audio and video (involves protocol plugins)

Page 8: Exorcisando o GStreamer

Seus braços direitos (a outra direita)

Page 9: Exorcisando o GStreamer

Seus braços direitos

$ gst-feedbackBusca no sistema por informações gerais

$ gst-inspectMostra a descrição de um plug-in

$ gst-launchConstrói e roda o pipeline

Page 10: Exorcisando o GStreamer

Iniciando...

Page 11: Exorcisando o GStreamer

Pipeline simples

$ gst-launch playbin uri=file://...musica

Page 12: Exorcisando o GStreamer

Vamos testar?

Page 13: Exorcisando o GStreamer

E agora fazer de outro jeito?

Page 14: Exorcisando o GStreamer

Outro jeito

$ gst-launch filesrc location=...musica ! decodebin ! alsasink

Page 15: Exorcisando o GStreamer

Vamos comparar?

Page 16: Exorcisando o GStreamer

Vamos comparar

$ gst-launch playbin uri=file://...musica

$ gst-launch filesrc location=...musica ! decodebin ! alsasink

Page 17: Exorcisando o GStreamer

Teoria do GStreamer

Page 18: Exorcisando o GStreamer

Preparando o ambiente para trabalho

$ apt-get install --reinstall libalsaplayer-dev libgio-fam libogg-dev libtheora-dev libtheora-bin libvorbis-dev libcdparanoia-dev libgnomevfs2-dev libvisual-0.4-dev libpango1.0-dev libx11-dev libx264-dev libxvidcore4-dev libxinerama-dev flac libflac-dev libfaad-dev libaudio-dev libavifile-0.7-dev libdebug0-dev libmatroska-dev libmultisync-plugin-all libsmpeg-dev libwavpack-dev libannodex-dev libgconf2-dev libjpeg-dev libosso-dev libcaca-dev libcairo2-dev libpng12-dev libdirectfb-dev libdv-dev libesd0-dev libgdk-pixbuf-dev libhal-dev libpulse-dev libshout-dev libspeex-dev libtag1-dev libschroedinger-dev libdvdcss-dev libfreeze32 libdv4-dev libid3-dev libid3tag0-dev liblivemedia-dev libmpeg2-4-dev libmpeg3-dev libmpeg3hv-dev libmpeg4ip-dev libraw1394-dev libgst-dev libgstreamer-plugins-pulse0.10-0 libvcdinfo-dev libamrwb-dev libbz2-dev libcdaudio-dev libdc1394-22-dev libdfb++-dev libdirac-dev libdts-dev libfaac-dev libfaad2-0 libfaac0 libflite1 libgmerlin0 libgmerlin-dev libgsm1-dev libgsm-tools libjack-dev libladspa-ocaml-dev libmms0 libmms-dev libmodplug0c2 libmodplug-dev libmpeg2-4 libmpeg3-1 libmpeg3hv libmpeg4ip-0 libmusicbrainz3-6 libmusicbrainz3-dev libmusicbrainz4c2a libmusicbrainz4-dev libmusicbrainz-dev libmythes-dev libofa0-dev libofa0 librsvg2-dev librsvg2-bin librsvg2-2 libneon27-dev libsdl-dev libsdl1.2-dev libsdl1.2debian-all libsfml-dev libsoundtouch1c2 libsoundtouch1-dev libsoundtouch-dev libswfdec-dev libswfdec-0.6-90 libvdpau1 libvdpau-dev libwildmidi0 libwildmidi-dev libxvidcore4 lame lame-extras liba52-0.7.4 liba52-0.7.4-dev libamrnb3 libamrnb-dev libamrwb3 gstreamer0.10-alsa gstreamer0.10-ffmpeg gstreamer0.10-fluendo-mp3 gstreamer0.10-fluendo-mpegdemux gstreamer0.10-fluendo-mpegmux gstreamer0.10-gnonlin gstreamer0.10-gnonlin-dev gstreamer0.10-lame gstreamer0.10-plugins-bad gstreamer0.10-plugins-base gstreamer0.10-plugins-farsight gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-schroedinger gstreamer0.10-tools gstreamer0.10-x gstreamer0.10-videosource gstreamer-tools

Page 19: Exorcisando o GStreamer

WTF!?!?

Page 20: Exorcisando o GStreamer

Preparando o ambiente para trabalho

$ apt-get install --reinstall libalsaplayer-dev libgio-fam libogg-dev libtheora-dev libtheora-bin libvorbis-dev libcdparanoia-dev libgnomevfs2-dev libvisual-0.4-dev libpango1.0-dev libx11-dev libx264-dev libxvidcore4-dev libxinerama-dev flac libflac-dev libfaad-dev libaudio-dev libavifile-0.7-dev libdebug0-dev libmatroska-dev libmultisync-plugin-all libsmpeg-dev libwavpack-dev libannodex-dev libgconf2-dev libjpeg-dev libosso-dev libcaca-dev libcairo2-dev libpng12-dev libdirectfb-dev libdv-dev libesd0-dev libgdk-pixbuf-dev libhal-dev libpulse-dev libshout-dev libspeex-dev libtag1-dev libschroedinger-dev libdvdcss-dev libfreeze32 libdv4-dev libid3-dev libid3tag0-dev liblivemedia-dev libmpeg2-4-dev libmpeg3-dev libmpeg3hv-dev libmpeg4ip-dev libraw1394-dev libgst-dev libgstreamer-plugins-pulse0.10-0 libvcdinfo-dev libamrwb-dev libbz2-dev libcdaudio-dev libdc1394-22-dev libdfb++-dev libdirac-dev libdts-dev libfaac-dev libfaad2-0 libfaac0 libflite1 libgmerlin0 libgmerlin-dev libgsm1-dev libgsm-tools libjack-dev libladspa-ocaml-dev libmms0 libmms-dev libmodplug0c2 libmodplug-dev libmpeg2-4 libmpeg3-1 libmpeg3hv libmpeg4ip-0 libmusicbrainz3-6 libmusicbrainz3-dev libmusicbrainz4c2a libmusicbrainz4-dev libmusicbrainz-dev libmythes-dev libofa0-dev libofa0 librsvg2-dev librsvg2-bin librsvg2-2 libneon27-dev libsdl-dev libsdl1.2-dev libsdl1.2debian-all libsfml-dev libsoundtouch1c2 libsoundtouch1-dev libsoundtouch-dev libswfdec-dev libswfdec-0.6-90 libvdpau1 libvdpau-dev libwildmidi0 libwildmidi-dev libxvidcore4 lame lame-extras liba52-0.7.4 liba52-0.7.4-dev libamrnb3 libamrnb-dev libamrwb3 gstreamer0.10-alsa gstreamer0.10-ffmpeg gstreamer0.10-fluendo-mp3 gstreamer0.10-fluendo-mpegdemux gstreamer0.10-fluendo-mpegmux gstreamer0.10-gnonlin gstreamer0.10-gnonlin-dev gstreamer0.10-lame gstreamer0.10-plugins-bad gstreamer0.10-plugins-base gstreamer0.10-plugins-farsight gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-schroedinger gstreamer0.10-tools gstreamer0.10-x gstreamer0.10-videosource gstreamer-tools

Page 21: Exorcisando o GStreamer
Page 22: Exorcisando o GStreamer

Ubuntu way

$ apt-get install gstreamer0.10-alsa gstreamer0.10-ffmpeg gstreamer0.10-gnonlin gstreamer0.10-lame gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-tools gstreamer0.10-x

Page 23: Exorcisando o GStreamer

Em intenso desenvolvimento!

Data do slide: 31/05/2010

Page 24: Exorcisando o GStreamer

E a BD nessa história toda?

Page 25: Exorcisando o GStreamer

Contextualizando a BD

Conversão de vídeo para armazenamento Exibição online Corte Granularização

Page 26: Exorcisando o GStreamer

Vamos começar sério

$ gst-launch filesrc location=...musica ! decodebin ! alsasink

$ gst-launch filesrc location=...video ! decodebin ! xvimagesink

$ gst-launch filesrc location=...video_com_audio ! decodebin name=d d.! alsasink d.! xvimagesink

Page 27: Exorcisando o GStreamer

Um passo maior...

Page 28: Exorcisando o GStreamer

Convertendo e salvando$ gst-launch filesrc location=...musica ! decodebin! queue ! audioconvert ! vorbisenc ! oggmux ! filesink location=musica.ogg

$ gst-launch filesrc location=...video ! decodebin ! queue ! theoraenc ! oggmux ! filesink location=video.ogv

$ gst-launch filesrc location=...video_com_audio ! decodebin name=d

d.! queue ! audioconvert ! vorbisenc ! mux. d.! queue ! theoraenc ! mux. oggmux name=mux !

filesink location=video_com_audio.ogv

Page 29: Exorcisando o GStreamer

Exibição online com HTML5

<video><source src="video.ogv" type='video/ogg;

codecs="theora, vorbis"'></video>

Page 30: Exorcisando o GStreamer

Corte – Vamos refletir...

Page 31: Exorcisando o GStreamer

Corte de vídeo$ gst-launch gnlfilesource name=audio

location=... media-start=... media-duration=... start=...

duration=... caps="audio/x-raw-int;audio/x-raw-float"

gnlfilesource name=video location=... media-start=... media-duration=... start=...

duration=... caps="video/x-raw-rgb;video/x-raw-yuv"

audio. ! queue ! audiorate ! alsasinkvideo. ! queue ! videorate ! xvimagesink

Page 32: Exorcisando o GStreamer

Extras...: Mixagem

$ gst-launch filesrc location=... name=a a.! decodebin ! queue ! ffmpegcolorspace ! videoscale ! video/x-raw-yuv,width=320,height=240 ! videobox right=1 ! videorate ! mix. filesrc location=... name=b b.! decodebin name=grande grande.! queue ! ffmpegcolorspace ! videoscale ! video/x-raw-yuv,width=320,height=240 ! videorate ! alpha method=custom angle=30 target-r=127 target-g=61 target-b=49 ! videomixer name=mix ! ffmpegcolorspace ! xvimagesink grande.! queue ! audiorate ! alsasink

Page 33: Exorcisando o GStreamer

Extras...: Experiência

$ gst-launch filesrc location=Desktop/testes-gstreamer/shakira-hd/shakira-loba name=shakira shakira.! decodebin ! videorate ! videoscale ! video/x-raw-yuv,width=640,height=480 ! ffmpegcolorspace ! videobox right=1 ! mix. filesrc location=Desktop/video_meu.ogv name=meuvideo meuvideo.! decodebin ! videorate ! videoscale ! video/x-raw-yuv,width=640,height=480 ! alpha method=custom target-r=0 target-g=36 target-b=99 angle=40 ! videomixer name=mix ! ffmpegcolorspace ! xvimagesink

Page 34: Exorcisando o GStreamer

Algumas aplicações que utilizam

Totem Banshee Exaile Kaffeine AmaroK Pitivi Rhythmbox Songbird

Page 35: Exorcisando o GStreamer

Perguntas?

Page 36: Exorcisando o GStreamer

Referências

GStreamer: http://www.gstreamer.net/

Page 37: Exorcisando o GStreamer

Referências e Figuras

http://www.flickr.com/photos/desmondkavanagh/438838516http://www.flickr.com/photos/binaph/1469984925http://www.planetsexdf.com.br/img/calcinha.jpg

http://sites.google.com/site/indominavelsub/interrogacao.jpghttp://www.kelribeiro.com/wp-content/uploads/2008/12/ronaldo.jpghttp://www.click21.mypage.com.br/hosp_cliente/s/o/-/so-mulher.myflog.com.br/y17Gwk3VVq8Tb84qalU27416201322O9IPSIH05P_grd.jpg

http://i.ytimg.com/vi/6BqnJz0PzZs/0.jpghttp://www.oesquema.com.br/trabalhosujo/wp-content/uploads/2008/12/lula_roll.jpghttp://www.youtube.com/watch?v=JWTfwVZ1UD0&feature=related

http://translate.google.com/#en|pt|sinkhttp://creditplushealth.org/health%20picture/ronnie%20coleman%206.jpg

Page 38: Exorcisando o GStreamer

Referências e Figuras

http://images.icanhascheezburger.com/completestore/2009/4/12/128840642635598139.jpghttp://i.ehow.com/images/a04/g2/me/follow-dave-ramseys-baby-steps-800X800.jpghttp://images.icanhascheezburger.com/completestore/2009/4/12/128840642635598139.jpghttp://i.dailymail.co.uk/i/pix/2009/04/17/article-1171536-0472A623000005DC-386_468x329.jpghttp://farm1.static.flickr.com/4/4388726_1d417fb269.jpghttp://contigo.abril.com.br/imagem/noticia/201005/ampliada/gorete-240510-1.jpghttp://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/images/linked-elements.pnghttp://andreluceac.zip.net/images/natureza_linda1.jpghttp://potinhodexp.files.wordpress.com/2009/12/pegadinha_do_malandro.jpghttp://gstreamer.freedesktop.org/src/gst-plugins-good/

Page 39: Exorcisando o GStreamer

Referências e Figuras

http://bonitoisso.files.wordpress.com/2008/07/trinity-college-library-dub1.jpghttp://www.flickr.com/photos/75756973@N00/29776385http://discernimentocristao.files.wordpress.com/2009/09/o-pensador1.jpghttp://www.huffingtonpost.com/mark-c-miller/ommmmm-in-the-mood-for-me_b_368345.html

http://projects.gnome.org/totem/http://banshee-project.org/

http://www.exaile.org/http://kaffeine.kde.org/http://amarok.kde.org/http://www.pitivi.org/

Page 40: Exorcisando o GStreamer

Referências e Figuras

http://projects.gnome.org/rhythmbox/http://getsongbird.com/

http://www.padillabay.gov/brant/eximages/QUESTION.jpghttp://i44.tinypic.com/2q9j32u.jpg