环境: window10_x64 & vs2022 pjsip版本: 2.14.1 之前整理过pjsip 2.10的编译及python使用示例: https://www.cnblogs.com/MikeZhang/p/pjsip20210116.html https://www.cnblogs.com/MikeZhang/p/win10py3pjsua-20211010.html 今天整理下pjsip 2.14.1的编译、接口说明,以及在vs2022环境下基于 c/c++ 使用pjsua进行注册、呼叫、挂机的示例,并提供相关资源下载。
一、源码获取及编译
pjsip官网:https://www.pjsip.org/ 文档地址: https://docs.pjsip.org/en/latest/1. 下载pjsip源代码
下载地址: https://www.pjsip.org/download.htm 也可直接从pjsip官网给的github地址下载: https://github.com/pjsip/pjproject/archive/refs/tags/2.14.1.tar.gz2. 使用VS2022编译
双击pjproject-vs14.sln 为了防止编译报错,首先进入这个目录: pjproject-2.14.1\pjlib\include\pj 复制 config_site_sample.h 这个文件 config_site.h编译:
二、数据结构说明
这里列举下pjsua常用的数据结构。 1)pjsua_config 主要用于配置UA的回调函数。 2)pjsua_logging_config 用于配置日志属性 3)pjsua_transport_config 用于配置本地绑定的socket属性,比如监听端口等。 4)pjsua_acc_config 用于配置sip账号信息,比如用户名、密码、注册地址等。三、接口说明
这里列举下pjsua常用接口。 1)pjsua_create功能
创建pjsua实例,在调用其它函数之前需要调用该函数; 使用完毕(返回PJ_SUCCESS时),需要调用pjsua_destroy函数。 完整声明如下:pj_status_t pjsua_create(void)
参数
无返回值
PJ_SUCCESS , 成功 其它值 , 失败 2)pjsua_config_default功能
用于初始化pjsua配置。 完整声明如下:void pjsua_config_default(pjsua_config *cfg)
参数
cfg : 需要初始化的pjsua配置指针
返回值
无 3)pjsua_logging_config_default功能
用于初始化pjsua的日志配置。 完整声明如下:void pjsua_logging_config_default(pjsua_logging_config *cfg)
参数
cfg : 需要初始化的pjsua日志配置指针
返回值
无 4)pjsua_init功能
使用指定的配置初始化pjsua,所有配置参数都是可选的,如果没有指定相关配置则使用默认配置。 完整声明如下:pj_status_t pjsua_init(const pjsua_config *ua_cfg, const pjsua_logging_config *log_cfg, const pjsua_media_config *media_cfg)
参数
ua_cfg : user agent配置 log_cfg : 日志配置 media_cfg : 媒体配置
返回值
PJ_SUCCESS : 成功 其它值 : 失败 5)pjsua_transport_config_default功能
初始化udp配置信息。 完整声明如下:void pjsua_transport_config_default(pjsua_transport_config *cfg)
参数
cfg : 需要初始化的udp配置指针
返回值
无 6)pjsua_transport_create功能
根据传入的配置信息创建并启动sip transport(会绑定本地sip端口,并进行socket监听)。 完整声明如下:pj_status_t pjsua_transport_create(pjsip_transport_type_e type, const pjsua_transport_config *cfg, pjsua_transport_id *p_id)
参数
type : transport类型,可选参数有 PJSIP_TRANSPORT_UDP 、 PJSIP_TRANSPORT_TCP 、 PJSIP_TRANSPORT_TLS 等。 cfg : 需要使用的udp配置 p_id : 可选参数,用于接收transport ID
返回值
PJ_SUCCESS : 成功 其它值 : 失败 7)pjsua_start功能
启动pjsua实例。 完整声明如下:pj_status_t pjsua_start(void)
参数
无返回值
PJ_SUCCESS : 成功 其它值 : 失败 8)pjsua_acc_config_default功能
初始化pjsua的账号信息。 完整声明如下:void pjsua_acc_config_default(pjsua_acc_config *cfg)
参数
cfg : 需要初始化的pjsua账号配置
返回值
无 9)pjsua_acc_add 功能 添加pjsua账号,并进行注册。 完整声明如下:pj_status_t pjsua_acc_add(const pjsua_acc_config *acc_cfg, pj_bool_t is_default, pjsua_acc_id *p_acc_id)
参数
acc_cfg : 账号配置信息,比如sip账号id、密码、注册地址等。 is_default : 是否是默认账户 p_acc_id : 用于接收account id数据
返回值
PJ_SUCCESS : 成功 其它值 : 失败 10)pjsua_call_make_call功能
使用指定账号进行外呼,需要使用sip uri格式。 完整声明如下:pj_status_t pjsua_call_make_call(pjsua_acc_id acc_id, const pj_str_t *dst_uri, const pjsua_call_setting *opt, void *user_data, const pjsua_msg_data *msg_data, pjsua_call_id *p_call_id)
参数
acc_id : 账号id dst_uri : 需要外呼的sip uri,比如 sip:[email protected]:5060 opt : 呼叫设置 user_data : 需要附加的用户数据 msg_data : INVITE请求里面扩展的header头,NULL时不设置 p_call_id : 用于接收call id的指针
返回值
PJ_SUCCESS : 成功 其它值 : 失败 11)pjsua_msg_data_init 功能 初始化pjsua_msg_data类型数据。 完整声明如下:void pjsua_msg_data_init(pjsua_msg_data *msg_data)
参数
msg_data : 需要初始化的变量
返回值
无 12)pjsua_call_hangup功能
挂机操作,挂断指定呼叫。 完整声明如下:pj_status_t pjsua_call_hangup(pjsua_call_id call_id, unsigned code, const pj_str_t *reason, const pjsua_msg_data *msg_data)
参数
call_id : 需要挂断呼叫的call id code : 挂机sip状态码,比如 200、603 等 reason : 挂机原因 msg_data : 需要添加的消息头
返回值
PJ_SUCCESS : 成功 其它值 : 失败四、基于MFC的示例
这里基于MFC实现个简单软电话,实现注册、呼叫、挂机等基础功能。工程名称: pjPhone
工程目录:1、添加依赖库
把编译好的lib库文件放在depends目录:2、配置工程属性
1)配置include目录; 完整内容可从如下渠道获取: 关注微信公众号(聊聊博文,文末可扫码)后回复 20241112 获取。 2)配置lib库目录;完整内容可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20241112 获取。 3)配置链接lib库;完整内容可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20241112 获取。3、编译及使用
这里使用的是静态链链接,编译后不需要额外的dll文件。 编译后的二进制文件可直接运行。 1)注册效果 2)呼叫效果3)接听效果
可运行的二进制文件(pjPhone.exe)及打包的工程文件(pjsipTest2-vs2022.7z),可从文末提供的渠道获取。五、资源获取
本文涉及资源可从如下渠道获取: 关注微信公众号(聊聊博文,文末可扫码)后回复 20241112 获取。
标签:acc,pjsua,示例,cfg,pjsip,call,vs2022,config,id From: https://www.cnblogs.com/MikeZhang/p/18542615/pjsip-vs2022