Methoden voor het manipuleren van MPEG-2 Video en MPEG-2...

116
Faculteit Toegepaste Wetenschappen Vakgroep Elektronica en Informatiesystemen Voorzitter: prof. dr. ir. J. Van Campenhout Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 Systems stromen op basis van MPEG-21 BSDL door Jelle Claus Promotor: prof. dr. ir. R. Van de Walle Thesisbegeleider: lic. Wesley De Neve Afstudeerwerk ingediend tot het behalen van de graad van Licentiaat in de Informatica Academiejaar 2004–2005

Transcript of Methoden voor het manipuleren van MPEG-2 Video en MPEG-2...

Page 1: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Faculteit Toegepaste WetenschappenVakgroep Elektronica en InformatiesystemenVoorzitter: prof. dr. ir. J. Van Campenhout

Methoden voor het manipuleren van

MPEG-2 Video en MPEG-2 Systems stromen

op basis van MPEG-21 BSDL

door Jelle Claus

Promotor: prof. dr. ir. R. Van de WalleThesisbegeleider: lic. Wesley De Neve

Afstudeerwerk ingediend tot het behalen van de graad vanLicentiaat in de Informatica

Academiejaar 2004–2005

Page 2: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Toelating tot bruikleen

“De auteur geeft de toelating deze scriptie voor consultatie beschikbaar testellen en delen van de scriptie te kopieren voor persoonlijk gebruik. Elk an-der gebruik valt onder de beperkingen van het auteursrecht, in het bijzondermet betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij hetaanhalen van resultaten uit deze scriptie.”

Jelle Claus, mei 2005

i

Page 3: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Dankwoord

Graag wil ik een dankwoordje richten tot alle mensen die bijgedragen hebbentot de realisatie van deze thesis.

Vooreerst wil ik prof. dr. ir. Rik Van de Walle bedanken voor het opvol-gen van deze scriptie en voor de begeleiding van deze scriptie in het algemeen.Verder wil ik natuurlijk ook mijn begeleider Wesley de Neve bedanken voorde uitstekende begeleiding en voor de vele tips en handige informatie die hijter beschikking stelde om mij op goede weg te zetten. Ook wil ik alle mede-werkers van het Multimedialab bedanken voor de steun en de voorgesteldeoplossingen voor sommige problemen.

Ik wil tenslotte ook mijn vrienden en familie bedanken voor de morelesteun tijdens mijn studies.

ii

Page 4: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Methoden voor het manipuleren vanMPEG-2 Video en MPEG-2 Systems stromen

op basis van MPEG-21 BSDL

doorJelle Claus

Afstudeerwerk ingediend tot het behalen van de graad van Licentiaat in deInformatica

Academiejaar 2004–2005

Universiteit GentFaculteit Toegepaste WetenschappenVakgroep Elektronica en InformatiesystemenVoorzitter: prof. dr. ir. J. Van Campenhout

Promotor: prof. dr. ir. R. Van de WalleThesisbegeleider: lic. Wesley De Neve

Samenvatting

Deze scriptie behandelt eerst de belangrijkste aspecten van MPEG-2. Hier-bij wordt in bepaalde gevallen speciaal gekeken naar de mogelijkheden dieMPEG-2 te bieden heeft wat betreft schaalbare videocodering, voornamelijktemporele schaalbaarheid. Via een XML-gerelateerde taal zal een beschrij-ving van MPEG-2 Video en MPEG-2 Systems (video, audio, data) wordenopgesteld om zo op een semantisch niveau de bitstroom makkelijk te kunnenaanpassen en een veranderde bitstroom te verkrijgen. Zo zullen we onder an-dere beelden weglaten, de aspect ratio wijzigen (breedbeeld - gewoon beeld)van een videostroom of uit een multimediastroom de audio laten vallen omenkel een videostroom over te houden, met andere woorden een demultiplexerontwerpen via BSDL. We gaan ook wat dieper in op het praktische gebruikvan BSDL en dit doen we via prestatiemetingen. Tenslotte bestuderen weook kort hoe H.264/AVC-stromen in een MPEG-2 Systems stroom kunnengebundeld worden.

Trefwoorden: beschrijving van multimediale data, H.264/AVC, MPEG-21BSDL, MPEG-2 Video, MPEG-2 Systems, multimediastromen, schaalbarevideocodering, videostromen, XML, XSLT

iii

Page 5: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Inhoudsopgave

1 Inleiding 1

1.1 Probleemstelling . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Het Beoogde Doel . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Inleiding tot MPEG-2 3

2.1 Definitie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 MPEG-2 Video . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2.1 MPEG-2 Video Sequence . . . . . . . . . . . . . . . . . 5

2.2.2 Group of Pictures: GOP . . . . . . . . . . . . . . . . . 6

2.2.3 Beeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.3 MPEG-2 Systems . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3.1 Conversie van een elementaire stroom tot een PES . . . 11

2.3.2 PES header . . . . . . . . . . . . . . . . . . . . . . . . 12

2.3.3 Conversie van een PES tot een PS of TS . . . . . . . . 14

3 Inleiding tot MPEG-21 BSDL 17

3.1 Schaalbare videocodering . . . . . . . . . . . . . . . . . . . . . 17

3.2 MPEG-21 DIA BSDL . . . . . . . . . . . . . . . . . . . . . . . 19

3.3 Eenvoudig Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . 23

3.4 BSDL Specificatie . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.2 Beperkingen . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.3 BSDL-1 Uitbreidingen voor de BSDToBin tool . . . . . 28

3.4.4 BSDL-2 Uitbreidingen voor de BinToBSD tool . . . . . 28

iv

Page 6: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

4 BSDL-schema voor MPEG-2 Video 31

4.1 Inleiding: startcodes . . . . . . . . . . . . . . . . . . . . . . . 31

4.2 Enkele belangrijke datatypes . . . . . . . . . . . . . . . . . . . 32

4.2.1 Elementaire Datatypes . . . . . . . . . . . . . . . . . . 32

4.2.2 Picture Payload Type . . . . . . . . . . . . . . . . . . 33

4.3 MPEG-2 Video BSDL-schema . . . . . . . . . . . . . . . . . . 34

4.3.1 Root Element: MPEG2Video . . . . . . . . . . . . . . 34

4.3.2 Sequence Header . . . . . . . . . . . . . . . . . . . . . 35

4.3.3 GOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.3.4 Picture . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

5 Aanpassen van MPEG-2 Video 40

5.1 Veranderen van de Aspect Ratio . . . . . . . . . . . . . . . . . 40

5.2 Weglaten van Beelden . . . . . . . . . . . . . . . . . . . . . . 42

5.3 MPEG-2 Video Statistieken . . . . . . . . . . . . . . . . . . . 44

6 BSDL-schema voor MPEG-2 Systems Programmastromen 45

6.1 Startcodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

6.2 Datatype PacketPayloadType . . . . . . . . . . . . . . . . . . 46

6.3 MPEG-2 Systems BSDL-schema . . . . . . . . . . . . . . . . . 47

6.3.1 Root Element: MPEG2Systems . . . . . . . . . . . . . 47

6.3.2 Packs . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

6.3.3 PackHeader en SystemHeader . . . . . . . . . . . . . . 49

6.3.4 PES-pakketten . . . . . . . . . . . . . . . . . . . . . . 51

6.3.5 PES-header . . . . . . . . . . . . . . . . . . . . . . . . 51

6.3.6 Probleem met BSDL-software? . . . . . . . . . . . . . 51

7 Aanpassen van MPEG-2 Systems 53

7.1 Demultiplexer . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

7.1.1 Weglaten van PES Audiopakketten . . . . . . . . . . . 53

7.1.2 Extrapoleren van de elementaire stroom . . . . . . . . 56

7.2 Statistieken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

v

Page 7: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

8 Performantiemetingen van BSDL op MPEG-2 59

8.1 Performantie van BinToBSD . . . . . . . . . . . . . . . . . . . 60

8.1.1 Lange MPEG-2 Systems programmastroom . . . . . . 60

8.1.2 Korte MPEG-2 Video bitstroom . . . . . . . . . . . . . 64

8.2 Performantie van de transformaties . . . . . . . . . . . . . . . 64

8.3 Performantie van BSDToBin . . . . . . . . . . . . . . . . . . . 65

8.3.1 Lange MPEG-2 Systems programmastroom . . . . . . 65

8.3.2 Korte MPEG-2 Video bitstroom . . . . . . . . . . . . . 67

8.4 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

9 H.264/AVC in een MPEG-2 programmastroom 69

10 Besluit 73

A Gebruik van de Thesis DVD 75

A.1 Overzicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

A.2 Resultaten: Demo’s . . . . . . . . . . . . . . . . . . . . . . . . 76

A.3 BinToBSD, BSDToBin en XSLT Demo’s . . . . . . . . . . . . 76

B MPEG-2 Basic Datatypes Schema 79

C MPEG-2 Simple Types Schema 82

D MPEG-2 Video BSDL-Schema 85

E MPEG-2 Systems BSDL-Schema 91

Bibliografie 104

vi

Page 8: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Lijst van figuren

2.1 Onderdelen MPEG-2 Video . . . . . . . . . . . . . . . . . . . 5

2.2 Compressie van beelden . . . . . . . . . . . . . . . . . . . . . 7

2.3 Verband tussen de drie beeldtypes . . . . . . . . . . . . . . . . 8

2.4 MPEG-2 Video Syntax . . . . . . . . . . . . . . . . . . . . . . 10

2.5 Overzicht van MPEG-2 Systems . . . . . . . . . . . . . . . . . 11

2.6 Conversie van een elementaire stroom tot een Packetised Ele-mentary Stream . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.7 PES-pakkethoofding . . . . . . . . . . . . . . . . . . . . . . . 13

2.8 Structuur van een MPEG-2 Systems Programmastroom . . . . 15

3.1 Praktische werking . . . . . . . . . . . . . . . . . . . . . . . . 19

3.2 Concept van MPEG-21 DIA . . . . . . . . . . . . . . . . . . . 20

3.3 Vergelijking tussen W3C XML Schema en BSDL Schema . . . 21

3.4 Overzicht van het BSDL raamwerk . . . . . . . . . . . . . . . 22

3.5 Eenvoudig BSDL voorbeeld . . . . . . . . . . . . . . . . . . . 24

3.6 Eenvoudig BSDL-schema . . . . . . . . . . . . . . . . . . . . . 25

4.1 Enkele eenvoudige datatypes . . . . . . . . . . . . . . . . . . . 33

4.2 Datatype Picture Payload Type . . . . . . . . . . . . . . . . . 34

4.3 Root element van het BSDL-schema . . . . . . . . . . . . . . . 34

4.4 Sequence Header . . . . . . . . . . . . . . . . . . . . . . . . . 36

4.5 Declaratie van het GOP-element . . . . . . . . . . . . . . . . . 37

4.6 Declaratie van het Picture-element . . . . . . . . . . . . . . . 38

5.1 Verschil in Aspect Ratio . . . . . . . . . . . . . . . . . . . . . 41

vii

Page 9: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

5.2 Verandering van Aspect Ratio: Stylesheet . . . . . . . . . . . 42

5.3 Verwijderen van B-beelden: Stylesheet . . . . . . . . . . . . . 43

5.4 MPEG-2 Video Statistieken: Stylesheet . . . . . . . . . . . . . 44

6.1 Datatype Packet Payload Type . . . . . . . . . . . . . . . . . 47

6.2 Root element van het BSDL-schema voor MPEG-2 Systems . 48

6.3 Het Pack-element (gedeeltelijk) . . . . . . . . . . . . . . . . . 49

6.4 Video Pakket element . . . . . . . . . . . . . . . . . . . . . . . 50

6.5 Bug in BSDL-software? . . . . . . . . . . . . . . . . . . . . . . 52

7.1 Demultiplexer: weglaten audiopakketten . . . . . . . . . . . . 54

7.2 Demultiplexer: XSLT stylesheet . . . . . . . . . . . . . . . . . 55

7.3 Demultiplexer: reconstrueren van de elementaire stroom . . . 56

7.4 MPEG-2 Systems Statistieken: Stylesheet . . . . . . . . . . . 57

8.1 Uitvoeringstijd BinToBSD t.o.v. aantal beelden . . . . . . . . 61

8.2 Grootte van de XML-beschrijving t.o.v. aantal beelden . . . . 62

8.3 Geheugengebruik BinToBSD bij sequentie S6 . . . . . . . . . . 63

8.4 Geheugengebruik BSDToBin bij sequentie S6 . . . . . . . . . . 66

9.1 H.264/AVC in een MPEG-2 programmastroom . . . . . . . . 71

viii

Page 10: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Lijst van tabellen

2.1 MPEG-standaarden . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Aspect Ratio Informatie . . . . . . . . . . . . . . . . . . . . . . . 6

2.3 Picture Coding Type . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.1 Toegelaten XML datatypes in BSDL Schema . . . . . . . . . . . . . 27

4.1 MPEG-2 Video Startcodes . . . . . . . . . . . . . . . . . . . . . . 32

6.1 MPEG-2 Systems Startcodes . . . . . . . . . . . . . . . . . . . . . 46

6.2 MPEG-2 Systems PES Startcodes . . . . . . . . . . . . . . . . . . . 46

8.1 Statistieken BintoBSD MPEG-2 Systems . . . . . . . . . . . . . . . 60

8.2 Statistieken BintoBSD MPEG-2 Video . . . . . . . . . . . . . . . . 64

8.3 Enkele XSLT transformaties met behulp van Saxon . . . . . . . . . . 64

8.4 Statistieken BSDToBin MPEG-2 Systems . . . . . . . . . . . . . . . 65

8.5 Statistieken BSDToBin MPEG-2 Video . . . . . . . . . . . . . . . . 67

ix

Page 11: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Lijst van afkortingen

MPEG Moving Picture Experts GroupGroep van experts die reeds verschillende standaarden voor het repre-senteren van multimediale data heeft gedefinieerd.

GOP Group of PicturesEen syntax-element uit de MPEG-2 Video standaard dat een groep vanbeelden aanduidt binnen de videosequentie.

PES Packetised Elementary StreamEen elementaire stroom (video, audio, data, ...), opgedeeld in pakkettenvan variabele of constante lengte, waarbij elk pakket wordt voorzien vaneen header.

MPEG-21 DIA MPEG-21 Digital Item AdaptationDeel 7 van de het MPEG-21 multimediaraamwerk dat verschillendetools specifieert voor het wijzigen van multimediale data.

BSDL Binary Syntax Description LanguageBitstroombeschrijvingstaal om bitstromen te beschrijven in de vormvan XML-documenten. BSDL is een onderdeel van MPEG-21 DIA.

XML eXtensible Markup LanguageUitbreidbare zelfbeschrijvende opmaaktaal om structuur aan te bren-gen in tekstbestanden via opmaakcodes.

XPath XML Path LanguageTaal om aan adressering en selectie te doen binnen een XML-document.

XSLT eXtensible Stylesheet Language TransformationTechnologie voor het omzetten van XML-documenten naar andere do-cumenten. Dit kunnen HTML-documenten, XML-documenten of nogandere soorten zijn.

x

Page 12: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

SVC Schaalbare Video CoderingConcept dat het mogelijk maakt om verschillende versies af te leidenuit een bitstroom zonder hercodering door middel van een basislaag enaantal uitbreidingslagen.

UMA Universal Multimedia AccessConcept om dezelfde multimediale data te verspreiden op verschillendesoorten apparaten.

H.264/AVC Advanced Video Coding (MPEG-4 part 10)Deel van de MPEG-4 standaard dat meer efficientere videocoderingspecifieert.

DVD Digital Versatile DiscEen drager van data in de computerwereld dat tot nu toe het meestgebruikt wordt voor films en multimediastromen op te slaan.

HD-DVD High Definition DVDDe DVD-standaard voor de toekomst, nog in volle ontwikkeling. Wel-licht zal H.264/AVC worden gebruikt voor de codering van de video-stroom.

MPEG-4 XMT eXtensible Textual FormatRaamwerk voor de beschrijving van audiovisuele scenes.

xi

Page 13: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 1

Inleiding

1.1 Probleemstelling

Door de diversiteit aan apparaten aangesloten op het internet zal men van

een multimediastroom vaak meerdere “versies” opslaan op een multimedia-

server die aangepast zijn aan de specifieke gebruikersparameters (netwerkca-

paciteit, welk apparaat, processorsnelheid, ...). Het is echter onhandig om

telkens een videosequentie te hercoderen in mindere kwaliteit en op te slaan

naast de kwaliteitsversie. Recent streeft men naar SVC ofwel Schaalbare

VideoCodering. Dit betekent dat we bij voorkeur bitstromen in lagen wil-

len aanbieden. Een multimediastroom heeft dan een bepaalde basislaag en

verschillende verbeteringslagen erboven die meer kwaliteit aanbieden.

Het is door dat concept dat men BSDL1 heeft ontwikkeld binnen de

MPEG-21 standaard. Door middel van BSDL zouden we bitstromen kunnen

beschrijven in een XML-bestand om zo via eenvoudige editeerbewerkingen op

dit XML-bestand aangepaste bitstromen te verkrijgen. In deze thesis onder-

zoeken we de mogelijkheden van MPEG-21 BSDL op de MPEG-2 standaard.

1Bitstream Syntax Description Language

1

Page 14: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

1.2 Het Beoogde Doel

Het doel van deze thesis is het opstellen van een BSDL-schema, wat een uit-

breiding en eveneens een beperking is op W3C XML Schema, voor MPEG-2

Video en Systems en het toepassen van verschillende transformaties op deze

beschrijvingen. Zo zullen we temporele schaalbaarheid in MPEG-2 Video

aantonen (beelden weglaten), de aspect ratio van een videostroom wijzigen

of de audio weglaten in een multimediastroom om enkel video over te hou-

den. Op die manier kan op een hoog niveau een videostroom door middel

van eenvoudige editeerbewerkingen aangepast worden. Het is immers veel

gemakkelijker een XML-bestand aan te passen dan een bitstroom op zich.

Als we het aangepaste XML-bestand kunnen transformeren naar een aange-

paste videostroom (met behulp van de originele videosequentie) bekomen we

het resultaat van de veranderingen.

We zullen in de eerste hoofdstukken meer in detail bespreken wat MPEG-

2 Video, MPEG-2 Systems en MPEG-21 BSDL precies is. Vervolgens stellen

we een BSDL-schema op voor MPEG-2 Video en voeren we enkele trans-

formaties door op videostromen. We doen dit analoog ook voor MPEG-2

Systems. We analyseren tot slot ook het praktische gebruik van BSDL aan

de hand van prestatiemetingen, en als laatste hoofdstuk bestuderen we kort

het importeren van H.264/AVC2 in een MPEG-2-programmastroom.

2Advanced Video Coding (MPEG-4 deel 10)

2

Page 15: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 2

Inleiding tot MPEG-2

2.1 Definitie

MPEG (Moving Picture Experts Group) is een internationale organisatie

die instaat voor de standaardisering van de (de)codering en het opslaan (in

digitaal formaat) van audio -en videoformaten. Deze groep houdt een vijftal

keer per jaar een conferentie, waar zo’n 350 experts aan deelnemen. Voor

meer informatie over de MPEG-groep zie de MPEG webpagina [1].

Een overzicht van de MPEG-standaarden vind je in tabel 2.1.

Standaard ToepassingMPEG-1 Opslag van video en audio (bvb MP3)MPEG-2 Uitbreiding van MPEG-1, Onderdeel van de DVD-standaard voor videoMPEG-4 Codering van Audio Visuele objectenMPEG-7 MetadataMPEG-21 Multimedia-raamwerk

Tabel 2.1: MPEG-standaarden

De MPEG-2 standaard werd ontwikkeld in 1994 en kan bandbreedtes

bereiken tot 40 Mbit/s en meer (afhankelijk van het gebruikte profiel), wat

aanzienlijk hoger is dan de 1.5 MBit/s van MPEG-1. MPEG-2 is commercieel

de meest succesvolle MPEG-standaard. Hier volgen enkele toepassingen van

deze standaard:

3

Page 16: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

• Videostandaard voor DVD en digitale televisie (SDTV1, HDTV2)

• Veel gebruikte audiostandaard voor oudere DVD’s, nu gebruikt men

eerder Dolby Surround of AC3 (Dolby Digital).

• DBS3, CATV4, ...

De MPEG-2-standaard bevat een tiental onderdelen. De belangrijkste

drie, die we in deze thesis even nader bekijken, zijn “Video”, “Audio” en

“Systems”. MPEG-2 Video zorgt voor de compressie van digitale video tot

elementaire videostromen. MPEG-2 Audio zorgt voor de compressie van

digitale audio tot elementaire audiostromen. MPEG-2 Systems voegt de-

ze elementaire stromen samen (audio, video en data) tot een multimedia-

stroom. We zullen eerst MPEG-2 Video onder de loep nemen, meer bepaald

de video-syntax, die heel belangrijk zal zijn voor het opstellen van een syntax-

beschrijving.

2.2 MPEG-2 Video

Een MPEG-2-videostroom is opgebouwd in lagen. Dit blijkt uit Figuur 2.1.

Een videostroom, gecodeerd met MPEG-2-Video, bestaat uit verschillende

videosequenties. Elke videosequentie bevat verschillende groepen van beelden

(GOP: “Group of Pictures”). Elke GOP bevat verschillende beelden, waarbij

elk beeld is opgebouwd uit slices. Deze slices bevatten macroblokken die dan

weer zijn opgebouwd uit blokken. Elk onderdeel (bijvoorbeeld een GOP of

een beeld) bevat naast de verschillende elementen van een onderliggende laag,

ook headers met extra informatie, en natuurlijk ook startcodes zodat een

decoder de onderdelen kan herkennen in het videobestand. Zo zal de Video

Sequence een Video Sequence Header bevatten en verschillende groepen van

beelden. Iedere GOP zal ook een GOP header hebben en erna verschillende

beelden, ...

1Standard Definition TeleVision2High Definition TeleVision3Direct Broadcast Satellite4Cable Antenna Television

4

Page 17: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

11

2.3. MPEG-2 video Het belangrijkste onderdeel van de MPEG-2-videostroomsyntax zijn de headers. Deze

headers zijn hiërarchisch gestructureerd. Een overzicht van de verschillende headers is terug te vinden in Tabel 2-6. We zullen nu in de volgende paragrafen deze verschillende headers kort bespreken en zo komen tot een overzicht van de MPEG-2-videostroomsyntax. De bedoeling hiervan is om enkele begrippen die veelvuldig voorkomen bij scrambling hier te bespreken, zodanig dat de betekenis duidelijk is. Voor meer informatie over MPEG-2 video, zie [2-3].

Tabel 2-6: Overzicht van de verschillende headers van de MPEG-2-videostroomsyntax

De manier waarop de verschillende headers hiërarchisch gestructureerd zijn is terug te

vinden in Figuur 2-5. Uit deze figuur blijkt dat een MPEG-2-videostroom bestaat uit 6 lagen. De bovenste laag (laag 1) bestaat uit verschillende videosequenties. Hierbij heeft elke videosequentie een videosequentieheader en verder een groep van beelden (“Group of Pictures”, GOP) (laag 2). Elke GOP bestaat uit een GOP-header en verder een reeks beelden (laag 3). Elk beeld bestaat uit een beeldheader en een reeks slices (laag 4), elke slice bestaat uit een sliceheader en enkele macroblokken (laag 5) en elke macroblok bestaat uit een header en enkele blokken (laag 6). Elke header heeft zijn eigen functionaliteiten, zoals weergegeven in Tabel 2-6 en het zijn nu deze functionaliteiten die we verder zullen bespreken, samen met enkele bijkomende eigenschappen.

