Conception d'un logiciel d'analyse de flux MPEG
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:
Code:
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
}
}
... |
que les champs d'adaptation sont comme ca:
Code:
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
... |
etc...
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:
Code:
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
} |
Enfin c'est juste un exemple tres grossier.
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