Multimedi´aln´ıkontejnery, kodeky a frameworky

David Baˇrina

Multimedi´aln´ıkontejnery, kodeky a frameworky 1 / 44 Obsah

Pˇrehled Uvod´ Kontejnery Kodeky Frameworky Shrnut´ı

Multimedi´aln´ıkontejnery, kodeky a frameworky 2 / 44 Multim´edia

• multim´edia: text, zvuk, statick´yobraz, video, metainformace, . . . • potˇreba: • z´ısk´avat(kamera), • ukl´adat(pevn´ydisk, komprese), • vyhled´avat(podle popisu), • pˇrehr´avat, • upravovat (stˇrihvidea), . . . • ukl´ad´an´ı:kontejner + kodeky

Multimedi´aln´ıkontejnery, kodeky a frameworky 3 / 44 Pojmy

• kontejner • datov´eproudy (audio, video, titulky, kapitoly) • napˇr.AVI, , MPEG-TS • form´atvidea • ztr´atov´a,bezeztr´atov´akomprese • napˇr.H.264, MPEG-4 ASP • kodek • kompresor + dekompresor • napˇr.x264, DivX, • profily (z´achytn´ebody) • FourCC (4CC, four character code) • AVI • napˇr. DIVX oznaˇcujeDivX

Multimedi´aln´ıkontejnery, kodeky a frameworky 4 / 44 Kontejnery

AVI (Audio Video Interleave) • pˇr´ıpona .avi • spoleˇcnostMicrosoft, od roku 1992 • implementace RIFF (Resource Interchange File Format) • k identifikace kodeku FourCC (napˇr. DIVX = DivX) • nen´ımoˇzn´euloˇzittitulky, kapitoly, menu (tˇret´ıstrany) • p˚uvodn´ıomezen´ı1 GB • index podle ˇc´ıslasn´ımku (ne ˇcasu)na konci souboru (nevhodn´yke streamov´an´ı) • ˇsirok´apodpora • nem´apodporu B-sn´ımk˚u

Multimedi´aln´ıkontejnery, kodeky a frameworky 5 / 44 Kontejnery

Matroska • pˇr´ıpona .mkv • otevˇren´yform´at,ozn´amen2002 • podporuje vˇse,neomezen´ypoˇcetstop • zaloˇzenna EBML (Extensible Binary Meta Language) • kodek urˇcenCodecID (ˇretˇezec) • napˇr. V MPEG4/ISO/AVC = H.264 • typ V MS/VFW/FOURCC zaobaluje FourCC • http://haali.su/mkv/codecs.pdf • WebM (pˇr´ıpona .) je profil form´atuMatroska • Google, 2010, urˇcenpro web (HTML5) • kodeky pouze VP8 + Vorbis

Multimedi´aln´ıkontejnery, kodeky a frameworky 6 / 44 Kontejnery

MP4 (MPEG-4 Part 14) • pˇr´ıpona .mp4 • standard ISO, od roku 2003 (verze 2) • zaloˇzenna MPEG-4 Part 12, kter´yje zaloˇzenna QuickTime • k identifikaci objekt˚u(tak´ekodek˚u)ˇctyˇrznakov´eidentifik´atory • napˇr. avc1 pro MPEG-4 AVC • code-points, http://www.mp4ra.org/codecs.html • podporuje libovoln´ekodeky (priv´atn´ıa registrovan´e), z registrovan´ychje ˇsiroce podporovan´ychpouze p´ar

Multimedi´aln´ıkontejnery, kodeky a frameworky 7 / 44 Kontejnery

