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 sta

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Ubuntu 20.04上使用PJSIP进行视频通话,您需要安装PJSIP库和相关依赖项,并编写一个简单的应用程序来处理视频通话。 以下是一些基本步骤: 1. 安装PJSIP库 您可以使用以下命令从Ubuntu存储库安装PJSIP库: ``` sudo apt-get update sudo apt-get install libpjproject-dev ``` 2. 安装视频编解码器 PJSIP需要视频编解码器才能处理视频。您可以使用以下命令来安装常用的视频编解码器: ``` sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev ``` 3. 编写PJSIP应用程序 您需要编写一个简单的PJSIP应用程序来处理视频通话。以下是一个基本的应用程序示例: ``` #include <pjlib.h> #include <pjmedia.h> #include <pjmedia-videodev.h> int main() { /* 初始化PJSIP库 */ pj_status_t status = pj_init(); /* 创建PJSIP库实例 */ pj_caching_pool cp; pj_pool_t *pool; pjmedia_endpt *med_endpt; pjmedia_vid_dev_index vid_dev_idx; pjmedia_vid_dev_info vid_dev_info; pjmedia_vid_dev_format vid_dev_fmt; pjmedia_vid_dev_cap vid_dev_cap; pjmedia_vid_dev *vid_dev; unsigned i, count; PJ_LOG(3,("pjmedia", "Starting video capture test...")); /* 初始化PJSIP库 */ status = pj_init(); /* 创建PJSIP库实例 */ pj_caching_pool_init(&cp, NULL, 0); pool = pj_pool_create(&cp.factory, "app", 4000, 4000, NULL); /* 创建媒体端点 */ status = pjmedia_endpt_create(&cp.factory, NULL, 1, &med_endpt); /* 获取可用的视频设备 */ status = pjmedia_vid_dev_index_enum(&count); for (i=0; i<count; ++i) { if (pjmedia_vid_dev_index_get_info(i, &vid_dev_info) == PJ_SUCCESS) { PJ_LOG(3,("pjmedia", "Video device %d: %s", i, vid_dev_info.name)); } } /* 选择视频设备 */ vid_dev_idx = 0; status = pjmedia_vid_dev_index_get_cap(vid_dev_idx, 0, &vid_dev_cap); status = pjmedia_vid_dev_open(&cp.factory, vid_dev_idx, &vid_dev); /* 设置视频格式 */ pjmedia_vid_dev_format_default(&vid_dev_fmt); vid_dev_fmt.det.vid.size.w = 320; vid_dev_fmt.det.vid.size.h = 240; status = pjmedia_vid_dev_set_format(vid_dev, &vid_dev_fmt); /* 开始视频捕捉 */ status = pjmedia_vid_dev_start(vid_dev); /* 停止视频捕捉 */ status = pjmedia_vid_dev_stop(vid_dev); /* 销毁视频设备 */ pjmedia_vid_dev_close(vid_dev); /* 销毁媒体端点 */ pjmedia_endpt_destroy(med_endpt); /* 销毁PJSIP库实例 */ pj_pool_release(pool); pj_caching_pool_destroy(&cp); pj_shutdown(); return 0; } ``` 上面的代码演示了如何使用PJSIP捕获视频。您需要编写更多的代码来处理视频流并进行视频通话。 4. 编译和运行应用程序 编译应用程序的命令如下: ``` gcc -o video_call video_call.c -lpjproject -lpjmedia -lpjmedia-videodev -lswscale -lavcodec -lavformat -lswresample ``` 运行应用程序的命令如下: ``` ./video_call ``` 以上是基本步骤,当然还需要根据您的具体需求进行更多的设置和编码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值