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 : 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
		}
	}
	...
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
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 : 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
}
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