13.07.2015 Views

Exemples de conteneurs - UV UTBM J. Millet

Exemples de conteneurs - UV UTBM J. Millet

Exemples de conteneurs - UV UTBM J. Millet

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

I) <strong>Exemples</strong> dans le cas <strong>de</strong> flux mpeg2 (ISO 13818-1 )Annexe CODEC<strong>Exemples</strong> <strong>de</strong> <strong>conteneurs</strong> Formation <strong>de</strong> paquet à partir d'une source d'information: PESPour les flux audio et vidéo: Un flux numérique est compressé selon son co<strong>de</strong>c, puis découpé en paquets= Packetizer. On lui ajoute une entête.Pour les données: Un flux numérique est découpé en paquets = Packetizer. On lui ajoute une entête.=> On obtient différents PES Packetized Elementary Stream qui vont formé les flux.Les paquets PES quelque soit leur type ont la même entête:Start Co<strong>de</strong> ( 3 oct ) Stream ID ( 1oct ) Longueur du paquet ( 2 oct )Stream ID donne le type <strong>de</strong> paquet ( 110x xxxx = audio, 1110 xxxx = vidéo, 1011 1110 bourrage, ... )Le champ longueur permet d'avoir <strong>de</strong>s paquets <strong>de</strong> longueur variable.Pour les paquets audio ou vidéo, on ajoute <strong>de</strong>s informations supplémentaires entre l'entête et les données:PTS ( 1 oct ) DTS ( 1oct ) ESCR ( 1 oct )Du fait <strong>de</strong>s codages prédictifs et bidirectionnels en vidéo, on change l'ordre <strong>de</strong>s images.Du fait d'avoir <strong>de</strong> l'audio et <strong>de</strong> la vidéo qui n'ont pas les mêmes volumes, il faut les synchroniser.=> utilisation <strong>de</strong> marqueurs temporels: PTS ( Presentation Time Stamps ) et DTS ( Deco<strong>de</strong> TS ).( en option ESCR Elementatry Stream Clock Reference = temps absolu )En local, le déco<strong>de</strong>ur fait évoluer son compteur.Quand il vaut DTS, le paquet PES avec ce DTS est décodé et mis en mémoire avec son PTS.Quand il vaut PTS, le paquet PES décodé est présenté en sortie du déco<strong>de</strong>ur.1Annexe CODEC


Il existe ensuite 2 techniques pour multiplexer <strong>de</strong>s flux selon la norme mpeg2:MPEG2 PS( Program Stream )Ex:DVD- Permettre le stockage <strong>de</strong> flux ayant la même base <strong>de</strong> temps. Ensuite utilisé pour ladiffusion mais mal adapté.- 1 flux PS ne contient qu'un programme vidéo.- Utilisé dans un environnement avec peu d'erreurs => Paquets <strong>de</strong> gran<strong>de</strong> taille- Taille <strong>de</strong>s paquets variables => Décodage matériel difficile, il faut interpréter un champ.MPEG2 TS( Transport Stream )Ex: bouquets TVsatellite, adsl, câble- Un flux contient plusieurs programmes.- Ces programmes peuvent ne pas avoir <strong>de</strong> référence <strong>de</strong> temps commune.- Taille <strong>de</strong> paquets fixe = 188 octets=> En milieu avec erreur courante, on peut récupérer <strong>de</strong>s paquets perdus ou manquants=> Décodage matériel => Plus rapi<strong>de</strong>.=> Plus compliqué à créer ( découpage ) et gérer ( mux/démux ) que le flux PS. Aperçu <strong>de</strong> MPEG2 PS Program StreamA partir d'un flux vi<strong>de</strong>o, <strong>de</strong> N audios et M données, on forme le flux PS.Il est fait d'entête PS ( pack hea<strong>de</strong>r ) et <strong>de</strong> paquets ( pack ) contenant les différents flux ( PES ).MPEG2programstreampackhea<strong>de</strong>rpack 1packhea<strong>de</strong>rpack 2...packhea<strong>de</strong>rpack nMPEGprogramend co<strong>de</strong>packlayerpackstartco<strong>de</strong>01 SCR programmuxratesystemhea<strong>de</strong>r PES packet 1 ... PES packet i ... PES packet nsystemhea<strong>de</strong>rstartco<strong>de</strong>hea<strong>de</strong>rlengthrate audioboundflagsbound audiofixed CSPS lockvi<strong>de</strong>olockvi<strong>de</strong>obandN loopstreamid11P_STDbufferboundscaleP_STDbuffersizebound....... .......Il y a différents types <strong>de</strong> paquets PS ( packs ) i<strong>de</strong>ntifiés par le champ Stream_ID.Stream_ID = 0xBC => Le paquet PS est le PS map décrivant les PES présents dans le flux et leurs relations.Stream_ID = 0xFF => Le paquet PS est le répertoire du flux <strong>de</strong> programme ( PS directory )...Pour le DVD: Un fichier VOB peut être fait <strong>de</strong> 4 types <strong>de</strong> paquets PS <strong>de</strong> longueur fixe 2048 octets:- vidéo- audio- Navigation: NavPack ( controle <strong>de</strong> la présentation PCI et recherche <strong>de</strong> données DSI )- SubPictures2Annexe CODEC


