Les bases du Protocole RTP en Java
[30 mn de lecture - paru le 5/11/2004 7:42:41 AM - Public : Confirmé]
|
   
|
Auteur
2. Transmission du RTP : Les différentes étapes de
l’état du Processor
Pour permettre de transmettre un flux, et après qu’un Processor soit créé, il
passe par différentes étapes : - La configuration, qui démultiplexe le flux
d’entrée et obtient des informations sur le format des données d’entrée. -
Le bon formatage des pistes du Processor - La réalisation du processor, qui
est le stade abouti du Processor. - Le démarrage du processor.
2.1. La Configuration
Le moyen, pour configurer un Processor, est simple : il suffit d’appeler la
méthode configure() du Processor. Néanmoins, cette méthode n’est pas bloquante
et n’attend donc pas que le Processor soit configuré pour continuer, c’est à
dire que si dans la suite du programme, d’autres méthodes font appel à un
Processor configuré, on obtiendra une erreur. Il faut donc utiliser la méthode
getState() qui renvoie un nombre « croissant » correspondant à l’état actuel de
notre Processor pour savoir quand celui ci est configuré.
|
public
Processor configure(Processor p)
{
//Attendre
tant que le Processor n'est pas configuré.
while(p.getState()
< Processor.Configured)
{
//Configuration du
Processor
p.configure();
}
return
p;
} |
2.2. Mettre les différentes pistes du flux dans un format supporté
On doit mettre chaque piste du Processor dans un format supporté sinon, le
programme ne pourra pas transmettre le flux et générera une erreur. Pour cela,
on utilise la méthode getSupportedFormats() de la classe TrackControl, pour
connaître les différents formats supportés par chaque piste. Le code source
suivant est simple, mais au lieu de :
track[i].setFormat(supportedFormats[0]);
on pourrait mettre :
track[i].setFormat(new VideoFormat(VideoFormat.H263_RTP, new
Dimension(160,120), Format.NOT_SPECIFIED, Format.buteArray,
Format.NOT_SPECIFIED);
pour, par exemple, mettre le flux de sortie en résolution 160 par 120 (si
c’est un flux vidéo bien entendu).
|
public
void SetSupportedFormat(Processor p)
{
//On met la description du contenu de sortie à
RAW_RTP
// pour limiter les
formats supportés
ContentDescriptor
cd =
new ContentDescriptor(
ContentDescriptor.RAW_RTP);
p.setContentDescriptor(cd);
//On obtient les différentes pistes du
processor
TrackControl
track[] = p.getTrackControls();
for(int i
= 0
; i
< track.length ; i++)
{
//on obtient les formats supportés
pour cette piste
Format
suppFormats[] = track[i].getSupportedFormats();
//Si
il y a au moins un format supporté
//
alors on met le premier
if(suppFormats.length
> 0)
{
track[i].setFormat(suppFormats[0]);
}
else
{
track[i].setEnabled(false);
}
}
} |
2.3. La Réalisation
De-même que pour la configuration, il est simple de réaliser un processor,
mais on doit là aussi attendre qu’il passe au statut « réalisé » par nous même,
car la méthode realize(), n’est pas bloquante.
|
public
Processor realize(Processor p)
{
//Attendre tant que le Processor n'est pas
réalisé.
while(p.getState()
< Processor.Realized)
{
//Réalisation du
Processor
p.realize();
}
return
p;
} |
2.4. Le Démarrage du Processor
Il suffit d’utiliser la méthode start() du Processor, pour le démarrer.
|
public
void Demarre(Processor p)
{
//Demarrage du Processor
p.start();
} |
|