Problemas ejecutando aplicacion con JMF

Aransay
19 de Abril del 2009
Hola.
Tengo un problema ejecutando una aplicación con Java Media Framework. Es solo una aplicación inicial de prueba, que lo único que hace es leer un fichero de mp3 y lo almacena en otro fichero mp3.
Sigo los pasos que vienen en la API Guide de JMF al pie de la letra: creo un DataSource para el fichero original, despues un Processora partir del DataSource, que configuro y realizo, y seguidamente obtengo del processor un DataSource de salida que conecto con DataSink para almacenar el fichero resultado. Todo parece funcionar, hasta que creo el DataSink, y me salta la excepción siguiente:

javax.media.NoDataSinkException: Cannot find a DataSink for: [email protected]5b

at javax.media.Manager.createDataSink(Manager.java:1894)

at TranferMedia.transfer(TranferMedia.java:46)

at Principal.main(Principal.java:15)

Cannot find a DataSink for: [email protected]5b

La clase que realiza el proceso es la siguiente:

import javax.media.*;

import javax.media.protocol.*;
import javax.media.datasink.DataSinkListener;
import javax.media.datasink.DataSinkEvent;
import javax.media.datasink.EndOfStreamEvent;
import javax.media.control.TrackControl;


public class TranferMedia implements DataSinkListener{

public TranferMedia() { }

MediaLocator ml_source;
MediaLocator ml_dest;
Processor p ;

public void transfer() {

String filename = "file:/F:/wkf/PruebasJMF/file.mp3";
String filename_out = "file:/F:/wkf/PruebasJMF/file_out.wav";

ml_source = new MediaLocator(filename);
ml_dest = new MediaLocator(filename_out);

try {
DataSource data = Manager.createDataSource(ml_source);
p = Manager.createProcessor(data);

System.out.println("Configurando processor...");
p.configure();
while (p.getState() != Processor.Configured) {/*nada*/}
System.out.println("Processor configurado.");


TrackControl track[] = p.getTrackControls();
System.out.println("format prev= "+track[0].getFormat());


p.realize();
while (p.getState() != Processor.Realized) { /*nada*/}

System.out.println("Creando dataSink");

DataSink sink = Manager.createDataSink(p.getDataOutput(), ml_dest);
sink.addDataSinkListener(this);
sink.open();

sink.start();



}
catch (Exception ex) {
System.out.println(""+ex.getMessage());
ex.printStackTrace();
}
}


public void dataSinkUpdate(DataSinkEvent ev) {

System.out.println("evento: "+ev.toString());

if (ev instanceof EndOfStreamEvent) {
ev.getSourceDataSink().close();
}


}


}

No se cual es el problema ni porque puede fallar. El JMF está bien configurado y tengo el plugin MP3 de SUN (de hecho el JMFStudio funciona perfectamente con mp3). De todas formas falla igual incluso con ficheros WAV

¿Alguna idea?
Gracias de antemano


Ghalia
19 de Abril del 2009
MMM no se si este bien yo lo compilé y NO me apareció nungun error lo unico que hice es que en la linea de :

String filename = "file:/F:/wkf/PruebasJMF/file.mp3";

CAMBIÉ POR:
String filename = "file://F:/wkf/PruebasJMF/file.mp3";

Lo unico que hice es poner una digonal masME COMPILA pero aun no me corre, creo que solo son detalles del main