Figuur 2-5: Overzicht van de verschillende headers van de MPEG-2-videostroomsyntax

Syntax header Functie Video Sequence Header Bevat de basisparameters (grootte van de

videobeelden, maximale bitrate, …). Group of Pictures Header

Zorgt voor willekeurige toegang, snel opzoeken en wijzigen van de videostroom.

Picture Header Het type beeld: I, P of B beeld en tijdelijke referentie.

Slice Header Verzameling macroblokken. Macroblok Header De 16 x 16 bewegingsvectoreenheid. Blok Bevat de data voor de gequantiseerde DCT-

coëfficiënten van een 8 x 8 blok in een macroblok.

Figuur 2.1: Onderdelen MPEG-2 Video

2.2.1 MPEG-2 Video Sequence

Een Video Sequence begint met de sequence header (waarin de video sequence

start code vervat zit), gevolgd door een of meerdere groepen van beelden en

eindigt met de video sequence end code.

De video sequence header bevat belangrijke informatie over de video-

stroom zoals de resolutie van de beelden, het aantal weer te geven beelden

per seconde (“frame rate” ofwel beeldsnelheid), grootte van de buffers, maxi-

mum aantal bits per beeld, en nog heel wat bijkomende globale parameters.

We willen echter een parameter uit de header even nader bekijken: de As-

pect Ratio, namelijk de verhouding tussen de breedte en de hoogte van de

beelden.

Iedereen kent wellicht het verschil tussen een gewone TV en een breedbeeld-

televisie. De aspect ratio ligt in nauw verband met de begrippen breedbeeld

en “gewoon” beeld. De Aspect Ratio definieert hoe een bitstroom moet

weergegeven worden met betrekking tot de breedte/hoogte-verhouding. Het

formaat 4:3 is algemeen bekend als een normaal beeld, de oudere standaard,

terwijl het formaat 16:9 alsmaar meer gebruikt wordt voor breedbeeld. Dik-

wijls komt het wel eens voor dat de aspect ratio verkeerd is ingesteld en men,

5

Page 18: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

informeel uitgedrukt, “uitgerokken” mensen ziet op het scherm, met andere

woorden dat een videosequentie voor breedbeeld wordt weergegeven met een

4:3 aspect ratio en dus de hoogte van de beelden wordt verlengd. Een manier

om de bitstroom te corrigeren op vlak van aspect ratio via BSDL, zullen we

later bespreken.

Zoals gezegd wordt de aspect ratio in de Video Sequence Header opgeslaan

als de aspect ratio information. In tabel 2.2 zien we dat een aspect ratio

van 4:3 wordt opgeslaan in de bitstroom als “0010”, de waarde 2 in het

decimaal stelsel. Breedbeeld aspect ratio (16:9) zien we uitgedrukt met de

decimale waarde drie. Andere waarden voor de aspect ratio worden heel

zelden gebruikt.

aspect ratio information Aspect Ratio0000 forbidden0001 -0010 4:30011 16:90100 2.21:10101 reserved1111 reserved

Tabel 2.2: Aspect Ratio Informatie

2.2.2 Group of Pictures: GOP

Een GOP bestaat eveneens uit een header gevolgd door een reeks van beel-

den. De bedoeling van een GOP is dat men op die manier willekeurige

toegang, snel opzoeken en vooruitspoelen van een sequentie kan toelaten.

De belangrijkste info in de GOP header bestaat uit tijdscodes die gebruikt

worden tijdens het afspelen van de sequentie. Een GOP bevat dus een reeks

beelden waarvan het eerste beeld altijd een I-beeld (zie later) moet zijn. In

de volgende sectie bespreken we de verschillende soorten beelden.

6

Page 19: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

2.2.3 Beeld

Een beeld bestaat uit drie componenten, die de helderheid (Y) en de chro-

minantie (kleur) aanduiden (Cb en Cr). In de picture header vinden we

onder meer het picture coding type (welk type beeld), een tijdscode en af-

hankelijk van het type beeld, informatie over de bewegingsvectoren die nodig

zijn om het beeld te kunnen decoderen. Een beeld in niet-gecomprimeerde

vorm wordt in de taal van videocodering ook een Presentation Unit genoemd.

Een gecodeerd beeld is dan genaamd een Access Unit. Op Figuur 2.2 zien we

hoe een opeenvolging van beelden kan worden gecodeerd tot gecomprimeerde

video.

• A number of additional ‘private data’ chan-nels may be accommodated. Private data is adata stream whose content is not specified byMPEG. Such data streams may be used tocarry data services such as: teletext; additionalservice information specific to a particularnetwork; commands intended to controlmodulation, and network distribution equip-ment; any other type of data required by aparticular application.

There are some notable multiplex characteristics notspecified by MPEG:

• There is no form of error protection within themultiplex. Error protection and the subsequentmodulation of the MPEG-2 multiplex is chosento suit the characteristics of the channel orstorage medium and is not specified by MPEG.

• There is no electrical or physical specificationfor the MPEG-2 multiplex, so a designer mayuse the signal levels or connector types that bestsuit the application.

2. PROGRAMME AND TRANSPORTSTREAMS

The MPEG-2 Systems Specification defines two alter-native multiplexes. One is called a ‘transport stream’,the other is called a ‘programme stream’. Each is opti-mised for a different set of applications.

2.1 The programme stream

This multiplex is based on the established MPEG-1multiplex. Like the MPEG-1 multiplex, it can accom-modate asingle programmeonly and is intended forthe storage and retrieval of programme material fromdigital storage media.

A programme stream is intended for use in error-free

environments because it is rather susceptible to errors.There are two reasons for this. Firstly, the programmestream comprises a succession of relatively long andvariable length packets. Each packet begins with apacket header. An error occurring in the packet headermay cause the loss of the entire packet. As programmestream packets may contain many kilobytes of data,the loss of a single packet may represent the loss orcorruption of an entire video frame. Secondly, the vari-ability of the packet lengths means that a decodercannot predict where one packet will finish and a newone will start. Instead, it must read and interpret thepacket length field contained in each packet header. Ifthis packet length field is corrupted by an error, the de-coder will lose synchronism with the stream, againresulting in the loss of at least one packet.

2.2 The transport stream

A multiplex devised formulti-programmeapplicationssuch as broadcasting, so that a single transport streamcan accommodate many independent programmes. Itcomprises a succession of 188-byte-long packetscalled transport packets. The use of short, fixed-length packets means that the transport stream is not assusceptible to errors as the programme stream. Fur-ther, each 188-byte-long packet is easily givenadditional error protection by processing it through astandard error protection process such as Reed-Solo-mon encoding. The improved error resilience of thetransport stream means that it has a better chance ofsurviving the error-prone channels to be found in abroadcast environment, for example.

It might seem that the transport stream is clearly thebetter of the two multiplexes with its increased errorresilience and ability to carry many simultaneous pro-grammes. However, it should be remembered that thetransport stream is a more sophisticated multiplex thanthe programme stream and is consequently more diffi-cult to create and to demultiplex. It is also less like thewell-established MPEG-1 multiplex.

ruwe digitale video stroom'Presentation Unit'

'Access Unit'

gecompr.'I' beeld

(100 kbytes)*

* De echte grootte hangt af van de vooropgestelde bitrateen de complexiteit van het beeld

MPEG-2 compressie tot 5Mbit/s

Beeld(830 kbytes)

Beeld(830 kbytes)

Beeld(830 kbytes)

gecompresseerd'B' beeld(12 kbytes)*

gecompr.'B' beeld

(12 kbytes)*

gecompr.'P' beeld(33 kbytes)*

Beeld(830 kbytes)

Fig. 2 - The compression of ‘presentationunits’ to yield ‘access units’.

(N.B. The ‘video elementary’ streamconsists of asuccessionof ‘access units’.)

(R023/025) - 2 -Figuur 2.2: Compressie van beelden

Om een zo goed mogelijke compressie te realiseren zullen sommige beel-

den voor hun reconstructie afhankelijk zijn van andere beelden. Als men een

beeldsnelheid heeft van 30 beelden per seconde en we bestuderen de beelden

apart, zullen er op veel beelden “gelijke” delen staan die niet hergecodeerd

moeten worden indien we beelden afhankelijk maken van andere. Daarom

gebruikt MPEG-2 ook verschillende beeldtypen om aan te duiden welke beel-

den enkel maar gedecodeerd kunnen worden met behulp van andere beelden.

Er zijn drie soorten beelden, elk met een aantal eigen karakteristieken: intra-

gecodeerde beelden (I-beelden, intracoded), voorspelde beelden (P-beelden,

7

Page 20: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

predicted) en bidirectioneel voorspelde beelden (B-beelden, bidirectional).

Een voorbeeld van de afhankelijkheden van de verschillende beeldtypes wordt

weergegeven in Figuur 2.3.

vi ITU-T Rec. H.262 (2000 E)

Intro. 4 The scalable and the non-scalable syntax

The full syntax can be divided into two major categories: One is the non-scalable syntax, which is structured as a super set of the syntax defined in ISO/IEC 11172-2. The main feature of the non-scalable syntax is the extra compression tools for interlaced video signals. The second is the scalable syntax, the key property of which is to enable the reconstruction of useful video from pieces of a total bitstream. This is achieved by structuring the total bitstream in two or more layers, starting from a standalone base layer and adding a number of enhancement layers. The base layer can use the non-scalable syntax, or in some situations conform to the ISO/IEC 11172-2 syntax.

Intro. 4.1 Overview of the non-scalable syntax

The coded representation defined in the non-scalable syntax achieves a high compression ratio while preserving good image quality. The algorithm is not lossless as the exact sample values are not preserved during coding. Obtaining good image quality at the bitrates of interest demands very high compression, which is not achievable with intra picture coding alone. The need for random access, however, is best satisfied with pure intra picture coding. The choice of the techniques is based on the need to balance a high image quality and compression ratio with the requirement to make random access to the coded bitstream.

A number of techniques are used to achieve high compression. The algorithm first uses block-based motion compensation to reduce the temporal redundancy. Motion compensation is used both for causal prediction of the current picture from a previous picture, and for non-causal, interpolative prediction from past and future pictures. Motion vectors are defined for each 16-sample by 16-line region of the picture. The prediction error, is further compressed using the Discrete Cosine Transform (DCT) to remove spatial correlation before it is quantised in an irreversible process that discards the less important information. Finally, the motion vectors are combined with the quantised DCT information, and encoded using variable length codes.

Intro. 4.1.1 Temporal processing

Because of the conflicting requirements of random access and highly efficient compression, three main picture types are defined. Intra Coded Pictures (I-Pictures) are coded without reference to other pictures. They provide access points to the coded sequence where decoding can begin, but are coded with only moderate compression. Predictive Coded Pictures (P-Pictures) are coded more efficiently using motion compensated prediction from a past intra or predictive coded picture and are generally used as a reference for further prediction. Bidirectionally-predictive Coded Pictures (B-Pictures) provide the highest degree of compression but require both past and future reference pictures for motion compensation. Bidirectionally-predictive coded pictures are never used as references for prediction (except in the case that the resulting picture is used as a reference in a spatially scalable enhancement layer). The organisation of the three picture types in a sequence is very flexible. The choice is left to the encoder and will depend on the requirements of the application. Figure Intro. 1 illustrates an example of the relationship among the three different picture types.

I B B P B B B P

Bidirectionele Interpolatie

Voorspelling

Figure Intro. 1 – Example of temporal picture structure

FIGURE Intro. 1/H.262...[D01] = 8 CM

Figuur 2.3: Verband tussen de drie beeldtypes

I-beelden

Intragecodeerde beelden worden gecodeerd zonder informatie van andere

beelden. Ze worden als het ware als een JPEG-figuur opgenomen in de bit-

stroom. Zo zorgen I-beelden voor willekeurige toegang in de videosequentie

en is het nu duidelijk waarom een GOP moet beginnen met een I-beeld. In

termen van compressie zijn I-beelden duidelijk inefficient en zullen tot tien

keer meer bytes nodig hebben in de bitstroom dan B-beelden.

P-beelden

Zoals we zien op Figuur 2.3 maken voorspelde beelden (P) gebruik van het

voorgaande I- of P-beeld om ge(de)codeerd te worden. Net zoals I-beelden

8

Page 21: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

kunnen P-beelden verder gebruikt worden door andere P- of B-beelden. P-

beelden maken dus gebruik van bewegingsvectoren ten opzichte van het vorige

P -of I-beeld. Dit zorgt voor een grotere compressie van de beelden.

B-beelden

Bidirectionele beelden maken gebruik van zowel een voorgaand beeld als van

een toekomstig beeld. Deze beelden kunnen I- of P-beelden zijn. Door dit

dubbel gebruik van bewegingsvectoren zorgen B-beelden voor de grootste

compressie, maar zijn niet decodeerbaar zonder twee andere beelden. Deze

beelden zorgen ook voor een delay en complexe strategie van buffering.

We vonden dus de picture coding type dus in de picture header. Net

zoals bij de aspect ratio zullen we met dit element in de picture header veel

werken in deze thesis. We zullen namelijk B-beelden weglaten, om te zien hoe

temporele schaalbaarheid in MPEG-2 Video kan worden toegepast. Waarom

we voor B-beelden kiezen is redelijk duidelijk. Deze beelden zullen immers

zonder neveneffecten kunnen weggelaten worden omdat ze zelf niet verder

gebruikt worden door andere beelden. Zouden we immers P-beelden of I-

beelden weglaten dan zouden vele B-beelden niet meer decodeerbaar zijn,

resulterend in artefacten en fouten in de weergave van de beelden. In tabel

2.3 vinden we de mogelijke waarden voor het element picture coding type in

de picture header.

Zo is het duidelijk dat B-beelden de decimale waarde drie (binair 011) heb-

ben, en op die manier zullen we in een syntax-beschrijving van een MPEG-2

videostroom B-beelden kunnen onderscheiden van andere.

Voor meer gedetailleerde informatie omtrent MPEG-2 Video is [2] een

interessant werk. De volledige MPEG-2 Video specificatie van MPEG vinden

we in [3].

Op Figuur 2.4 vinden we een syntax diagram terug voor MPEG-2 Video

tot op het Picture-niveau.

9

Page 22: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

picture coding type type beeld000 forbidden001 I-beeld010 P-beeld011 B-beeld100 forbidden101 reserved110 reserved111 reserved

Tabel 2.3: Picture Coding Type

ISO/IEC 13818-2 : 2000 (E)

36 ITU-T Rec. H.262 (2000 E)

This subclause does not adequately document the block layer syntax when data partitioning is used. See 7.10.

6.3 Video bitstream semantics

6.3.1 Semantic rules for higher syntactic structures

This subclause details the rules that govern the way in which the higher level syntactic elements may be combined together to produce a legal bitstream. Subsequent clauses detail the semantic meaning of all fields in the video bitstream.

Figure 6-15 illustrates the high level structure of the video bitstream.

ISO/IEC 11172-2: MPEG-1 Video

Sequence Header

Sequence Header

Sequence Extension

Extensionand User

UserData

Group ofPic. Hdr.

Picture Header

Pic. CodingExtension

Extensionand User

Picture Data

Sequence End

Figure 6-15 – High level bitstream organisation

Na een GOP, moet het eerste beeld (van een nieuwe GOP) een I-beeld zijn*

*

FIGURE 6-15/H.262...[D16] = 9 CM

block( i ) { No. of bits Mnemonic

if ( pattern_code[i] ) {

if ( macroblock_intra ) {

if ( i < 4 ) {

dct_dc_size_luminance 2-9 vlclbf

if(dct_dc_size_luminance != 0)

dct_dc_differential 1-11 uimsbf

} else {

dct_dc_size_chrominance 2-10 vlclbf

if(dct_dc_size_chrominance != 0)

dct_dc_differential 1-11 uimsbf

}

} else {

First DCT coefficient 2-24 vlclbf

}

while ( nextbits() != End of block )

Subsequent DCT coefficients 3-24 vlclbf

End of block 2 or 4 vlclbf

}

}

Figuur 2.4: MPEG-2 Video Syntax

2.3 MPEG-2 Systems

MPEG-2 Systems zorgt voor het samenvoegen (multiplexeren) van multime-

diastromen. Hierbij zal synchronisatie tussen een video -en een audiostroom

een heel belangrijke rol spelen. Met behulp van de Systems-standaard kan

men audiostromen van verschillende talen opnemen in een Systems-stroom,

videostromen met verschillende resoluties meesturen en andere data (bijvoor-

beeld voor menu’s van een DVD, teletekst, ...) allemaal tot een stroom mul-

tiplexeren. MPEG-2 Systems definieert twee soorten multiplex-standaarden

namelijk de programmastroom (PS) en de transport-stroom (TS). Op Fi-

10

Page 23: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

guur 2.2 konden we zien hoe een MPEG-2 video elementaire stroom werd

opgebouwd uit ruwe video data (conversie van Presentation Units tot Access

Units). We bespreken nu het verdere verloop hoe we een programmastroom

construeren uit 2 of meer elementaire stromen. Op Figuur 2.5 zien we een

overzicht van de MPEG-2 Systems specificatie.

ITU-T Rec. H.222.0 (2000 E) ix

Introduction

The systems part of this Recommendation | International Standard addresses the combining of one or more elementary streams of video and audio, as well as other data, into single or multiple streams which are suitable for storage or transmission. Systems coding follows the syntactical and semantic rules imposed by this Specification and provides information to enable synchronized decoding of decoder buffers over a wide range of retrieval or receipt conditions.

System coding shall be specified in two forms: the Transport Stream and the Program Stream. Each is optimized for a different set of applications. Both the Transport Stream and Program Stream defined in this Recommendation | International Standard provide coding syntax which is necessary and sufficient to synchronize the decoding and presentation of the video and audio information, while ensuring that data buffers in the decoders do not overflow or underflow. Information is coded in the syntax using time stamps concerning the decoding and presentation of coded audio and visual data and time stamps concerning the delivery of the data stream itself. Both stream definitions are packet-oriented multiplexes.

The basic multiplexing approach for single video and audio elementary streams is illustrated in Figure Intro. 1. The video and audio data is encoded as described in ITU-T Rec. H.262 | ISO/IEC 13818-2 and ISO/IEC 13818-3. The resulting compressed elementary streams are packetized to produce PES packets. Information needed to use PES packets independently of either Transport Streams or Program Streams may be added when PES packets are formed. This information is not needed and need not be added when PES packets are further combined with system level information to form Transport Streams or Program Streams. This systems standard covers those processes to the right of the vertical dashed line.

Video-encoder

Audio-encoder

Opdelen in pakketten

Opdelen in pakketten

ruwe Videodata

ruwe Audiodata

ProgrammaStroom

TransportStroom

Video PES

Audio PES

PS

mux

TS

mux

MPEG-2 Systems Specificatie

Figure Intro. 1 – Simplified overview of the scope of this Recommendation | International Standard

The Program Stream is analogous and similar to ISO/IEC 11172 Systems layer. It results from combining one or more streams of PES packets, which have a common time base, into a single stream.

For applications that require the elementary streams which comprise a single program to be in separate streams which are not multiplexed, the elementary streams can also be encoded as separate Program Streams, one per elementary stream, with a common time base. In this case the values encoded in the SCR fields of the various streams shall be consistent.

Like the single Program Stream, all elementary streams can be decoded with synchronization.

Figuur 2.5: Overzicht van MPEG-2 Systems

2.3.1 Conversie van een elementaire stroom tot een

PES

Een elementaire stroom (audio, video, data, ...) op zich wordt opgedeeld in

pakketten van ofwel constante ofwel variabele lengte, dit om praktische zaken

zoals broadcasting mogelijk te maken. Figuur 2.6 verduidelijkt hoe men een

elementaire stroom opdeelt in pakketten. Deze PES5 bestaat dus uit PES-

pakketten. Elk PES-pakket bestaat uit een header, samen met de eigenlijke

data (payload). De payload bestaat uit bytes, sequentieel genomen van de

5Packetised Elementary Stream

11

Page 24: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

originele elementaire stroom. Op eender welk moment wordt de elementai-

re stroom dus afgebroken en zet men een PES header tussen de data zodat

we een stroom van PES-pakketten bekomen. Dus, een nieuwe Access Unit

of beeld kan op gelijk welk punt in de payload van een PES-pakket voorko-

men, en verschillende kleine Access Units kunnen zich ook in 1 PES-pakket

bevinden. Zoals gezegd kunnen PES-pakketten van variabele grootte zijn.

Dit zorgt voor een grote flexibiliteit voor een programmeur die een MPEG-2

multiplexer zou ontwerpen. Men kan dan bijvoorbeeld de lengte van de PES-

pakketten laten varieren om toch het begin van de payload van een pakket

overeen te laten stemmen met het begin van een Access Unit.

3. PRESENTATION UNITS AND ACCESSUNITS

Fig. 2 shows an uncompressed digital video sequencebeing MPEG-coded to a target data rate of 5 Mbit/s.Each picture* in its uncompressed form is termed apresentation unit. The coder compresses each presen-tation unit to give acoded picturewhich is termed anaccess unit. Note that video access units are not all thesame size. Their size depends on whether they repre-sent an ‘I’, ‘P’ or ‘B’ picture2, 3 and also on howdifficult the picture was to code.

The result of the MPEG-encoding of a video sequenceis a succession of video access units; it is this succes-sion of access units that comprises thevideoelementary stream.

Similarly, the result of the MPEG-encoding of audio isa succession of audio access units;4 it is this successionof access units that comprises anaudio elementarystream. Each audio access unit typically contains afew tens of milliseconds of compressed audio.

4. PACKETISED ELEMENTARY STREAMS

The next stage in the creation of either of the MPEG-2multiplexes is to convert each elementary stream intoa Packetised Elementary Stream(PES). A Packet-ised Elementary Stream consists entirely ofPES-packets, as shown in Fig. 3.

A PES-packet consists of aheader and apayload.The payload simply consists of data bytes taken se-quentially from the original elementary stream. Thereis no requirement to align the start of access units andthe start of PES-packet payloads. Thus, a new accessunit may start at any point in the payload of a PES-packet and it is possible forseveralsmall access unitsto be contained in asinglePES-packet.

PES-packets may be of variable length subject to a

maximum length of 64 kBytes. (There is one excep-tion to this: in the case of a video packetisedelementary stream when carried in a transport stream,where PES-packets may be of unbounded length.) Thedesigner of an MPEG-2 multiplexer may choose to ex-ploit this flexibility in a number of ways. Thepossibilities include simply using a fixed PES-packetlength or varying the length in order to align the startof access units with the start of PES-packet payloads.

4.1 PES packet header

Fig. 4 shows the fields comprising aPES-packetheader. The first four (i.e. The ‘PES-packet startcode prefix’ plus the ‘stream_id’) comprise the PES-packet start code. This combination of 32 bits isguaranteed not to arise in the packetised elementarystream other than at the start of a PES-packet.(There is a general exception to this; the contents ofprivate data are not constrained by MPEG, and assuch they may contain emulations of the PES-packetstart code.)

