2012-01-28 12 views
18

Estoy usando Mjsip para crear un softphone. En el código hay tres opciones de tipo para straming de audio.¿Por qué JMF no está trabajando en la transmisión de audio con Mjsip?

  1. Usando JMF (Java Media Framework)
  2. Uso de Java Audio
  3. Usando RAT (Herramienta de audio robusto)

no estoy utilizando la rata. Su valor ha sido 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 está siendo lanzado. Todavía puedo hablar con mi softphone. Sin embargo, en el registro que muestra ...

UA: REGISTRATION 
UA: Registration success: 200 OK 
UA: INCOMING 
UA: CONFIRMED/CALL 
UA: Error trying to create the JMFAudioLauncher 
AudioInput: TargetDataLine: [email protected] 
AudioOutput: SourceDataLine: [email protected] 
AudioLauncher: starting java audio.. 

pero utilizando el valor JMF es cierto para el user_agent_profile y el error 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?

+0

Es posible que desee corregir la sangría de su código. Puedes ver cómo se ve. Arreglarlo lo hará al menos más legible. – Bart

+0

@Bart: he mejorado algunas formas, ¿por qué estás diciendo que mi código es ilegible? Dame una sugerencia específica sobre el formato mejorado. Gracias –

+1

@ Alvi_1987 A ver si tienes más suerte ahora. – Aristos

Respuesta

2

¿Puede tomar un momento y buscar en qué línea se emite 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); 
    } 
+0

Solo para la referencia de ese q/a, había una pregunta en meta sobre esa pregunta, agrego algo de generosidad en ese momento y coloco esa respuesta tratando de ayudar. Aquí está la meta pregunta: http://meta.stackexchange.com/questions/122809/why-are-my-questions-remaining-unanswered-for-a-long-time – Aristos

Cuestiones relacionadas