MJSIP и взаимодействие кодеков - PullRequest
3 голосов
/ 08 февраля 2012

Использование Mjsip в качестве стека sip для моего проекта софтфона. Есть класс RtpSender.java имеет метод

public RtpSender(OutputStream output_stream, boolean do_sync, SIPCodec sipCodec, DatagramSocket src_socket, String dest_addr, int dest_port )
    {
        init( output_stream, do_sync, sipCodec, src_socket, dest_addr, dest_port );
    }

В другом файле AudioSender.java (это отправитель аудиопотока чисто в Java), я использую этот метод RtpSender следующим образом ...

sender=new RtpSender(audio_input_stream,true,**SIPCodec**,null,daddr,dport);

Моя проблема в SIPCodec, у меня есть интерфейс, который называется для кодеков, какое значение я должен передать r как мне передать? Я звоню кодекам, но это показывает, что метод не подходит для этого. Вот интерфейс кодека ...

public interface SIPCodec {
// Codec constants
public static String MEDIA_TYPE_AUDIO = "audio";
public static String MEDIA_TYPE_VIDEO = "video";
public static String ATTRIBUTE_PTIME = "ptime";
public static String ATTRIBUTE_RTPMAP = "rtpmap";
public static String ATTRIBUTE_FMTP = "fmtp";
public static String ATTRIBUTE_AS = "AS";
public static int DEFAULT_PACKETIZATION = 20;
public void encodeInit( int defaultEncodePacketization );
public void decodeInit( int defaultDecodePacketization );
...

А вот класс codecs.java, откуда я вызываю отдельные кодеки.

public SIPCodec getSIPAudioCodec( int codecId ) {

        SIPCodec sipCodec;

        switch ( codecId ) {
            case audioCodecPCMU:
                sipCodec = new SIPCodecPCMU();
                break;
            case audioCodecPCMA:
                sipCodec = new SIPCodecPCMA();
                break;
            case audioCodecG729:
                sipCodec = new SIPCodecG729();
                break;
            case audioCodeciLBC:
                sipCodec = new SIPCodeciLBC();
                break;
            default:
                sipCodec = null;
        }
...