4.2 Stream_id byte

The stream_id byte distinguishes PES-packets be-longing to one elementary stream from those ofanother within the same programme. MPEG specifiesthe permitted values for this field, including 32 avail-able for audio elementary streams and 16 for videoelementary streams.

4.3 The flags

Flags 1 and Flags 2 are ‘indicator bits’ which showthe presence or absence of the various optional fieldsthat may be included in a PES-packet header. Theseoptional fields convey additional information aboutthe packetised elementary stream, such as: whetherscrambled or not, relative priority, copyright informa-tion, and an optional error-check field for the packet.

elementarystream comprising access units(video, audio or other)

access unit

Packetised Elementary Stream(PES) PES-packet PES-packet payload

PES-packet header

Fig. 3 - Conversion of anelementary stream to a Packetised

Elementary Stream.

* A ‘picture’ can be represented by a frame or field. See Ref. 2 for details.

(R023/025) - 3 -

Figuur 2.6: Conversie van een elementaire stroom tot een Packetised ElementaryStream

2.3.2 PES header

Op figuur 2.7 zien we de structuur van een PES-pakket. We bespreken kort

de belangrijkste onderdelen.

PES pakket startcode prefix

De eerste 4 bytes (de PES pakket startcode prefix en de stream id) van de

pakketheader wordt de PES pakket startcode genoemd. Deze combinatie

12

Page 25: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

4.4 Time stamps

Of particular importance are the two most significantbits of flags 2 markedP and D in Fig. 4. When set,these indicate the presence of aPresentation TimeStamp (PTS) field and aDecoding Time Stamp(DTS) field respectively, within the PES-packetheader. Time stamps are the mechanism provided bythe MPEG-2 systems layer to ensurecorrect synchro-nismbetween related elementary streams at a decoder.

4.5 Data length field

The PES header data length fieldis the last of themandatory bytes in the PES-packet header. Its valuegives the number of bytes of optional PES-packetheader data present in the PES-packet header beforethe first byte of the PES-packet payload is reached.(There are 25 optional PES-packet header fieldswhich between them may total nearly 200 bytes ofadditional data.)

5. THE PROGRAMME STREAM MULTIPLEX

In a programme stream, PES-packets that are derivedfrom the contributing elementary streams are organ-ised into ‘packs’ (see Fig. 5). A pack comprises a

‘pack-header’, an optional ‘system-header’ and anynumber of PES-packets taken from any of the contrib-uting elementary streams, in any order. There is noconstraint on the length of a pack, except that a packheader must occur at least every 0.7 seconds withinthe program stream, as the pack header contains im-portant timing information (the system clockreference). The system header contains a summary ofthe characteristics of the programme stream such as:its maximum data rate; the number of contributingvideo and audio elementary streams; further timing in-formation. A decoder may use the informationcontained in a system header to determine whether it iscapable of decoding the programme stream or not.

6. THE TRANSPORT STREAM MULTIPLEX

The transport stream multiplex consists entirely ofshort, fixed length transport packets (Fig. 6). A trans-port packet (see Fig. 7) is always 188 bytes long. Itcomprises a4-byte headerfollowed by anadaptationfield or a payload or both. In a transport stream, thePES-packets from the various elementary streams areeach divided among the payload parts of a number oftransport packets.

Fig. 8 shows how each PES-packet is divided into thepayloads of a number of transport packets. The proc-ess is subject to two constraints:

1. The first byte of each PES-packet must becomethe first byte of a transport packet payload.

2. Only data taken from one PES-packet may becarried in any one transport packet.

A PES-packet is unlikely to fill the payloads of aninteger number of transport packets, exactly. As shownin Fig. 8, it will often be the case that there are insuffi-cient bytes to completely fill the payload of the finaltransport packet. So as not to contravene the two con-straints of the previous paragraph, the excess space isdeliberately wasted by including an adaptation field ofappropriate length for this particular transport packet.This wastage can be minimised through careful choiceof PES-packet length. This also provides an argumentfor the use of long PES-packet lengths, as this will en-sure that a greater proportion of transport packets arecompletely filled.

PES-pakket

000

000

000

000

000

000

000

001

X X X X X X X XX X X X X X X XX X X X X X X X1 0 X X X X X XP D X X X X X XX X X X X X X X

PES-pakket start code prefix

stream_id

PES-pakket lengte

flags 1flags 2PES header data lengte

Presentation Time Stamp (optioneel)

Decoding Time Stamp (optioneel)

verdere optionele velden

msb lsb

Fig. 4 - A PES-packet header.

DV V VA

VV VAV

optional systemheader

pack header

video PES-packet audio PES-packet data PES-packet

'pack'

pack header pack header

V

V A D

Fig. 5 - Structure of the MPEG-2‘Programme Stream’ multiplex.

(R023/025) - 4 -

Figuur 2.7: PES-pakkethoofding

van 32 bits zal enkel voorkomen bij het begin van een pakket. Ergens anders

wordt dit niet toegelaten, zodat de decoder de start van een pakket kan

herkennen. Het prefix wordt gevormd door 23 0-bits en vervolgens een 1-bit.

ID van de elementaire stroom

De laatste byte van de startcode is de byte die de stream id aangeeft. Deze

byte onderscheidt de vele soorten pakketten die zich in een systems stroom

kunnen bevinden. MPEG definieert bijvoorbeeld 32 toegelaten waarden voor

de stream id byte die een audiopakket aanduidt. Daarnaast zijn er nog 16

mogelijke waarden voor een videopakket. Een hexadecimale representatie

van de mogelijke startcodes voor een PES videopakket zijn de waarden tussen

0x000001E0 en 0x000001EF. Hierin herkennen we het prefix 0x000001.

13

Page 26: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Vlaggen

Zoals we zien op figuur 2.7 zijn er 2 bytes na de startcode die de pakketleng-

te aanduiden en vervolgens 2 bytes met verschillende vlaggen. Deze 16 bits

zijn indicator bits die de aanwezigheid van optionele velden aanduiden. Deze

optionele velden komen dan voor aan de staart van de header. Ze bevat-

ten extra informatie over de stroom zoals eventuele beveiliging (scrambling),

foutcorrectie velden en informatie over het auteursrecht (copyright).

Tijdscodes

De belangrijkste indicatiebits zijn de 2 meest betekenende bits van flags 2,

gemarkeerd P en D op figuur 2.7. Wanneer deze op ’1’ staan duiden ze de

aanwezigheid aan van een Presentatie Tijdscode (PTS: Presentation Time

Stamp) veld en van een Decodeer Tijdscode (DTS: Decoding Time Stamp)

veld in de header. Deze tijdscodes zorgen voor de synchronisering tussen

gerelateerde elementaire stromen in de multimediastroom.

PES header data lengte

De laatste verplichte byte in de header wordt ingenomen door het veld PES

Header Data Length. De waarde geeft het aantal bytes aan van optionele data

in de PES-pakket header, alvorens de eerste byte van de payload is bereikt.

Er zijn immers 25 optionele velden en de lengte van de header kan dus in

totaal redelijk groot zijn.

2.3.3 Conversie van een PES tot een PS of TS

MPEG-2 Systems definieert vervolgens 2 soorten stromen waarin PES-pakketten

zullen gemultiplexeerd worden. Over het algemeen worden programmastro-

men gebruikt voor het opslaan van multimediale data op een harde schijf,

DVD, ... Anders gezegd gebruikt men programmastromen in zo goed als

foutvrije omgevingen, terwijl transportstromen ontworpen zijn voor gebruik

bij streaming en andere foutgevoelige omgevingen.

14

Page 27: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

PES tot Programmastroom (PS)

4.4 Time stamps

Of particular importance are the two most significantbits of flags 2 markedP and D in Fig. 4. When set,these indicate the presence of aPresentation TimeStamp (PTS) field and aDecoding Time Stamp(DTS) field respectively, within the PES-packetheader. Time stamps are the mechanism provided bythe MPEG-2 systems layer to ensurecorrect synchro-nismbetween related elementary streams at a decoder.

4.5 Data length field

The PES header data length fieldis the last of themandatory bytes in the PES-packet header. Its valuegives the number of bytes of optional PES-packetheader data present in the PES-packet header beforethe first byte of the PES-packet payload is reached.(There are 25 optional PES-packet header fieldswhich between them may total nearly 200 bytes ofadditional data.)

5. THE PROGRAMME STREAM MULTIPLEX

In a programme stream, PES-packets that are derivedfrom the contributing elementary streams are organ-ised into ‘packs’ (see Fig. 5). A pack comprises a

‘pack-header’, an optional ‘system-header’ and anynumber of PES-packets taken from any of the contrib-uting elementary streams, in any order. There is noconstraint on the length of a pack, except that a packheader must occur at least every 0.7 seconds withinthe program stream, as the pack header contains im-portant timing information (the system clockreference). The system header contains a summary ofthe characteristics of the programme stream such as:its maximum data rate; the number of contributingvideo and audio elementary streams; further timing in-formation. A decoder may use the informationcontained in a system header to determine whether it iscapable of decoding the programme stream or not.

6. THE TRANSPORT STREAM MULTIPLEX

The transport stream multiplex consists entirely ofshort, fixed length transport packets (Fig. 6). A trans-port packet (see Fig. 7) is always 188 bytes long. Itcomprises a4-byte headerfollowed by anadaptationfield or a payload or both. In a transport stream, thePES-packets from the various elementary streams areeach divided among the payload parts of a number oftransport packets.

Fig. 8 shows how each PES-packet is divided into thepayloads of a number of transport packets. The proc-ess is subject to two constraints:

1. The first byte of each PES-packet must becomethe first byte of a transport packet payload.

2. Only data taken from one PES-packet may becarried in any one transport packet.

A PES-packet is unlikely to fill the payloads of aninteger number of transport packets, exactly. As shownin Fig. 8, it will often be the case that there are insuffi-cient bytes to completely fill the payload of the finaltransport packet. So as not to contravene the two con-straints of the previous paragraph, the excess space isdeliberately wasted by including an adaptation field ofappropriate length for this particular transport packet.This wastage can be minimised through careful choiceof PES-packet length. This also provides an argumentfor the use of long PES-packet lengths, as this will en-sure that a greater proportion of transport packets arecompletely filled.

PES-packet

000

000

000

000

000

000

000

001

X X X X X X X XX X X X X X X XX X X X X X X X1 0 X X X X X XP D X X X X X XX X X X X X X X

PES-packet start code prefix

stream_id

PES-packet length

flags 1flags 2PES header data length

presentation time stamp (if present)

decoding time stamp (if present)

further optional fields

msb lsb

Fig. 4 - A PES-packet header.

DV V VA VV VAV

optional systemheader

pack header

video PES-packet audio PES-packet data PES-packet

'pack'

pack header pack header

V

V A D

Fig. 5 - Structure of the MPEG-2‘Programme Stream’ multiplex.

(R023/025) - 4 -Figuur 2.8: Structuur van een MPEG-2 Systems Programmastroom

Op figuur 2.8 zien we hoe uiteindelijk de programmastroom multiplex

van MPEG-2 wordt opgebouwd. In een programmastroom worden PES-

pakketten (opgebouwd uit de elementaire stromen) georganiseerd in packs.

Een pack bevat een pack header, een optionele system header en verschillende

PES-pakketten van de deelnemende elementaire stromen, in een willekeurige

volgorde. Er is geen beperking op de lengte van een pack, uitgezonderd

dan op het feit dat een pack header iedere 0.7 seconden moet verschijnen

in de programmastroom, omdat deze header belangrijke timing informatie

bevat (specifiek: de system clock reference). De pack system header bevat

extra informatie zoals de maximum data rate, het aantal elementaire stromen

vervat in de programmastroom en geavanceerdere timing informatie. Een

decoder zal bijvoorbeeld, door de system header te lezen, kunnen bepalen als

hij de programmastroom zal kunnen decoderen of niet.

PES tot Transportstroom (TS)

Transportstromen worden gebruikt bij transmissienetwerken waar er een gro-

tere kans op fouten bestaat (internet, ATM, ...). Ze bestaan ook uit samenge-

stelde data van Packetized Elementary Streams en bijkomende beschrijvende

data. Als gevolg van de kans op fouten zal men relatief lange PES-pakketten

15

Page 28: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

opsplitsen in kortere transportstroom pakketten (TS-pakketten ofwel Trans-

port Stream-pakketten) met een vaste lengte van 188 bytes. Elk TS-pakket

bestaat uit een TS-header, eventueel gevolgd door bijkomende data (Adapta-

tion Field) en vervolgens door een gedeelte van een PES-pakket (of een vol-

ledig PES-pakket bij heel kleine PES-pakketten).

We bestuderen transportstromen niet in deze thesis omdat we vooral wer-

ken met digitaal opgeslagen multimediastromen. Een .vob-bestand van een

DVD is immers een programmastroom, zodat een schema voor programma-

stromen nuttiger zal zijn om te gebruiken dan een schema voor transportstro-

men. Met een schema voor programmastromen kunnen we dan een volledige

DVD proberen te beschrijven.

De volledige MPEG-2 Systems specificatie kunnen we terugvinden in [4].

Voor een overzicht van MPEG-2 Systems (inclusief transportstromen) is [5]

een interessant werk.

16

Page 29: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 3

Inleiding tot MPEG-21 BSDL

3.1 Schaalbare videocodering

Het Internet groeit ieder jaar vliegensvlug. Denk maar aan:

• de verschillen in toestellen die toegang hebben tot het Internet;

• de verschillen in bandbreedtes van een netwerkverbinding;

• de diversiteit aan hardware- en software-configuraties;

• de opkomende mobiele toestellen (PDA, GSM) die in staat zijn om

videosequenties af te spelen.

Op dit ogenblik zie je nog steeds veel websites waar verschillende versies van

multimediale data aangeboden worden, bijvoorbeeld voor een smalband- en

een breedbandverbinding. Deze versies werden apart gecomprimeerd en op-

geslagen op een multimedia server. Dit zorgt voor een aanzienlijke overhead

als we spreken over een heel groot aanbod aan multimediale data. Hier kan

schaalbare videocodering een oplossing bieden. Men kan spreken van schaal-

bare videocodering als een encoder schaalbare of gelaagde bitstromen kan

afleveren. Dit zijn bitstromen waaruit gemakkelijk, met behulp van eenvou-

dige editeerbewerkingen, aangepaste versies kunnen afgeleid worden. Deze

17

Page 30: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

versies zullen op een bepaald vlak een lagere kwaliteit aanbieden, en dus ook

minder eisen opleggen aan de decoder (hardware, software) en/of de capaci-

teiten van een netwerkverbinding (bandbreedte). Het achterliggend concept

van deze schaalbare bitstromen is UMA, beter bekend als Universal Multi-

media Access. Voor meer informatie over UMA verwijzen we naar [6]. Over

het algemeen worden drie vormen van schaalbaarheid (bij een bitstroom)

onderscheiden:

• spatiale schaalbaarheid: lagere kwaliteit komt neer op een vermindering

in resolutie (aantal pixels).

• temporele schaalbaarheid: lagere kwaliteit stemt overeen met een lagere

beeldsnelheid (minder beelden per seconde).

• SNR1-schaalbaarheid waar men lagere kwaliteit zal zien in de beelden

zelf (codeerfouten).

Door deze technieken moet er slechts eenmaal een hoge-kwaliteitsversie aan-

gemaakt worden om tientallen versies te kunnen aanbieden. Die aanpassin-

gen gebeuren vrij eenvoudig, zoals het weglaten van de juiste blokken data.

Doordat men inzag dat men schaalbaarheid kon aanbieden zonder te moeten

inboeten aan codeerefficientie, heeft men beslist om binnen MPEG-21 een

standaardisatieproces op te starten voor Schaalbare Videocodering (SVC).

MPEG-21 BSDL is daar een onderdeel van.

In de nabije toekomst zou het dan mogelijk moeten zijn om een multime-

dia server te onderhouden zoals we op figuur 3.1 kunnen zien. Hierbij zal een

eindgebruiker (de surfer) een mediabestand aanvragen aan de server. Deze

aanvraag, samen met de Constraints van de gebruiker, dit is bijvoorbeeld

de netwerkcapaciteit, zijn hardware configuratie zoals de processorsnelheid,

zal worden ontvangen door de Adaptation Engine. Een onderdeel van deze

engine is de Decision Engine. Deze eenheid zal op basis van de meegegeven

parameters van de gebruiker (Constraints) en de beschrijving van het me-

diabestand (die de eenheid van de multimedia server zal afgehaald hebben)

1Signal-to-Noise Ratio of Signaal-Ruis-Verhouding

18

Page 31: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

bepalen hoe het mediabestand best wordt aangepast om een zo goed moge-

lijke versie aan de eindgebruiker te verzenden. Als de gebruiker over een lage

bandbreedte beschikt, zal er een goede beslissing genomen worden om de

bitstroom aan te passen en aan kwaliteit in te boeten. Deze beslissing wordt

verzonden naar de Adaptation Engine die de effectieve aanpassing zal door-

voeren en deze aangepaste versie zal verzenden naar de gebruiker. Daarvoor

zal deze Adaptation Engine uiteraard het multimediabestand van de server

moeten halen.

Het BSDL-raamwerk past dus in figuur 3.1 bij de Resource Adaptation

Engine.

23

Praktische Werking van Server

MultimediaDatabank

Eindgebruiker(surfer)

AdaptationDecisionEngine

Resource Adaptation

Engine

Adaptation Engine

Gebruikers-parameters

Aangepastmediabestand

XML-beschrijving

Media-bestand

AdaptationDecision

Figuur 3.1: Praktische werking

3.2 MPEG-21 DIA BSDL

Een belangrijk probleem dat moet opgelost worden wanneer men schaalbare

video wil aanbieden aan een groot aantal gebruikers, is dat er software moet

gebouwd worden die er voor zorgt dat de juiste aanpassingen gebeuren aan

de schaalbare bitstroom door de juiste datablokken weg te laten of door te

sturen, afhankelijk van de te bekomen versie.

19

Page 32: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

De Bitstream Syntax Description Language ofwel BSDL, is onderdeel van

de Bitstream Syntax Description Tool, die onderdeel is van MPEG-21 DIA

(Digital Item Adaptation). MPEG-21, ook bekend als ISO/IEC 21000, is de

meest recentste standaard ontwikkeld (of beter gezegd nog in ontwikkeling)

door MPEG2. MPEG-21, in contrast tot de andere MPEG standaarden, is

een generiek raamwerk voor de productie en consumptie van multimediale

data. Het centrale concept binnen MPEG-21 is het Digital Item, afgekort DI.

Een DI is een gestructureerd object, uitgedrukt in XML, dat zowel inhoud als

metadata bevat. Een volledig overzicht van MPEG-21 kan je terugvinden in

[7]. De BSDL-technologie is een onderdeel geworden van deel 7: MPEG-21

DIA (Digital Item Adaptation). DIA voorziet ook nog andere hulpmidde-

len bij het automatisch aanpassen van multimediale data aan verschillende

toestellen. Figuur 3.2 toont het concept van de werking van MPEG-21 DIA.

page 338 July 2003 VCIP 2003 — T6

Concept of Digital Item Adaptation

Digital Item AdaptedDigital Item

DIA Tools

Digital ItemAdaptation Engine

ResourceAdaptation Engine

DescriptionAdaptation Engine

Scope of standardization

Figuur 3.2: Concept van MPEG-21 DIA

DIA bestaat uit verschillende tools (zie de MPEG specificatie [8]) waar-

onder de tool Bitstream Syntax Description. Deze tool bestaat dan weer uit 2

concepten, namelijk BSDL en gBSD (Generic Bitstream Syntax Description),

2Moving Picture Experts Group

20

Page 33: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

dat een meer algemene aanpak heeft dan BSDL. Voor BSDL zal bijvoorbeeld

voor iedere videocodec een ander schema ontwikkeld moeten worden.

Binnen MPEG-21 DIA kwam men dus op het idee om een mechanisme te

ontwikkelen dat zou toelaten om automatisch beschrijvingen aan te maken

van de structuur van een bitstroom. Die beschrijvingen, in een XML-formaat,

zouden dan gebruikt kunnen worden voor editeer-bewerkingen, aangezien het

gemakkelijker is om dit soort bewerkingen te implementeren op XML-niveau

dan op bitstroomniveau. Wanneer er dan ook een mechanisme zou bestaan

om vanuit (aangepaste) bitstroombeschrijvingen terug de corresponderende

bitstromen te genereren, had men een raamwerk om bitstromen aan te passen

zonder dat men een echte parser voor die bitstromen moest ontwikkelen.

Het is hieruit dat BSDL gegroeid is. Een ander vernieuwend principe

in het BSDL-raamwerk was het idee dat men XML Schema kon gebruiken,

niet enkel om een grammatica vast te leggen voor een bepaalde categorie

van bitstroombeschrijvingen (aangezien dat XML-documenten zouden zijn),

maar ook om een grammatica vast te leggen voor de bitstromen zelf. Om dat

mogelijk te maken waren een aantal uitbreidingen en beperkingen nodig op

XML Schema omwille van de specifieke eigenschappen van bitstromen. Door

de BSDL-schema’s zodanig op te stellen dat dubbelzinnigheden vermeden

worden, is het bovendien mogelijk om deze schema’s als input te gebruiken

voor het automatisch aanmaken van bitstroombeschrijvingen. BSDL kan dus

aanzien worden als een uitbreiding en beperking op XML. Figuur 3.3 toont

dit aan.

W3C XML Schema

Bitstroombeschrijving in XML-formaat

BSDL-schema

XML-documentXML-schema

MPEG-21 BSDL

Figuur 3.3: Vergelijking tussen W3C XML Schema en BSDL Schema

21

Page 34: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Het principe van BSDL vinden we dan weer terug in figuur 3.4. Dit

concept is doorheen de thesis constant gebruikt geweest. We volgen de ver-

schillende stappen in het aanpassen van een bitstroom via BSDL.

5

MPEG-21 BSDL Raamwerk

BITSTROOM XML-beschrijving

Aangepaste XML-beschrijving

Aangepaste BITSTROOM

BinToBSD

Transformatie

BSDToBin

BSDL-schema

mijn_video.m2v

MPEG_2.xsd

mijn_video.xml

mijn_aangepaste_video.xmlmijn_aangepaste_video.m2v

Verwijder_B.xslt

Figuur 3.4: Overzicht van het BSDL raamwerk

We starten van een gegeven bitstroom (gecodeerd in een bepaalde co-

dec zoals MPEG-2, MPEG-4 XVID, ...) en we willen een high-level XML-

beschrijving genereren voor deze bitstroom. Daarvoor moeten we een BSDL-

schema ontwikkelen, specifiek ontworpen voor de codec van de bitstroom.

Dit te ontwerpen schema is een representatie van alle mogelijke bitstromen,

gegenereerd door de encoder van die bepaalde codec. Een BSDL schema

definieert dus de syntax van een mogelijke bitstroom net zoals een XML-

schema een syntax definieert (een toegelaten inhoud) voor een groep van

XML-documenten.

Wanneer we een BSDL-schema hebben voor een bepaalde codec, zullen we

dus een bitstroombeschrijving kunnen genereren voor iedere bitstroom die in

deze codec is gecodeerd. Dit proces wordt uitgevoerd door de BintoBSD tool

van de BSDL-software, die bovendien zelf moet geımplementeerd worden.

