首页 > 其他分享 >pjsip编译、说明及vs2022使用示例

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

时间:2024-11-12 20:50:05浏览次数:1  
标签:acc pjsua 示例 cfg pjsip call vs2022 config id

环境: 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:[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

相关文章

  • [AIGC]使用阿里云Paraformer语音识别录音识别 API 进行音频处理 —— 完整流程及代码
    文章目录一、前提准备1.阿里云账号2.开通录音识别服务3.获取APIKey和AccessToken二、阿里云录音识别API的主要功能介绍三、完整代码流程1.导入依赖库2.设置环境变量3.生成Token4.上传文件并发起识别请求4.1请求4.2请将'{api-key}'替换为你的apikey,'{ta......
  • Qt构建与解析Json示例
    本文以B站UP主“明王讲QT”的【QT开发专题-天气预报】中的章节内容作为学习Qt中构建、解析Json的参考方法。1、Json文本{"info":{"asian":true,"captical":"beijing","founded":1949},"name":"China&qu......
  • Qt读写文件简单示例
    voidtestReadWriteFile(){//当前程序所在文件夹QStringdirPath=QCoreApplication::applicationDirPath();QStringpath=QDir::cleanPath(dirPath+QDir::separator()+"test.txt");qDebug()<<"Filepath:"<<path;......
  • DHCP 和 DNS 示例
    DHCP和DNS示例https://openwrt.org/zh/docs/guide-user/base-system/dhcp_configuration Thisarticlereliesonthefollowing:Accessing webinterface / command-lineinterfaceManaging configs / packages / services / logsSeealso: DH......
  • QRust(四)示例程序
    这一章请跟随我对QRust项目携带的demo示例讲解,逐渐熟悉并掌握QRust的使用。无参数、无返回值的示例先从最简单示例foo()开始。Qt端:voidMainWindow::on_btn_foo_clicked(){ui->ptext_out->appendPlainText("-------------foo()-------------");Rustrust("foo")......
  • PHP爬虫快速获取京东商品详情(代码示例)
    在当今互联网时代,数据的重要性不言而喻。对于电商领域来说,获取商品信息是数据分析、市场研究和价格监控的基础。本文将介绍如何使用PHP编写一个简单的爬虫,以快速获取京东商品的详情信息。1.概述京东是中国领先的电商平台之一,拥有庞大的商品数据库。通过爬虫技术,我们可以自......
  • Python爬虫快速获取JD商品详情:代码示例与技巧解析
    在当今这个信息爆炸的时代,数据成为了一种宝贵的资源。对于电商行业来说,获取商品详情信息是进行市场分析、价格比较、库存管理等重要环节的基础。本文将通过一个Python爬虫示例,展示如何快速获取(JD)商品的详情信息。为什么选择Python进行爬虫开发?Python作为一种高级编程语言,以......
  • 鸿蒙网络编程系列 43- 仓颉版 HttpRequest 下载文件示例
    HttpRequest文件下载示例编写下面详细介绍创建该示例的步骤(确保DevEcoStudio已安装仓颉插件)。步骤1:创建[Cangjie]EmptyAbility项目。步骤2:在module.json5配置文件加上对权限的声明:"requestPermissions":[{"name":"ohos.permission.INTERNET"}]这里添加了访问......
  • C / C++ 整数类型转换规则与示例
    在C语言编程中,不同类型之间的转换是非常常见的事情,尤其是整数类型之间的转换,比如从较短类型到较长类型的转换、从有符号类型到无符号类型的转换等。这些转换看似简单,但如果不理解它们背后的机制,可能会导致一些隐蔽的bug。本文将深入探讨整数类型转换的规则和过程,并通过实例帮助大......
  • 物理约束➕深度学习代码示例
    好的,下面是一个结合物理机制与深度学习的示例代码。这个示例假设我们要预测土壤湿度(类似你的研究领域),并结合物理机制(例如,水的守恒)来改进模型的预测。示例:基于物理约束的土壤湿度预测模型在这个例子中,我们用深度学习模型预测土壤湿度,并在损失函数中加入水分守恒约束项,确保模型输......