Chinese (People's Republic of China)  English  Français


Supinfo-Projects.com
Tous les projets des élèves ingénieurs de Supinfo



Projets
  Dernier Projet
  Les plus populaires
  Tous les Projets

160 Visiteurs
3168 Projets


My Supinfo-Projects

   Connectez-vous
   Créez un Compte


Synopsis

   1046 Visites
   Note INTERNET : 16.5
    (15 Votants)
   6 Commentaires

   Lire l'article

Evaluez cet article

20
18
16
14
12
10
8
6
4
2
0


Commentez cet article

Auteur :

Email :

Votre commentaire :



 
2004 - Pérennisation
Les bases du Protocole RTP en Java
[30 mn de lecture - paru le 5/11/2004 7:42:41 AM - Public : Confirmé]

Auteur

thirio_rRenaud THIRION
Elève-Ingénieur Supinfo Paris
Promotion SUPINFO 2005

   Lui écrire
   Tous les projets de cet auteur
   Le mini-CV de cet auteur

3. Transmission du RTP : Finalisation

3.1. Base

Pour envoyer un flux vers quelqu'un d’autre, on a le choix d’utiliser un DataSink ou un RTPManager. L’utilisation du DataSink est moins complexe, mais l’utilisation du RTPManager permet plus de choses.

3.1.1. Emploi du DataSink

On peut utiliser un DataSink pour envoyer en sortie le flux.
Dans ce cas, il faut obtenir un DataSource à l’aide de la méthode getDataOutput() du Processor, et il faut créer un MédiaLocator sur l’adresse et le port de la personne qui est la destination du flux. Puis on crée un DataSink à l’aide de ce MédiaLocator et du DataSource.

Enfin, on ouvre ce DataSink et on le démarre.

public void createDataSink(Processor p)

{

       //Creation du DataSource correspondant au Processor

       DataSource WebcamSource = p.getDataOutput();

                          

       //Adresse de Destination

       String OutputAddress = "rtp://192.168.3.6:22224/video/1";

       //Creation du MediaLocator pour l'Adresse de destination

       MediaLocator OutputLocator = new MediaLocator(OutputAddress);

             

       try

       {

              //Creation du DataSink

              DataSink OutputSink =Manager.createDataSink(

                     WebcamSource,OutputLocator);

              //Ouverture du DataSink

              OutputSink.open();

              //Demarrage du DataSink

              OutputSink.start();

              System.out.println("Started");

       }

       catch(IOException e)

       {

       }

       catch(NoDataSinkException e)

       {

       }

}

3.1.2. Emploi du RTPManager

Pour utiliser un RTPManager, il faut d’abord obtenir le DataSource à partir du Processor et de la méthode getDataOutput(). Ensuite, il faut créer une nouvelle instance du RTPManager à l’aide de la méthode statique newInstance() du RTPManager.
On doit alors faire appel à la méthode initialize() du RTPManager, dans laquelle on met une SessionAddress correspondant à l’adresse locale.
Puis, on doit ajouter une destination à l’aide de la méthode addTarget() du RTPManager, dans laquelle on entre une SessionAddress correspondant à l’adresse de destination.

Enfin on crée un envoi de flux à l’aide de la méthode createSendStream() et on le démarre.

public void createRTPManager(Processor p)

{

       //Creation du DataSource correspondant au Processor

       DataSource OutputSource = p.getDataOutput();

             

       //Nouvelle Instance d'un RTPManager

       RTPManager rtpm = RTPManager.newInstance();

             

       try

       {

              //Création d'une SessionAddress

              //     correspondant à l'adresse locale

              SessionAddress localaddr = new SessionAddress

                     (InetAddress.getLocalHost(),40000);

              //Initialisation du RTPManager

              //     à partir de la SessionAddresse locale

              rtpm.initialize(localaddr);

                    

              //Création d'une SessionAddress

              //     correspondant à l'adresse de destination       

              SessionAddress destaddr = new SessionAddress

                     (InetAddress.getByName("192.168.3.6"),22224);

              //Ajout de cette SessionAddress dans le RTPManager

              rtpm.addTarget(destaddr);

                    

              //Creation d'un SendStream à partir du DataSource

              SendStream ss2 = rtpm.createSendStream(OutputSource,0);

              //Demarrage du SendStream

              ss2.start();

              System.out.println("Started");

       }

       catch(UnknownHostException e)

       {

       }     

       catch(IOException e)

       {

       }

       catch(InvalidSessionAddressException e)

       {

       }

       catch(UnsupportedFormatException e)

       {

       }

}

3.2. Envoi d'une source de flux unique vers plusieurs destinations

Il peut arriver qu'on doive transmettre notre source sur vers plusieurs IP, dans le cas de visioconférences par exemple. Dans ce cas, on a deux possibilités :
- le clonage du DataSource
- L’utilisation d’un RTPManager

3.2.1. Le clonage du DataSource

On peut, à partir du DataSource créé, faire un deuxième DataSource clonable à l aide de la méthode « createCloneableDataSource(DataSource s) » du Manager. A partir de ce deuxième DataSource, on pourra enfin créer un DataSource cloné grâce à la méthode createClone() de la classe SourceCloneable. Il suffira ensuite de créer autant de DataSink que l’on a de DataSource et de MediaLocator.

//Création du Premier DataSource à partir

//du processor configuré et réalisé

DataSource WebcamSource = WebcamCessor.getDataOutput();

//Création du Deuxieme DataSource

//qui est un Cloneable DataSource

DataSource WebcamSource2 =

       Manager.createCloneableDataSource(WebcamSource);

//Création du Troisime DataSouce

//qui est un DataSource cloné du deuxième

DataSource WebcamSource3 =

       ((SourceCloneable)WebcamSource2).createClone();

//Création du Troisime DataSouce

//qui est un DataSource cloné du deuxième

DataSource WebcamSource4 =

       ((SourceCloneable)WebcamSource2).createClone();

try

{

       //Creation du Premier MediaLocator, pour la premiere IP

       MediaLocator m =

              new MediaLocator("rtp://192.168.3.6:22224/video/1");

       //Creation du Premier DataSink, pour le Premier MediaLocator

       //     avec le premier DataSource

       DataSink dsk = Manager.createDataSink(WebcamSource2,m);

       //Ouverture du DataSink

       dsk.open();

       //Demarrage du DataSink

       dsk.start();

                    

       //Creation du Deuxieme MediaLocator, pour la deuxieme IP

       MediaLocator m3=

              new MediaLocator("rtp://192.168.3.2:22224/video/1");

       //Creation du Deuxieme DataSink, pour le Deuxieme MediaLocator

       //     avec le deuxieme DataSource

       DataSink dsk3 = Manager.createDataSink(WebcamSource3,m3);

       //Ouverture du DataSink

       dsk3.open();

       //Demarrage du DataSink

       dsk3.start();

                    

       //Creation du Deuxieme MediaLocator, pour la deuxieme IP

       MediaLocator m4=

              new MediaLocator("rtp://192.168.3.6:40000/video/1");

       //Creation du Deuxieme DataSink, pour le Deuxieme MediaLocator

       //     avec le deuxieme DataSource

       DataSink dsk4 = Manager.createDataSink(WebcamSource4,m4);

       //Ouverture du DataSink

       dsk4.open();

       //Demarrage du DataSink

       dsk4.start();

}                   

catch(Exception e)

{

       System.out.println("Erreur4 "+e.getMessage());

}

3.2.2. Emploi du RTPManager

Pour avoir plusieurs destinations à l’aide d’un RTPManage, la manière est plus simple, il suffit juste d’ajouter autant de cible avec la méthode addTarget() que l’on a de destinations. Ensuite pour chaque cible, on crée un envoi de flux que l’on démarre.

public void createRTPManager2(Processor p)

{

       //Creation du DataSource correspondant au Processor

       DataSource OutputSource = p.getDataOutput();

             

       //Nouvelle Instance d'un RTPManager

       RTPManager rtpm = RTPManager.newInstance();

             

       try

       {

              //Création d'une SessionAddress

              //     correspondant à l'adresse locale

              SessionAddress localaddr = new SessionAddress

                     (InetAddress.getLocalHost(),40000);

              rtpm.initialize(localaddr);

                    

              //Création d'une SessionAddress

              //correspondant à la première adresse de destination

              SessionAddress destaddr1 = new SessionAddress

                     (InetAddress.getByName("192.168.3.6"),22224);

              //Ajout de la première SessionAddress dans le RTPManager

              rtpm.addTarget(destaddr1);

              //Creation d'un premier SendStream à partir du DataSource

              //     Ce SendStream enverra le flux

              //     à la première adresse de destination

              SendStream ss = rtpm.createSendStream(OutputSource,0);

              //Demarrage du premier SendStream

              ss.start();

      

              //Création d'une SessionAddress

              //correspondant à la seconde adresse de destination     

              SessionAddress destaddr2 = new SessionAddress

                     (InetAddress.getByName("192.168.3.2"),22224);

              //Ajout de la seconde SessionAddress dans le RTPManager

              rtpm.addTarget(destaddr2);

              //Creation d'un second SendStream à partir du DataSource

              //     Ce SendStream enverra le flux

              //     à la première adresse de destination

              SendStream ss2 = rtpm.createSendStream(OutputSource,0);

              //Demarrage du second SendStream

              ss2.start();

                    

              System.out.println("Started");

       }

       catch(UnknownHostException e)

       {

       }     

       catch(IOException e)

       {

       }

       catch(InvalidSessionAddressException e)

       {

       }

       catch(UnsupportedFormatException e)

       {

       }

}




Articles de la même catégorie

 Pages : Top


410 Visites
0 Commentaires
In the discovery of the registry
[20 mn de lecture - paru le 5/11/2004 2:10:00 AM - Public : Confirmé]

En savoir plus


220 Visites
0 Commentaires
Introduction to Delphi 8
[15 mn de lecture - paru le 5/11/2004 1:42:51 AM - Public : Confirmé]

En savoir plus


214 Visites
0 Commentaires
Development step by step of Paint in C# with GDI+
[60 mn de lecture - paru le 5/11/2004 1:33:24 AM - Public : Débutant]

En savoir plus

   Tous les Articles


SUPINFO Training Center peut vous proposer une formation ...

   Devenez Ingénieur Système Microsoft en 35 jours avec SUPINFO Training Center
   Devenez Certifiés Cisco en 13 jours avec SUPINFO Training Center
   Devenez Administrateur Système Microsoft avec SUPINFO Training Center
   Devenez Développeur Microsoft .NET en 13 jours avec SUPINFO Training Center



Powered by Campus-Booster Technology
Conditions d'utilisation & Copyright | Respect de la vie privée
© Copyright 1965-2006 Supinfo Paris, Paris Academy of Computer Science
Supinfo, Ecole Supérieure d'Informatique et Paris Academy Of Computer Science are trade marks.
23, rue de Château LANDON - 75010 PARIS - Phone : +33 (0) 153359 700 Fax : +33 (0) 153359 701

Web site autided by :