Het enige wat MPEG gestandaardiseerd heeft zijn de tags die kunnen voor-

22

Page 35: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

komen in een BSDL-schema. Als uitvoer van de BintoBSD tool verkrijgen

we een XML-bestand dat de structuur van de bitstroom beschrijft.

In de volgende stap kunnen we een XML-bestand transformeren. Hoe we

deze transformatie (dus verandering van de XML file) doorvoeren is ook vol-

ledig vrij. Bijvoorbeeld, we kunnen gebruik maken van een XSLT3 transfor-

matie, die kan uitgevoerd worden door een XSLT processor zoals bijvoorbeeld

Saxon. In deze thesis gebruiken we Saxon. Deze tool is een gratis open source

XSLT en XQuery processor en kan je vinden op [9]. Men kan ook Java biblio-

theken zoals SAX (Simple API for XML) of DOM (Document Object Model)

gebruiken, zeker wanneer meer complexe transformaties moeten worden uit-

gevoerd. De enige beperking is wel dat de aangepaste XML-beschrijving nog

steeds moet geldig zijn met het originele BSDL-schema van de videocodec.

De laatste stap is de aangepaste bitstroom genereren via de BSDtoBin

tool van BSDL. Deze tool neemt als invoer de aangepaste bitstroom be-

schrijving en het BSDL-schema maar ook de originele bitstroom, omdat de

beschrijving immers referenties naar data blokken (bytes) uit de originele

bitstroom zal bevatten. Tenslotte moeten we opmerken dat de aangepaste

beschrijving NIET de bitstroom beschrijving is van de aangepaste bitstroom.

3.3 Eenvoudig Voorbeeld

We zullen alles even verduidelijken met een eenvoudig voorbeeld dat wordt

getoond op figuur 3.5.

We hebben een bitstroom, voorgesteld in hexadecimale notatie, die een

fictieve codec volgt. De syntax van deze codec is eenvoudig: de frames (beel-

den, pictures) volgen elkaar sequentieel op in de bitstroom. De lengte van

een frame is 2 bytes. Als we een schema hebben voor deze codec, zal de

beschrijving eruit zien zoals we op de figuur kunnen zien. Een frame wordt

aangeduid met een element <Frame>a b<Frame> waarbij a de startbyte aan-

duidt van de originele bitstroom, en b de lengte aanduidt. Dit is dus een

3Extensible Stylesheet Language Transformation

23

Page 36: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

4 Davy De Schrijver et al.

gine is completely open: only the structure and the tagsthat can appear within the BSDL schema are standard-ized. As output of the engine, we get an XML file thatrepresents the structure of the original bitstream.During the next step, we can transform the XML file.The transformation is the XML-equivalent of the adap-tation of the original bitstream. How to transform theXML file is also not standardized. For example, one canuse an XSLT transformation (Extensible Stylesheet Lan-guage Transformations [13]), or a library like SAX (Sim-ple API for XML) or DOM (Document Object Model)when a more complex transformation is needed. The onlyrestriction on the transformation is that the adapted de-scription must be valid with respect to the appropriateBSDL schema. In our example, we have eliminated thesecond frame, something that can be easily done by anXSLT transformation.The last step is the re-generation of the new adaptedbitstream; for this, we need the BSDtoBin tool. Thistool takes as input the adapted bitstream descriptionand the BSDL schema but also the original bitstreambecause the description will contain references to datablocks (of bytes) in the original bitstream (for example,copy all the bytes between byte 1100 and byte 1180).Finally, note that the adapted description is not the bit-stream description of the adapted bitstream. In our ex-ample, it is clear that the adapted description (after thetransformation) is not the same XML fragment as thedescription of the adapted bitstream we get after usingthe adapted bitstream as input for the BintoBSD engine.

OriginalBitstream BintoBSD XML Bitstream

Description

Transformation

Adapted BitstreamDescriptionBSDtoBin

BSDLSchema

AdaptedBitstream

Fig. 3 Bitstream Syntax Description Language (BSDL)framework

3 BSDL in the context of MC-EZBC

In Section 2, the working of the MC-EZBC wavelet-based codec and the MPEG-21 BSDL standard was ex-plained. In this section, we will dicuss how we have de-veloped a BSDL schema for the codec in question. First,we will explain how a generated bitstream looks like af-ter the encoding phase. Then we will explain how wecan construct a BSDL schema and how we can generatea bitstream description.

Bitstream(Hexadecimal representation)

05 E7 C3 D2 02 12

Frame 1 Frame 2 Frame 3

XML-description:<Bitstream>

<Frame>0 2</Frame><Frame>2 2</Frame><Frame>4 2</Frame>

</Bitstream>

StartbyteLength

BintoBSD

Adapted description:<Bitstream>

<Frame>0 2</Frame><Frame>4 2</Frame>

</Bitstream>

Transformation: eliminate 2nd frame

BSDtoBin

Adapted Bitstream(Hexadecimal representation)

05 E7 02 12

Frame 1 Frame 3

BintoBSD

Description of AdaptedBitstream:<Bitstream>

<Frame>0 2</Frame><Frame>2 2</Frame>

</Bitstream>

Different

BSDLSchema

Fig. 4 Simple BSDL Example

3.1 Structure of a MC-EZBC bitstream

The structure of a bitstream is codec-dependent in caseof the MC-EZBC compressor. In this paper, we use theimplementation of the MC-EZBC codec that was re-leased on September 2003 [7]. The complete structure ofa generated bitstream is given in Fig. 5. The first part of

Header Payload100bytes

GOP structure 1 GOP structure 2 GOP structure n…

GOP size 1 GOP size 2 GOP size n… GOPs4 bytes 4 bytes 4 bytes

GOP structure n-1

GOP Header GOP Content

MV Base Layer Subband 1MV Enhancement Layer Subband 2 Subband p…

Temporal Substream 1 MV 2 Temp Substr 2 MV m Temp Substr m…

MV = Motion Vectors

Fig. 5 Structure of a generated bitstream

the bitstream contains a header followed by the payloadof the video. The header contains general informationabout the bitstream. Some information is necessary toplay back the video correctly like frame rate, resolution,number of frames, and so on. Other information will beused by the decoder to decode the bitstream in the cor-rect manner like t level (reduction of the temporal levels,result of temporal scalability), s level (reduction of thespatial resolution), and so on. The complete header con-tains 100 bytes.After the fixed header, we have the actual payload ofthe video sequence. The first part of the payload con-tains the sizes of the different GOPs. This is importantbecause the decoder must know how many bytes to readbefore the decoding can start. The bitstream contains nostart codes (in contrast with other video codec specifica-tions such as MPEG-4 Visual). This applies that it willbe impossible to use that kind of streams in live stream-ing (for example, live television broadcasting).

Figuur 3.5: Eenvoudig BSDL voorbeeld

referentie naar een datablok in de originele bitstroom.

Wanneer we dan het tweede frame laten vallen bekomen we een aangepas-

te XML-beschrijving zonder het tweede <Frame>-element. Na uitvoering van

BSDtoBin verkrijgen we de aangepaste bitstroom met de 2 middenste bytes

(van het tweede frame) weggelaten. Om de laatste opmerking van daarnet

aan te tonen hebben we nog eens de beschrijving van deze aangepaste bit-

stroom gegenereerd met behulp van BintoBSD. Zo zien we dat de aangepaste

beschrijving niet overeenstemt met de terug gegenereerde beschrijving van de

aangepaste bitstroom.

Het gebruikte BSDL-schema zal er uitzien zoals op figuur 3.6. We hebben

een root element in het schema genaamd Bitstream en dit bestaat uit een

sequentie van frames. We zien dat een element wordt gerefereerd aan de

24

Page 37: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

hand van ref=.... De attributen minOccurs en maxOccurs spreken voor zich:

dit is het aantal keer dat een frame zal voorkomen in een bitstroom. Dit zal

dus tussen 0 en oneindig liggen (unbounded).

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/BSDLvoorbeeld.xsd

<?xml version="1.0" encoding="UTF-8" ?> - <xsd:schema xmlns:bt="urn:mmt:2005:dataTypes-NS" xmlns:bs1="urn:mpeg:

mpeg21:2003:01-DIA-BSDL1-NS" xmlns:bs2="urn:mpeg:mpeg21:2003:01-DIA-BSDL2-NS" xmlns:bsdl="BSDLvoorbeeld" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="BSDLvoorbeeld" elementFormDefault="qualified" bs2:rootElement="BSDLvoorbeeld:Bitstream"> <!-- ********** Root element declaration ********** --> - <xsd:element name="Bitstream">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="bsdl:FRAME" minOccurs="0" maxOccurs="unbounded" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ********** FRAME declaration ********** --> - <xsd:element name="FRAME">

- <xsd:simpleType>

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<bs2:length value="2" /> </xsd:appinfo>

</xsd:annotation> </xsd:restriction>

</xsd:simpleType> </xsd:element>

</xsd:schema>

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/BSDLvoorbeeld.xsd9/05/2005 14:50:00

Figuur 3.6: Eenvoudig BSDL-schema

Het element Frame wordt dan eenvoudig opgesteld. We definieren eerst

een restrictie die aangeeft dat Frame een byterange type betreft (dit type

werd speciaal aangemaakt voor BSDL, het zit namelijk in de namespace

bs1, de BSDL-1 uitbreidingen op XML: hierover later meer). Dan geeft men

tenslotte nog aan hoe lang het Frame is aan de hand van bs2:length. Dit is

dan weer een uitbreiding van BSDL-2 met namespace bs2. Hier komen we

dus later op terug. De lengte wordt dus gezet op 2 bytes.

25

Page 38: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

3.4 BSDL Specificatie

We gaan hier wat meer in detail over hoe BSDL echt werkt, wat de uitbrei-

dingen en ook beperkingen zijn op XML en hoe men ervoor heeft gezorgd

dat we zulke beschrijvingen relatief gemakkelijk kunnen opstellen.

3.4.1 Inleiding

De BSDL-specificatie bouwt voort op de specificatie van W3C XML Schema.

We zullen trachten een volledig overzicht te geven van deze specificatie, die

is opgesplitst in een tweetal delen, die elk een XML-schema hebben. Het

Schema for BSDL-1 Extensions definieert een aantal ingebouwde datatypes

en attributen die kunnen gebruikt worden in een BSDL-schema en die ge-

bruikt worden bij het genereren van bitstromen uit bitstroombeschrijvingen

(BSDtoBin). Om van een bitstroom een beschrijving te verkrijgen kan het

zijn dat er nog bijkomende constructies nodig zijn om dubbelzinnigheden te

vermijden. Deze uitbreidingen (voor BintoBSD dus) zijn terug te vinden

in het Schema for BSDL-2 Extensions. Beide schema’s hebben een eigen

naamruimte (namespace). Verder zijn er nog een aantal beperkingen op

XML Schema vastgelegd, onder andere over welke datatypes er wel en niet

toegelaten zijn in een BSDL-schema.

3.4.2 Beperkingen

Data die in een bitstroom voorkomt, mag enkel voorkomen binnen een XML-

element, nooit in een attribuut. De reden daarvoor is dat de volgorde van

attributen van geen belang is, terwijl dat wel belangrijk is tijdens het ge-

nereren van bitstromen. Zogenaamde mixed content (wanneer tussen XML-

elementen er ook tekst kan voorkomen) is ook niet toegelaten in BSDL. Als

algemene regel geldt dat elk element een datatype moet hebben. Dat bete-

kent ook dat datatypes zoals xsd:any uit den boze zijn.

De datatypes die toegelaten zijn in BSDL, zijn uiteraard enkel die waar-

voor er een binaire representatie bestaat. Dit betekent bijvoorbeeld dat een

26

Page 39: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

xsd:integer niet toegelaten is, aangezien het aantal bytes hierbij niet vastligt.

Anderzijds is een xsd:int wel mogelijk. Toch zijn er bepaalde datatypes toe-

gelaten waarvan de lengte niet vastligt. Om in zo een geval een beschrijving

te kunnen genereren uit een bitstroom zal er bijkomende informatie nodig

zijn; dit wordt vastgelegd in BSDL-2. In tabel 3.1 wordt een overzicht ge-

geven van alle datatypes gedefinieerd in de XML Schema specificatie, en die

ook in BSDL toegelaten zijn.

datatype lengte(bytes)xsd:string onbeperktxsd:float 4xsd:double 8xsd:hexBinary onbeperktxsd:base64Binary onbeperktxsd:long 8xsd:int 4xsd:short 2xsd:byte 1xsd:unsignedLong 8xsd:unsignedInt 4xsd:unsignedShort 2xsd:unsignedByte 1

Tabel 3.1: Toegelaten XML datatypes in BSDL Schema

Bovendien kunnen eigen types aangemaakt worden door een van de unsig-

ned datatypes te beperken aan de hand van de xsd:maxExclusive-constructie.

Het aantal bits dat gebruikt wordt voor de representatie in de bitstroom is

het aantal bits dat nodig is om de grootst mogelijke waarde binnen het bereik

vast te leggen. Bijvoorbeeld een datatype van 4 bits declareren is een unsig-

nedByte nemen en xsd:maxExclusive waarde 16 geven. Immers 16 wordt net

met 5 bits weergegeven; alles onder 16 wordt voorgesteld met 4 bits. Deze

technieken zullen we volop gebruiken in het ontwerpen van een schema voor

MPEG-2 Video en Systems in de volgende hoofdstukken.

27

Page 40: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

3.4.3 BSDL-1 Uitbreidingen voor de BSDToBin tool

Naast de datatypes uit W3C XML Schema, definieert BSDL-1 ook twee eigen

datatypes: byteRange en bitstreamSegment; beide zijn onbeperkt in lengte.

Verder wordt er ook een attribuut ignore toegevoegd.

Het ignore-attribuut kan handig zijn wanneer je in een bitstroombeschrij-

ving bijkomende metadata wil toevoegen, waarvan je wil duidelijk maken dat

ze niet in de bitstroom zelf voorkomen. Door aan de definitie van een element

in het BSDL-schema het ignore-attribuut toe te voegen, zal dat element (en

al zijn afstammelingen) genegeerd worden door de BSDL-parsers wanneer

het de waarde true heeft in de bitstroombeschrijving.

Elementen van het byteRange-datatype bestaan uit twee niet-negatieve

gehele getallen en verwijzen naar een fragment uit de originele bitstroom.

Daarnaar wordt verwezen aan de hand van het xml:base attribuut (meestal

weergegeven in het root-element van de bitstroom-beschrijving). Het eerste

getal verwijst naar de positie in de bitstroom (de eerste byte heeft waarde

0), het tweede getal slaat op de lengte (aantal bytes) van het fragment.

In het eenvoudige voorbeeld op Figuur 3.6 werd gebruikt gemaakt van het

byteRange-type.

3.4.4 BSDL-2 Uitbreidingen voor de BinToBSD tool

Een belangrijke uitbreiding ten opzichte van BSDL-1 is het gebruik van

XPath-expressies: soms is het voor het genereren van bitstroombeschrijvin-

gen nodig om te kunnen definieren dat de lengte van een bepaald element,

of het aantal keer dat een element voorkomt, afhangt van de waarde van

een ander element. Ook bij het voorwaardelijk voorkomen van een bepaald

element kunnen XPath-expressies gebruikt worden.

Om het aantal keer dat een bepaald element voorkomt in een bitstroom-

beschrijving vast te leggen, kan het nOccurs-attribuut gebruikt worden, dat

een XPath-expressie kan bevatten. Merk op dat, om bitstroombeschrijvingen

te genereren die door gewone XML Schema-tools correct kunnen gevalideerd

28

Page 41: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

worden, de waarde van dit attribuut moet liggen tussen de waarde van het

minOccurs- en maxOccurs-attribuut van het Schema.

Elementen kunnen ook conditioneel zijn; daarvoor bestaat het if-attribuut

dat een XPath-expressie bevat, of het ifNext-attribuut, dat een hexadecimale

voorstelling bevat van een waarde (1 hexadecimaal getal) of een bereik (2

getallen, gescheiden door een “-”): enkel wanneer de volgende bits in de

bitstroom hiermee overeenkomen, zal het element in de bitstroombeschrijving

opgenomen worden.

Ook hier moeten we erop letten dat de waarden van minOccurs en maxOc-

curs correct zijn, als we willen dat de beschrijving correct kan gevalideerd

worden: minOccurs moet op 0 staan, maxOccurs op 1.

Nog een attribuut dat in BSDL-2 wordt vastgelegd, is het rootElement-

attribuut dat voorkomt in het xsd:schema-element en aan de BintoBSD-

parser zegt welk element in de definitie van het Schema als beginelement

moet gekozen worden. Wanneer er geen beperkingen worden gedefinieerd op

datatypes van onbeperkte lengte, zal de bitstroom tot op het einde doorlo-

pen en volledig opgenomen worden in het corresponderende element. Om

zulke beperkingen vast te kunnen leggen, volstaan in sommige gevallen de

constructies niet die XML Schema aanbiedt. Daarom wordt er in BSDL

soms gebruikgemaakt van de xsd:annotation/xsd:appinfo-combinatie binnen

een xsd:restriction-component. Een voorbeeld kan je zien op Figuur 3.6: het

Frame-element wordt daar beperkt in lengte door de waarde 2 (bytes).

Het length-datatype kan gebruikt worden om het aantal bytes vast te

leggen van een element van onbeperkte lengte. Ook hier kan een XPath-

expressie gebruikt worden. Dit type mag niet gebruikt worden samen met

een xsd:length-, startCode- of endCode-constructie.

De startCode- en endCode-datatypes worden gebruikt wanneer de gren-

zen van een segment in de bitstroom vastgelegd worden aan de hand van

vooraf gedefinieerde sequenties van bits. Wanneer het einde van het huidige

element op die manier aangegeven wordt, maakt men gebruik van endCode;

wanneer het begin van het volgende element op die manier wordt aangegeven,

maakt men gebruik van startCode. Net zoals bij de if- en ifNext-constructie

29

Page 42: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

kan een bereik opgegeven worden in plaats van 1 waarde. Het is toegela-

ten om meerdere start- en eindcodes op te geven voor hetzelfde element.

Van zodra de eerste code gevonden wordt, zal het element dan afgesloten

worden. Wel mag deze constructie niet gebruikt worden in combinatie met

length-beperkingen (uit BSDL of XML Schema).

30

Page 43: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 4

BSDL-schema voor MPEG-2

Video

In dit hoofdstuk zullen we de specificatie van BSDL (hoofdstuk 3) toepassen

op de MPEG-2 Video Syntax die we besproken hebben in hoofdstuk 2. Op die

manier bekomen we een BSDL-schema dat zal gebruikt worden om MPEG-

2-videostromen te beschrijven in een XML-bestand.

4.1 Inleiding: startcodes

Startcodes zijn van groot belang in elke videostroom (hexadecimaal be-

schouwd). Startcodes zijn specifieke bitpatronen die niet elders voorkomen

in de videostroom. Elke startcode bestaat uit een start code prefix, gevolgd

door een start code value. De start code prefix bestaat uit 23 0-bits en 1

1-bit. Dit is dus de bitstring “0000 0000 0000 0000 0000 0001”.

De start code value is een 8-bits getal dat het type van de start code

identificeert. Een overzicht van de startcodes voor MPEG-2 Video vinden

we terug in tabel 4.1. Merk op dat de “System Start Codes” gebruikt wor-

den door MPEG-2 Systems. Daar zullen we het later natuurlijk meer over

hebben.

31

Page 44: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

naam Start Code Valuepicture start code 00slice start code 01 tot AFreserved B0reserved B1user data start code B2sequence header code B3sequence error code B4extension start code B5reserved B6sequence end code B7group start code B8system start codes B9 tot FF

Tabel 4.1: MPEG-2 Video Startcodes

Indien we in de bitstroom een startcode willen terugvinden dat het begin

aanduidt van een GOP (Group of Pictures) dan zullen we moeten zoeken

naar (hexadecimaal) 0x00001B8, omdat B8 de start code value is van de

group start code. In het schema dat we ontwerpen zullen de sequence header

code, de picture start code en de group start code een belangrijke rol spelen.

4.2 Enkele belangrijke datatypes

4.2.1 Elementaire Datatypes

We zullen heel wat aparte datatypes definieren. Enkele eenvoudige types vind

je op Figuur 4.1. Deze datatypes, genaamd b1 tot b16 (op de figuur zien we

enkel een paar voorbeelden, aangezien de andere heel analoog zijn), beperkt

men tot respectievelijk 1 tot 16 bits. Met andere woorden, het datatype b1 is

een beperking op de lengte, namelijk 1 bit. Datatype b2 heeft een beperking

van 2 bits lengte, enzoverder...

Deze types zijn gedefinieerd in een apart bestand BasicDatatypes.xsd, dat

je kan raadplegen in Bijlage B.

32

Page 45: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

file:///C|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/SCHEMAS/BasicDatatypes.xsd

</xsd:restriction> </xsd:simpleType>

- <xsd:simpleType name="b8">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="256" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b7">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="128" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b6">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="64" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b5">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="32" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b4">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="16" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b3">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="8" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b2">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="4" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b1">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="2" /> </xsd:restriction>

</xsd:simpleType> </xsd:schema>

file:///C|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/SCHEMAS/BasicDatatypes.xsd (2 of 2)14/05/2005 14:40:15

Figuur 4.1: Enkele eenvoudige datatypes

4.2.2 Picture Payload Type

Een heel belangrijk type is PicturePayloadType die we gedefinieerd zien op

Figuur 4.2. Dit type zullen we gebruiken om de extra data van een beeld te

refereren in ons schema. We hebben immers verdere gedetailleerde “parsing”

van de slices niet nodig in deze thesis. Indien men later ook wil slices, macro-

blokken en blokken beschrijven, kan men het schema nog altijd uitbreiden.

Deze PicturePayloadType zorgt ervoor dat we alle data overslaan tot we een

van de vier afgebeelde startcodes terugvinden in de bitstroom. We laten dus

alles over tot ofwel het volgende beeld (Picture Start Code 0x00000100), of-

wel tot de volgende GOP (Group of Pictures Start Code 0x000001B8), tot

de volgende video sequence (Sequence Header Start Code 0x000001B3) en

tenslotte eventueel tot het einde van de huidige video sequence (Sequence

End Code 0x000001B7).

Dit type is gedefinieerd in een apart bestand MPEG2SimpleTypes.xsd,

dat je kan raadplegen in Bijlage C.

33

Page 46: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/SCHEMAS/mpeg-2_simple_types.xsd

</xsd:annotation> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="BeginVideoPayloadType">

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<bs2:startCode value="000001B3" /> <!-- packet start codes --> <bs2:startCode value="000001BC-000001FF" />

<!-- pack_start_code --> <bs2:startCode value="000001BA" />

<!-- program_end_code --> <bs2:startCode value="000001B9" />

</xsd:appinfo> </xsd:annotation>

</xsd:restriction> </xsd:simpleType>

- <xsd:simpleType name="SystemPayloadType">

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<bs2:startCode value="000001BB" /> </xsd:appinfo>

</xsd:annotation> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="PicturePayloadType">

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<!-- Nieuw Beeld: Picture Start Code --> <bs2:startCode value="00000100" />

<!-- In geval van een "laatste" beeld. --> <!-- Group Start Code --> <bs2:startCode value="000001B8" />

