iOS 基于 PJSIP 开发 VOIP 应用 --- PJSI
2023-01-29 本文已影响0人
试图与自己和解
前言
在上一篇我们已经将 PJSIP 编译好的静态库集成到项目中来了,这一篇内容应该才是我们最期望的:该如何 Coding 呢~
闲话少说,让我们直接步入正题。
PJSIP 流程
PJSIP 使用的 API
基本来自 pjsua
,因为 pjsua
是建立在 PJSIP 基础库上的一层纯 C
封装。
下图展示了 PJSIP 从 创建 --> 初始化 --> 注销 的 API
调用流程(期间还建立了一次通话 ):
注意:此流程很重要,请严格按照流程走,但凡期间一个流程有误,都会导致 Bug 产生。
主线流程
-
pjsua
接口的一次完整的生命周期调用,需要创建
(pjsua_create)、初始化
(pjsua_init)、开始
(pjsua_start)、销毁
(pjsua_destory) 等操作。 -
pjsua_transport_create: 创建 sip 信令发送和接收需要的相关
socket
资源。 - pjsua_acc_add: 添加话机,类似于一个人的手机号/座机号,起到定位作用。
- pjsua_call_make_call: 拨打电话。
- pjsua_call_hangup_all:挂断电话。
- pjsua_acc_del:删除话机。
支线流程
我们 通话
的时候,通常还伴随着其他操作,包括但不限于:是否通话静音,呼叫分机(通常打客服电话会提示:人工服务请按 0 ,业务咨询请按 1 ...等分机服务),是否启用麦克风...等等。
流程图用虚线表示的操作就是支线操作(我就象征性拉了一条,先推主线,支线啥的根据各位需要慢慢再补...):
- pjsua_call_dial_dtmf:呼叫分机。
- pjsua_conf_disconnect:通话静音。
- pjsua_conf_connect:取消静音。
阶段总结
PJSIP 只是完成两个功能
-
使用 sip 信令协定双方音 / 视频通话时使用的 rtp、rtcp 的 socket 端口,音/ 视频编码器的类型和相关的编码参数,使用的网络类型。
-
建立音 / 视频通话的 socket 通道,传输 音 / 视频数据。
实例代码
先 make,项目实战先后续有时间再补吧,刚被拉到其他项目组事情有点多,最近一段时间估计会很忙。