Multimedialnı kontejnery, kodeky aframeworky
David Barina
Multimedialnı kontejnery, kodeky a frameworky 1 / 44
Obsah
PrehledUvodKontejneryKodekyFrameworkyShrnutı
Multimedialnı kontejnery, kodeky a frameworky 2 / 44
Multimedia
• multimedia:text, zvuk, staticky obraz, video, metainformace, . . .
• potreba:• zıskavat (kamera),• ukladat (pevny disk, komprese),• vyhledavat (podle popisu),• prehravat,• upravovat (strih videa), . . .
• ukladanı: kontejner + kodeky
Multimedialnı kontejnery, kodeky a frameworky 3 / 44
Pojmy
• kontejner• datove proudy (audio, video, titulky, kapitoly)• napr. AVI, Matroska, MPEG-TS
• format videa• ztratova, bezeztratova komprese• napr. H.264, MPEG-4 ASP
• kodek• kompresor + dekompresor• napr. x264, DivX, libavcodec
• profily (zachytne body)
• FourCC (4CC, four character code)• AVI• napr. DIVX oznacuje DivX
Multimedialnı kontejnery, kodeky a frameworky 4 / 44
Kontejnery
AVI (Audio Video Interleave)
• prıpona .avi
• spolecnost Microsoft, od roku 1992
• implementace RIFF (Resource Interchange File Format)
• k identifikace kodeku FourCC (napr. DIVX = DivX)
• nenı mozne ulozit titulky, kapitoly, menu (tretı strany)
• puvodnı omezenı 1 GB
• index podle cısla snımku (ne casu) na konci souboru(nevhodny ke streamovanı)
• siroka podpora
• nema podporu B-snımku
Multimedialnı kontejnery, kodeky a frameworky 5 / 44
Kontejnery
Matroska
• prıpona .mkv
• otevreny format, oznamen 2002
• podporuje vse, neomezeny pocet stop
• zalozen na EBML (Extensible Binary Meta Language)
• kodek urcen CodecID (retezec)• napr. V MPEG4/ISO/AVC = H.264• typ V MS/VFW/FOURCC zaobaluje FourCC• http://haali.su/mkv/codecs.pdf
• WebM (prıpona .webm) je profil formatu Matroska• Google, 2010, urcen pro web (HTML5)• kodeky pouze VP8 + Vorbis
Multimedialnı kontejnery, kodeky a frameworky 6 / 44
Kontejnery
MP4 (MPEG-4 Part 14)
• prıpona .mp4
• standard ISO, od roku 2003 (verze 2)
• zalozen na MPEG-4 Part 12, ktery je zalozen na QuickTime
• k identifikaci objektu (take kodeku) ctyrznakove identifikatory• napr. avc1 pro MPEG-4 AVC• code-points, http://www.mp4ra.org/codecs.html
• podporuje libovolne kodeky (privatnı a registrovane),z registrovanych je siroce podporovanych pouze par
Multimedialnı kontejnery, kodeky a frameworky 7 / 44
Kontejnery
ASF (Advanced Systems Format)
• prıpony .asf, .wma, .wmv
• Microsoft
• objekty (take pouzite kodeky) identifikovany GUID• zaobaluje FourCC, napr.
DEFINE GUID(CLSID XVID, mmioFOURCC(’D’,’I’,’V’,’X’), . . .
• teoreticky libovolny kodek
• index prirazen klıcovym snımkum, muze byt podle casu, cıslasnımku nebo ref. cas. razıtka
Multimedialnı kontejnery, kodeky a frameworky 8 / 44
Kontejnery
QuickTime
• prıpona .mov
• spolecnost Apple, take QuickTime File Format (QTFF)
• je na nem zalozen MPEG-4 Part 12
Ogg
• prıpony .ogv, .oga, .ogx, .ogg
• otevreny format
• soucast projektu Ogg, zastresene Xiph.Org Foundation
• drıve ve specifikace HTML5
• hack OGM (Ogg Media)
Multimedialnı kontejnery, kodeky a frameworky 9 / 44
Kontejnery
Flash Video
• prıpony .flv, .f4v
• spolecnost Adobe Systems (puvodne Macromedia)
• dve verze: FLV (SWF) a F4V (MPEG-4 Part 12)
• omezena podpora kodeku
3GP, 3G2
• prıpony .3gp, .3g2
• zalozeny na MPEG-4 Part 12
• pro mobilnı zarızenı
• omezena podpora kodeku
Multimedialnı kontejnery, kodeky a frameworky 10 / 44
Kontejnery
MPEG-PS
• ISO, specifikovan v MPEG-1 Part 1 a MPEG-2 Part 1
• VOB, EVO (s omezenımi) – DVD-Video a HD DVD
• omezena podpora kodeku + privatnı proudy
MPEG-TS
• ISO, 1995, specifikovan v MPEG-2 Part 1
• muze nest vıce PS (Program Streams)
• omezena podpora kodeku + privatnı proudy
• televiznı vysılanı
Multimedialnı kontejnery, kodeky a frameworky 11 / 44
Multimedia
• multimedia:text, zvuk, staticky obraz, video, metainformace, . . .
• potreba:• zıskavat (kamera),• ukladat (pevny disk, komprese),• vyhledavat (podle popisu),• prehravat,• upravovat (strih videa), . . .
• ukladanı: kontejner + kodeky
Multimedialnı kontejnery, kodeky a frameworky 12 / 44
Pojmy
• snımek (frame)• snımkova frekvence• index (podle casu, cısla snımku)
• typy snımku• klıcove snımky (I-snımky)• rozdılove snımky (predikce, P-snımky, B-snımky)• frame reordering• GOP (skupina snımku)
Multimedialnı kontejnery, kodeky a frameworky 13 / 44
Pojmy
Multimedialnı kontejnery, kodeky a frameworky 14 / 44
Techniky
• barevny model: Y′CbCr + podvzorkovanı (sub-sampling)
• rozdelenı na bloky
• intra-snımkove kodovanı (prostorova redundance)• predikce• rozdelit snımek na bloky• transformace (DCT, DWT)• kvantizace, kodovanı
00110101100011100110101110...
1 2 3 4 5
Multimedialnı kontejnery, kodeky a frameworky 15 / 44
Techniky
• inter-snımkove kodovanı (casova redundance)• kompenzace pohybu
• globalnı• blokova – pohybovy vektor• s presahujıcımi bloky
Multimedialnı kontejnery, kodeky a frameworky 16 / 44
Formaty videa, kodeky
MPEG-1 Part 2
• vytvoren MPEG, standard ISO
• DCT
• format: VCD
• libavcodec
MPEG-2 Part 2/H.262
• format• SVCD, DVD, DVB, HD DVD, Blu-ray• DCT, VBR (na rozdıl od MPEG-1)• siroka podpora
• libavcodec
Multimedialnı kontejnery, kodeky a frameworky 17 / 44
Formaty videa, kodeky
MPEG-4 Part 2 ASP/MPEG-4 ASP
• format• zalozen na ITU-T H.263, ISO, 1999• B-snımky az ASP (ne SP), DCT
• kodeky• libavcodec• DivX• Xvid• 3ivx• Nero Digital
Multimedialnı kontejnery, kodeky a frameworky 18 / 44
Formaty videa, kodeky
MPEG-4 Part 10/H.264/MPEG-4 AVC
• format• 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)
Multimedialnı kontejnery, kodeky a frameworky 19 / 44
Formaty videa, kodeky
H.265/HEVC
• ve vyvoji, vetsı velikost transformace, adaptivnı vyberkvantizacnı matice, . . .
• HM-1.0
VP8
• format• Google, HTML5• DCT/WHT (Walsh–Hadamard transform)• nejsou B-snımky, zavadı golden snımky a altref snımky
• libvpx
Multimedialnı kontejnery, kodeky a frameworky 20 / 44
Formaty videa, kodeky
Theora
• urcen pro Ogg, Xiph.org Foundation
• format zalozen na VP3; DCT, I/P-snımky (ne B-snımky)
• libtheora
Dirac
• BBC
• DWT, I/P/B-snımky
• podmnozina standardizovana jako VC-2
• kodeky Schrodinger a Dirac (dirac-research)
Multimedialnı kontejnery, kodeky a frameworky 21 / 44
Formaty videa, kodeky
Windows Media Video + VC-1/SMPTE 421M
• Microsoft; VC-1 (zalozeno na WMV 9) pozdeji SMPTE
• HD DVD, Blu-ray; DCT, ∼MPEG
• nekolik profilu, nekolik kodeku od Microsoftu (WMV 9)
nestandardizovane
• Huffyuv
• Lagarith
• MJPEG
Multimedialnı kontejnery, kodeky a frameworky 22 / 44
Multimedia
• multimedia:text, zvuk, staticky obraz, video, metainformace, . . .
• potreba:• zıskavat (kamera),• ukladat (pevny disk, komprese),• vyhledavat (podle popisu),• prehravat,• upravovat (strih videa), . . .
• ukladanı: kontejner + kodeky
Multimedialnı kontejnery, kodeky a frameworky 23 / 44
Multimedialnı framework
• vse zaobaluje
• knihovny (API), nastroje (prehravac, CLI)
• formaty: kontejnery, kodeky, protokoly, . . .
• pozadavky: modularita, siroka podpora formatu, intuitivnıpouzitı, dokumentace, vykon, platforma, . . .
• problem: zadny neumı vse
Multimedialnı kontejnery, kodeky a frameworky 24 / 44
Pojmy
• barevny model (RGB, Y′CbCr)
• format pixelu (RGB24)
• framebuffer
...
{pixel
bajt }řádek
framebuffer:
skutečný obraz
šířka řádku
délka kroku
Multimedialnı kontejnery, kodeky a frameworky 25 / 44
Prehravac, kodek
prehravac videa:
inicializace
zobrazsnímek
destrukcedekódujsnímek
funkce kodeku:
• inicializace (alokace pameti – rozdılove snımky, parametry)
• odhad maximalnı velikosti zkomprimovaneho snımku
• komprese snımku
• dekomprese snımku
Multimedialnı kontejnery, kodeky a frameworky 26 / 44
Multimedialnı framework
nektere vyznamne frameworky:
• Video for Windows (VirtualDub, Media Player)
• DirectShow (WMP, BSPlayer, Media Player Classic)
• FFmpeg (MPlayer, VLC, ffdshow)
• QuickTime (QuickTime)
• Media Foundation (Windows Media Player 11/12)
• GStreamer
• xine, libvlc, Phonon a dalsı. . .
Multimedialnı 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ı souborovy format Audio Video Interleave (AVI)
• nastupcem se stal DirectShow
• dokumentace na MSDN
LONG hr ;PAVIFILE p f i l e ;
A V I F i l e I n i t ( ) ;
hr = AVIFi leOpen (& p f i l e , s z F i l e , OF SHARE DENY WRITE , 0L ) ;i f ( hr != 0) {
r e t u r n ;}
A V I F i l e R e l e a s e ( p f i l e ) ;A V I F i l e E x i t ( ) ;
Multimedialnı kontejnery, kodeky a frameworky 28 / 44
Frameworky
Video for Windows (VfW) / Video Compression Manager (VCM)
#i n c l u d e <vfw . h>
LRESULT WINAPI D r i v e r P r o c (DWORD d w D r i v e r I d ,HDRVR hdrvr ,UINT msg ,LONG lParam1 ,LONG lParam2 )
{s w i t c h ( msg ){
case ICM COMPRESS :// komprimuj sn imekr e t u r n Compress ( ( ICCOMPRESS∗) lParam1 , (DWORD) lParam2 ) ;
case ICM DECOMPRESS :// dekomprimuj sn imekr e t u r n Decompress ( ( ICDECOMPRESS∗) lParam1 , (DWORD) lParam2 ) ;
}}
kodek: zkompilovat jen plugin
Multimedialnı kontejnery, kodeky a frameworky 29 / 44
Frameworky
Video for Windows (VfW) / Video Compression Manager (VCM)
Multimedialnı kontejnery, kodeky a frameworky 30 / 44
Frameworky
DirectShow (DShow, DS)
• nastupce VfW; nastupcem Media Foundation
• zalozen na objektovem modelu COM (Component ObjectModel)
• graf slozeny z filtru
• automaticka konverze barevnych modelu (proti VfW)
• filtry: zdrojove, transformacnı, renderovacı
• pro vyvoj nutno nainstalovat Windows SDK, drıveDirectX SDK
• utilita GraphEdit
• zpetna kompatibilita: VfW kodeky obaleny filtremAVI Decompressor
• dokumentace na MSDN
Multimedialnı kontejnery, kodeky a frameworky 31 / 44
Frameworky
DirectShow (DShow, DS)
Multimedialnı kontejnery, kodeky a frameworky 32 / 44
Frameworky
DirectShow (DShow, DS)
c l a s s CDBVDecoder : p u b l i c C V i d e o T r a n s f o r m F i l t e r , 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 N o n D e l e g a t i n g Q u e r y I n t e r f a c e ( REFIID r i i d , 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 d i r e c t i o n , const CMediaType ∗pmt ) ;HRESULT CheckTransform ( const CMediaType ∗mtIn , const CMediaType ∗mtOut ) ;HRESULT D e c i d e B u f f e r S i z e ( IMemAl locator ∗pima ,
ALLOCATOR PROPERTIES ∗ p P r o p e r t i e s ) ;
HRESULT Transform ( IMediaSample ∗pIn , IMediaSample ∗pOut ) ;} ;
kodek: zkompilovat jen plugin
Multimedialnı kontejnery, kodeky a frameworky 33 / 44
Frameworky
DirectShow (DShow, DS)
Multimedialnı kontejnery, kodeky a frameworky 34 / 44
Frameworky
FFmpeg
• svobodny multiplatformnı software
• vyuzıvajı jej MPlayer, VLC media player, Avidemux, ffdshow
• knihovny:• libavutil (matematicke rutiny, pro zjednodusenı programovanı)• libavcodec (audio a video kodeky)• libavformat (muxery a demuxery/splittery pro kontejnery)• libavdevice (grabovanı a renderovanı pres V4L(2), VfW, ALSA)• libavfilter (filtry)• libswscale (zmena rozlisenı a barevneho modelu obrazu)
• podporovane formaty nahttp://www.ffmpeg.org/general.html
• Libav (fork FFmpegu), http://libav.org/
Multimedialnı kontejnery, kodeky a frameworky 35 / 44
Frameworky
FFmpeg
#i n c l u d e <avcodec . h>#i n c l u d e <a v f o r m a t . h>
i n t main ( i n t argc , c h a r g ∗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 f i l e (&pFormatCtx , a r g v [ 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 i n f o ( pFormatCtx ) < 0)r e t u r n −1;
AVCodecContext ∗pCodecCtx ;
i f ( pFormatCtx−>s t r e a m s [0]−>codec . c o d e c 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 ;
Multimedialnı 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 f r a m e ( 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 )
{// dekodu j sn imek
}
AVCodec d b v 1 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 ,
. c l o s e = d b v 1 d e c o d e c l o s e ,
. decode = dbv1 decode f rame ,
. long name = NULL IF CONFIG SMALL ( ” DaBler ’ s Video codec v1 ” ) ,
. c a p a b i l i t i e s = CODEC CAP DR1 ,} ;
kodek: zkompilovat modul + libavcodec + libavformat
Multimedialnı kontejnery, kodeky a frameworky 37 / 44
Frameworky
prıklad kodeku:jadro + ovladac pro VfW + filtr pro DShow + patch na FFmpeg
VfW ovl.DS filtr
VfWDShow ffdshow
patch
FFmpeg
aplikace
coreframeworkmultiplatformní
pouze Windows
Multimedialnı kontejnery, kodeky a frameworky 38 / 44
Frameworky
GStreamer
• svobodny multiplatformnı, 1999, zalozen na GLib, primarnepro GNOME
• zalozen na grafu filtru (pipeline), jako DirectShow
• nastroje: gst-launch, gst-inspect, gst-editor
• terminologie• pads = spoje mezi filtry• source pad se propojı do sink pad• typ dat se zjistı pomocı capabilities
• tri balıcky pluginu: The Good, the Bad and the Ugly
Multimedialnı 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
Multimedialnı 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);
Multimedialnı kontejnery, kodeky a frameworky 41 / 44
Frameworky
GStreamer
Capabilities (omezenı vstupu a vystupu)
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
Multimedialnı 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
Multimedialnı kontejnery, kodeky a frameworky 43 / 44
Shrnutı
• pojmy a techniky (typ snımku, format framebufferu)
• kontejnery (AVI, Matroska, MP4)
• formaty videa (H.264, MPEG-4 ASP, Theora)
• kodeky (DivX, Xvid, libavcodec)
• stavba kodeku
• frameworky (Video for Windows, DirectShow, FFmpeg)
Multimedialnı kontejnery, kodeky a frameworky 44 / 44
Top Related