IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

RTP via JMF problème de connexion sur vps


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut RTP via JMF problème de connexion sur vps
    Hello !

    J'ai commencé à m’intéresse à la lib JMF qui est assez intéressante pour le streaming (je veux m'intéresser que a la partie audio).
    Au niveau réception via l'URL Rtp j'ai plutôt bien compris mais là où je bloque c'est au niveau de la transmission, j'ai trouvé une classe qui fonctionne nikel en local sur l'adresse (224.123.111.101) mais pas du tout dès que je passe par internet, j'ai regardé au niveau des convections UDP et il se trouve que j'utilise des ports qui changent à chaque nouvelle transmission au lieu d'utiliser le port que j'ai défini

    Voila la class que j'utilise :

    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
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    package test;
     
    /*
     * @(#)AudioTransmit.java	1.2 99/08/26
     *
     * Copyright (c) 1999 Sun Microsystems, Inc. All Rights Reserved.
     *
     * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
     * modify and redistribute this software in source and binary code form,
     * provided that i) this copyright notice and license appear on all copies of
     * the software; and ii) Licensee does not utilize the software in a manner
     * which is disparaging to Sun.
     *
     * This software is provided "AS IS," without a warranty of any kind. ALL
     * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
     * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
     * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
     * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
     * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
     * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
     * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
     * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
     * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
     * POSSIBILITY OF SUCH DAMAGES.
     *
     * This software is not designed or intended for use in on-line control of
     * aircraft, air traffic, aircraft navigation or aircraft communications; or in
     * the design, construction, operation or maintenance of any nuclear
     * facility. Licensee represents and warrants that it will not use or
     * redistribute the Software for such purposes.
     */
     
     
    import javax.media.*;
    import javax.media.protocol.*;
    import javax.media.format.*;
    import javax.media.control.TrackControl;
    import java.io.*;
     
     
    public class AudioTransmit {
     
        // Input MediaLocator
        // Can be a file or http or capture source
        private MediaLocator locator;
        private String ipAddress;
        private String port;
     
        private Processor processor = null;
        private DataSink  rtptransmitter = null;
        private DataSource dataOutput = null;
     
        public AudioTransmit(MediaLocator locator,
    			 String ipAddress,
    			 String port) {
     
    	this.locator = locator;
     
    	this.ipAddress = ipAddress;
     
    	this.port = port;
     
        }
     
        /**
         * Starts the transmission. Returns null if transmission started ok.
         * Otherwise it returns a string with the reason why the setup failed.
         */
        public synchronized String start() {
    	String result;
     
    	// Create a processor for the specified media locator
    	// and program it to output JPEG/RTP
    	result = createProcessor();
    	if (result != null)
    	    return result;
     
    	// Create an RTP session to transmit the output of the
    	// processor to the specified IP address and port no.
    	result = createTransmitter();
    	if (result != null) {
    	    processor.close();
    	    processor = null;
    	    return result;
    	}
     
    	// Start the transmission
    	processor.start();
     
    	return null;
        }
     
        /**
         * Stops the transmission if already started
         */
        public void stop() {
    	synchronized (this) {
    	    if (processor != null) {
    		processor.stop();
    		processor.close();
    		processor = null;
    		rtptransmitter.close();
    		rtptransmitter = null;
    	    }
    	}
        }
     
        private String createProcessor() {
    	if (locator == null)
    	    return "Locator is null";
     
    	// Try to create a processor to handle the input media locator
    	try {
    	    processor = Manager.createProcessor(locator);
    	} catch (NoProcessorException npe) {
    	    return "Couldn't create processor";
    	} catch (IOException ioe) {
    	    return "IOException creating processor";
    	} 
     
    	// Wait for it to configure
    	boolean result = waitForState(processor, Processor.Configured);
    	if (result == false)
    	    return "Couldn't configure processor";
     
    	// Get the tracks from the processor
    	TrackControl [] tracks = processor.getTrackControls();
     
    	// Do we have atleast one track?
    	if (tracks == null || tracks.length < 1)
    	    return "Couldn't find tracks in processor";
     
    	boolean programmed = false;
     
    	// Search through the tracks for a audio track
    	for (int i = 0; i < tracks.length; i++) {
    	    Format format = tracks[i].getFormat();
    	    if (  tracks[i].isEnabled() &&
    		  format instanceof AudioFormat &&
    		  !programmed) {
     
    		// Found a audio track. Try to program it to output .au & .wav
    		AudioFormat ulawFormat = new AudioFormat(AudioFormat.MPEG_RTP,
    							 44100,
    							 16,
    							 2);
    		tracks[i].setFormat(ulawFormat);
    		// Assume succesful
    		programmed = true;
    	    } else
    		tracks[i].setEnabled(false);
    	}
     
    	if (!programmed)
    	    return "Couldn't find audio track";
     
    	// Set the output content descriptor to RAW
    	ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW);
    	processor.setContentDescriptor(cd);
     
    	// Realize the processor. This will internally create a flow
    	// graph and attempt to create an output datasource for ULAW/RTP
    	// audio frames.
    	result = waitForState(processor, Controller.Realized);
    	if (result == false)
    	    return "Couldn't realize processor";
     
    	// Get the output data source of the processor
    	dataOutput = processor.getDataOutput();
    	return null;
        }
     
        // Creates an RTP transmit data sink. This is the easiest way to create
        // an RTP transmitter. The other way is to use the RTPSessionManager API.
        // Using an RTP session manager gives you more control if you wish to
        // fine tune your transmission and set other parameters.
        private String createTransmitter() {
    	// Create a media locator for the RTP data sink.
    	// For example:
    	//    rtp://129.130.131.132:42050/audio
    	String rtpURL = "rtp://" + ipAddress + ":" + port + "/audio";
     
    	System.err.println("<ATK: RTP URL: " + rtpURL + ">");
     
    	MediaLocator outputLocator = new MediaLocator(rtpURL);
     
    	// Create a data sink, open it and start transmission. It will wait
    	// for the processor to start sending data. So we need to start the
    	// output data source of the processor. We also need to start the
    	// processor itself, which is done after this method returns.
    	try {
    	    System.err.println("<ATK: 1>");
    	    rtptransmitter = Manager.createDataSink(dataOutput, outputLocator);
    	    System.err.println("<ATK: 2>");
    	    rtptransmitter.open();
    	    System.err.println("<ATK: 3>");
    	    rtptransmitter.start();
    	    System.err.println("<ATK: 4>");
    	    dataOutput.start();
    	    System.err.println("<ATK: 5>");
    	} catch (MediaException me) {
    	    System.err.println("MediaException");
    	    System.err.println(me.getMessage());
    	    return "Couldn't create RTP data sink";
    	} catch (IOException ioe) {
    	    System.err.println("<ATK: Content - " + rtptransmitter.getContentType());
    	    System.err.println("IOException");
    	    System.err.println(ioe.getMessage());
    	    return "Couldn't create RTP data sink";
    	}
     
    	return null;
        }
     
     
        /****************************************************************
         * Convenience methods to handle processor's state changes.
         ****************************************************************/
     
        private Integer stateLock = new Integer(0);
        private boolean failed = false;
     
        Integer getStateLock() {
    	return stateLock;
        }
     
        void setFailed() {
    	failed = true;
        }
     
        private synchronized boolean waitForState(Processor p, int state) {
    	p.addControllerListener(new StateListener());
    	failed = false;
     
    	// Call the required method on the processor
    	if (state == Processor.Configured) {
    	    p.configure();
    	} else if (state == Processor.Realized) {
    	    p.realize();
    	}
     
    	// Wait until we get an event that confirms the
    	// success of the method, or a failure event.
    	// See StateListener inner class
    	while (p.getState() < state && !failed) {
    	    synchronized (getStateLock()) {
    		try {
    		    getStateLock().wait();
    		} catch (InterruptedException ie) {
    		    return false;
    		}
    	    }
    	}
     
    	if (failed)
    	    return false;
    	else
    	    return true;
        }
     
        /****************************************************************
         * Inner Classes
         ****************************************************************/
     
        class StateListener implements ControllerListener {
     
    	public void controllerUpdate(ControllerEvent ce) {
     
    	    // If there was an error during configure or
    	    // realize, the processor will be closed
    	    if (ce instanceof ControllerClosedEvent)
    		setFailed();
     
    	    // All controller events, send a notification
    	    // to the waiting thread in waitForState method.
    	    if (ce instanceof ControllerEvent) {
    		synchronized (getStateLock()) {
    		    getStateLock().notifyAll();
    		}
    	    }
    	}
        }
     
     
     
        /****************************************************************
         * Sample Usage for AudioTransmit class
         ****************************************************************/
     
        public static void main(String [] args) {
    	// We need three parameters to do the transmission
    	// For example,
    	//   java AudioTransmit file:/C:/media/test.wav  129.130.131.132 42050
     
    	if (args.length < 3) {
    	    System.err.println("Usage: AudioTransmit <sourceURL> <destIP> <destPort>");
    	    System.exit(-1);
    	}
     
    	// Create a audio transmit object with the specified params.
    	AudioTransmit vt = new AudioTransmit(new MediaLocator(args[0]),
    					     args[1],
    					     args[2]);
    	// Start the transmission
    	String result = vt.start();
     
    	// result will be non-null if there was an error. The return
    	// value is a String describing the possible error. Print it.
    	if (result != null) {
    	    System.err.println("Error : " + result);
    	    System.exit(0);
    	}
     
    	// Transmit for 50 seconds and then close the processor
    	// This is a safeguard when using a capture data source
    	// so that the capture device will be properly released
    	// before quitting.
    	// The right thing to do would be to have a GUI with a
    	// "Stop" button that would call stop on AudioTransmit
    	try {
    	    Thread.currentThread().sleep(50000);
    	} catch (InterruptedException ie) {
    	}
     
    	// Stop the transmission
    	vt.stop();
     
    	System.exit(0);
        }
    }
    Donc si vous pouvez m'aider a impeux mieux comprendre d'ou vient le problème sa serais cool

    Merci d'avance pour vos réponses
    Cordialement

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    J'ai continué a faire des test et il se trouve que j'ai cette erreur quand je veut me connecté sur une ip internet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot assign requested address: Cannot bind
    Savez vous d'ou cela peut venir ?

Discussions similaires

  1. problème de connexion sur une base mysql
    Par boss_gama dans le forum Installation
    Réponses: 4
    Dernier message: 05/09/2006, 14h13
  2. problème de connexion sur un socket SSL
    Par koolway dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 21/06/2006, 11h20
  3. Réponses: 4
    Dernier message: 14/06/2006, 11h07
  4. [phpMyAdmin] Problème de connexion sur BDD avec phpMyAdmin 2.8.0.2
    Par romca dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 21/03/2006, 14h35
  5. Comment gérer les problèmes de connexion sur un idFTP ?
    Par giloutho dans le forum Web & réseau
    Réponses: 2
    Dernier message: 05/12/2005, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo