pjsip 多方通话

在pjsip 2.6的pjproject-2.6\pjsip-apps\src\pjsua 目录下,有个很好的例子,可以拨打单方通话和多方通话。

        示例在:pjsua_app_cli.c里面static pj_status_t cmd_make_multi_call(pj_cli_cmd_val *cval)函数中。


多方通话的逻辑和单独拨打一个电话的逻辑是一样的,只是拨打一个电话,调用一次pjsua_call_make_call,而多方通话多次调用该接口,拨出多个电话。另外,在on_call_media_state中主要connect port,否则是听不到声音的。

       拨打多方通话的代码:

    for (i=0; i<count; ++i) {
       pj_status_t status;
       status = pjsua_call_make_call(current_acc, &tmp, &call_opt, NULL, NULL, NULL);
       if (status != PJ_SUCCESS)
           break;
    }

connect port的方法:

比如A 先打电话给B,在打电话给C,进行3方通话,正常情况下,
A和B通话是这样连接:
/* Callback called by the library when call's media state has changed */
static void on_call_media_state(pjsua_call_id call_id)
{
    pjsua_call_info AandB;


    pjsua_call_get_info(call_id, &AandB);


    if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
        // When media is active, connect call to sound device.
        pjsua_conf_connect(AandB.conf_slot, 0);
        pjsua_conf_connect(0, AandB.conf_slot);
    }
}


A和C通话是这样连接:
/* Callback called by the library when call's media state has changed */
static void on_call_media_state(pjsua_call_id call_id)
{
    pjsua_call_info AandC;


    pjsua_call_get_info(call_id, &AandC);


    if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
        // When media is active, connect call to sound device.
        pjsua_conf_connect(AandC.conf_slot, 0);
        pjsua_conf_connect(0, AandC.conf_slot);
    }
}


上面这样链接后,A可以和B/C通话,但是B和C互相听不到对方的声音。
需要加入下面的步骤,这个可以在A和C的on_call_media_state调用后,在加入下面的两个connect:
pjsua_conf_connect(AandB.conf_slot, AandC.conf_slot);
pjsua_conf_connect(AandC, AandB.conf_slot);


这样A/B/C互相之间,都会听到对方的声音了。

猜你喜欢

转载自blog.csdn.net/croop520/article/details/76175615