Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [JAVA - JMF] corretta stringa rtp

    ciao a tutti...sto sperimentando il funzionamento della JMF.
    attualmente il mio scopo è trasmettere un video acquisito da webcam ad un altro processo che risiede sulla stessa macchina...

    il trasmettitore sembra funzionare, in quanto la webcam si accende e sembra che catturi il video.
    il ricevitore invece non riesce a creare il player (nessun Realize event), credo perchè non riceva il flusso video dalla sessione rtp.

    ho utilizzato la stringa "rtp://localhost:9999/video/1" su entrambi i lati della comunicazione, per costruire il media locator.

    è corretto? mi sapreste spiegare meglio il significato dell' 1 a fine stringa? in realta NON so se serve, sono partito da un esempio in cui si trasmetteva audio e non so se questo ha senso in caso di trasmissione video!!

    grazie per l'aiuto!

  2. #2

  3. #3
    Prova ad usare come client un programma tito vlc o xine in modo da capire se l'errore è lato server o lato client.

  4. #4
    salve... grazie per la risposta, ho provato in ogni modo e nemmeno con vlc riesco a vedere il flusso video, ma potrebbe essere che abbia sbagliato la stringa per collegarmi.

    ho provato con
    rtp://localhostorta/video ma nn funziona.

    sapete dirmi che stringa dovrei usare in vlc e quale nell'applicazione per una trasmissione / ricezione di un flusso video?

    grazie mille!

  5. #5
    nessuno ha mai avuto a che fare con le stringhe rtp??????

    aiuto !!!!!!

  6. #6
    Bisognerebbe vedere il sorgente. Ho avuto grosse difficoltà anch'io con JMF. Dipende anche da quale formato video usi e dalla compressione.

  7. #7
    dopo un po di cose iniziali,

    processor = Manager.createProcessor(v.getLocator());

    poi mi metto in ascolto degli eventi generati come segue (ci sono parecchie cose in più e che vanno riviste, sono partito da un test più semplice):

    public void controllerUpdate(ControllerEvent ce)
    {
    if (ce instanceof ConfigureCompleteEvent)
    {
    processor.setContentDescriptor(new ContentDescriptor(ContentDescriptor.RAW_RTP));
    TrackControl track[] = processor.getTrackControls();
    boolean encodingOk = false;

    for (int i = 0; i < track.length; i++)
    {
    if (!encodingOk && track[i] instanceof FormatControl)
    {
    //if (((FormatControl)track[i]).setFormat(new VideoFormat(VideoFormat.H261_RTP)) == null)
    //{
    //track[i].setEnabled(false);
    //}
    //else
    //{
    encodingOk = true;
    //}
    }
    else
    {
    // we could not set this track to gsm, so disable it
    track[i].setEnabled(false);
    }
    if (encodingOk)
    {
    processor.realize();
    System.out.println("chiamato realize");
    }
    else
    System.err.println("Impossibile effettuare il realize");
    }
    }
    else if (ce instanceof RealizeCompleteEvent)
    {
    System.out.println("evento realize");
    DataSource ds = null;
    try {
    ds = processor.getDataOutput();
    } catch (NotRealizedError e) {
    System.exit(-1);
    }
    // hand this datasource to manager for creating an RTP
    // datasink our RTP datasimnk will multicast the audio
    try {
    String url= "rtp://localhost:9999/video";
    MediaLocator m = new MediaLocator(url);
    sink = Manager.createDataSink(ds, m);
    sink.open();
    sink.start();
    } catch (Exception e) {
    System.exit(-1);
    }
    //processor.prefetch();
    }
    else if (ce instanceof PrefetchCompleteEvent)
    {
    if (visual != null)
    return;

    if ((visual = processor.getVisualComponent()) != null)
    {
    Dimension size = visual.getPreferredSize();
    videoWidth = size.width;
    videoHeight = size.height;
    getContentPane().add("Center", visual);
    }
    else
    videoWidth = 320;

    if ((control = processor.getControlPanelComponent()) != null)
    {
    controlHeight = control.getPreferredSize().height;
    getContentPane().add("South", control);
    }

    MonitorControl monitor = (MonitorControl) processor.getDataOutput().getControl("MonitorContr ol");
    if(visual != null && monitor != null)
    {
    System.out.println("trovato Monitor");
    getContentPane().add("Center", monitor.getControlComponent());
    }

    this.setSize(videoWidth + insetWidth, videoHeight + controlHeight + insetHeight);
    validate();

    DataSource source = processor.getDataOutput();
    MediaLocator location = new MediaLocator("rtp://localhost:9999/video/1");
    try
    {
    sink = Manager.createDataSink(source, location);
    sink.open();
    sink.start();
    processor.start();
    }
    catch (NoDataSinkException e)
    {
    e.printStackTrace();
    }
    catch (IOException e)
    {
    e.printStackTrace();
    }
    catch (SecurityException e)
    {
    e.printStackTrace();
    }
    }
    else if (ce instanceof EndOfMediaEvent)
    {
    processor.setMediaTime(new Time(0));
    processor.stop();
    sink.close();
    processor.deallocate();
    }

  8. #8
    Non so come aiutarti, anche io ho avuto molti sbattimenti con JMF. Cmq l'1 alla fine dovrebbe essere il TTL se non ricordo male.

  9. #9

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.