私はソフトフォンプロジェクトに取り組んでおり、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のコンストラクターは何でしょうか?