Aperçu <strong>de</strong> MPEG2 TS Transport StreamUn paquet TS commence par un préfixe <strong>de</strong> 4 octets avec en particulier le PID ( Packet ID ) sur 13 bits. Il permetd'i<strong>de</strong>ntifier le programme grâce aux tables PSI ( Program Specific Information ).Un paquet TS avec un PID ne contient qu'un programme ( PES ).Les tables PSI sont pour partie définies selon la norme, pour partie définies par l'opérateur selon les programmes àacheminer ( private data ).Ces tables PSI sont définies dans le flux TS sous 4 formes:- La PAT: Program Association Table = PID 0x0000:Correspondance entre un numéro <strong>de</strong> programme et le PID contenant la définition du programme dans la PMT duprogramme.- Les PMT: Program Map Table: Une PMT indique entre autre les PID associés à une programme.- NIT: Network Information Table = définie par l'opérateur.- CAT: Conditional Access Table = PID 0x0001 = Abonnement et pay per view.Indique les PID qui vont gérer les accès conditionnels aux programmes selon l'EMM( Entitlement Management Message ).Le déco<strong>de</strong>ur recherche la PAT ( PID = 0x0000 ). Elle indique quel PID contient la PMT du programme = les PIDassociés à ce programme ( vidéo, audio, sous titres, infos diverses,... ).Les paquets sont <strong>de</strong> taille fixe: 188 octets=> en utilisera ensuite facilement un co<strong>de</strong> correcteur d'erreur en bloc: Reed Solomon RS(188,204,8) qui ajoute16 octets aux 188 => 204 octets. Il peut corriger 8 octets sur les 188 envoyés.=> Il faut découper et regrouper les flux multiplexés pour les incorporer au flux TS.Principaux champs d'un flux MPEG2 TS: ( longueurs indiquées en bits )188 bytestransportpacketstreamhea<strong>de</strong>r payload hea<strong>de</strong>r payload ... hea<strong>de</strong>r payloadpacket hea<strong>de</strong>rtransportpacket(188 bytes)syncbytetransporterrorindicatorpayloadunit startindicatortransportscramblingcontroltransportpriorityPID adaptationfield controlcontinuitycounter8 1 1 2 1 13 2 4adaptationfieldpayloadadaptationfieldlengthdiscontinuityindicatorrandomaccessindicator8 1 1 1elementarystreampriorityindicator5 flagsoptionalfieldsstuffingbytesPCR OPCR splice transportcountdown privatedata33+9 33+9+6 res +6 res8adaptationfiel<strong>de</strong>xtension3Annexe CODEC


Exemple: - L'utilisateur <strong>de</strong>man<strong>de</strong> au déco<strong>de</strong>ur la chaine numéro 1- Le déco<strong>de</strong>ur lit la PAT ( PID = 0x0000 ) => Le programme n°1 est défini par la PMT <strong>de</strong> PID 15.- Le déco<strong>de</strong>ur lit la PMT <strong>de</strong> PID 15 qui définit le multiplex du programme 1. Il en déduit que ce programme n°1 contient* la vidéo = PID 51* l'audio en anglais = PID 64* l'audio en français = PID 66* les soutitres en langue ... = PID 101* etc...- Le déco<strong>de</strong>ur accè<strong>de</strong> aux paquets élémentaires avec les PID.Exemple: Logiciel <strong>de</strong> décodage <strong>de</strong> flux MPEG2 TS4Annexe CODEC


