2012-01-28 8 views
18

Używam Mjsip do tworzenia softphone. W kodzie znajduje się trzy opcje typów dla ścieżki dźwiękowej.Dlaczego JMF nie pracuje nad strumieniowym przesyłaniem dźwięku za pomocą Mjsip?

  1. Korzystanie JMF (Java Media Framework)
  2. Korzystanie Java audio
  3. Korzystanie szczur (Robust audio Tool)

nie używam szczura. Jego wartość jest fałszywa. Poniższy kod służy do wywoływania 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);  
} 

Ale nie jest uruchamiany. Nadal mogę porozmawiać z moim softphonem. Ale w dzienniku to widać ...

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

ale stosując wartość JMF jest prawdziwe dla user_agent_profile a błąd generuje z tego kodu.

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

Co mogę zrobić, aby włączyć JMF?

+0

Być może zechcesz poprawić wcięcie swojego kodu. Możesz zobaczyć, jak to wygląda. Naprawienie go spowoduje, że będzie on co najmniej bardziej czytelny. – Bart

+0

@Bart: Poprawiłem trochę formułowania, właściwie dlaczego mówisz, że mój kod jest nieczytelny? Podaj mi konkretne sugestie dotyczące ulepszonego formatowania. Dzięki –

+1

@ Alvi_1987 Zobacz, czy masz teraz więcej szczęścia. – Aristos

Odpowiedz

2

Czy należy poświęcić trochę czasu i dowiedzieć się, która linia błąd zostanie rzucony na tej części kodu?

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

Tylko dla odniesienia dla tego q/a, było pytanie o meta na temat tego pytania, dodałem trochę nagród w tym czasie i umieściłem tę odpowiedź, próbując pomóc. Oto meta pytanie: http://meta.stackexchange.com/questions/122809/why-are-my-questions-remaining-unanswered-for-a-long-time – Aristos

Powiązane problemy