-
Client et serveur RTP
Bonsoir
je voulais créer une application java qui va permettre a un client de lire a distance une vidéo chez un serveur (a l'aide de RTP) mais le problème réside dans code du client l’ouverture de la session RTP
Connected
Cannot create the RTP Session: Can't open local data port: 22224
Erreur null
======
code
package newclient;
import javax.media.*;
import javax.media.rtp.*;
import javax.media.rtp.event.*;
import javax.media.format.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class Main
{
public static void main(String[] args)
{
//Adresse de la Source
String sourceAddress = "rtp://127.0.0.1:22224/video/1";
//Creation du MediaLocator avec l'adresse de la Source
MediaLocator sourceLocator = new MediaLocator(sourceAddress);
// Verification que la source existe dans le cas contraire, arret du programme
if(sourceLocator == null)
{
System.out.println("no Source");
System.exit(-1);
}
else
{
System.out.println("Connected");
}
// Declaration du Player
Player player;
try
{
// Creation du player réalisé à partir du MediaLocator de la source
player = Manager.createRealizedPlayer(sourceLocator);
System.out.println("Création du player à réaliser");
// Demarrage du Player
player.start();
System.out.println("Demarrage du player réussie");
// Creation d'une JFrame
JFrame fenetre = new JFrame("Player");
fenetre.setSize(160,140);
// Ajout du Composant visuel du Player dans la fenetre (pour un flux vidéo)
fenetre.getContentPane().add(player.getVisualComponent());
fenetre.setVisible(true);
}
catch (NoPlayerException e)
{
System.out.println("Erreur " + e.getMessage());
}
catch (IOException e)
{
System.out.println("Erreur " + e.getMessage());
}
catch (CannotRealizeException e)
{
System.out.println("Erreur " + e.getMessage());
}
}
}
==============
package newserveur;
import javax.media.*;
import javax.media.rtp.*;
import javax.media.format.*;
import javax.media.control.*;
import javax.media.protocol.*;
import java.io.*;
import java.net.*;
public class Main {
public static 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;
}
public static 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);
}
}
}
public static 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;
}
public static void demarre(Processor p)
{
//Demarrage du Processor
p.start();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
//Entrée de l'adresse du fichier
String fichierAdresse = "file://d:/b.avi";
//Création du MédiaLocator à partir de ce fichier
MediaLocator fichierLocator = new MediaLocator(fichierAdresse);
//Declaration du Processor
Processor fichierCessor = null;
try
{
//Creation du Processor à partir du Medialocator
fichierCessor = Manager.createProcessor(fichierLocator);
fichierCessor = configure(fichierCessor);
setSupportedFormat(fichierCessor);
fichierCessor = realize(fichierCessor);
demarre(fichierCessor);
System.out.println("Creation du processor a partir du Medialocator réussie");
}
catch(IOException e)
{
System.out.println("Erreur : " + e.getMessage());
}
catch(NoProcessorException e)
{
System.out.println("Erreur : " + e.getMessage());
}
//Creation du DataSource correspondant au Processor
DataSource fichierSource = fichierCessor.getDataOutput();
//Adresse de Destination
String outputAddress = "rtp://127.0.0.1:22224/video/1";
//Creation du MediaLocator pour l'Adresse de destination
MediaLocator outputLocator = new MediaLocator(outputAddress);
try
{
//Creation du DataSink
DataSink outputSink = Manager.createDataSink(fichierSource, outputLocator);
//Ouverture du DataSink
outputSink.open();
//Demarrage du DataSink
outputSink.start();
System.out.println("Started");
}
catch(IOException e)
{
System.out.println("Erreur" + e.getMessage());
}
catch(NoDataSinkException e)
{
System.out.println("Erreur" + e.getMessage());
}
}
}
-
Il faudrait que tu utilises les balises de code prévue pour ça, ton code sera plus lisible sur le forum.
Ton port est peut être déjà utilisé par un autre programme ou protocole.