<!-- Sequence Header Start Code --> <bs2:startCode value="000001B3" />

<!-- Sequence End Code --> <bs2:startCode value="000001B7" />

</xsd:appinfo> </xsd:annotation>

</xsd:restriction> </xsd:simpleType>

- <xsd:simpleType name="GOPPayloadType">

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<bs2:startCode value="000001B8" /> </xsd:appinfo>

</xsd:annotation> </xsd:restriction>

</xsd:simpleType>

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/SCHEMAS/mpeg-2_simple_types.xsd (2 of 3)16/05/2005 16:30:42

Figuur 4.2: Datatype Picture Payload Type

4.3 MPEG-2 Video BSDL-schema

4.3.1 Root Element: MPEG2Video

Figuur 4.3: Root element van het BSDL-schema

Na het bepalen van de naamruimtes (namespaces), het root element en de

imports van de verschillende andere benodigde schema’s, zullen we het BSDL-

schema voor MPEG-2 Video ontwerpen. Op figuur 4.3 zien we een deel van

34

Page 47: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

het schema, namelijk voor het root element MPEG2Video waar de bitstroom

dus in feite “begint”. Het element bit stuffing is enkel om de bitstroom

te aligneren zodat we terug het begin van een byte hebben. We zien dat

MPEG2Video bestaat uit verschillende video sequences. De sequence start

code 0x000001B3 hebben we nodig in het ifNext-attribuut om de sequentie te

starten. Deze constructie zullen we heel veel gebruiken. Het MPEG-2 Video

BSDL-schema in XML-vorm kan je raadplegen in Bijlage D. Daar zal men het

gebruik van onder andere ifNext duidelijk kunnen zien. Een video sequence

bestaat dus uit een sequence header, eventueel een sequence extension, de

extension data en uiteindelijk een reeks van GOP’s. We herkennen hier

direct hoe we in BSDL de syntax van MPEG-2 Video, die we bestudeerden

in hoofdstuk 2, modelleren. Na de verschillende video sequences, komen we

op het einde van de videostroom met de sequence end code.

De verschillende elementen van de video sequence (die we gerefereerd

hebben met behulp van ref=“...”) gaan we vervolgens kort bespreken.

4.3.2 Sequence Header

Op Figuur 4.4 zien we de uitwerking van de Sequence Header. Belangrijke

informatie in deze header is bijvoorbeeld de resolutie, aangeduid door twee

elementen horizontal size value en vertical size value. Een element uit deze

sequence header dat we gaan veranderen is aspect ratio information, dat de

aspect ratio (zie hoofdstuk 2) aanduidt. De sequence extension (het volgende

element op Figuur 4.3) zullen we hier niet in detail bespreken. Het volstaat

om te vermelden dat de sequence extension gelijkaardig opgebouwd is zoals

de sequence header. Deze sequence extension bevat extra informatie omtrent

de resolutie, het chroma formaat, ...

35

Page 48: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Figuur 4.4: Sequence Header

36

Page 49: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

4.3.3 GOP

Figuur 4.5: Declaratie van het GOP-element

Op Figuur 4.5 zien we de opbouw van een GOP. Het belangrijkste onder-

deel ervan vinden we onderaan terug, namelijk een reeks van pictures. Hierbij

wordt natuurlijk de Picture Start Code gebruikt in het ifNext-attribuut van

het element Picture.

4.3.4 Picture

Op Figuur 4.6 vinden we uiteindelijk de syntax terug van een beeld. Het

element Picture Coding Type, dat we al besproken hebben, is hier uiteraard

heel belangrijk. Dit element zullen we later gebruiken om bepaalde beelden

weg te laten. Dit element wordt ook zelf gebruikt in het schema zoals we

kunnen zien bij de elementen forward motion info en backward motion info.

Als het een I-beeld betreft zal er geen element forward motion info of back-

ward motion info volgen. Is het beeld echter een P-beeld of B-beeld (picture

coding type = 2 of 3), dan volgt er in de videostroom een element forward

motion info die informatie bevat over de bewegingsvectoren t.o.v. een vorig

37

Page 50: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Figuur 4.6: Declaratie van het Picture-element

beeld. Bij een B-beeld (picture coding type = 3) vinden we ook nog eens

een element backward motion info met informatie over de bewegingsvectoren

t.o.v. een volgend beeld.

38

Page 51: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Er volgen nog verschillende elementen zoals extra info en de picture coding

extension, die zoals gewoonlijk extra informatie bevat over het beeld. We

eindigen een beeld met een PicturePayloadType. We bedoelen daarmee dat

we niet verder in detail de bitstroom gaan ontleden, maar alles overlaten tot

we een nieuw Picture Start Code (of andere: zie vroeger...) tegenkomen in de

bitstroom. Zo laten we heel wat details over die we in principe wel later nog

kunnen modelleren (uitbreiden van het BSDL-schema). Voor deze thesis was

het echter niet nodig om verder in detail te gaan, omdat het belangrijkste

element, de picture coding type, reeds werd gevonden.

Het volledige BSDL-schema voor MPEG-2 Video vinden we terug in Bij-

lage D.

39

Page 52: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 5

Aanpassen van MPEG-2 Video

Met behulp van het schema dat we gedeeltelijk uitgelegd hebben in het vorige

hoofdstuk is het mogelijk om XML-beschrijvingen te genereren van videostro-

men gecodeerd met een MPEG-2 Video codec. Dit XML-bestand werd dan

aangepast via een XSLT transformatie, gebruik makend van de Saxon XSLT

Processor. We zullen in dit hoofdstuk zien hoe we gemakkelijk de aspect ra-

tio veranderen van een videostroom en beelden kunnen weglaten (temporele

schaalbaarheid).

5.1 Veranderen van de Aspect Ratio

Zoals eerder vermeld is de Aspect Ratio een soms kritiek probleem bij het zien

van een videostroom op een computer. Als mensen spreken van “uitgerokken”

beelden, wil dit zeggen dat de aspect ratio niet goed ingesteld staat. Dan is

de breedbeeld sequentie immers omgezet naar “gewoon” beeld en dus ervaart

men alles als “uitgerokken”. Ook het omgekeerde kan voorkomen, namelijk

dat mensen er “platter” of “dikker” gaan uitzien en dit komt voor als een

sequentie voor normaal beeld (4:3) wordt afgespeeld als een sequentie voor

breedbeeld (16:9).

Op figuur 5.1 zien we dat een breedbeeld versie links niet de juiste As-

pect Ratio heeft. Het gecorrigeerde beeld zien we dan rechts. De linkse

40

Page 53: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

videostroom heeft een aspect ratio information van 3 (16:9) en de rechtse

een waarde 2 (4:3). In het XML schema zullen we dit ook perfect terug-

vinden. Als we de BSDL beschrijvingen zouden vergelijken zouden we een

andere waarde zien voor het element Aspect Ratio Information in de Sequence

Header.

Figuur 5.1: Verschil in Aspect Ratio

Via BSDL en een XSLT processor kunnen we een mechanisme ontwikkelen

dat dit automatisch corrigeert. We kunnen van de originele bitstroom via

BinToBSD een beschrijving genereren. Deze beschrijving passen we aan met

behulp van een XSLT stylesheet om het element Aspect Ratio Information in

de Sequence Header aan te passen. De resulterende XML-beschrijving gaan

we terug omzetten naar een bitstroom via BSDtoBin. Het resultaat is een

nieuwe bitstroom met een gecorrigeerde Aspect Ratio.

Op Figuur 5.2 vinden we het belangrijkste deel terug van de XSLT sty-

lesheet die de aspect ratio verandert. Als we een sequence header aantreffen,

testen we welke waarde deze aspect ratio heeft. Indien deze waarde 2 is,

veranderen we de waarde in 3, en omgekeerd. Zo construeert men een me-

chanisme om een 4:3 sequentie om te zetten naar 16:9, maar eveneens ook

om een 16:9 sequentie om te zetten naar 4:3. Gelijk welke Aspect Ratio de

videosequentie heeft (4:3 of 16:9), er wordt een verandering doorgevoerd.

We moeten opmerken dat we, om deze verandering door te voeren, niet

41

Page 54: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

file:///C|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/MPEG-2/aspect_ratio_change.xsl

<?xml version="1.0" ?> - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="MPEG2"

xmlns:mp2="MPEG2" version="1.0"> <xsl:output method="xml" indent="yes" />

<!-- Match all: default template --> - <xsl:template name="tplAll" match="@*|node()">

- <xsl:copy>

<xsl:apply-templates select="@*|node()" /> </xsl:copy>

</xsl:template> <!-- Match root element --> - <xsl:template match="mp2:Bitstream">

- <xsl:copy>

<xsl:apply-templates select="@*|node()" /> </xsl:copy>

</xsl:template> <!-- Do nothing for processing instructions --> <xsl:template match="processing-instruction()" />

<!-- Match B_VOP - Overrides tplAll --> - <xsl:template name="tplB_sequence_header" match="mp2:sequence_header/mp2:

aspect_ratio_information">- <xsl:if test="../mp2:aspect_ratio_information = 2">

<aspect_ratio_information>3</aspect_ratio_information> </xsl:if>

- <xsl:if test="../mp2:aspect_ratio_information = 3">

<aspect_ratio_information>2</aspect_ratio_information> </xsl:if>

</xsl:template> </xsl:stylesheet>

file:///C|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/MPEG-2/aspect_ratio_change.xsl14/05/2005 16:35:54

Figuur 5.2: Verandering van Aspect Ratio: Stylesheet

de bitstroom hoeven te doorlopen tot op het Picture niveau. Als we enkel

de Sequence Header’s detecteren (aan de hand van de sequence header start

code natuurlijk), kan het BSDL-schema, enkel om de Aspect Ratio te ver-

anderen, enorm vereenvoudigd worden en dus voor een aanzienlijk minder

lange uitvoeringstijd zorgen van de verschillende operaties (BintoBSD, xslt,

BSDtoBin). We hebben de beschrijving van de GOP’s, Pictures, ... immers

niet nodig om enkel de aspect ratio information te wijzigen.

5.2 Weglaten van Beelden

We hebben het BSDL-schema zo ontworpen zodat we elk beeld afzonderlijk

konden herkennen. Vooral het element Picture Coding Type in de Picture

Header was heel belangrijk om temporele schaalbaarheid te realiseren bij

MPEG-2 Video. We hebben er voor gekozen om B-beelden weg te laten in

een videostroom. Dit type beelden kunnen immers makkelijk worden wegge-

laten zonder enige vorm van neveneffecten (artefacten, onduidelijkheden in

de beelden), want B-beelden worden verder niet gebruikt door andere beel-

den in de decodering. P -en I-beelden worden wel gebruikt door andere B(of

P)-beelden door de referenties met bewegingsvectoren. Het weglaten van

zowel B -en P-beelden zorgt ervoor dat we een videostroom verkrijgen met

enkel intragecodeerde beelden. Deze “feature” die we terugvinden in zowat

alle spelers die MPEG-2 Video kan afspelen, noemt men fast forwarding. Het

maakt onder andere gebruik van het feit dat het eerste beeld in een GOP

42

Page 55: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

een I-beeld moet zijn.

Op Figuur 5.3 vinden we het belangrijkste deel terug van de XSLT styles-

heet die alle xml-elementen zal kopieren, behalve de picture-elementen waar-

van het element Picture Coding Type de waarde 3 heeft. Zo zien we dat de

default template alles zal behouden, net zoals het root element (bitstream),

terwijl als men een picture element vindt in de originele XML beschrijving,

men enkel het element zal kopieren indien de coding type niet 3 is.

file:///C|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/MPEG-2/removeB.xsl

<?xml version="1.0" ?> - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:

m="MPEG2" version="1.0"> <xsl:output method="xml" indent="yes" />

<!-- Match all: default template --> - <xsl:template name="tplAll" match="@*|node()">

- <xsl:copy>

<xsl:apply-templates select="@*|node()" /> </xsl:copy>

</xsl:template> <!-- Match root element --> - <xsl:template match="m:Bitstream">

- <xsl:copy>

<xsl:apply-templates select="@*|node()" /> </xsl:copy>

</xsl:template> <!-- Do nothing for processing instructions --> <xsl:template match="processing-instruction()" />

<!-- Match B_VOP - Overrides tplAll --> - <xsl:template name="tplB_Picture" match="m:Picture[m:picture_coding_type=3]">

<!-- Nothing ! --> </xsl:template>

</xsl:stylesheet>

file:///C|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/MPEG-2/removeB.xsl15/05/2005 0:25:59

Figuur 5.3: Verwijderen van B-beelden: Stylesheet

Na de transformatie met behulp van de stylesheet en na de uitvoering

van BSDToBin op de aangepaste XML beschrijving, verkrijgt men een vi-

deostroom waarvan de B-beelden werden weggelaten. Men ervaart de vi-

deosequentie dan als “minder vloeiend”. De testsequentie die ik hiervoor

gebruikte had 300 beelden: 21 GOP’s en dus 21 I-beelden, 80 P-beelden en

199 B-beelden. In totaal werden dus van de 300 beelden, 199 weggelaten. De

videosequentie was eigenlijk nog “deftig” bruikbaar en niet zo heel vlug te

onderscheiden van de originele sequentie, terwijl toch 2/3 van de beelden wer-

den weggelaten. Doordat B-beelden erg gecomprimeerd worden opgeslagen,

is de grootte van het videobestand niet 2/3 maar de helft kleiner geworden.

43

Page 56: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

5.3 MPEG-2 Video Statistieken

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/MPEG-2/mpeg-2_video_stats.xsl

<?xml version="1.0" ?> <!-- Be careful with namespaces! --> - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:

mp2="MPEG2" version="1.0"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" /> - <xsl:template match="/mp2:MPEG2Video">

- <html>

- <head>

<title>MPEG-2 Video - Statistics</title> </head>

- <body>

<h1>MPEG-2 Video - Statistics</h1> Number of sequence headers (video sequences):

<xsl:value-of select="count(./mp2:video_sequence/mp2:sequence_header)" /> <br />

Number of GroupOfPictures <xsl:value-of select="count(./mp2:video_sequence/mp2:GroupOfPictures)" /> <br />

Number of Pictures: <xsl:value-of select="count(./mp2:video_sequence/mp2:GroupOfPictures/mp2:Picture)" /> <br /> <br />

Number of I Pictures: <xsl:value-of select="count(./mp2:video_sequence/mp2:GroupOfPictures/mp2:Picture[mp2:picture_coding_type=1])" /> <br />

Number of P Pictures: <xsl:value-of select="count(./mp2:video_sequence/mp2:GroupOfPictures/mp2:Picture[mp2:picture_coding_type=2])" /> <br />

Number of B Pictures: <xsl:value-of select="count(./mp2:video_sequence/mp2:GroupOfPictures/mp2:Picture[mp2:picture_coding_type=3])" /> <br />

</body> </html>

</xsl:template> </xsl:stylesheet>

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/MPEG-2/mpeg-2_video_stats.xsl18/05/2005 22:55:42

Figuur 5.4: MPEG-2 Video Statistieken: Stylesheet

Van een gegeven videosequentie kan men gemakkelijk statistieken verza-

melen door bijvoorbeeld het aantal elementen te tellen in de XML-beschrijving.

Op Figuur 5.4 zien we een klein extract van hoe een “count” operatie gebeurt

om het aantal beelden en vervolgens het aantal I-beelden te bepalen. Na uit-

voering van deze stylesheet (die een HTML-pagina als output heeft) bekomen

we een aantal statistieken van een testsequentie die ik veel gebruikte in deze

thesis. De statistieken gegenereerd met behulp van deze stylesheet vinden

we hieronder terug:

MPEG-2 Video - Statistieken

Number of sequence headers (video sequences): 1

Number of GroupOfPictures 21

Number of Pictures: 300

Number of I Pictures: 21

Number of P Pictures: 80

Number of B Pictures: 199

In het volgende hoofdstuk bekijken we hoe we een BSDL-schema ontwer-

pen voor MPEG-2 Systems programmastromen. We komen nog terug op

MPEG-2 Video in prestatiemetingen.

44

Page 57: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 6

BSDL-schema voor MPEG-2

Systems Programmastromen

In dit hoofdstuk zullen we de specificatie van BSDL (hoofdstuk 3) toepassen

op de MPEG-2 Systems Syntax, meer bepaald programmastromen, die we

besproken hebben in hoofdstuk 2. Op die manier bekomen we een BSDL-

schema dat zal gebruikt worden om MPEG-2-Systems programmastromen te

beschrijven in een XML-bestand.

6.1 Startcodes

In het vorige hoofdstuk zagen we hoe startcodes opgebouwd werden uit een

prefix en een start code value. We hebben de startcodes meer in detail

besproken voor MPEG-2 Video in tabel 4.1. In Tabel 6.1 vinden we de

waarden van de start code value voor startcodes, gebruikt in de MPEG-2

Systems programmastroom multiplex.

Indien we in de bitstroom een startcode willen terugvinden dat het begin

aanduidt van een Pack (reeks van pakketten) dan zullen we moeten zoeken

naar (hexadecimaal) 0x00001BA, omdat BA de start code value is van de

pack start code.

45

Page 58: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

naam Start Code Valuepack start code BAsystem header start code BBprogram end code B9

Tabel 6.1: MPEG-2 Systems Startcodes

Belangrijk zijn de soorten PES-pakketten die we terugvinden in een pro-

grammastroom. Het soort pakket (video, audio, ...) wordt herkend via de

waarde van de start code value. De startcodes voor de belangrijkste PES

pakketten vinden we in Tabel 6.2.

PES Types Start Code ValuePSMapTable Packet BCPrivate1 Packet BDPadding Packet BEPrivate2 Packet BFAudio Packets C0 tot DFVideo Packets E0 tot EFReserved Packets F0-FEPSDirectory Packet FF

Tabel 6.2: MPEG-2 Systems PES Startcodes

MPEG-2 Systems definieert 16 startcodes voor Video pakketten en 32

voor Audio pakketten. Deze pakketten worden het belangrijkste onderdeel

in het ontwerpen van een demultiplexer in audio en video.

6.2 Datatype PacketPayloadType

Zoals in het vorige hoofdstuk zijn de datatypes b1 tot b16 belangrijk. Zie

hiervoor Figuur 4.1. Voor MPEG-2 Video was het zelf gemaakte datatype

PicturePayloadType van groot belang om de data van een beeld over te laten

en naar het volgende beeld te kunnen overschakelen. Bij MPEG-2 Systems

hebben we analoog nood aan zo’n datatype, genaamd PacketPayloadType.

De declaratie van dit type vinden we terug op Figuur 6.1.

46

Page 59: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/SCHEMAS/mpeg-2_simple_types.xsd

<?xml version="1.0" encoding="UTF-8" ?> - <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:bt="urn:mpeg:

mpeg21:2003:01-DIA-BasicDatatypes-NS" xmlns:bs0="urn:mpeg:mpeg21:2003:01-DIA-BSDL0-NS" xmlns:bs1="urn:mpeg:mpeg21:2003:01-DIA-BSDL1-NS" xmlns:bs2="urn:mpeg:mpeg21:2003:01-DIA-BSDL2-NS">

- <xsd:annotation>

<xsd:documentation>Simple Types for the MPEG-2 syntax.</xsd:documentation> </xsd:annotation>

<xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BasicDatatypes-NS" schemaLocation="BasicDatatypes.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL0-NS" schemaLocation="BSDL-0.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL1-NS" schemaLocation="BSDL-1.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL2-NS" schemaLocation="BSDL-2.xsd" />

<!-- *********************************************************************** --> <!-- --> <!-- Simple Types declaration --> <!-- --> <!-- *********************************************************************** -->

- <xsd:simpleType name="StartCodeType">

- <xsd:restriction base="xsd:hexBinary">

<xsd:length value="4" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="Stuffing">

<xsd:restriction base="bs0:fillByte" /> </xsd:simpleType>

- <xsd:simpleType name="PackPayloadType">

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<!-- packet start codes --> <bs2:startCode value="000001BC-000001FF" />

<!-- pack_start_code --> <bs2:startCode value="000001BA" />

<!-- program_end_code --> <bs2:startCode value="000001B9" />

</xsd:appinfo> </xsd:annotation>

</xsd:restriction> </xsd:simpleType>

- <xsd:simpleType name="VideoPayloadType">

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<bs2:startCode value="000001B7" /> </xsd:appinfo>

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/SCHEMAS/mpeg-2_simple_types.xsd (1 of 3)16/05/2005 16:30:42

Figuur 6.1: Datatype Packet Payload Type

Hier kunnen we zien hoe de extra data in een pakket zal worden “over-

geslaan” in de beschrijving en men in de bitstroom zal verder zoeken naar

de volgende start code van een pakket (0x000001BC-0x000001FF), van een

nieuw Pack (0x000001BA), of tenslotte eventueel het einde van de program-

mastroom, de program end code (0x000001B9).

6.3 MPEG-2 Systems BSDL-schema

6.3.1 Root Element: MPEG2Systems

Na het bepalen van de namespaces, het root element en de imports van

de verschillende andere benodigde schema’s, zullen we het BSDL-schema

voor MPEG-2 Systems ontwerpen. Op figuur 6.2 zien we het root element

MPEG2Systems waar de programmastroom dus in feite “begint”. We her-

kennen hier direct hoe we in BSDL de syntax van MPEG-2 Systems pro-

grammastromen, die we bestudeerden in hoofdstuk 2, modelleren. De pro-

grammastroom is een serie van “Packs” na elkaar, gevolgd door de Systems

End Code. Deze packs worden herkend door het bs2:ifNext-element met als

47

Page 60: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Figuur 6.2: Root element van het BSDL-schema voor MPEG-2 Systems

waarde de startcode van een Pack (0x000001BA).

6.3.2 Packs

Een MPEG-2 Systems Pack kunnen we verder ontleden in pakketten. Ie-

dere pack bestaat uit een packheader (waarin een optionele system header)

en uit een reeks pakketten. Deze pakketten kunnen video, audio, data, ...

zijn. Op Figuur 6.3 zien we een deel van het element Pack gedeclareerd. We

zien duidelijk de PackHeader en de verschillende soorten pakketten die mo-

gelijk zijn. Zoals we eerder al zagen, zijn er verschillende soorten startcodes

voor een PES-pakket, afhankelijk van het type (voor video, audio, data, ...).

Belangrijk zijn de 16 verschillende startcodes voor video en 32 startcodes

voor audio. Voor de audio van een DVD maken de verschillende producers

van films en DVD’s echter het gebruik van Private Pakketten, waarvoor er 2

startcodes gedefinieerd zijn. Voorbeelden van gebruik zijn Dolby Surround

waarbij men een 5.1 Surround System aanbiedt aan de gebruiker. Door deze

vrijheden werd MPEG-2 ook commercieel meest gebruikt. MPEG-2 Video

in combinatie met AC3 (Dolby Digital) in een programmastroom is de meest

gebruikte “versie” van een DVD. Als een DVD op je harde schijf zich be-

vindt, zal een .VOB bestand een programmastroom zijn. Daarom dat we

ook een programmastroom willen beschrijven in BSDL; een transportstroom

is commercieel veel minder interessant.

48

Page 61: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Figuur 6.3: Het Pack-element (gedeeltelijk)

6.3.3 PackHeader en SystemHeader

De PackHeader (het element in een Pack voor de reeks pakketten) bevat

