Bonjour tout le monde

Dans le but de réaliser un module VOD avec JMF, j'ai essayé d’implémenter un serveur qui diffuse un fichier vidéo stocké sur le disque dur de celui-ci vers un client.
Le client lui, devrait capter le flux vidéo en provenance de l'adresse du serveur et essaye de le visualiser. Cependant, le client n’arrive pas à visualiser la vidéo.

Voici le code du serveur :
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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:/test.mov";
 
        //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://192.168.3.2: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());
       }
    }
}
D'un autre côté le code du client est :
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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://192.168.3.6: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());
        }
    }
}
Lors de l'exécution du serveur voici le message qui est affiché :
init:
deps-jar:
compile:
run:
Creation du processor a partir du Medialocator réussie
streams is [Lcom.sun.media.multiplexer.RawBufferMux$RawBufferSourceStream;@b1b4c3 : 2
sink: setOutputLocator rtp://192.168.3.2:22224/video/1
Started
Lors de l'exécution du client j’obtiens
Connected
Les deux programmes ont l'air de bien fonctionner, cependant il y a un problème chez le client à partir de la ligne du code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
player = Manager.createRealizedPlayer(sourceLocator);
à partir de laquelle le client reste bloqué et ne peut pas terminer l’exécution du reste du code pour visualiser la vidéo.
Les deux machines 192.168.3.2 (client) et 192.168.3.6 (serveur) sont bien connectées.

Pouvez vous m'aider à résoudre ce problème ?

Merci d'avance