pjsip编译、说明及vs2022使用示例

环境: 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.gz

2. 使用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:1000@192.168.137.100: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 获取。

相关推荐
筑梦之路23 天前
Debian 12 安装freeswitch 1.10.12对接Volte视频通话——筑梦之路
debian·voip
贾宝玉的玉宝贾1 个月前
FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误
android·adb·voip·freeswitch·ippbx·sip测试
贾宝玉的玉宝贾2 个月前
FreeSWITCH 简单图形化界面29 - 使用mod_xml_curl 动态获取配置、用户、网关数据
数据库·voip·freeswitch·ippbx·sip测试
c_zyer2 个月前
Kamailio-超强dispatcher负载均衡模块
负载均衡·kamailio·voip·sip
Mike_Zhang3 个月前
使用kamailio进行分机注册及互拨
kamailio·voip
Mike_Zhang3 个月前
debian10环境安装rtpengine
voip
Mike_Zhang6 个月前
FreeSWITCH使用soundtouch进行变声
python·voip·freeswitch·音频技术
Mike_Zhang6 个月前
opensips开启lua支持
lua·voip·opensips