allerlei flags en informatie vooral nodig voor synchronisatie tussen de ver-

schillende Packetised Elementary Streams. Als laatste element kan er een

SystemHeader in de bitstroom voorkomen (na de PackHeader, of als laatste

element van de PackHeader: dit is in feite hetzelfde). Deze optionele header

bevat nog extra informatie en verschillende flags voor synchronisatiedoelein-

den.

49

Page 62: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Figuur 6.4: Video Pakket element

50

Page 63: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

6.3.4 PES-pakketten

Op Figuur 6.4 zien we hoe een videopakket eruit ziet in ons BSDL-schema.

Voor alle andere pakketten is dit volledig analoog. Een PES-pakket bestaat

uit een pakket header en de eigenlijke payload (data) van de elementaire

stroom. Zoals we eerder zagen in hoofdstuk 2 wordt een elementaire stroom

opgedeeld in pakketten waarbij enkel een header wordt toegevoegd en de

data van de elementaire stroom sequentieel bij het pakket wordt toegevoegd.

6.3.5 PES-header

We hebben deze header uitgebreid besproken in hoofdstuk 2 aan de hand van

Figuur 2.7. Voor een syntax van de PES-header kan je terecht op het einde

van deze thesis.

Het volledige BSDL-schema voor MPEG-2 Systems vind je immers terug

in Bijlage E. De packetheader bijvoorbeeld vind je op het einde van de bijlage

terug.

6.3.6 Probleem met BSDL-software?

Een doel in deze thesis was ook om de juiste grens te bepalen tussen de PES

header en de eigenlijke data van het pakket (de data sequentieel genomen

uit een elementaire stroom). Zo konden we een elementaire stroom volledig

reconstrueren aan de hand van die data en zal een Video Elementaire Stroom

terug aan het schema voor MPEG-2 Video voldoen. Dit bepalen van de grens

tussen header en data in een PES-pakket is niet gelukt. Er zijn nochtans

veel manieren en mogelijkheden getest, waarbij een voor de hand liggend

voorbeeld te zien is op Figuur 6.5

51

Page 64: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/mpeg-2_systems.xsd

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ********************************** --> <!-- PacketHeader declaration --> <!-- *********************************** --> - <xsd:element name="PacketHeader">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="packet_start_code" type="mp2:StartCodeType" /> <xsd:element name="packet_length" type="bt:b16" /> <xsd:element name="skipbits_2" type="bt:b2" /> <xsd:element name="PES_scrambling_control" type="bt:b2" /> <xsd:element name="PES_priority" type="bt:b1" /> <xsd:element name="data_alignment_indicator" type="bt:b1" /> <xsd:element name="copyright" type="bt:b1" /> <xsd:element name="original_or_copy" type="bt:b1" /> <xsd:element name="PTS_DTS_flag_1" type="bt:b1" /> <xsd:element name="PTS_DTS_flag_2" type="bt:b1" /> <xsd:element name="ESCR" type="bt:b1" /> <xsd:element name="ES_rate" type="bt:b1" /> <xsd:element name="DSM_trick_mode" type="bt:b1" /> <xsd:element name="additional_copy_info" type="bt:b1" /> <xsd:element name="PES_CRC" type="bt:b1" /> <xsd:element name="PES_extension" type="bt:b1" /> <xsd:element name="PES_header_length" type="xsd:unsignedByte" />

<!-- ? Bug in Systems schema to define exact position of the beginning of the elementary stream ? -->

- <xsd:element name="Header_Payload">

- <xsd:simpleType>

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<bs2:length value="../mp2:PES_header_length" />

</xsd:appinfo> </xsd:annotation>

</xsd:restriction> </xsd:simpleType>

</xsd:element> </xsd:sequence>

</xsd:complexType> </xsd:element>

</xsd:schema>

file:///D|/2e Licentie/thesis/BDSL MPEG-2/DIA_BSDL_1_1_3/CONTENT/mpeg-2_systems.xsd (11 of 11)19/05/2005 3:44:59

Figuur 6.5: Bug in BSDL-software?

We hebben een element toegevoegd aan de PES header. Het tot dan

toe laatste element (PES Header Length) werd gebruikt om het byterange

type die bepaalde lengte mee te geven. Het element PES Header Length

geeft immers de lengte weer van de overige Header Data aanwezig in de

PES header. Dit zou dus betekenen dat we dit element kunnen gebruiken

om een exacte aantal bytes over te slaan en zo de grens te bepalen waar de

elementaire stroom begint. Deze constructie zien we op de figuur aan de hand

van het element Header Payload, dat een byteRange-type is en als lengte (bij

het attribuut value van element bs2:length) een XPath-expressie meekrijgt

dat eigenlijk gewoon het vorige element van deze PES-header beschouwt:

../mp2:PES header length.

Om een nog onverklaarbare reden wordt tijdens de BintoBSD operatie

een oneindige lus gegenereerd bij het parsen van dit element. Zoals we later

zullen zien is het Xpath-mechanisme in de BSDL-software niet zo optimaal

geprogrammeerd. Wellicht kan deze oneindige lus daarvan een gevolg zijn

maar dat staat niet vast.

52

Page 65: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 7

Aanpassen van MPEG-2

Systems

Met behulp van het schema dat we gedeeltelijk uitgelegd hebben in het

vorige hoofdstuk is het mogelijk om XML-beschrijvingen te genereren van

programmastromen gecodeerd volgens de MPEG-2 Systems standaard. Dit

XML-bestand kon men dan aanpassen via een XSLT transformatie, gebruik

makend van de Saxon XSLT Processor. In dit hoofdstuk zullen we zien hoe

we via BSDL een demultiplexer ontwerpen in Audio en Video.

7.1 Demultiplexer

7.1.1 Weglaten van PES Audiopakketten

Via BSDL kunnen we op een eenvoudige manier een demultiplexer ontwer-

pen voor een MPEG-2 programmastroom. We zullen zien hoe we bepaalde

soorten pakketten kunnen weglaten om zo een soort “filter” te bekomen die

bijvoorbeeld audiopakketten wegfiltert uit de programmastroom.

Zoals we kunnen zien op Figuur 7.1 laten we in de programmastroom de

audiopakketten weg. Indien een pack dus een PES audiopakket bevat, zal dat

pack na uitvoering van de transformatie het audiopakket niet meer bevatten.

53

Page 66: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

V V A V V A D V V A

PackPack

Pack

V V V V D V V

PackPack

Pack

V A DPES Videopakket PES Audiopakket PES Datapakket

Figuur 7.1: Demultiplexer: weglaten audiopakketten

Dit mechanisme was via BSDL ook weer via een eenvoudige editeerbewerking

te realiseren. Figuur 7.2 toont hoe de stylesheet (XSLT) om audiopakketten

weg te laten er gedeeltelijk uitziet.

Op eenvoudige wijze kunnen we andere pakketten laten wegvallen uit een

programmastroom. Daartoe hoeven we enkel het woord AudioPacket te ver-

gangen door VideoPacket (om een audiostroom te verkrijgen), PrivatePacket,

... Na de transformatie bekomen we dus een aangepaste XML-beschrijving

zonder audiopakketten in de programmastroom. De resulterende bitstroom

(BSDToBin) zal dan enkel een videostroom (in pakketten) bevatten.

Merk op dat Audiopakketten (zoals MPEG-2 Systems ze definieert) meest-

al niet voorkomen bij een recente DVD. Meestal zal de audio AC3 (Dolby Di-

54

Page 67: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<?xml version="1.0" ?> <!-- Be careful with namespaces! --> - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:

mp2="MPEG2" version="1.0"> <xsl:output method="xml" indent="yes" />

<!-- Match all: default template --> - <xsl:template name="tplAll" match="@*|node()">

- <xsl:copy>

<xsl:apply-templates select="@*|node()" /> </xsl:copy>

</xsl:template> <!-- Match root element --> - <xsl:template match="mp2:MPEG2Systems">

- <xsl:copy>

<xsl:apply-templates select="@*|node()" /> </xsl:copy>

</xsl:template> <!-- Do nothing for processing instructions --> <xsl:template match="processing-instruction()" />

- <xsl:template match="mp2:packet[count(mp2:AudioPacket) = 1]">

<!-- Nothing ! --> </xsl:template>

</xsl:stylesheet>Figuur 7.2: Demultiplexer: XSLT stylesheet

gital) of Dolby Surround zijn. Daardoor zullen we voor de demultiplexer geen

audiopakketten maar andere pakketten moeten weglaten. De audiostandaard

AC3 wordt in een programmastroom opgeslagen als Private1-pakketten. Als

we de XSLT aanpassen en “AudioPacket” veranderen door “Private1Packet”

zullen we een DVD met AC3 audio kunnen demultiplexeren.

Deze operatie geeft wel enkele neveneffecten bij sommige decoders. Som-

mige bestanden kunnen afgespeeld worden met Power DVD, andere met Nero

Showtime en nog andere met Windows Media Player. Dit is wellicht te wijten

aan de foutgevoeligheid van deze softwarepakketten. Wellicht ligt de oorzaak

ervan aan het feit dat er in de packheaders en systemheaders informatie staat

dat er nog een audiostroom aanwezig is in de programmastroom maar dit in

feite niet meer zo is na de demultiplex-operatie.

55

Page 68: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

7.1.2 Extrapoleren van de elementaire stroom

Een tweede stap zou erin bestaan de elementaire stromen te reconstrueren

uit de programmastroom (dat enkel video PES-pakketten bevat). Dit pro-

bleem hebben we al gedeeltelijk besproken op het einde van hoofdstuk 6.

Daarin zagen we dat de BSDL-software een oneindige lus genereerde toen we

probeerden de exacte positie te bepalen tussen header en data van een PES-

pakket. Als we die exacte grens konden bepalen, zouden we de elementaire

stroom kunnen reconstrueren uit de verschillende PES Videopakketten. Dit

scenario die we voor ogen hadden vind je terug op Figuur 7.3.

V V V V V V

PackPack

Pack

PES Payload

PES Payload

…. Elementaire videostroom ….

V

PES Payload

Figuur 7.3: Demultiplexer: reconstrueren van de elementaire stroom

56

Page 69: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

We zien hoe de PES-pakketten afzonderlijk worden behandeld. Van ie-

der PES-pakket bepalen we de grens van de header en van de payload (data

van de elementaire stroom). De payloads van de verschillende PES-pakketten

voegen we dan samen (concateneren) om zo de Video Elementaire Stroom te-

rug te bekomen. Deze elementaire stroom zou dan bovendien ook “voldoen”

aan het MPEG-2 Video BSDL-schema dat we ontworpen hebben. De ver-

schillende transformaties zoals aspect ratio verandering, weglaten van beel-

den, ... zouden dan bovendien kunnen toegepast worden op deze stroom.

Dit scenario lijkt in de praktijk eenvoudig te verwezenlijken, zoals we

besproken hebben op het einde van het vorige hoofdstuk. De BSDL-software

zorgde dus voor een oneindige loop toen we een extra element in de PES

header toevoegden (type byterange, met als lengte de waarde van het vorige

element: PES Header Length). Deze operatie BinToBSD mislukte spijtig

genoeg om een nog duistere reden.

7.2 Statistieken

<?xml version="1.0" ?> <!-- Be careful with namespaces! --> - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:

mp2="MPEG2" version="1.0"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" /> - <xsl:template match="/mp2:MPEG2Systems">

- <html>

- <head>

<title>MPEG-2 Systems - Statistics</title> </head>

- <body>

<h1>MPEG-2 Systems - Statistics</h1> Number of packs:

<xsl:value-of select="count(./mp2:Pack)" /> <br />

Number of pack headers: <xsl:value-of select="count(./mp2:Pack/mp2:PackHeader)" /> <br />

Number of system headers: <xsl:value-of select="count(./mp2:Pack/mp2:PackHeader/mp2:SystemHeader)" /> <br /> <hr />

Number of PSMapTable packets: <xsl:value-of select="count(./mp2:Pack/mp2:packet/mp2:PSMapTable)" /> <br />

Number of Private1 packets: <xsl:value-of select="count(./mp2:Pack/mp2:packet/mp2:Private1Packet)" /> <br />

Number of Padding packets: <xsl:value-of select="count(./mp2:Pack/mp2:packet/mp2:PaddingPacket)" /> <br />

Number of Private2 packets: <xsl:value-of select="count(./mp2:Pack/mp2:packet/mp2:Private2Packet)" /> <br />

Number of audio packets: <xsl:value-of select="count(./mp2:Pack/mp2:packet/mp2:AudioPacket)" /> <br />

Number of video packets: <xsl:value-of select="count(./mp2:Pack/mp2:packet/mp2:VideoPacket)" /> <br />

Number of Reserved0 packets: <xsl:value-of select="count(./mp2:Pack/mp2:packet/mp2:Figuur 7.4: MPEG-2 Systems Statistieken: Stylesheet

Van een gegeven bitstroom kan men gemakkelijk statistieken verzame-

len door bijvoorbeeld het aantal elementen te tellen in de XML-beschrijving.

Op Figuur 7.4 zien we een klein extract van de stylesheet waar een “count”

operatie gebeurt om het aantal video- en audiopakketten te bepalen. Na

57

Page 70: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

uitvoering van deze stylesheet (die een HTML-pagina als output heeft) be-

komen we een aantal statistieken. Deze statistieken gegenereerd met behulp

van deze stylesheet vinden we hieronder terug:

MPEG-2 Systems - Statistieken

Number of packs: 3506

Number of pack headers: 3506

Number of system headers: 0

Number of PSMapTable packets: 0

Number of Private1 packets: 574

Number of Padding packets: 45

Number of Private2 packets: 88

Number of audio packets: 0

Number of video packets: 2971

Hier zien we een aantal statistieken van een kort deel van een .vob-bestand

(DVD). We bemerken onder andere heel wat videopakketten, maar ook veel

Private1-pakketten (AC3). Verder vinden we ook nog een aantal Padding

-en Private2-pakketten terug. Een Private2-pakket kan bijvoorbeeld de on-

dertitels bevatten, al zijn we dit niet zeker.

58

Page 71: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 8

Performantiemetingen van

BSDL op MPEG-2

Tot nu toe hebben we gezien hoe we een schema opstellen, meer bepaald voor

de MPEG-2 Video en MPEG-2 Systems standaard. We voerden ook enkele

transformaties door met behulp van XSLT, om zo via BSDtoBin een nieuwe

aangepaste bitstroom te verkrijgen. Deze theoretische concepten voerden we

in de realiteit uit door middel van de parsers BinToBSD en BSDToBin, en

met behulp van de Saxon XSLT en XQuery Processor (voor de transforma-

ties).

Zijn deze concepten “bruikbaar” in de praktijk. Met “bruikbaar” bedoe-

len we een antwoord op de vraag: “Is het mogelijk een XML-beschrijving aan

te passen en een nieuwe bitstroom te genereren in real-time met de huidige

BSDL-referentiesoftware?”. “Real-time” wordt gehaald als de tijd nodig voor

de transformatie en het genereren van een nieuwe bitstroom niet de lengte

van de bitstroom overschrijdt. De uitvoeringstijd voor BintoBSD is iets min-

der belangrijk omdat dit enkel eenmaal hoeft te gebeuren en de beschrijving

wordt dan opgeslaan naast de bitstroom.

De metingen werden uitgevoerd op een PC met een Intel Pentium IV 3.2

Ghz processor (HyperThreading) en 1GB RAM. Het besturingssysteem dat

gebruikt werd is Windows XP Professional (Service Pack 2). Er werd gebruik

59

Page 72: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

gemaakt van de Java 2 Standard Edition, versie 1.5.0, van Sun Microsystems

als Java virtuele machine.

8.1 Performantie van BinToBSD

8.1.1 Lange MPEG-2 Systems programmastroom

We hebben de performantieresultaten van verschillende lange programma-

stromen samengevat in Tabel 8.1.

seq duur # beelden tijd(s) Grootte(kB) XML(kB) ZIP(kB) Factor(%) RAM(Mb)S1 08:47 15802 567 237796 121189 1837 98 800+S2 04:24 7905 314 117824 90457 1249 99 600+S3 02:56 5265 204 78520 60271 833 99 500+S4 02:12 3957 160 59042 44989 627 99 400S5 01:45 3156 127 47124 36168 501 99 350S6 01:28 2646 105 39526 30334 420 99 320S7 01:06 1986 80 29700 22790 316 99 240S8 00:53 1575 64 23580 18091 251 99 180S9 00:44 1320 55 19790 15182 211 99 160

Tabel 8.1: Statistieken BintoBSD MPEG-2 Systems

Uitvoeringstijd

De uitvoeringstijd van de BinToBSD operatie is heel lang. Voor een program-

mastroom van ongeveer 9 minuten afspeeltijd hebben we een uitvoeringstijd

van 567 seconden, ofwel 9.5 minuten. Een algemene regel af te leiden van de

tabel is dat de operatie langer duurt dan de multimediastroom zelf (afspeel-

tijd).

Figuur 8.1 toont aan dat de uitvoeringstijd lineair stijgt in verhouding

met het aantal beelden (frames).

60

Page 73: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Uitvoeringstijd BintoBSD (MPEG-2 Systems)

0

100

200

300

400

500

600

0 2000 4000 6000 8000 10000 12000 14000 16000 18000

aantal frames

uitv

oerin

gstij

d (s

)

MPEG-2

Figuur 8.1: Uitvoeringstijd BinToBSD t.o.v. aantal beelden

Grootte van de XML-beschrijving

De grootte van de XML-beschrijvingen is ook “impressionant” te noemen.

Een XML-bestand van 120 MB voor een videostroom van 238 MB (en slechts

9 minuten lengte!) is een enorm groot bestand. Wanneer we deze bestanden

comprimeren met een standaard ZIP algoritme bekomen we opmerkelijke

resultaten. Een compressiefactor van 99% wordt bij iedere XML-beschrijving

bereikt. Dit komt door de oneindig vele herhalingen van elementen in het

XML-bestand zoals bijvoorbeeld de elementen PacketHeader en Pack.

Op Figuur 8.2 stellen we vast dat de grootte van de XML-beschrijvingen

logaritmisch stijgt in verhouding met het aantal beelden (frames).

61

Page 74: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Grootte beschrijving t.o.v. aantal beelden

0

20

40

60

80

100

120

140

0 5000 10000 15000 20000Aantal frames

Gro

otte

XM

L-B

esch

rijvi

ng (M

b)

MPEG-2

Figuur 8.2: Grootte van de XML-beschrijving t.o.v. aantal beelden

Geheugengebruik

Het geheugengebruik speelt ook een heel grote rol in de performantie van

BinToBSD-operaties. Voor de langste 3 sequenties (van 9 minuten, 4,5 minu-

ten en 3 minuten) was het programma waarmee we werkten voor de metingen

(JProfiler) zelfs niet in staat nog het geheugengebruik vast te leggen. Door

taakbeheer van Windows in het oog te houden hebben we toch een schatting

genoteerd in de tabel van het geheugengebruik (zonder gebruik van het JPro-

filer programma). De langste sequentie van 9 minuten had maar liefst meer

dan 800 Mb RAM geheugen nodig om een XML-beschrijving te genereren.

Dit is gigantisch veel, als men bedenkt om met het Systems BSDL-schema

een DVD te laten beschrijven. Dit zou dan een geheugen nodig hebben van

meer dan 10 Gb?

De reden voor deze “bottleneck” is de BSDL-referentiesoftware zelf, meer-

62

Page 75: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

bepaald de werking van het XPath-mechanisme. Omdat er soms “vorige”

elementen uit de beschrijving nodig zijn om de bitstroom verder te parsen,

wordt de volledige boom opgeslaan in het geheugen, wat voor een enorme

overhead zorgt. Telkens zo’n expressie moet berekent worden, zal men een

soort “dubbel” maken van de “tot-nu-toe-verkregen”-beschrijving en de be-

rekening daarop doorvoeren. Aan de BSDL-software wordt binnen Multime-

dialab van de Universiteit Gent momenteel gewerkt. Men verwacht dat, met

deze geplande optimalisaties, een betekenend verschil in geheugengebruik zal

opgemeten worden.

Op Figuur 8.3 zien we het verloop van het geheugengebruik van de JVM

tijdens het parsen van sequentie S6.

Heap telemetry graph

Heap telemetry graph

Session: long mpeg-2 systems stream

Time of export: Saturday, May 7, 2005 4:44:41 PM CEST

JVM time: 19:25

Vrij geheugen Gebruikt geheugen

file:///D|/2e Licentie/THESIS DVD/Performantiemetingen/BinToB...ems (long sequence)/Chevy one sixth/Heap_telemetry_graph.html30/05/2005 2:17:43

Figuur 8.3: Geheugengebruik BinToBSD bij sequentie S6

63

Page 76: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

8.1.2 Korte MPEG-2 Video bitstroom

We hebben dezelfde metingen uitgevoerd, nu eens op korte sequenties van

MPEG-2 Video. De resultaten vind je terug in Tabel 8.2.

seq duur(s) # beelden tijd(s) Grootte(kB) XML(kB) ZIP(kB) Factor(%) RAM(Mb)V1 10,0 300 14,3 6104 217 6,85 97 3,8V2 5,4 162 7,2 3317 119 4,28 96 2,8V3 3,4 102 4,6 2096 76 3,16 96 2,2V4 2,9 87 4,0 1791 65 2,88 96 2,2V5 2,4 72 3,4 1486 55 2,59 95 2V6 1,9 57 2,8 1181 44 2,30 95 1,8V7 1,4 42 2,2 876 33 2,01 94 1,5

Tabel 8.2: Statistieken BintoBSD MPEG-2 Video

Bij enkele metingen met korte videosequenties kwamen we tot ongeveer

dezelfde conclusies. De uitvoeringstijd van BinToBSD lag opnieuw hoger

dan de afspeeltijd van de videostroom zelf. De XML-beschrijving was heel

wat kleiner dan de bitstroom, terwijl bij MPEG-2 Systems de beschrijvingen

ongeveer 2/3 van de grootte van de bitstroom innamen. Dit komt door-

dat een programmastroom veel meer “pakketten” (element Packet) bevat

dan de videostroom “beelden” (element Picture) bevat. Het MPEG-2 Video

BSDL-schema presteert dus gevoelig beter qua grootte van de beschrijving.

De compressiefactor van de beschrijving ligt opnieuw boven de 95%. Het

geheugengebruik stijgt bovendien lineair met het aantal frames.

8.2 Performantie van de transformaties

We hebben enkele resultaten samengevat in Tabel 8.3.

seq transformatie # beelden tijd(s) geheugengebruik(Mb)S2 Weglaten Audio 7905 50s 400-S4 Weglaten Audio 3957 29s 256-V1 Weglaten B 300 2s 3-

Tabel 8.3: Enkele XSLT transformaties met behulp van Saxon

64

Page 77: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Uit de tabel volgt dat de transformaties relatief vlot worden uitgevoerd en

bijna de helft minder RAM-geheugen nodig hebben dan de binToBSD ope-

ratie op dezelfde sequentie. Het weglaten van B-beelden (Picture-elementen

in de XML-beschrijving) duurt ongeveer even lang als het weglaten van au-

diopakketten (Packet-elementen in de XML-beschrijving) bij een program-

mastroom. De grootste tijd van de transformaties, die werden uitgevoerd