ASF (Advanced Systems Format) • pˇr´ıpony .asf, .wma, .wmv • Microsoft • objekty (tak´epouˇzit´ekodeky) identifikov´any GUID • zaobaluje FourCC, napˇr. DEFINE GUID(CLSID XVID, mmioFOURCC(’D’,’I’,’V’,’X’), ... • teoreticky libovoln´ykodek • index pˇriˇrazenkl´ıˇcov´ymsn´ımk˚um,m˚uˇzeb´ytpodle ˇcasu, ˇc´ısla sn´ımkunebo ref. ˇcas.raz´ıtka

Multimedi´aln´ıkontejnery, kodeky a frameworky 8 / 44 Kontejnery

QuickTime • pˇr´ıpona .mov • spoleˇcnostApple, tak´eQuickTime File Format (QTFF) • je na nˇemzaloˇzenMPEG-4 Part 12

Ogg • pˇr´ıpony .ogv, .oga, .ogx, . • otevˇren´yform´at • souˇc´astprojektu Ogg, zastˇreˇsen´eXiph.Org Foundation • dˇr´ıveve specifikace HTML5 • hack OGM (Ogg Media)

Multimedi´aln´ıkontejnery, kodeky a frameworky 9 / 44 Kontejnery

Flash Video • pˇr´ıpony .flv, .f4v • spoleˇcnostAdobe Systems (p˚uvodnˇeMacromedia) • dvˇeverze: FLV (SWF) a F4V (MPEG-4 Part 12) • omezen´apodpora kodek˚u

3GP, 3G2 • pˇr´ıpony .3gp, .3g2 • zaloˇzenyna MPEG-4 Part 12 • pro mobiln´ızaˇr´ızen´ı • omezen´apodpora kodek˚u

Multimedi´aln´ıkontejnery, kodeky a frameworky 10 / 44 Kontejnery

MPEG-PS • ISO, specifikov´anv MPEG-1 Part 1 a MPEG-2 Part 1 • VOB, EVO (s omezen´ımi) – DVD-Video a HD DVD • omezen´apodpora kodek˚u+ priv´atn´ıproudy

MPEG-TS • ISO, 1995, specifikov´anv MPEG-2 Part 1 • m˚uˇzen´estv´ıcePS (Program Streams) • omezen´apodpora kodek˚u+ priv´atn´ıproudy • televizn´ıvys´ıl´an´ı

Multimedi´aln´ıkontejnery, kodeky a frameworky 11 / 44 Multim´edia

• multim´edia: text, zvuk, statick´yobraz, video, metainformace, . . . • potˇreba: • z´ısk´avat(kamera), • ukl´adat(pevn´ydisk, komprese), • vyhled´avat(podle popisu), • pˇrehr´avat, • upravovat (stˇrihvidea), . . . • ukl´ad´an´ı:kontejner + kodeky

Multimedi´aln´ıkontejnery, kodeky a frameworky 12 / 44 Pojmy

• sn´ımek(frame) • sn´ımkov´afrekvence • index (podle ˇcasu,ˇc´ıslasn´ımku) • typy sn´ımk˚u • kl´ıˇcov´esn´ımky(I-sn´ımky) • rozd´ılov´esn´ımky(predikce, P-sn´ımky, B-sn´ımky) • frame reordering • GOP (skupina sn´ımk˚u)

Multimedi´aln´ıkontejnery, kodeky a frameworky 13 / 44 Pojmy

Multimedi´aln´ıkontejnery, kodeky a frameworky 14 / 44 Techniky

0 • barevn´ymodel: Y CbCr + podvzorkov´an´ı(sub-sampling) • rozdˇelen´ına bloky • intra-sn´ımkov´ek´odov´an´ı(prostorov´aredundance) • predikce • rozdˇelitsn´ımekna bloky • transformace (DCT, DWT) • kvantizace, k´odov´an´ı

0011010 1100011 1001101 01110...

1 2 3 4 5

Multimedi´aln´ıkontejnery, kodeky a frameworky 15 / 44 Techniky

• inter-sn´ımkov´ek´odov´an´ı(ˇcasov´aredundance) • kompenzace pohybu • glob´aln´ı • blokov´a– pohybov´yvektor • s pˇresahuj´ıc´ımibloky

Multimedi´aln´ıkontejnery, kodeky a frameworky 16 / 44 Form´aty videa, kodeky

MPEG-1 Part 2 • vytvoˇrenMPEG, standard ISO • DCT • form´at:VCD • libavcodec

MPEG-2 Part 2/H.262 • form´at • SVCD, DVD, DVB, HD DVD, Blu-ray • DCT, VBR (na rozd´ılod MPEG-1) • ˇsirok´apodpora • libavcodec

Multimedi´aln´ıkontejnery, kodeky a frameworky 17 / 44 Form´aty videa, kodeky

MPEG-4 Part 2 ASP/MPEG-4 ASP • form´at • zaloˇzenna ITU-T H.263, ISO, 1999 • B-sn´ımkyaˇzASP (ne SP), DCT • kodeky • libavcodec • DivX • Xvid • 3ivx • Nero Digital

Multimedi´aln´ıkontejnery, kodeky a frameworky 18 / 44 Form´aty videa, kodeky

MPEG-4 Part 10/H.264/MPEG-4 AVC • form´at • ISO, 2003 • Blu-ray, HD DVD, DVB (CTˇ HD + Nova HD) • I/P/B-sn´ımky, DCT/WHT • kodeky • libavcodec (pouze dekomprese) • x264 (pouze komprese) • DivX (H.264) • Nero Digital • CoreAVC (pouze dekomprese)

Multimedi´aln´ıkontejnery, kodeky a frameworky 19 / 44 Form´aty videa, kodeky

H.265/HEVC • ve v´yvoji,vˇetˇs´ıvelikost transformace, adaptivn´ıv´ybˇer kvantizaˇcn´ımatice, . . . • HM-1.0

VP8 • form´at • Google, HTML5 • DCT/WHT (Walsh–Hadamard transform) • nejsou B-sn´ımky, zav´ad´ıgolden sn´ımkya altref sn´ımky • libvpx

Multimedi´aln´ıkontejnery, kodeky a frameworky 20 / 44 Form´aty videa, kodeky

Theora • urˇcenpro Ogg, Xiph.org Foundation • form´atzaloˇzenna VP3; DCT, I/P-sn´ımky(ne B-sn´ımky) • libtheora

Dirac • BBC • DWT, I/P/B-sn´ımky • podmnoˇzina standardizov´anajako VC-2 • kodeky Schr¨odingera Dirac (dirac-research)

Multimedi´aln´ıkontejnery, kodeky a frameworky 21 / 44 Form´aty videa, kodeky

Windows Media Video + VC-1/SMPTE 421M • Microsoft; VC-1 (zaloˇzenona WMV 9) pozdˇejiSMPTE • HD DVD, Blu-ray; DCT, ∼MPEG • nˇekolik profil˚u,nˇekolik kodek˚uod Microsoftu (WMV 9)

nestandardizovan´e • Huffyuv • Lagarith • MJPEG

Multimedi´aln´ıkontejnery, kodeky a frameworky 22 / 44 Multim´edia

• multim´edia: text, zvuk, statick´yobraz, video, metainformace, . . . • potˇreba: • z´ısk´avat(kamera), • ukl´adat(pevn´ydisk, komprese), • vyhled´avat(podle popisu), • pˇrehr´avat, • upravovat (stˇrihvidea), . . . • ukl´ad´an´ı:kontejner + kodeky

Multimedi´aln´ıkontejnery, kodeky a frameworky 23 / 44 Multimedi´aln´ıframework

• vˇsezaobaluje • knihovny (API), n´astroje(pˇrehr´avaˇc,CLI) • form´aty: kontejnery, kodeky, protokoly, . . . • poˇzadavky:modularita, ˇsirok´apodpora form´at˚u,intuitivn´ı pouˇzit´ı,dokumentace, v´ykon, platforma, . . . • probl´em:ˇz´adn´yneum´ıvˇse

Multimedi´aln´ıkontejnery, kodeky a frameworky 24 / 44 Pojmy

0 • barevn´ymodel (RGB, Y CbCr) • form´atpixelu (RGB24) • framebuffer

skutečný obraz

pixel{ bajt }řádek

framebuffer: ...

šířka řádku

délka kroku

Multimedi´aln´ıkontejnery, kodeky a frameworky 25 / 44 Pˇrehr´avaˇc,kodek

pˇrehr´avaˇcvidea:

dekóduj inicializace destrukce snímek

zobraz snímek

funkce kodeku: • inicializace (alokace pamˇeti– rozd´ılov´esn´ımky, parametry) • odhad maxim´aln´ıvelikosti zkomprimovan´ehosn´ımku • komprese sn´ımku • dekomprese sn´ımku

Multimedi´aln´ıkontejnery, kodeky a frameworky 26 / 44 Multimedi´aln´ıframework

nˇekter´ev´yznamn´eframeworky: • Video for Windows (VirtualDub, Media Player) • DirectShow (WMP, BSPlayer, Media Player Classic) • FFmpeg (MPlayer, VLC, ffdshow) • QuickTime (QuickTime) • ( 11/12) • GStreamer • , libvlc, Phonon a dalˇs´ı.. .

Multimedi´aln´ıkontejnery, kodeky a frameworky 27 / 44 Frameworky

Video for Windows (VfW) / Video Compression Manager (VCM) • vyvinul Microsoft jako reakci na QuickTime (Apple) • prvn´ıverze (verze 1.0), listopad 1992 • vlastn´ısouborov´yform´atAudio Video Interleave (AVI) • n´astupcem se stal DirectShow • dokumentace na MSDN

LONG hr ; PAVIFILE pfile ;

AVIFileInit ();

hr = AVIFileOpen(&pfile , szFile , OF SHARE DENY WRITE , 0L ) ; i f ( hr != 0) { r e t u r n ; }

AVIFileRelease(pfile ); AVIFileExit ();

Multimedi´aln´ıkontejnery, kodeky a frameworky 28 / 44 Frameworky

Video for Windows (VfW) / Video Compression Manager (VCM)

#i n c l u d e

LRESULT WINAPI DriverProc( DWORD dwDriverId , HDRVR hdrvr , UINT msg , LONG lParam1 , LONG lParam2) { s w i t c h ( msg ) { case ICM COMPRESS : // komprimuj snimek r e t u r n Compress ( ( ICCOMPRESS∗)lParam1 , (DWORD)lParam2 );

case ICM DECOMPRESS : // dekomprimuj snimek r e t u r n Decompress ( (ICDECOMPRESS∗)lParam1 , (DWORD)lParam2 ); } } kodek: zkompilovat jen plugin

Multimedi´aln´ıkontejnery, kodeky a frameworky 29 / 44 Frameworky

Video for Windows (VfW) / Video Compression Manager (VCM)

Multimedi´aln´ıkontejnery, kodeky a frameworky 30 / 44 Frameworky

DirectShow (DShow, DS) • n´astupce VfW; n´astupcem Media Foundation • zaloˇzenna objektov´emmodelu COM (Component Object Model) • graf sloˇzen´yz filtr˚u • automatick´akonverze barevn´ychmodel˚u(proti VfW) • filtry: zdrojov´e,transformaˇcn´ı,renderovac´ı • pro v´yvojnutno nainstalovat Windows SDK, dˇr´ıve DirectX SDK • utilita GraphEdit • zpˇetn´akompatibilita: VfW kodeky obaleny filtrem AVI Decompressor • dokumentace na MSDN

Multimedi´aln´ıkontejnery, kodeky a frameworky 31 / 44 Frameworky

DirectShow (DShow, DS)

Multimedi´aln´ıkontejnery, kodeky a frameworky 32 / 44 Frameworky

DirectShow (DShow, DS)

c l a s s CDBVDecoder : p u b l i c CVideoTransformFilter , p u b l i c IDBVDecoder { p u b l i c : s t a t i c CUnknown ∗WINAPI C r e a t e I n s t a n c e (LPUNKNOWN punk , HRESULT ∗phr ) ; STDMETHODIMP NonDelegatingQueryInterface(REFIID riid , v o i d ∗∗ppv ) ; DECLARE IUNKNOWN ;

CDBVDecoder (LPUNKNOWN punk , HRESULT ∗phr ) ;

HRESULT CheckInputType( const CMediaType ∗mtIn ) ; HRESULT GetMediaType( i n t iPos , CMediaType ∗pmt ) ; HRESULT SetMediaType(PIN DIRECTION direction , const CMediaType ∗pmt ) ; HRESULT CheckTransform( const CMediaType ∗mtIn , const CMediaType ∗mtOut ) ; HRESULT DecideBufferSize(IMemAllocator ∗pima , ALLOCATOR PROPERTIES ∗ pProperties );

HRESULT Transform(IMediaSample ∗pIn , IMediaSample ∗pOut ) ; }; kodek: zkompilovat jen plugin

Multimedi´aln´ıkontejnery, kodeky a frameworky 33 / 44 Frameworky

DirectShow (DShow, DS)

Multimedi´aln´ıkontejnery, kodeky a frameworky 34 / 44 Frameworky

FFmpeg • svobodn´ymultiplatformn´ısoftware • vyuˇz´ıvaj´ıjej MPlayer, VLC media player, Avidemux, ffdshow • knihovny: • libavutil (matematick´erutiny, pro zjednoduˇsen´ıprogramov´an´ı) • libavcodec (audio a video kodeky) • libavformat (muxery a demuxery/splittery pro kontejnery) • libavdevice (grabov´an´ıa renderov´an´ıpˇresV4L(2), VfW, ALSA) • libavfilter (filtry) • libswscale (zmˇena rozliˇsen´ıa barevn´ehomodelu obrazu) • podporovan´eform´aty na http://www.ffmpeg.org/general.html • Libav (fork FFmpegu), http://libav.org/

Multimedi´aln´ıkontejnery, kodeky a frameworky 35 / 44 Frameworky

FFmpeg

#i n c l u d e #i n c l u d e

i n t main ( i n t argc , charg ∗ a r g v [ ] ) { a v r e g i s t e r a l l ( ) ;

AVFormatContext ∗pFormatCtx ;

i f ( a v o p e n i n p u t file(&pFormatCtx, argv[1], NULL, 0, NULL) != 0) r e t u r n −1;

i f ( a v f i n d s t r e a m info (pFormatCtx) < 0) r e t u r n −1;

AVCodecContext ∗pCodecCtx ;

i f (pFormatCtx−>s t r e a m s [0]−>codec. t y p e != CODEC TYPE VIDEO) r e t u r n −1;

pCodecCtx = &pFormatCtx−>s t r e a m s [0]−>codec ;

Multimedi´aln´ıkontejnery, kodeky a frameworky 36 / 44 Frameworky

FFmpeg

s t a t i c i n t d b v 1 d e c o d e frame(AVCodecContext ∗avctx , v o i d ∗outdata , i n t ∗ o u t d a t a s i z e , const u i n t 8 t ∗buf , i n t b u f s i z e ) { // dekoduj snimek }

AVCodec dbv1 d e c o d e r = { .name =”dbv1”, . t y p e = CODEC TYPE VIDEO , . i d = CODEC ID DBV1 , . p r i v d a t a s i z e = s i z e o f (DBV1Context) , . i n i t = d b v 1 d e c o d e i n i t , .close =dbv1 d e c o d e c l o s e , .decode =dbv1 decode frame , . long name = NULL IF CONFIG SMALL(”DaBler ’s Video codec v1 ” ) , .capabilities = CODEC CAP DR1 , }; kodek: zkompilovat modul + libavcodec + libavformat

Multimedi´aln´ıkontejnery, kodeky a frameworky 37 / 44 Frameworky

pˇr´ıkladkodeku: j´adro+ ovladaˇcpro VfW + filtr pro DShow + patch na FFmpeg

aplikace

DShow VfW

FFmpeg DS filtr VfW ovl. patch

framework core multiplatformní pouze Windows

Multimedi´aln´ıkontejnery, kodeky a frameworky 38 / 44 Frameworky

GStreamer • svobodn´ymultiplatformn´ı,1999, zaloˇzen na GLib, prim´arnˇe pro GNOME • zaloˇzenna grafu filtr˚u(pipeline), jako DirectShow • n´astroje:gst-launch, gst-inspect, gst-editor • terminologie • pads = spoje mezi filtry • source pad se propoj´ıdo sink pad • typ dat se zjist´ıpomoc´ıcapabilities • tˇribal´ıˇckyplugin˚u:The Good, the Bad and the Ugly

Multimedi´aln´ıkontejnery, kodeky a frameworky 39 / 44 Frameworky

GStreamer

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

Multimedi´aln´ıkontejnery, kodeky a frameworky 40 / 44 Frameworky

GStreamer GUI, XML

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);

Multimedi´aln´ıkontejnery, kodeky a frameworky 41 / 44 Frameworky

GStreamer Capabilities (omezen´ıvstupu a v´ystupu)

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

Multimedi´aln´ıkontejnery, kodeky a frameworky 42 / 44 Frameworky

GStreamer 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

Multimedi´aln´ıkontejnery, kodeky a frameworky 43 / 44 Shrnut´ı

• pojmy a techniky (typ sn´ımku,form´atframebufferu) • kontejnery (AVI, Matroska, MP4) • form´aty videa (H.264, MPEG-4 ASP, ) • kodeky (DivX, Xvid, libavcodec) • stavba kodeku • frameworky (Video for Windows, DirectShow, FFmpeg)

Multimedi´aln´ıkontejnery, kodeky a frameworky 44 / 44