0

我面临一个问题。我是 PJSIP 的新手。我在 android 中使用 PJSUA2 开发了一个 SIP 客户端。现在一切正常,除非我正在拨打被转发到其他地方的电话,然后我没有从两端获得任何音频。知道我在做什么错吗?

这是处理呼叫的地方

public class MyCall extends Call{

public static AudioMedia audioMedia;
public static AudDevManager mgr;
public Endpoint ep;

public MyCall(Account acc, int call_id,Endpoint ep)
{
   // call_id=
    super(acc,call_id);
    this.ep=ep;
}

// Notification when call's state has changed.
@Override
public void onCallState(OnCallStateParam prm) {
    System.out.println("Message : "+prm.getE().getBody().getRxMsg().getRdata().getWholeMsg());
}

//test
@Override
public void onCallTransferRequest (OnCallTransferRequestParam prm)
{
    System.out.println("Hello transferring");
}

@Override
public pjsip_redirect_op onCallRedirected (OnCallRedirectedParam prm)
{
    System.out.println("Redirecting.......wait");
    return null;
}

// Notification when call's media state has changed.
@Override
public void onCallMediaState(OnCallMediaStateParam prm){

    CallInfo info;
    //Call currentCall=CurrentCall.call;
    Call currentCall=this;

    try {
        info = getInfo();


        for (int i = 0; i < info.getMedia().size(); i++) {

            Media media = getMedia(i);
            CallMediaInfo mediaInfo = info.getMedia().get(i);


            if (mediaInfo.getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO && media != null && mediaInfo.getStatus() == pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE){

            audioMedia = AudioMedia.typecastFromMedia(media);
            audioMedia.adjustRxLevel(1.5f);
            audioMedia.adjustTxLevel((float) 1.5);


            try {
                    System.out.println("Audio should start now");

                //making a handler for ui thread to show the thread
                Handler mainHandler = new Handler(CallActivity.ca.getMainLooper());

                Runnable myRunnable = new Runnable() {
                    @Override
                    public void run() {
                        CallActivity.tv.setText("Call Started");
                    } // This is your code
                };

                mainHandler.post(myRunnable);

                mgr = ep.audDevManager();


                audioMedia.startTransmit(mgr.getPlaybackDevMedia());
                mgr.getCaptureDevMedia().startTransmit(audioMedia);

                } catch (Exception exc) {
                    System.out.println("Exception in audio related : "+exc);
                }
            }
        }


    } catch (Exception e) {
        System.out.println("Exception caught while getting call info."+ e.toString());
        return;
    }

}

}

这是完成配置的地方

public void test()
{
    //stored phoneno and pwd

            SharedPreferences sp = getSharedPreferences("skytel_skysip", Context.MODE_PRIVATE);
            String uname = sp.getString("e164", "");
            String pwd = sp.getString("pwd", "");

            Globals.uname=uname;
            Globals.pwd=pwd;

            //------------------------------------------------------------
            try {
                // Create endpoint
             ep = new Endpoint();
             ep.libCreate();
             // Initialize endpoint
             EpConfig epConfig = new EpConfig();
             ep.libInit(epConfig);
             // Create SIP transport. Error handling sample is shown
             System.out.println("Configuration started");

             TransportConfig sipTpConfig = new TransportConfig();
             sipTpConfig.setPort(5061);
             ep.transportCreate(pjsip_transport_type_e.PJSIP_TRANSPORT_UDP, sipTpConfig);


                //printing the list of codecs
             /*for(int i=0;i<ep.codecEnum().size();i++)
                System.out.println("Codec Name : "+ep.codecEnum().get(i).getCodecId()+"\n");*/

             // Start the library
             ep.libStart();

             EpOperation.setEp(ep);

             System.out.println("Configuration ended");
             System.out.println("Username : "+uname);
             System.out.println("Password : "+pwd);

             AccountConfig acfg = new AccountConfig();
             acfg.setIdUri("sip:" + uname + "@xx.xxx.xxx.xx");

             acfg.getRegConfig().setRegistrarUri("sip:xx.xxx.xxx.xx");

             AuthCredInfo cred = new AuthCredInfo("digest", "*", uname, 0, pwd);
             acfg.getSipConfig().getAuthCreds().add(cred);
             // Create the account
             MyAccount acc = new MyAccount();
             acc.create(acfg);

             EpOperation.setAccountConfig(acfg);
             // Here we don't have anything else to do..
             while(Globals.flag==0) {
                 System.out.println("Flag : "+Globals.flag);
                 Thread.sleep(5000);
             }
             Globals.flag=0;

             Call call = new MyCall(acc, 1,ep);

             //override event handlers
             CurrentCall.call = call;


            } catch (Exception e) {
                System.out.println("This is exception : " + e);
                return;
            }
}

按钮点击

callbtn.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View view) {
         //number
         String num = number.getText().toString();

         callbtn.setText("Registering.Wait...");
         Toast.makeText(ma, "Configuring.Please Wait...", Toast.LENGTH_LONG).show();
         //stored phoneno and pwd
         SharedPreferences sp = getSharedPreferences("skytel_skysip", Context.MODE_PRIVATE);
         String uname = sp.getString("e164", "");
         String pwd = sp.getString("pwd", "");

         Globals.uname=uname;
         Globals.pwd=pwd;

         //------------------------------------------------------------
         try {

             Intent i=new Intent(view.getContext(),CallActivity.class);
             startActivityForResult(i,0);

             test();
             CallOpParam prm = new CallOpParam(true);
             CurrentCall.call.makeCall("sip:" + num + "@80.241.208.191", prm);
             //CurrentCall.call.makeCall("sip:" + num + "@80.241.208.11", prm);
             System.out.println("Call made");

             callbtn.setText("CALL");


         } catch (Exception e) {
             System.out.println("This is exception : " + e);
             return;
         }
     }   });
4

0 回答 0