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?
- Utilizzando JMF (Java Media Framework)
- Utilizzo di Java Audio
- 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?
È possibile correggere il rientro del codice. Puoi vedere come appare. Risolvendolo lo renderà almeno più leggibile. – Bart
@Bart: ho migliorato alcuni formtting, in realtà perché stai dicendo che il mio codice è illeggibile? Dammi suggerimenti specifici su una migliore formattazione. Grazie –
@ Alvi_1987 Vediamo se hai più fortuna ora. – Aristos