Почему JMF не работает над потоковым аудио с Mjsip?

Я использую Mjsip для создания софтфона. В коде есть три типа опций для аудио-страминга.

  1. Использование JMF (Java Media Framework)
  2. Использование Java Audio
  3. Использование RAT (Robust Audio Tool)

Я не использую RAT. Его значение я сделал ложным сам. Вот код ниже для вызова 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);      
}

Но он не запускается. Я все еще могу разговаривать с помощью софтфона. Но в журнале он показывает...

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

Но при использовании JMF значение true для user_agent_profile и ошибка генерируется из этого кода.

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

Что я могу сделать, чтобы включить JMF?

18
задан S. M. Shahinul Islam 19 February 2012 в 20:35
поделиться