Bonjour,
Mon projet est d'ecrire un logiciel qui analyse la conformite d'un flux MPEG2 suivant la norme ISO IEC 13818-1.
Cet analyseur n'est pas temps reel, il est off-line: il prend en entree un fichier simple contenant l'enregistrement d'un flux TS.
(Pour ceux qui connaissent la norme, l'analyseur doit determiner le debit instanne du flux en fonction des valeurs de PCR codees dans les champs d'adaptation des paquets TS...)
Je cherche donc, avant de me lancer dans le codage, a faire un conception prealable intelligente.
Le flux TS (ou fichier) est une succession de paquets TS de 188 octets, contenant eux meme des paquets PES, etc... et tout cela est defini dans la norme. C'est tres proche de l'architecture d'un protocole reseau.
Par exemple, la norme me dit que les paquets TS sont comme ca:
que les champs d'adaptation sont comme ca:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 transport_packet(){ sync_byte 8 bslbf transport_error_indicator 1 bslbf payload_unit_start_indicator 1 bslbf transport_priority 1 bslbf PID 13 uimsbf ... if(adaptation_field_control = = '10' || adaptation_field_control = = '11'){ adaptation_field() } if(adaptation_field_control = = '01' || adaptation_field_control = = '11') { for (i = 0; i < N; i++){ data_byte 8 bslbf } } ...
etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 adaptation_field() { adaptation_field_length 8 uimsbf if (adaptation_field_length > 0) { discontinuity_indicator 1 bslbf random_access_indicator 1 bslbf elementary_stream_priority_indicator 1 bslbf PCR_flag 1 bslbf OPCR_flag 1 bslbf splicing_point_flag 1 bslbf transport_private_data_flag 1 bslbf adaptation_field_extension_flag 1 bslbf if (PCR_flag = = '1') { program_clock_reference_base 33 uimsbf reserved 6 bslbf program_clock_reference_extension 9 uimsbf } if (OPCR_flag = = '1') { original_program_clock_reference_base ...
Je vais programmer la chose en Java ou en C++ (pas encore choisi meme si C++ semble interressant pour ca), en tout cas dans un langage objet.
Le but final est de stocker a part certains attributs redondants de ces paquets (valeur de PCR) et de compter le nombre d'octets entre les deux.
Comment me conseiller vous de faire ma modelisation / conception prealable?
Par exemple:
Enfin c'est juste un exemple tres grossier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 classe Paquet private donnee brutes; Constructeur (flux) { mettre 188 octets de flux dans donnees brute } classe TS paquet private transport_error_indicator private payload_unit_start_indicator analyser_paquet() { analyser donnees brute et remplir les attributs } main() { passer tout le flux Paquets[] liste_paquets; pour chaque 188 paquets, liste_paquet[i] = flux }
En bref, comment utliser la definition de la norme (citee de plus haut) du contenu du flux pour realiser une modelisation intelligente qui me permettra d'atteindre mon but?
Merci,
Dazdh
Partager