java audio-streaming rtp jmf

java - ¿Por qué JMF no está trabajando en la transmisión de audio con Mjsip?



audio-streaming rtp (1)

Estoy usando Mjsip para crear un softphone. En el código hay tres opciones de tipo para straming de audio.

  1. Usando JMF (Java Media Framework)
  2. Usando Java Audio
  3. Usando RAT (Robusta Herramienta de Audio)

No estoy usando la RAT. Su valor se ha hecho falso por mí mismo. Este es el siguiente código para llamar a JMF:

public JMFAudioLauncher(int local_port, String remote_addr, int remote_port, int direction, Log logger) { log=logger; localport=local_port; remoteport=remote_port; remoteaddr=remote_addr; // Patch for working with JMF with local streams if (remote_addr.startsWith("127.")) { printLog("Patch for JMF: replaced local destination address "+remote_addr+" with 255.255.255.255"); remote_addr="255.255.255.255"; } dir=direction; if (dir>=0) sender=new JMediaSender("audio",null,remote_addr,remote_port); if (dir<=0) receiver=new JMediaReceiver("audio",local_port,null); } /** Starts media application */ public boolean startMedia() { printLog("launching JMF-Audio..."); String err1=null, err2=null; if (sender!=null) err1=sender.start(); if (err1!=null) printLog("Error trying to send audio stream: "+err1); if (receiver!=null) err2=receiver.start(); if (err2!=null) printLog("Error trying to receive audio stream: "+err2); return (err1==null && err2==null); } /** Stops media application */ public boolean stopMedia() { String err1=null, err2=null; if (sender!=null) err1=sender.stop(); if (err1!=null) printLog("Error stopping audio sender: "+err1); if (receiver!=null) err2=receiver.stop(); if (err2!=null) printLog("Error stopping audio receiver: "+err2); return (err1==null && err2==null); }

Pero no se está lanzando. Todavía puedo hablar con mi softphone. Pero en el registro se muestra ...

UA: REGISTRATION UA: Registration success: 200 OK UA: INCOMING UA: CONFIRMED/CALL UA: Error trying to create the JMFAudioLauncher AudioInput: TargetDataLine: com.sun.media.sound.DirectAudioDevice$DirectTDL@239525 AudioOutput: SourceDataLine: com.sun.media.sound.DirectAudioDevice$DirectSDL@f942c4 AudioLauncher: starting java audio..

Pero el uso del valor JMF es verdadero para el perfil_usuario_usuario y el error se genera a partir de este código.

if (user_profile.audio && local_audio_port!=0 && remote_audio_port!=0) { if (user_profile.use_rat) // create an audio_app and start it { audio_app=new RATLauncher(user_profile.bin_rat,local_audio_port,remote_media_address,remote_audio_port,log); } else if (user_profile.use_jmf) { // check if JMF is supported try { Class myclass=Class.forName("local.ua.JMFAudioLauncher"); Class[] parameter_types={ Class.forName("int"), Class.forName("java.lang.String"),Class.forName("int"), Class.forName("int"), Class.forName("org.zoolu.tools.Log") }; Object[] parameters={ new Integer(local_audio_port), remote_media_address, new Integer(remote_audio_port), new Integer(dir), log }; java.lang.reflect.Constructor constructor=myclass.getConstructor(parameter_types); audio_app=(MediaLauncher)constructor.newInstance(parameters); } catch (Exception e) { printException(e,LogLevel.HIGH); printLog("Error trying to create the JMFAudioLauncher",LogLevel.HIGH); } } // else if (audio_app==null) { // for testing.. String audio_in=null; if (user_profile.send_tone) audio_in=JAudioLauncher.TONE; else if (user_profile.send_file!=null) audio_in=user_profile.send_file; String audio_out=null; if (user_profile.recv_file!=null) audio_out=user_profile.recv_file; //audio_app=new JAudioLauncher(local_audio_port,remote_media_address,remote_audio_port,dir,log); audio_app=new JAudioLauncher(local_audio_port,remote_media_address,remote_audio_port,dir,audio_in,audio_out,user_profile.audio_sample_rate,user_profile.audio_sample_size,user_profile.audio_frame_size,log); } audio_app.startMedia(); }

¿Qué puedo hacer para habilitar JMF?


¿Puede tomarse un tiempo y encontrar en qué línea se produce el error en esta parte del código?

// check if JMF is supported try{ Class myclass=Class.forName("local.ua.JMFAudioLauncher"); Class[] parameter_types={ Class.forName("int"), Class.forName("java.lang.String"),Class.forName("int"), Class.forName("int"), Class.forName("org.zoolu.tools.Log") }; Object[] parameters={ new Integer(local_audio_port), remote_media_address, new Integer(remote_audio_port), new Integer(dir), log }; java.lang.reflect.Constructor constructor=myclass.getConstructor(parameter_types); audio_app=(MediaLauncher)constructor.newInstance(parameters); } catch (Exception e){ printException(e,LogLevel.HIGH); printLog("Error trying to create the JMFAudioLauncher",LogLevel.HIGH); }