我正在开发一个软件电话项目并使用 MjSip 堆栈来创建开发它。核心 MjSip 仅支持 PCMA/PCMU 编解码器。但我想用它添加更多编解码器,如 G729、GSM、iLBC 等。
在 MjSip 中,AudioSender.java 类是纯 Java 音频流发送器。它使用 javax.sound 包。在该类中, javax.sound.sampled.AudioFormat用于格式化具有 PCM 签名、无符号或浮点类型的音频流。它已经在 MjSip 中完成,如下所示。
AudioFormat.Encoding codec;
if (pcmu) {
codec = AudioFormat.Encoding.ULAW;
} else if (linear_signed) {
codec = AudioFormat.Encoding.PCM_SIGNED;
} else if (pcma) {
codec = AudioFormat.Encoding.ALAW;
} else {
codec = AudioFormat.Encoding.PCM_UNSIGNED; // default
}
if (sound)
{ AudioFormat format=new AudioFormat(codec,sample_rate,8*sample_size,1,sample_size,sample_rate,big_endian);
System.out.println("System audio format: "+format);
audio_input=new AudioInput(format);
sender=new RtpStreamSender(audio_input.getInputStream(),false,payload_type,frame_rate,frame_size,daddr,dport);
}
但是我创建了自己的包org.mine.codec包括这些类
Codec.java (This is an Interface)
CodecAttribute.java
CodecUtils.java
CodecFactory.java
CodecG729.java
CodecPCMA.java
CodecPCMU.java
所以我想用这个而不是那个AudioFormat.Encoding。我应该如何构造我的AudioSender.java类以及 RtpStreamSender.java类中需要更改的内容?是否可以忽略该AudioFormat类?如果我必须使用它,那么RtpStreamSender.java的构造函数是什么?