Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/03/2010, 17:50
JavaAyuda
 
Fecha de Ingreso: marzo-2010
Mensajes: 35
Antigüedad: 14 años, 2 meses
Puntos: 1
De acuerdo Ayuda Cliente/Servidor

Hola!

Expongo en este foro mi duda con la esperanza de que algun savio pueda ayudarme.
Estoy intentando desarrollar un sistema de "videoconferencia", creo, que tendria que resultar bastante sencillo para alguien que haya trabajado con la tecnologia de JMF puesto que lo que busco hacer es simplemente, mandar una señal de video mediante el JMStudio de la JMF mediante RTP y lograr recibirlo y remitirlo en tiempo real en un unico ordenador.

Aqui tengo el codigo que de momento estoy usando:

public class video
{
static JFrame v;
static JLabel estado;
static ServerSocket socket;
static Component video,controls;
static DataSource d;
static MediaLocator u;
static Player player;


public static void main(String[] args) throws InterruptedException, CannotRealizeException, NoPlayerException
{
v = new JFrame("Servidor Video Tecnos");
v.setVisible(true);
v.setSize(450,450);
v.setResizable(false);
v.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

new video();
}


public video() throws InterruptedException, CannotRealizeException, NoPlayerException
{
JPanel p1 = new JPanel();
p1.setBackground(Color.gray);
p1.setLayout(null);
v.add(p1);
p1.setLayout(null);
JPanel p2 = new JPanel();
p1.add(p2);
p2.setBounds(5,5,435,380);
p2.setBackground(Color.black);
JPanel p3 = new JPanel();
p3.setLayout(null);
p1.add(p3);
p3.setBounds(5,389,435,30);
p3.setBackground(Color.LIGHT_GRAY);
JMenuBar barra = new JMenuBar();
p3.add(barra);
barra.setBounds(0,0,435,30);

try {

estado = new JLabel(" Abriendo Puerto");
barra.add(estado);
ServerSocket socket = new ServerSocket(22222);
Thread.sleep(1000);
estado.setText(" Abriendo Puerto.");
Thread.sleep(1000);
estado.setText(" Abriendo Puerto..");
Thread.sleep(1000);
estado.setText(" Abriendo Puerto...");
Thread.sleep(3000);

estado.setText(" Esperando conexion...");

} catch (IOException e) {

estado.setText(" Fallo al intentar establecer conexion");
}
estado.setText("Recibiendo Datos");


Thread.sleep(1000);

u = new MediaLocator("vfw://0");

try {
estado.setText("Creando Player");
player = Manager.createPlayer(u);

Component vis =player.getVisualComponent();
Component con = player.getControlPanelComponent();

p2.add(vis,con);

Thread.sleep(1000);
estado.setText("Cargando Media");
player = Manager.createProcessor(u);
Thread.sleep(1000);
estado.setText("Cargando Media.");
Thread.sleep(500);

} catch (IOException ex) {
estado.setText("Error al cargar Player");
Logger.getLogger(video.class.getName()).log(Level. SEVERE, null, ex);
} catch (NoProcessorException ex) {
estado.setText("Error al cargar Player");
Logger.getLogger(video.class.getName()).log(Level. SEVERE, null, ex);
}
estado.setText("Recibiendo Datos.");
Thread.sleep(1000);
estado.setText("Recibiendo Datos..");
Thread.sleep(1000);
estado.setText("Recibiendo Datos...");
Thread.sleep(3000);
if ( player != null)
{
player.start();
}
}


}

u = new MediaLocator("vfw://0");

en este MediaLocator tengo la url "vfw://0" porque ahora estoy trabajando en LAN y supuse que dejando la como en el JMStudio venia de serie funcionaria.

Si mirais el codigo vereis que no uso ni, RTPManager, ni SessionManager ni RTPSocket... y supongo que un enorme etc... el motivo no es que sea mas chulo que nadie,, mas bien es que no tengo ni idea de como funcionan estos...
Juro a ver estado horas y horas, por no decir dias, buscando en google... y , pese que no puedo despotricar de la informacion encontrada, de mejor calidad ultimamente, esque no consigo nada, lo unico que he conseguido a sigo que, si enciendo mi "receptor RTP" tal i como en este cofigo esta, y a la vez tengo el JMStudio capturando por mi webcam, entoncees windows me pide unos permisos para realizar la reproduccion, cuando lo acepto, me salta un error, lo pongo tambien:

java.io.IOException: Could not connect to capture device
java.io.IOException: Could not connect to capture device
Exception in thread "main" javax.media.NoPlayerException: Error instantiating class: com.sun.media.protocol.vfw.DataSource : java.io.IOException: Could not connect to capture device
at javax.media.Manager.createPlayerForContent(Manager .java:1362)
at javax.media.Manager.createPlayer(Manager.java:417)
at javaapplication1.video.<init>(video.java:108)
at javaapplication1.video.main(video.java:56)



Cuando me pego este error, encontre que del MediaLocator, podia montar un DataSource, por asi decirlo, y entonces, copie este codigo en el trozito rojo, del codigo principal. Porsupusto tambien modifique el medialocator que puse como referencia en el Player, substituyendolo por el DataSource:

DataSource a = new DataSource();
a.setLocator(u);

De ninguna manera funciona, recientemente encontrado mucho sobre RTPManager, SessionManager, RTPSocket... con lo cual, he llegado a la conclusion de que mi codigo, hecho por ahora, ha quedado bastante fuera de juego.
Entonces, mi pregunta seria, cual es la manera para desarrollar un receptor de video via RTP sabiendo seguro que la transmision se efectuara desde el JMStudio?

Necesito respuesta a esto, porfavor, si alguien puede ayudarme, porfavor que lo haga!

Muchas gracias compañeros!
SaluX:si
:D