L'API JMF : API de base


introduction : L'API de base contient les outils nécessaires à la manipulation de données multimédia. Elle fournit les méthodes pour gérer des données média(DataSource), les lire (Player) ou encore effectuer des traitements (Processor).

Gestion des données

les lecteurs JMF utilisent en général des "Datasource"(définis par l'API JMF) pour gérer le transfert du contenu d'un media. Il encapsule un ensemble de données sur le transfert à effectuer :

Un DataSource est identifié par un objet MediaLocator ou URL permettant de spécifier l'emplacement du media à gérer. Un MediaLocator est similaire à l'objet URL et peut être construit à partir de celui-ci. La seule différence est qu'il ne nécessite pas que le handler(gestionnaire) du protocole utilisé soit installé sur la machine pour être utilisé.
ex : ftp://... On pourrait l'utiliser même si le handler ftp n'était pas installé

Il existe alors deux types de DataSources en fonction de l'emetteur et du récepteur :

Les formats de fichiers multimédias sont gérés par des classes de type Format contenant les attributs spécifiques du format utilisé.

Les managers

Pour simplifier l'utilisation des différentes fonctions de l'API, JMF fournit des classes Managers permettant d'accéder à tous les services principaux. Cela permet de centraliser les différentes fonctions :

Les Players

Un objet Player prend un flux en entrée sous la forme d'un DataSource et le présente(effectue un rendu) à un temps donné. On peut alors le configurer pour obtenir le rendu que l'on désire. Il est en fait le lecteur qui va nous permettre d'interpréter le flux et l'afficher.

Il peut se trouver dans six états différents en respectant l'ordre suivant :

Le Player envoie des "TransitionEvents" lorsqu'il passe d'un état à un autre.

L'objet Processor

Les données d'un flux média sont soumises à un traitement avant d'être présentées à un utilisateur. On pourra alors effectuer les opérations suivantes avant la présentation du média :

L'objet Processor est en fait un Player particulier pouvant contrôler les traitement effectués sur le flux. Il peut présenter un média ou proposer un nouveau DataSource en sortie.

Un exemple simple

Voici un exemple simple sur la méthode "init" d'une applet :


public static void init {    //adresse de la source correspondant à un flux RTP    String SourceAddress = "rtp://192.168.0.1:33335/video/1";    //création de la source    MediaLocator SourceLocator = new MediaLocator(SourceAddress);    //Verification que la source existe    if(SourceLocator == null)    {      System.out.println("pas de source");      System.exit(-1);    }    else    {      System.out.println("Connecté au flux");    }    //l'objet Player qui va présenter le flux    Player player;    try    {      //Creation du player dans l'etat realized avec la source      player = Manager.createRealizedPlayer(SourceLocator);      //Demarrage du Player      player.start();      //Creation d'une fenetre de test      JFrame fenetre = new JFrame("Player");      fenetre.setSize(180,160);      //Ajout du Composant visuel du Player dans la fenetre      fenetre.getContentPane().add(player.getVisualComponent());      fenetre.setVisible(true);    }    catch (Exception e)    {      e.printStackTrace();    } }

Cet exemple montre uniquement la création d'un Player basique. Il est possible ensuite de lui ajouter de nombreuses fonctionnalités afin d'améliorer les services offerts à l'utilisateur

On peut également choisir d'enregistrer le flux arrivant plutôt que de le présenter en utilisant un objet DataSink :

	
		DataSink sink;
		MediaLocator dest = new MediaLocator("file://newfile.wav");
		try {
			//p est le processor qui a reçu le flux
			sink = Manager.createDataSink(p.getDataOutput(), dest); 
			sink.open();
			sink.start();
		} catch (Exception) {}