环境:Windows 10_x64 & Visual Studio 2022
PJSIP版本:2.14.1
Python版本:3.9.13
近期,我们接到了一个在Windows环境下开发软电话SDK的需求,该SDK需要作为一个动态库供上层应用程序调用。今天,我将整理并分享如何使用PJSIP封装一个简单的自定义软电话SDK的笔记,并提供相关资源的下载链接。
本文将从以下几个方面进行详细阐述:
- 功能概述
- 接口设计
- 接口实现
- 接口调用示例(包括Python和C#)
- 配套资源下载
关于PJSIP的编译和使用,可以参考这篇文章:
一、功能概述
库名称:sipClient.dll
功能:
在Windows 10环境下,封装PJLIB库以供上层应用使用,实现基于SIP协议的软电话功能。
整体架构如下:
实现原理:
1. 基于PJSIP封装SDK;
2. 封装基础操作及回调函数;
完整代码可通过以下方式获取:
关注微信公众号“聊聊博文”,并在文末扫码后回复“20241217”获取。
二、接口设计
1. init
功能
初始化接口,用于初始化DLL库。
接口声明
int init(int sock_type, int local_port);
参数
sock_type:socket类型,可设置为
1 => UDP
2 => TCP(后续支持)
3 => TLS(后续支持)
local_port:本地监听端口,设置为0则自动分配端口
返回值
0:成功
-1:失败
2. set_incoming_cb
功能
设置呼入回调函数,用于处理呼入请求。
接口声明
int set_incoming_cb(pCallBack cb);
参数
cb:回调函数,定义如下
int(*pCallBack)(int, int);
返回值
0:成功
-1:失败
3. acc_reg
功能
账号注册操作,将账号信息注册到指定服务器。
接口声明
int acc_reg(char* sip_domain, char* sip_user, char* sip_passwd, char* realm);
参数
sip_domain:注册服务器
sip_user:用户名
sip_passwd:密码
realm:注册域
返回值
account id:成功
-1:失败
4. acc_unreg
功能
账号注销操作,注销指定账号。
接口声明
int acc_unreg(int acc_id);
参数
acc_id:账号id
返回值
call id:成功
-1:失败
5. acc_make_call
功能
外呼操作,使用指定账号进行外呼。
接口声明
int acc_make_call(int acc_id, const char* dst_num);
参数
acc_id:账号id
dst_num:被叫号码
返回值
call id:成功
-1:失败
6. acc_answer_call
功能
接听操作,接听指定呼叫。
接口声明
int acc_answer_call(int call_id);
参数
call_id:需要接听的呼叫id值。
返回值
0:成功
-1:失败
7. acc_hangup_call
功能
挂机操作,挂断指定呼叫。
接口声明
int acc_hangup_call(int call_id);
参数
call_id:需要挂机的呼叫id值。
返回值
0:成功
-1:失败
8. destory
功能
释放PJSUA资源。
接口声明
int destory();
参数
无
返回值
0:成功
-1:失败
三、接口实现
使用Visual Studio 2022进行DLL封装,配置类型设置为DLL类型。
1. 编写头文件;
![头文件图](https://