II) Exemple du format AVI ( Audio Vi<strong>de</strong>o Interleaved )AVI est un cas particulier <strong>de</strong> fichier RIFF ( Resource Interchange File Format ) défini par Microsoft et IBM qui est unclone d' IFF inventé par Electronic Arts en 1984.IFF utilise <strong>de</strong>s entêtes <strong>de</strong> 4 caractères ( 4-character co<strong>de</strong> hea<strong>de</strong>rs = FourCC).L'élément <strong>de</strong> base du fichier AVi est le CHUNK ( Tronçon, Morceau ):- 4 oct: ckID pour i<strong>de</strong>ntifier les données contenues dans le CHUNK.- 4 oct: cKSize: Taille données du CHUNK (sans l'éventuel remplissage à la fin pour avoir 4 octets ).- cKData: Données du CHUNK ( avec remplissage pour avoir à la fin un paquet <strong>de</strong> 4 octets ).Les CHUNK forment ensuite <strong>de</strong>s LIST = ensemble <strong>de</strong> CHUNK ou <strong>de</strong> LIST = CHUNK avec en plus le type du contenu- 4 oct: 'LIST'- 4 oct: Longueur <strong>de</strong> la liste- 4 oct: Type <strong>de</strong> liste- Contenu: Listes ou Chunk Arborescence d'un ficher AVIRIFF Entête RIFF ( RIFF HEADER )|-AVI Contenu AVI ( AVI CHUNK )|-hdrl - Entête principale ( MAIN AVI HEADER )| |-avih -Entête du fichier AVI ( AVI HEADER )| |-strl -LIST décrivant le flux ( STREAM LIST ): 1 par flux| | |-strh Entête du flux ( STREAM HEADER ): associé au strl| | |-strf Format du flux ( STREAM FORMAT )| | |-strd OPTION -- Données liées au flux ( STREAM DATA )| | |-strn OPTION -- Nom du flux ( STREAM NAME )| |-strl -LIST décrivant le flux ( STREAM LIST ): 1 par flux| | |-strh Entête du flux ( STREAM HEADER ): associé au strl| | |-strf Format du flux ( STREAM FORMAT )| | |-strd OPTION -- Données liées au flux ( STREAM DATA )| | |-strn OPTION -- Nom du flux ( STREAM NAME )... selon le nombre <strong>de</strong> flux|-movi - Données ( MOVIE DATA )| |-rec -Données d'un enregistrement ( RECORD DATA )| |-[data subchunks] Valeurs <strong>de</strong>s données en bloc ( RAW DATA )|-idx1 - In<strong>de</strong>x ( AVI INDEX )|-[in<strong>de</strong>x data] - Données <strong>de</strong> l'in<strong>de</strong>x ( DATA )strl défini le type du flux ( 'auds' = audio, 'mids' = MIDI, 'txts' =Texte, sous titres, 'vids' = Vi<strong>de</strong>o ) .Remarque: AVI2 On trouve aussi le type <strong>de</strong> liste "odml" suivi <strong>de</strong> "dmlh" ( dml hea<strong>de</strong>r ). Cela représente <strong>de</strong>s donnéesOpen DML ( Open Digital Media Language, Microsoft a amené à ajouter en 1996 ces options => AVI2.0 ) permettantd'utiliser un autre in<strong>de</strong>xage pour diminuer les entêtes, <strong>de</strong> traviller à la trame et non à l'image,... Contenu du fichier AVI 1.0Le fichier est fait <strong>de</strong> paquets <strong>de</strong> 4 octets dw = DWORD double word ( sauf un ou <strong>de</strong>ux WORD w = 2 octets )."RIFF" / dwChunkSize (Taille fichier sans 8 octets RIFF et Taille) / "AVI " (Type fichier) /"LIST" / dwLIST1ChunkSize (Taille liste sans 8 octets LIST et Taille) / "hdrl" (Liste hdrl=entête principale) /"avih" (Entête fichier AVI ) / dwMicroSecPerFrame (durée trame en µs) / dwMaxBytesPerSec (débit maxi approximatif: octets par sec ) /dwReserved1 (mis à 0) / dwFlags ( Bit 4=présence d'in<strong>de</strong>x idx1, Bit 5=lecture <strong>de</strong> l'AVI avec in<strong>de</strong>x plutot que par ordre d'apparition dans lefichier,...,Bit17=copyright sur les données,... ) / dwTotalFrames (Nombre total <strong>de</strong> trames) /dwInitialFrames ( Trame initiale pour fichier entrelacé, 0 pour non entrelacé ) / dwStreams ( Nombre <strong>de</strong> flux dans le fichier ) /dwSuggestedBufferSize ( Taille <strong>de</strong> buffer suggérée, plus gran<strong>de</strong> que le plus grand CHUNK ) /dwWidth (largeur image en pixels) / dwHeight (Hauteur image en pixels) / dwReserved4 (misà 0)."LIST" / dwLISTChunkSize (Taille <strong>de</strong> cette 2ème LIST) / "strl" /5Annexe CODEC


"strh" / dwstrhSize (Taille) / fccType (Type <strong>de</strong> données du flux: 'auds' = audio, 'mids' = MIDI, 'txts' =Texte, 'vids' = Vi<strong>de</strong>o) /fccHandler ( FourCC du co<strong>de</strong>c utilisé, sinon est défini dans strf) / dwFlags / wPriority / wLanguage / dwInitialFrames / dwScale /dwRate / dwStart / dwLength / dwSuggestedBufferSize / dwQuality / dwSampleSize"JUNK" / Taille du Chunk /suivi d'information sur le logiciel <strong>de</strong> codage.ou suivi <strong>de</strong> 0 pour remplissage et avoir <strong>de</strong>s éléments <strong>de</strong> 2 ko."LIST" / dwLIST1ChunkSize (Taille liste ) / "movi" (Liste movi=données <strong>de</strong>s flux) /"LIST" / Taille / "rec ""##wb" ( Chunk audio ) / Taille / Valeurs"##db" ( Chunk vi<strong>de</strong>o non compressée ) / Taille / Valeurs"##dc" ( Chunk vi<strong>de</strong>o compressée ) / Taille / Valeurs## est le numéro du flux"idx1" / dwSize ( Taille <strong>de</strong> idx1 ) /dwChunkId (##wb, ##db ou ##dc => décrit aussi le type) / dwFlags / dwOffset ( Offset <strong>de</strong> la trame ) / dwSize ( Taille trame )pour chaque trame.L'offset est calculé par rapport à l'octet suivant "movi" ( exemple: première location = 4 après l'i<strong>de</strong>ntifiant du flux ##wb, db ou dc qui donnera d'abordla taille à lire puis les données <strong>de</strong> la trame ).Remarque:- On peut avoir "rec " seul sans "LIST" s'il n'y a qu'une vidéo seule- JUNK est ignoré par le lecteur du fichier.- L'in<strong>de</strong>xage a étét amélioré en incluant <strong>de</strong>s éléments d'in<strong>de</strong>xage dans "movi": idx16Annexe CODEC


ExempleAvec in<strong>de</strong>xage amélioré: Présence du co<strong>de</strong> FourCC "indx", <strong>de</strong> ix00,...[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0123456789012345]000000000: 52 49 46 46 DC 6C 57 09 41 56 49 20 4C 49 53 54 |RIFF.lW.AVI LIST|RIFF fileSize fileType LIST000000016: CC 41 00 00 68 64 72 6C 61 76 69 68 38 00 00 00 |.A..hdrlavih8...|listSize listType avih structureSize000000032: 50 C3 00 00 00 B0 04 00 00 00 00 00 10 00 00 00 |P...............|microSecondPerFrame maxBytesPerSec000000048: A8 02 00 00 00 00 00 00 01 00 00 00 00 84 03 00 |................|totalFrames initialFrames streams suggestedBufferSize000000064: 40 01 00 00 F0 00 00 00 00 00 00 00 00 00 00 00 |@...............|width height000000080: 00 00 00 00 00 00 00 00 4C 49 53 54 74 40 00 00 |........LISTt@..|000000096: 73 74 72 6C 73 74 72 68 38 00 00 00 76 69 64 73 |strlstrh8...vids|000000112: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|000000128: 64 00 00 00 D0 07 00 00 00 00 00 00 A8 02 00 00 |d...............|000000144: 00 84 03 00 10 27 00 00 00 00 00 00 00 00 00 00 |.....'..........|000000160: 40 01 F0 00 73 74 72 66 28 00 00 00 28 00 00 00 |@...strf(...(...|000000176: 40 01 00 00 F0 00 00 00 01 00 18 00 00 00 00 00 |@...............|000000192: 00 84 03 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|000000208: 00 00 00 00 69 6E 64 78 F8 3F 00 00 04 00 00 00 |....indx.?......|000000224: 01 00 00 00 30 30 64 62 00 00 00 00 00 00 00 00 |....00db........|000000240: 00 00 00 00 0C 44 00 00 00 00 00 00 00 40 00 00 |.....D.......@..|..000017408: 4C 49 53 54 38 F9 56 09 6D 6F 76 69 69 78 30 30 |LIST8.V.moviix00|LISTlistSize listType in<strong>de</strong>xBlock ( ix00 )000017424: F8 3F 00 00 02 00 00 01 A8 02 00 00 30 30 64 62 |.?..........00db| .... 00db ( uncompressed vi<strong>de</strong>o frame )..voir logiciel virtualdub: Editeur hex => RIFF Treevoir logiciel AVI-MUX_GUI => RIFF Treehttp://msdn2.microsoft.com/en-us/library/ms779636.aspx7Annexe CODEC


Annexe ToIPPoE: Power Over Ethernet ( 802.3 af )Pour les téléphones IP, au lieu <strong>de</strong> mettre une alimentation externe ( cablage IP + cablage électrique ), onpeut comme pour un téléphone classique intégrer l'alimentation 48V continu à la connexion réseau. !" !Mais cela reste en nombre <strong>de</strong> ports limités et cher ( très compliqué électroniquement <strong>de</strong> faireune alim stable et <strong>de</strong> la commutation électronique = basculement <strong>de</strong> niveau ).Il existe <strong>de</strong>s adaptateurs PoE externe: Boitier avec sorties PoE qui est relié au 230V et au switchethernet. ( Injecteur PoE ).8Annexe ToIP

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!