我正在开发一个软件电话项目并使用MjSip堆栈来开发它。核心MjSip仅支持PCMA / PCMU编解码器。但我想添加更多的编解码器,如G729,GSM,iLBC等。
在MjSip中,类 AudioSender.java 是纯java音频流发送方。它使用javax.sound包。 在该类中, javax.sound.sampled.AudioFormat 用于使用PCM signed,unsigned或float类型格式化音频流。 它在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 的构造函数?