2012-01-28 14 views
18

Sto usando Mjsip per creare un softphone. Nel codice ci sono tre opzioni di tipo per lo straming audio.Perché JMF non funziona sullo streaming audio con Mjsip?

  1. Utilizzando JMF (Java Media Framework)
  2. Utilizzo di Java Audio
  3. Utilizzando RAT (Robust Audio Tool)

Non sto usando il RAT. Il suo valore è stato reso falso da me stesso. Questo è il codice sottostante per chiamare 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);  
} 

Ma non è in fase di lancio. Posso ancora parlare con il mio softphone. Ma nel registro mostra ...

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.. 

Ma usando il valore JMF è vero per l'user_agent_profile e l'errore genera da questo codice.

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(); 
    } 

Cosa posso fare per abilitare JMF?

+0

È possibile correggere il rientro del codice. Puoi vedere come appare. Risolvendolo lo renderà almeno più leggibile. – Bart

+0

@Bart: ho migliorato alcuni formtting, in realtà perché stai dicendo che il mio codice è illeggibile? Dammi suggerimenti specifici su una migliore formattazione. Grazie –

+1

@ Alvi_1987 Vediamo se hai più fortuna ora. – Aristos

risposta

2

Potete per favore prendere un po 'di tempo e trovare in quale riga viene generato l'errore su questa parte di codice?

// 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 per il riferimento per quel q/a, c'era una domanda su meta su quella domanda, aggiungo qualche taglia in quel momento e posto quella risposta cercando di aiutare. Ecco la meta domanda: http://meta.stackexchange.com/questions/122809/why-are-my-questions-remaining-unanswered-for-a-long-time – Aristos

Problemi correlati