met behulp van de Saxon XSLT en XQuery Processor, wordt dan nog eens

ingenomen door de I/O-operaties bij het uitschrijven van de resulterende

aangepaste XML-beschrijving.

8.3 Performantie van BSDToBin

8.3.1 Lange MPEG-2 Systems programmastroom

We hebben de performantieresultaten van verschillende lange programma-

stromen voor BSDToBin samengevat in Tabel 8.4. Hierbij hebben we de

verkregen XML-beschrijving terug omgezet naar de originele bitstroom (zon-

der dus enige aanpassing te doen aan de beschrijving).

seq duur # beelden tijd(s) RAM(Mb)S4 02:12 3957 43,5 600+S5 01:45 3156 28,9 500+S6 01:28 2646 24,9 430S7 01:06 1986 17,6 340S8 00:53 1575 14,9 260S9 00:44 1320 12,7 220

Tabel 8.4: Statistieken BSDToBin MPEG-2 Systems

De uitvoeringstijd van BSDToBin is opvallend lager dan van BinToBSD,

wat vooral te wijten is aan het feit dat BSDToBin immers geen behoefte heeft

aan een XPath-mechanisme om XPath-expressies te evalueren. Een sequentie

met afspeeltijd van ongeveer 2 minuten zal een 40 seconden duren om terug

te genereren. Dit is opvallend beter dan de BinToBSD-operatie op dezelfde

sequentie die 160 seconden duurde. Het geheugengebruik bij deze operatie

65

Page 78: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

stijgt echter in vergelijking met de BinToBSD-operatie, wat voor nog grotere

getallen zorgt. Sequentie S4 gebruikt maar liefst meer dan 600 Mb RAM om

terug gegenereerd te worden. Deze parser kan men dus wellicht ook verder

optimaliseren. Ook aan dit probleem wordt gewerkt binnen Multimedialab.

Op Figuur 8.4 zien we het verloop van het geheugengebruik van de JVM

tijdens de BSDToBin-operatie van sequentie S6. Deze figuur kan men verge-

lijken met Figuur 8.3 die het geheugengebruik tijdens de BinToBSD-operatie

voorstelt.

Heap telemetry graph

Heap telemetry graph

Session: New session

Time of export: Monday, May 30, 2005 12:24:44 AM CEST

JVM time: 26:37

Vrij geheugen Gebruikt geheugen

file:///D|/2e Licentie/THESIS DVD/Performantiemetingen/BSDTo...ms (long sequence)/Chevy one sixth/Heap_telemetry_graph.html30/05/2005 2:19:23

Figuur 8.4: Geheugengebruik BSDToBin bij sequentie S6

66

Page 79: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

8.3.2 Korte MPEG-2 Video bitstroom

We hebben dezelfde metingen uitgevoerd, nu eens op korte sequenties van

MPEG-2 Video. De resultaten vind je terug in Tabel 8.5.

seq duur(s) # beelden tijd(s) RAM(Mb)V1 10,0 300 1,5 4,0V2 5,4 162 1,2 3,0V3 3,4 102 1,0 2,2V4 2,9 87 0,9 2,0V5 2,4 72 0,9 2,0V6 1,9 57 0,8 2,0V7 1,4 42 0,7 2,0

Tabel 8.5: Statistieken BSDToBin MPEG-2 Video

Uit deze resultaten kunnen we ongeveer dezelfde conclusies halen. BSD-

ToBin presteert heel wat beter qua uitvoeringstijd maar niet qua geheugen-

gebruik.

67

Page 80: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

8.4 Besluit

Het grote geheugengebruik vormt een grote “bottleneck” in de huidige BSDL-

referentiesoftware. De grote uitvoeringstijd van de BinToBSD-operatie is

ook noemenswaardig, al is dit een minder vervelend probleem aangezien de

BinToBSD-operatie slechts een keer hoeft te gebeuren waarbij de resulterende

XML-beschrijving wordt opgeslagen naast de bitstroom zelf.

Om grote programmastromen aan te passen in real-time zal er veel re-

kenkracht voor nodig zijn met de huidige BSDL-software. Door enkele op-

timalisaties kan men vermoedelijk een veel beter geheugengebruik realiseren

bij beide operaties. Voorlopig lijkt het real-time aanbieden van multimediale

data met behulp van aanpassingen via BSDL moeilijk realiseerbaar omwille

van het enorme geheugengebruik tot bijna 1 GB RAM voor een sequentie

van ongeveer 9 minuten afspeeltijd.

Toch blijft de tijd nodig voor de transformatie en de BSDToBin-operatie

onder de tijd van de sequentie zelf. Indien men dus enkel het geheugengebruik

tracht te optimaliseren (zonder neveneffecten op de uitvoeringstijd) zouden

we ook lange sequenties in real-time kunnen aanpassen.

68

Page 81: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 9

H.264/AVC in een MPEG-2

programmastroom

Een nieuw formaat voor de DVD duikt op. De “nieuwe” codec H.264/AVC

(MPEG-4 deel 10) kan in een programmastroom ondergebracht worden en

zo zou deze codec onder meer gebruikt worden op HD-DVD (High Definition

DVD). De H.264-technologie zorgt ervoor dat High Definition-video’s, kort-

weg HD-video’s genoemd, met een resolutie van 1280x720 en 1920x1080 ge-

comprimeerd kunnen worden naar een datastream van respectievelijk 8Mbps

of 10Mbps. Het nu nog veelgebruikte MPEG2-formaat (voor video) heeft

voor dezelfde kwaliteit een datastream van 15Mbps nodig. Vele bedrijven

hebben al maatregelen genomen omdat men verwacht dat deze nieuwe tech-

nologie een bloeiende toekomst voor zich heeft. Bedrijven als Apple, Main-

Concept, Ahead Software (Nero), Microsoft en ATI hebben zich al verdiept

in de H.264-wereld. ATI zal bijvoorbeeld zorgen voor een hardwarematige

H.264 ondersteuning.

Een nadeel van de verbeterde compressiemethode van H.264/AVC is dat

veel rekenkracht benodigd is voor het decoderen en dat ondersteuning van

de grafische hardware hard nodig is om beelden vloeiend weer te geven. Het

Canadese ATi heeft al laten weten toekomst te zien in HD-video als er ge-

bruikgemaakt zou worden van speciale hardware, omdat de huidige hardware

69

Page 82: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

niet voldoende rekenkracht kan leveren. Op dit moment biedt ATi al video-

kaarten aan met hardwarematige ondersteuning van het MPEG4-formaat.

Die berekeningen worden uitgevoerd door ALU’s van pixel processors bin-

nen een videochip. Of de H.264-ondersteuning ook uitgevoerd zal worden

via een extra videochip of dat dit zal gebeuren via speciale instructies op de

bestaande chips, is nog niet bekend.

Een manier om H.264/AVC stromen, meer algemeen MP4-stromen, onder

te brengen in een MPEG-2 programmastroom vinden we terug op Figuur 9.1.

Deze programmastroom bestaat uit een Object Descriptor (OD) stroom, een

Scene Description stroom (SD - BIFS command - cfr. MPEG-4 XMT), een

BIFS-Anim stroom en een IPMP-stroom. Alle stromen zijn gemultiplexeerd

in een FlexMux stroom.

BIFS staat voor Binary Format for Scene Description, een soort “taal”

waarin men scenes kan beschrijven via een boomstructuur. Object Descrip-

tors zijn “toegangspunten” tot MPEG-4 data. Elementary Stream Descrip-

tors zijn onderdelen van de Object Descriptor en zorgen voor de identificatie

van een elementaire stroom (video, audio, ...). Een IPMP-stroom zorgt voor

IP-adres-beveiliging.

MPEG-4 XMT (eXtensible Textual Format) is gebaseerd op W3C XML

en is in feite een raamwerk voor de beschrijving van audiovisuele scenes. Een

SD-stroom (ofwel BIFS-stroom) kan men dus beschrijven met behulp van

XMT.

Doordat MPEG-4 XMT ook een extensie vormt op W3C XML, vormt

zich de vraag of BSDL en MPEG-4 XMT niet gecombineerd kunnen worden

voor bijvoorbeeld het beschrijven van een programmastroom die audiovisuele

scenes bevat (beschreven met MPEG-4 XMT). Een voorbeeld is om via BSDL

audiovisuele scenes te veranderen of toe te voegen aan de Object Descriptor

Stream, vervat in de programmastroom.

Wat volgt is een kleine “handleiding” om aan de ontvangerszijde een

programmastroom met H.264/AVC als video, te interpreteren en decoderen.

Deze programmastroom zal een Program Stream Map moeten bevatten; dit

is een PES-pakket met een startcode van 0x000001BC.

70

Page 83: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

ISO/IEC 13818-1 : 2000 (E)

ITU-T Rec. H.222.0 (2000 E) 151

Objector Descriptor Stream

14496-1 FlexMux Stream

FMC = 0x01BIFS-Command Stream

FMC = 0x02OD Stream

PES Packet: stream_id = '1111 1011'

MPEG-2 Program Stream

PES Packet: stream_id = '1011 1100' PES Packet: stream_id = '1111 1011'

Program Stream Map

Initial Object Descriptor

FMC descriptor

14496-1 FlexMux Stream

FMC = 0x03BIFS_Anim Stream

FMC = 0x04IPMP Stream

Figure R.1 – Example of ISO/IEC 14496 content in a Program Stream

ObjectDescriptor { ES_Descriptor { ES_ID = 0x0013 streamType = "Visual stream" specificInfo = "BIFS-Anim" }}ObjectDescriptor { ES_Descriptor { ES_ID = 0x0014 streamType = "IPMP stream" }}

...ES_Descriptor { ES_ID = 0x0011 streamType = "SD stream" specificInfo = "BIFS-com"}ES_Descriptor { ES_ID = 0x0012 streamType = "OD stream"}...

...program_stream_info_length1st_descriptor_loop { IOD_descriptor {}}elementary_stream_map_length{ stream_type = 0x12 elementary_stream_id = '1111 1011' elementary_stream_info_length 2nd_descriptor_loop { FMC_descriptor {} }}CRC_32

(ES_ID, FMC) = (0x0011, 0x01)(ES_ID, FMC) = (0x0012, 0x02)(ES_ID, FMC) = (0x0013, 0x03)(ES_ID, FMC) = (0x0014, 0x04)

Figuur 9.1: H.264/AVC in een MPEG-2 programmastroom

• Haal de Program Stream Map uit het PES-pakket.

• Identificeer de Initial Object Descriptor (IOD) in de eerste descriptor

loop.

• Identificeer de ES-IDs (Elementary Stream IDs) van de Object Descrip-

tor, de Scene Description en andere stromen, beschreven in de IOD.

• Indien nodig, haal de SL Descriptor en de FMC (Flex Mux) Descriptor

in de tweede descriptor loop voor Elementary Stream IDs 0xFA en

0xFB op.

71

Page 84: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

• Indien nodig, genereer van deze descriptors een Stream Map Table

tussen ES-IDs en de daarmee verbonden elementary stream ids in het

FlexMux kanaal.

• Identificeer de OD stroom (Object Descriptor) gebruik makende van

zijn ES-ID en de Stream Map Table.

• Identificeer andere stromen beschreven in de IOD gebruik makende van

hun ES-ID en de Stream Map Table.

• Houdt continu de OD stroom (Object Descriptor) in de gaten en iden-

tificeer ES-IDs van bijkomende stromen.

• Identificeer deze bijkomende stromen gebruik makende van hun ES-ID

en de Stream Map Table.

Met in het vooruitzicht de opkomst van de HD-DVD zullen we meer en

meer in contact komen met H.264/AVC-stromen. De HD-DVD bezit een

opslagcapaciteit van 20GB (single layer) met een doorvoersnelheid tot 36

Mbit/s, terwijl de huidige DVD 4.7 GB kan bevatten met een doorvoer-

snelheid tot 11 Mbit/s. Aangezien MPEG-4 videocodering mogelijk is bij

HD-DVD’s, zijn velen er nu al van overtuigd dat de H.264-videocodering

voor een nieuwe generatie DVD’s zal zorgen. Momenteel concurreert de HD-

DVD nog met een andere nieuwe technologie, genaamd Blu-Ray, dat op dit

moment (nog) geen support biedt voor MPEG-4 videocodering.

72

Page 85: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Hoofdstuk 10

Besluit

In deze thesis zochten we naar de mogelijkheden van BSDL op de MPEG-2

standaard, dat commercieel de meest succesvolle MPEG-standaard is, om-

wille van de brede waaier aan toepassingen zoals de DVD en HDTV.

In een eerste deel construeerden we een BSDL-schema voor MPEG-2 Vi-

deo dat een videosequentie (in MPEG-2 Video gecodeerd uiteraard) kon be-

schrijven tot op het niveau van de afzonderlijke beelden. Deze verkregen

beschrijvingen konden we vervolgens door middel van eenvoudige editeerbe-

werkingen aanpassen aan de hand van XSLT-transformaties. We voerden een

aantal “transformaties” uit op zo’n videosequenties, waarbij de belangrijkste,

het weglaten van B-beelden, temporele schaalbaarheid aantoont bij MPEG-2

Video.

Als tweede onderdeel bouwden we een BSDL-schema op voor de MPEG-2

Systems standaard, meer bepaald de programmastroom. Hierbij zagen we

dat we via BSDL relatief gemakkelijk bepaalde soorten pakketten konden

weglaten om zo een demultiplexer te verkrijgen. Zoals al vermeld, kan deze

demultiplexer nog verbetert worden om de elementaire stromen te reconstru-

eren uit de pakketgebaseerde programmastroom.

Met behulp van het ontworpen BSDL-schema voor een programmastroom

is het theoretisch mogelijk om een volledige DVD (.vob bestand) te beschrij-

ven. Het zou dan interessant zijn om de BSDL-beschrijving bijvoorbeeld te

73

Page 86: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

verrijken met informatie over de posities van de hoofdstukken van een DVD,

of met een transformatie een bepaald hoofdstuk te selecteren, enzoverder...

In enkele performantiemetingen was het duidelijk dat de BSDL-referentie-

software nog heel wat geoptimaliseerd kon worden. Het geheugengebruik was

enorm bij beide operaties (binToBSD en BSDTobin), terwijl de uitvoerings-

tijd bij de BSDToBin-operatie binnen aanvaardbare normen bleef. Real-

time bitstromen aanpassen zou dus voor kleine videosequenties zeker geen

probleem mogen zijn. Voor grote bitstromen (en de beschrijving van een

volledige DVD in het bijzonder) is er de barriere van het geheugengebruik en

de trage BinToBSD-operatie.

Men zou beide BSDL-schema’s relatief eenvoudig verder kunnen uitbrei-

den door dieper in de syntax van de specificatie te duiken. Men moet dan

wel rekening houden met de toenemende grootte van de beschrijvingen. Voor

MPEG-2 Video kunnen we dan bijvoorbeeld tot op het (macro)blok-niveau

gaan parsen en enkele details in verband met de kleuren van de pixels pro-

beren te beschrijven.

Door het toenemende gebruik van H.264/AVC-videocodering kan men

ervoor zorgen om via BSDL ook beschrijvingen voor bijvoorbeeld de nieu-

we HD-DVD’s (met H.264 videocodering) te genereren. Een interessant

onderzoek zou dan kunnen liggen in het combineren van MPEG-4 XMT

(scenebeschrijving) en MPEG-21 BSDL Schema (bitstroombeschrijving), die

beide afstammen van het W3C XML Schema.

74

Page 87: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Bijlage A

Gebruik van de Thesis DVD

A.1 Overzicht

Op de DVD-ROM, behorende bij deze thesis, vinden we verschillende mappen

terug met volgende inhoud:

• de bestudeerde (gelezen) papers

• de bestudeerde standaarden

• de ontworpen BSDL-schema’s en demo’s

• de gebruikte tools

• wat bijkomende informatie en hulpbestanden

• de thesispresentatie

• de thesis in latex formaat

• de uitgevoerde performantiemetingen

75

Page 88: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

A.2 Resultaten: Demo’s

In de map BSDL Schema’s en Demo’s vind je de belangrijkste praktische

resultaten terug van het werk dat we besproken hebben in deze thesis, zoals

de ontworpen BSDL-schema’s. In de map Demo’s tref je de verschillende

aanpassingen aan videostromen en programmastromen aan.

In de map ./BSDL Schema’s en Demo’s/Demo’s/MPEG-2 Video/ vinden

we drie submappen (aspect ratio, statistieken en weglaten beelden) waar-

in de demo’s staan van MPEG-2 Video. Klik op de verschillende video-

stromen (.mpg) om ze te bekijken in bijvoorbeeld Windows Media Play-

er. Analoge opmerkingen gelden ook voor de map ./BSDL Schema’s en

Demo’s/Demo’s/MPEG-2 Systems/ waar de demo’s voor programmastro-

men zich bevinden.

Als voorbeeld navigeren we naar de map ./BSDL Schema’s en Demo’s/

Demo’s/MPEG-2 Systems/Demultiplexer. Daar vinden we drie videostromen

terug: een originele programmastroom, de programmastroom zonder audio

en de programmastroom zonder video. Deze laatste twee sequenties werden

uiteraard bekomen door de demultiplexer via BSDL. Speel de bestanden

bijvoorbeeld af met Windows Media Player.

A.3 BinToBSD, BSDToBin en XSLT Demo’s

Je kan de operaties ook zelf doorvoeren als je de Java Runtime Environment

versie 1.5.0 of later hebt staan op je computer.

Navigeer daartoe naar de map ./BSDL Schema’s en Demo’s/binToBSD

en BSDToBin demo’s/CONTENT/MPEG-2. We zien dan deze vier sub-

mappen:

• MPEG-2 Systems BinToBSD : map met demo’s om de binToBSD-

operaties uit te voeren op programmastromen.

• MPEG-2 Video BinToBSD : map met demo’s om de binToBSD-operaties

uit te voeren op MPEG-2 videostromen.

76

Page 89: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

• XSLT Transformaties Systems : map om de stylesheets toe te passen

en BSDtoBin-operaties uit te voeren op programmastromen.

• XSLT Transformaties Video : map om de stylesheets toe te passen en

BSDtoBin-operaties uit te voeren op videostromen.

Het enige wat men hoeft te doen is de .bat-bestanden uit te voeren. De

.jar-bestanden van de BSDL-referentiesoftware en de Saxon XSLT Processor

worden als classpath toegevoegd en staan ook (in de juiste mappen) op de

DVD. Merk op dat men eerst de hoofdmap zal moeten kopieren omdat deze

operaties anders proberen te schrijven naar de DVD.

Als voorbeeld navigeren we naar de map ./BSDL Schema’s en Demo’s/binToBSD

en BSDToBin demo’s/CONTENT/MPEG-2/XSLT Transformaties Video.

We vinden een .bat-bestand terug genaamd “bintobsd, remove B, bsdtobin”.

De inhoud van het .bat-bestand wordt hier als voorbeeld getoond:

java -cp ..\..\..\JavaAPIs\Xalan\xalan.jar;

..\..\..\JavaAPIs\Base64\base64.jar;

..\..\..\JavaAPIs\BSDL\BSDL.jar;

..\..\..\JavaAPIs\Log4J\log4j.jar;

..\..\..\BSDL\

BSDLParsers.BintoBSD

-in ./foreman2.mpg

-xsd ../../SCHEMAS/mpeg-2_video.xsd

-out foreman2.xml

java -cp .\saxonb8-3\saxon8.jar;.\saxonb8-3\saxon8sa.jar

net.sf.saxon.Transform foreman2.xml removeB.xsl > foreman2_B.xml

java -cp ..\..\..\JavaAPIs\Base64\base64.jar;

..\..\..\JavaAPIs\BSDL\BSDL.jar;

..\..\..\JavaAPIs\Log4J\log4j.jar;

..\..\..\BSDL\ BSDLParsers.BSDtoBin

-dom -in ./foreman2_B.xml -out ./foreman2_B.mpg

77

Page 90: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

In dit bestand vinden we 3 commando’s terug die eerst de videosequen-

tie foreman2.mpg, in dezelfde map, beschrijft naar een XML-bestand fore-

man2.xml. Vervolgens zal de beschrijving worden aangepast via de stylesheet

voor het weglaten van B-beelden en tenslotte voert men de operatie BSDTo-

Bin uit om de resulterende bitstroom te verkrijgen met naam foreman2B.mpg.

Deze laatste videosequentie en de originele versie is afspeelbaar met onder

andere Windows Media Player.

Analoog kan men andere demo’s en operaties doorvoeren in andere map-

pen op deze DVD.

78

Page 91: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Bijlage B

MPEG-2 Basic Datatypes

Schema

Op de volgende pagina’s vinden we een XML-bestand dat de basis datatypes

declareert die we gebruiken in de BSDL-schema’s voor Video en Systems.

Dit zijn de types b1 - b16. De naam zelf is zodanig gekozen dat bijvoorbeeld

het type b3 een beperking is op een type unsignedShort, namelijk b3 heeft

een lengte van 3 bits. Deze types worden gedefinieerd aan de hand van de

maxExclusive-constructie.

79

Page 92: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<?xml version="1.0" ?> - <xsd:schema targetNamespace="urn:mpeg:mpeg21:2003:01-DIA-BasicDatatypes-NS"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">- <xsd:annotation>

<xsd:documentation>This schema provides some datatypes definition for BSDL and gBSD Note that these types are not built-in BSDL datatypes, but are similar to user-derived types.</xsd:documentation>

</xsd:annotation> <!-- ################## Type for arrays of bits ################## -->

- <xsd:simpleType name="b16">

<xsd:restriction base="xsd:unsignedShort" /> </xsd:simpleType>

- <xsd:simpleType name="b15">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="32768" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b14">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="16834" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b13">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="8192" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b12">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="4096" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b11">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="2048" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b10">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="1024" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b9">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="512" />

Page 93: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

</xsd:restriction> </xsd:simpleType>

- <xsd:simpleType name="b8">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="256" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b7">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="128" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b6">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="64" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b5">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="32" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b4">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="16" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b3">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="8" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b2">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="4" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="b1">

- <xsd:restriction base="xsd:unsignedShort">

<xsd:maxExclusive value="2" /> </xsd:restriction>

</xsd:simpleType> </xsd:schema>

Page 94: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Bijlage C

MPEG-2 Simple Types Schema

Op de volgende pagina’s vinden we een XML-bestand dat enkele types de-

clareert die we gebruiken in de BSDL-schema’s voor Video en Systems. Dit

zijn (onder andere) de types PackPayloadType en PicturePayloadType. De-

ze worden ook besproken in de hoofdstukken waar we de 2 schema’s (video

en systems) construeren. Ze zorgen voor een referentie naar de originele

bitstroom om zo blokken data gemakkelijk te kunnen “weglaten” in de be-

schrijving zelf.

82

Page 95: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<?xml version="1.0" encoding="UTF-8" ?> - <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:bt="urn:mpeg:

mpeg21:2003:01-DIA-BasicDatatypes-NS" xmlns:bs0="urn:mpeg:mpeg21:2003:01-DIA-BSDL0-NS" xmlns:bs1="urn:mpeg:mpeg21:2003:01-DIA-BSDL1-NS" xmlns:bs2="urn:mpeg:mpeg21:2003:01-DIA-BSDL2-NS">

- <xsd:annotation>

<xsd:documentation>Simple Types for the MPEG-2 syntax.</xsd:documentation>

</xsd:annotation> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BasicDatatypes-NS" schemaLocation="BasicDatatypes.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL0-NS" schemaLocation="BSDL-0.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL1-NS" schemaLocation="BSDL-1.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL2-NS" schemaLocation="BSDL-2.xsd" />

<!-- ******************************************* --> <!-- MPEG-2 Simple Types declaration --> <!-- ******************************************* --> - <xsd:simpleType name="StartCodeType">

- <xsd:restriction base="xsd:hexBinary">

<xsd:length value="4" /> </xsd:restriction>

</xsd:simpleType>- <xsd:simpleType name="Stuffing">

<xsd:restriction base="bs0:fillByte" /> </xsd:simpleType>

- <xsd:simpleType name="PackPayloadType">

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<!-- packet start codes --> <bs2:startCode value="000001BC-000001FF" />

<!-- pack_start_code --> <bs2:startCode value="000001BA" />

<!-- program_end_code --> <bs2:startCode value="000001B9" />

</xsd:appinfo> </xsd:annotation>

</xsd:restriction> </xsd:simpleType>

- <xsd:simpleType name="PicturePayloadType">

- <xsd:restriction base="bs1:byteRange">

- <xsd:annotation>

- <xsd:appinfo>

<!-- Nieuw Beeld: Picture Start Code -->

Page 96: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<bs2:startCode value="00000100" /> <!-- In geval van een "laatste" beeld. --> <!-- Group Start Code --> <bs2:startCode value="000001B8" />

<!-- Sequence Header Start Code --> <bs2:startCode value="000001B3" />

<!-- Sequence End Code --> <bs2:startCode value="000001B7" />

</xsd:appinfo> </xsd:annotation>

</xsd:restriction> </xsd:simpleType>

</xsd:schema>

Page 97: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Bijlage D

MPEG-2 Video BSDL-Schema

Op de volgende pagina’s vinden we het ontworpen MPEG-2 Video BSDL-

Schema.

85

Page 98: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<?xml version="1.0" encoding="UTF-8" ?> - <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mp2="MPEG2"

xmlns:bt="urn:mpeg:mpeg21:2003:01-DIA-BasicDatatypes-NS" xmlns:bs0="urn:mpeg:mpeg21:2003:01-DIA-BSDL0-NS" xmlns:bs1="urn:mpeg:mpeg21:2003:01-DIA-BSDL1-NS" xmlns:bs2="urn:mpeg:mpeg21:2003:01-DIA-BSDL2-NS" targetNamespace="MPEG2" bs2:rootElement="mp2:MPEG2Video">

- <xsd:annotation>

<xsd:documentation>Schema for the MPEG-2 Video syntax.</xsd:documentation>

</xsd:annotation> <!-- The schemas are available in the SCHEMAS directory. --> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BasicDatatypes-NS" schemaLocation="BasicDatatypes.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL0-NS" schemaLocation="BSDL-0.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL1-NS" schemaLocation="BSDL-1.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL2-NS" schemaLocation="BSDL-2.xsd" />

<!-- xml.xsd is needed for the xml:base attribute of the root element. -->

<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd" /> <xsd:include schemaLocation="mpeg-2_simple_types.xsd" />

<!-- *************************************** --> <!-- MPEG2Video declaration --> <!-- *************************************** --> - <xsd:element name="MPEG2Video">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="bit_stuffing" type="mp2:Stuffing" minOccurs="0" /> - <xsd:element name="video_sequence" minOccurs="0"

maxOccurs="unbounded" bs2:ifNext="000001B3">- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:sequence_header" /> <xsd:element ref="mp2:sequence_extension" bs2:ifNext="000001B5" /> <xsd:element ref="mp2:extension_and_user_data" /> <xsd:element ref="mp2:GroupOfPictures" minOccurs="0" maxOccurs="unbounded" bs2:ifNext="000001B8" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <xsd:element name="sequence_end_code" type="mp2:StartCodeType" bs2:ifNext="000001B7" />

</xsd:sequence>

Page 99: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<xsd:attribute ref="xml:base" /> </xsd:complexType>

</xsd:element> <!-- *************************************** --> <!-- sequence_header declaration --> <!-- *************************************** --> - <xsd:element name="sequence_header">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="sequence_header_code" type="mp2:StartCodeType" /> <xsd:element name="horizontal_size_value" type="bt:b12" /> <xsd:element name="vertical_size_value" type="bt:b12" /> <xsd:element name="aspect_ratio_information" type="bt:b4" /> <xsd:element name="frame_rate_code" type="bt:b4" /> <xsd:element name="bit_rate_value_1" type="bt:b16" /> <xsd:element name="bit_rate_value_2" type="bt:b2" /> <xsd:element name="marker_bit" type="bt:b1" /> <xsd:element name="vbv_buffer_size_value" type="bt:b10" /> <xsd:element name="constrained_parameters_flag" type="bt:b1" /> <xsd:element name="load_intra_quantizer_matrix" type="bt:b1" /> - <xsd:element name="intra_quantizer_matrix" bs2:if="./mp2:

load_intra_quantizer_matrix != 0">- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="intra_quantizer_matrix_64" type="bt:b8" minOccurs="64" maxOccurs="64" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <xsd:element name="load_non_intra_quantizer_matrix" type="bt:b1" /> - <xsd:element name="non_intra_quantizer_matrix" bs2:if="./mp2:

load_non_intra_quantizer_matrix != 0">- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="non_intra_quantizer_matrix_64" type="bt:b8" minOccurs="64" maxOccurs="64" />

</xsd:sequence> </xsd:complexType>

</xsd:element> </xsd:sequence>

</xsd:complexType> </xsd:element> <!-- *************************************** --> <!-- sequence_extension declaration --> <!-- *************************************** -->

Page 100: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

- <xsd:element name="sequence_extension">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="extension_start_code" type="mp2:StartCodeType" /> <xsd:element name="extension_start_code_identifier" type="bt:b4" /> <xsd:element name="profile_and_level_indication" type="bt:b8" /> <xsd:element name="progressive_sequence" type="bt:b1" /> <xsd:element name="chroma_format" type="bt:b2" /> <xsd:element name="horizontal_size_extension" type="bt:b2" /> <xsd:element name="vertical_size_extension" type="bt:b2" /> <xsd:element name="bit_rate_extension" type="bt:b12" /> <xsd:element name="marker_bit" type="bt:b1" /> <xsd:element name="vbv_buffe_size_extension" type="bt:b8" /> <xsd:element name="low_delay" type="bt:b1" /> <xsd:element name="frame_rate_extension_n" type="bt:b2" /> <xsd:element name="frame_rate_extension_d" type="bt:b5" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- *************************************** --> <!-- GroupOfPictures declaration --> <!-- *************************************** --> - <xsd:element name="GroupOfPictures">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="group_start_code" type="mp2:StartCodeType" /> <xsd:element name="time_code_1" type="bt:b16" /> <xsd:element name="time_code_2" type="bt:b9" /> <xsd:element name="closed_gop" type="bt:b1" /> <xsd:element name="broken_link" type="bt:b1" /> <xsd:element name="bit_stuffing" type="mp2:Stuffing" minOccurs="0" /> <xsd:element ref="mp2:extension_and_user_data" /> <xsd:element ref="mp2:Picture" minOccurs="0" maxOccurs="unbounded" bs2:ifNext="00000100" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- *************************************** --> <!-- Extension_data declaration --> <!-- *************************************** --> - <xsd:element name="extension_and_user_data">

- <xsd:complexType>

- <xsd:sequence>

Page 101: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

- <xsd:element name="extension_data" bs2:ifNext="000001B5">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="extension_start_code" type="mp2:StartCodeType" /> <xsd:element name="payload" type="mp2:PicturePayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element>- <xsd:element name="user_data" bs2:ifNext="000001B2">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="user_data_start_code" type="mp2:StartCodeType" /> <xsd:element name="payload" type="mp2:PicturePayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> </xsd:sequence>

</xsd:complexType> </xsd:element> <!-- *************************************** --> <!-- Picture declaration --> <!-- *************************************** --> - <xsd:element name="Picture">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="picture_start_code" type="mp2:StartCodeType" /> <xsd:element name="temporal_reference" type="bt:b10" /> <xsd:element name="picture_coding_type" type="bt:b3" /> <xsd:element name="vbv_delay" type="bt:b16" /> - <xsd:element name="forward_motion_info" minOccurs="0" bs2:if="./

mp2:picture_coding_type = 2 or ./mp2:picture_coding_type = 3">- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="full_pel_forward_vector" type="bt:b1" /> <xsd:element name="forward_f_code" type="bt:b3" />

</xsd:sequence> </xsd:complexType>

</xsd:element>- <xsd:element name="backward_motion_info" minOccurs="0" bs2:if="./

mp2:picture_coding_type = 3">- <xsd:complexType>

Page 102: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

- <xsd:sequence>

<xsd:element name="full_pel_backward_vector" type="bt:b1" /> <xsd:element name="backward_f_code" type="bt:b3" />

</xsd:sequence> </xsd:complexType>

</xsd:element>- <xsd:element name="extra_info" minOccurs="0"

maxOccurs="unbounded" bs2:ifNext="80-FF">- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="extra_bit_picture" type="bt:b1" fixed="1" /> <xsd:element name="extra_information_picture" type="bt:b8" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <xsd:element name="extra_bit_picture" type="bt:b1" fixed="0" />

<!-- Make sure we are back byte-aligned. --> <xsd:element name="bit_stuffing" type="mp2:Stuffing" minOccurs="0" />

<!-- Picture Coding Extension has same syntax as extension_and_user_data -->

<xsd:element ref="mp2:extension_and_user_data" /> <!-- We are skipping the parsing of the slice stuff. -->

<xsd:element name="bit_stuffing" type="mp2:Stuffing" minOccurs="0" /> <xsd:element name="payload" type="mp2:PicturePayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> </xsd:schema>

Page 103: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Bijlage E

MPEG-2 Systems

BSDL-Schema

Op de volgende pagina’s vinden we het ontworpen MPEG-2 Systems BSDL-

Schema (programmastromen).

91

Page 104: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<?xml version="1.0" encoding="UTF-8" ?> <!-- ***************************************** -->

- <!--

MPEG2Systems Pack PackHeader ( + optional SystemHeader) packet VideoPacket -->

<!-- **************************************** --> - <xsd:schema targetNamespace="MPEG2" xmlns:xsd="http://www.w3.org/2001/

XMLSchema" xmlns:mp2="MPEG2" xmlns:bs0="urn:mpeg:mpeg21:2003:01-DIA-BSDL0-NS" xmlns:bs1="urn:mpeg:mpeg21:2003:01-DIA-BSDL1-NS" xmlns:bs2="urn:mpeg:mpeg21:2003:01-DIA-BSDL2-NS" xmlns:bt="urn:mpeg:mpeg21:2003:01-DIA-BasicDatatypes-NS" elementFormDefault="qualified" bs2:rootElement="mp2:MPEG2Systems">

- <xsd:annotation>

<xsd:documentation>Schema for the MPEG-2 Systems Program Stream Syntax.</xsd:documentation>

</xsd:annotation> <!-- The schemas are available in the SCHEMAS directory: different Schemas for BSDL -->

<xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BasicDatatypes-NS" schemaLocation="BasicDatatypes.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL0-NS" schemaLocation="BSDL-0.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL1-NS" schemaLocation="BSDL-1.xsd" /> <xsd:import namespace="urn:mpeg:mpeg21:2003:01-DIA-BSDL2-NS" schemaLocation="BSDL-2.xsd" />

<!-- xml.xsd is needed for the xml:base attribute of the root element. -->

<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd" /> <xsd:include schemaLocation="mpeg-2_simple_types.xsd" /> <xsd:include schemaLocation="mpeg-2_video.xsd" />

<!-- ************************************ --> <!-- MPEG2Systems declaration --> <!-- ************************************ --> - <xsd:element name="MPEG2Systems">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element bs2:ifNext="000001BA" ref="mp2:Pack" minOccurs="0" maxOccurs="unbounded" /> <xsd:element bs2:ifNext="000001B9" name="iso_11172_end_code" type="mp2:StartCodeType" />

</xsd:sequence> <xsd:attribute ref="xml:base" />

Page 105: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

</xsd:complexType> </xsd:element> <!-- ************************************* --> <!-- Pack declaration --> <!-- Referenced by: - MPEG2Systems --> <!-- ************************************* --> - <xsd:element name="Pack">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PackHeader" /> - <xsd:element name="packet" minOccurs="0" maxOccurs="unbounded">

- <xsd:complexType>

- <xsd:choice>

<xsd:element bs2:ifNext="000001BC" ref="mp2:PSMapTable" /> <xsd:element bs2:ifNext="000001BD" ref="mp2:Private1Packet" /> <xsd:element bs2:ifNext="000001BE" ref="mp2:PaddingPacket" /> <xsd:element bs2:ifNext="000001BF" ref="mp2:Private2Packet" /> <xsd:element bs2:ifNext="000001C0-000001DF" ref="mp2:AudioPacket" /> <xsd:element bs2:ifNext="000001E0-000001EF" ref="mp2:VideoPacket" /> <xsd:element bs2:ifNext="000001F0" ref="mp2:Reserved0Packet" /> <xsd:element bs2:ifNext="000001F1" ref="mp2:Reserved1Packet" /> <xsd:element bs2:ifNext="000001F2" ref="mp2:Reserved2Packet" /> <xsd:element bs2:ifNext="000001F3" ref="mp2:Reserved3Packet" /> <xsd:element bs2:ifNext="000001F4" ref="mp2:Reserved4Packet" /> <xsd:element bs2:ifNext="000001F5" ref="mp2:Reserved5Packet" /> <xsd:element bs2:ifNext="000001F6" ref="mp2:Reserved6Packet" /> <xsd:element bs2:ifNext="000001F7" ref="mp2:Reserved7Packet" /> <xsd:element bs2:ifNext="000001F8" ref="mp2:Reserved8Packet" /> <xsd:element bs2:ifNext="000001F9" ref="mp2:Reserved9Packet" /> <xsd:element bs2:ifNext="000001FA" ref="mp2:Reserved10Packet" /> <xsd:element bs2:ifNext="000001FB" ref="mp2:Reserved11Packet" />

Page 106: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<xsd:element bs2:ifNext="000001FC" ref="mp2:Reserved12Packet" /> <xsd:element bs2:ifNext="000001FD" ref="mp2:Reserved13Packet" /> <xsd:element bs2:ifNext="000001FE" ref="mp2:Reserved14Packet" /> <xsd:element bs2:ifNext="000001FF" ref="mp2:Reserved15Packet" />

</xsd:choice> </xsd:complexType>

</xsd:element> </xsd:sequence>

</xsd:complexType> </xsd:element> <!-- ************************************* --> <!-- PackHeader declaration --> <!-- Referenced by: - Pack --> <!-- ************************************* --> - <xsd:element name="PackHeader">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="pack_start_code" type="mp2:StartCodeType" /> <xsd:element name="filler" type="bt:b2" fixed="1" /> <xsd:element name="system_clock_reference1" type="bt:b3" /> <xsd:element name="marker_bit" type="bt:b1" fixed="1" /> <xsd:element name="system_clock_reference2" type="bt:b15" /> <xsd:element name="marker_bit" type="bt:b1" fixed="1" /> <xsd:element name="system_clock_reference3" type="bt:b15" /> <xsd:element name="marker_bit" type="bt:b1" fixed="1" /> <xsd:element name="system_clock_ref_extension" type="bt:b9" /> <xsd:element name="marker_bit" type="bt:b1" fixed="1" /> <xsd:element name="mux_rate_part1" type="xsd:unsignedByte" /> <xsd:element name="mux_rate_part2" type="xsd:unsignedByte" /> <xsd:element name="mux_rate_part3" type="bt:b6" /> <xsd:element name="marker_bit" type="bt:b1" fixed="1" /> <xsd:element name="marker_bit" type="bt:b1" fixed="1" /> <xsd:element name="reserved" type="bt:b5" /> <xsd:element name="bit_stuffing" type="mp2:Stuffing" minOccurs="0" /> <xsd:element name="payload" type="mp2:PackPayloadType" /> <xsd:element bs2:ifNext="000001BB" ref="mp2:SystemHeader" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- SystemHeader declaration --> <!-- Referenced by: - PackHeader -->

Page 107: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<!-- ************************************* --> - <xsd:element name="SystemHeader">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="system_header_start_code" type="mp2:StartCodeType" /> <xsd:element name="header_length" type="bt:b16" /> <xsd:element name="marker_bit" type="bt:b1" fixed="1" /> <xsd:element name="rate_bound_part1" type="bt:b16" /> <xsd:element name="rate_bound_part2" type="bt:b6" /> <xsd:element name="marker_bit" type="bt:b1" fixed="1" /> <xsd:element name="audio_bound" type="bt:b6" /> <xsd:element name="fixed_flag" type="bt:b1" /> <xsd:element name="csps_flag" type="bt:b1" /> <xsd:element name="system_audio_lock_flag" type="bt:b1" /> <xsd:element name="system_video_lock_flag" type="bt:b1" /> <xsd:element name="marker_bit" type="bt:b1" fixed="1" /> <xsd:element name="video_bound" type="bt:b5" /> <xsd:element name="packet_rate_restriction_flag" type="bt:b1" /> <xsd:element name="reserved" type="bt:b7" /> <xsd:element bs2:ifNext="80-FF" ref="mp2:buffer" minOccurs="0" maxOccurs="unbounded" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- buffer declaration --> <!-- Referenced by: - SystemHeader --> <!-- ************************************* --> - <xsd:element name="buffer">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="stream_id" type="xsd:unsignedByte" /> <xsd:element name="bit_pattern" type="bt:b2" /> <xsd:element name="p_std_buffer_bound_scale" type="bt:b1" /> <xsd:element name="p_std_buffer_size_bound" type="bt:b13" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- PSMapTable declaration --> <!-- ************************************* --> - <xsd:element name="PSMapTable">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" />

Page 108: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

<xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Private1Packet declaration --> <!-- ************************************* --> - <xsd:element name="Private1Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="packet_start_code" type="mp2:StartCodeType" /> <xsd:element name="packet_length" type="bt:b16" /> <xsd:element name="bit_stuffing" minOccurs="0" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- PaddingPacket declaration --> <!-- ************************************* --> - <xsd:element name="PaddingPacket">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Private2Packet declaration --> <!-- ************************************* --> - <xsd:element name="Private2Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="packet_start_code" type="mp2:StartCodeType" /> <xsd:element name="packet_length" type="bt:b16" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence>

Page 109: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

</xsd:complexType> </xsd:element> <!-- ************************************* --> <!-- AudioPacket declaration --> <!-- ************************************* --> - <xsd:element name="AudioPacket">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="audio_stream_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- VideoPacket declaration --> <!-- ************************************* --> - <xsd:element name="VideoPacket">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="video_stream_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved0Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved0Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved1Packet declaration --> <!-- ************************************* -->

Page 110: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

- <xsd:element name="Reserved1Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved2Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved2Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved3Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved3Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved4Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved4Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

Page 111: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved5Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved5Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved6Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved6Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved7Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved7Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved8Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved8Packet">

Page 112: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved9Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved9Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved10Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved10Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved11Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved11Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence>

Page 113: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

</xsd:complexType> </xsd:element> <!-- ************************************* --> <!-- Reserved12Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved12Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved13Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved13Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved14Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved14Packet">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ************************************* --> <!-- Reserved15Packet declaration --> <!-- ************************************* --> - <xsd:element name="Reserved15Packet">

Page 114: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

- <xsd:complexType>

- <xsd:sequence>

<xsd:element ref="mp2:PacketHeader" /> <xsd:element name="bit_stuffing" minOccurs="0" maxOccurs="1" type="mp2:Stuffing" /> <xsd:element name="pack_payload" type="mp2:PackPayloadType" />

</xsd:sequence> </xsd:complexType>

</xsd:element> <!-- ********************************** --> <!-- PacketHeader declaration --> <!-- *********************************** --> - <xsd:element name="PacketHeader">

- <xsd:complexType>

- <xsd:sequence>

<xsd:element name="packet_start_code" type="mp2:StartCodeType" /> <xsd:element name="packet_length" type="bt:b16" /> <xsd:element name="skipbits_2" type="bt:b2" /> <xsd:element name="PES_scrambling_control" type="bt:b2" /> <xsd:element name="PES_priority" type="bt:b1" /> <xsd:element name="data_alignment_indicator" type="bt:b1" /> <xsd:element name="copyright" type="bt:b1" /> <xsd:element name="original_or_copy" type="bt:b1" /> <xsd:element name="PTS_DTS_flag_1" type="bt:b1" /> <xsd:element name="PTS_DTS_flag_2" type="bt:b1" /> <xsd:element name="ESCR" type="bt:b1" /> <xsd:element name="ES_rate" type="bt:b1" /> <xsd:element name="DSM_trick_mode" type="bt:b1" /> <xsd:element name="additional_copy_info" type="bt:b1" /> <xsd:element name="PES_CRC" type="bt:b1" /> <xsd:element name="PES_extension" type="bt:b1" /> <xsd:element name="PES_header_length" type="xsd:unsignedByte" />

<!-- Bug in Systems schema to define exact position of the beginning of the elementary stream --> - <!--

xsd:element name="Header_Payload"> <xsd:simpleType> <xsd:restriction base="bs1:byteRange"> <xsd:annotation> <xsd:appinfo> <bs2:length value="../mp2:PES_header_length"/> </xsd:appinfo> </xsd:annotation> </xsd:restriction>

Page 115: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

</xsd:simpleType></xsd:element -->

</xsd:sequence> </xsd:complexType>

</xsd:element> </xsd:schema>

Page 116: Methoden voor het manipuleren van MPEG-2 Video en MPEG-2 ...lib.ugent.be/fulltxt/RUG01/000/894/034/RUG01-000894034_2010_0001_AC.pdfToelating tot bruikleen “De auteur geeft de toelating

Bibliografie

[1] MPEG website. http://www.chiariglione.org/mpeg/.

[2] Barry G. Haskell, Atul Puri, and Arun N. Netravali. Digital Video: An

Introduction to MPEG-2. Chapman and Hall, 1997.

[3] Moving Picture Experts Group. ISO/IEC 13818-2 Generic Coding of

Moving Pictures and Associated Audio: Video. Mei 1994.

[4] Moving Picture Experts Group. ISO/IEC 13818-1 Generic Coding of

Moving Pictures and Associated Audio: Systems. November 1994.

[5] P.A. Sarginson. Mpeg-2: Overview of the systems layer. BBC Research

and Development Report No. 1996/2.

[6] A. Vetro, C. Christopoulos, and T. Ebrahimi. Universal multimedia ac-

cess. IEEE Signal Processing magazine, 20(2):16–16, Maart 2003.

[7] I. Burnett, R. Van de Walle, K. Hill, J. Bormans, and F. Pereira. Mpeg-

21: goals and achievements. IEEE Multimedia, 10(6):160–70, Oktober-

December 2003.

[8] Moving Picture Experts Group. ISO/IEC 21000-7 FDIS Part 7: Digital

Item Adaptation. December 2003. ISO/IEC JTC1/SC29/WG11 N6168.

[9] Saxon XSLT en XQuery Processor website.

http://saxon.sourceforge.net/.

104