上一篇在编译完之后,就很不负责的结束了,本篇就对 PJSIP 库中提供的一个示例 iPJSUA 的使用,做一个简单的介绍。也能解除很多人对官方文档的一个困扰,起码我是被困扰过了。

首先,要确保你的 PJSIP 的库和你即将要编译的平台对应,或者你直接使用上一篇博文最后链接下载的库,那样不用做任何配置,因为它相应的 lib 文件夹中的库,都是支持多平台的。

打开位于:pjsip-apps/src/pjsua/ios/ 下的 ipjsua.xcodeproj ,command + r ,运行该项目,如果编译不成功,请参看我上面说的那句话;如果提示缺少 ”libmilenage-arm-apple-darwin9.a“,删除项目 Libraries 文件夹中,对应的该文件:

再次 command + r,应该不会出什么问题了,那么你将看见如下的界面:

很直观的一个界面,它叫你 telnet 到一个指定的地址和端口,那么从你的 mac 或者其它能和你电脑通讯的机器上 telnet 相应的地址即可。进去后,就可以参考 PJSUA-CLI 中的指令来进行相应操作了。

由于我的 mac 是安装在虚拟机中的(屌丝。。。),宿主系统是 win7,那么我在我的 win7 中搭建一个 SIP 服务器,和添加一个 SIP 客户端,来做一个最基本的使用演示。这里使用 miniSIPServer 和 miniSIPPhone 来作演示,从这里下载试用版:

下载后,安装,打开即可:

SIP 帐号和密码,对应着分机里面的设定,默认它已经给我们建立了几个,账户和密码一样,以下是 SIPPhone 客户端帐号配置(账户名、密码:101,对应分机配置):

这样我们的服务器搭建好了,并且有这么一个客户端,这样就可以在 mac 中与该服务器和客户端进行通讯了,大家可以看到,我这里主系统的 IP 为  192.168.1.100,那么你们要视自己实际情况而定了。

首先从 mac 系统的终端中 telnet 模拟器中提示的地址和端口,进入后,我们参考文档上,注册一个账户(类似于登录到服务器上,并不是新增加一个帐号,也就是说该账户服务器上必须要有)的命令是: acc add,这里有个技巧,当我们不知道后面怎么输入参数时,就按 tab 键,它会给我们提示。这里我们输入 acc add 然后按 tab 键(一次没反应,就再按一次):

它提示要我们输入 SIP URL,然后我们输入 sip:102@192.168.1.100 ,再按 tab 它又会提示输入 SIP 注册服务器的地址,当然熟悉了之后,并不需要这样一直按 tab,直接如下:

参数的意义分别是: 用户的 SIP 地址,注册服务器地址,Realm,用户名,密码,回车后,显示注册成功,这时候,我们看下 miniSIPServer 的分机列表:

此时 102 分机已经在线了,现在对 101 发起一次呼叫:

call new sip:101@192.168.1.100

OK,这时听到 miniSIPPhone 振铃了,我们点击接听即可接通:

上图为分机在通话中的状态,我们挂断它,终端输入:

call hangup

这时我们的通话被终结了,最后,我们来接一通电话,从 miniSIPPhone 中,直接呼叫 102:

这时候,我们在 mac 的 telnet 终端中输入 call list , 会看到一个状态为 incoming 的呼叫:

我们输入 : call answer 200,即可接入,其中 200 为状态码(和 http 的状态码类似)。

OK,到这里,这个 iPJSUA,你应该知道怎么玩了吧~~ 其实很简单的嘛~

IOS 之 PJSIP 笔记(二) iPJSUA 的简单使用的更多相关文章

  1. IOS 之 PJSIP 笔记(一) 编译多平台支持的静态库

    好久没有写博客了,这也算是我步入新工作后的第一篇技术博文吧.在进入新公司前,早就有了技术层进入下一个迭代的准备,但很多事情是意想不到的,就像我以 C# 程序员的身份面试入职的,而今却是一个全职的 IO ...

  2. iOS音频学习笔记二:iOS SDK中与音频有关的相关框架

      上层:       Media Player Framework: 包含MPMoviePlayerController.MPMoviePlayerViewController.MPMusicPla ...

  3. Html学习笔记(二) 简单标签

    标签的重点 标签的用途 标签在浏览器中的默认样式 <body>标签: 在网页上显示的内容 <p>标签: 添加段落 <hx>标签: 添加标题 标签一共有6个,h1.h ...

  4. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  5. MongoDB学习:(二)MongoDB简单使用

    MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该 ...

  6. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  7. iOS开发UI篇—UITableview控件简单介绍

    iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...

  8. HTML DOM(学习笔记二)

    嗯,在HTML DOM(学习笔记一)中简单描述了一下HTML DOM 是什么,这一篇将记录下来有关HTML DOM的内容! 1:DOM节点 首先,再来看一下HTML DOM的树状结构,如下图所示: 这 ...

  9. 《MFC游戏开发》笔记二 建立工程、调整窗口

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9300383 作者:七十一雾央 新浪微博:http:/ ...

随机推荐

  1. HDU 3844 Mining Your Own Business

    首先,如果图本来就是一个点双联通的(即不存在割点),那么从这个图中选出任意两个点就OK了. 如果这个图存在割点,那么我们把割点拿掉后图就会变得支离破碎了.对于那种只和一个割点相连的块,这个块中至少要选 ...

  2. 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ

    消息中间件的技术选型心得-RabbitMQ.ActiveMQ和ZeroMQ 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs RabbitMQ.Active ...

  3. Redrain个人维护并使用的DuiLib和UiLib库源代码下载地址

    转载请说明原出处:http://blog.csdn.net/zhuhongshu/article/details/40740353,谢谢~~ 首先说明一下Duilib和Uilib的差别:UiLIb是D ...

  4. git删除远程文件夹或文件的方法

    由于本地修改了文件夹大全名大小写的原因,同步到git上并不区分大小写,造成了一些文件同步不了,所以要先把git远程库上文件夹删除掉,然后再重新同步 如下,我把src里的全部移除,但是本地文件还保留. ...

  5. js 判断微信浏览器

    上周接到个需求,需求是这样的:用户扫一扫二维码会产生一个链接,该链接会向后端发送个请求,返回一个 apk 的下载地址,用户点击下载按钮可以下载此 apk.然后就发生了问题,经过测试,发现用微信扫一扫打 ...

  6. xsocks 64位平台下编译问题小记

    1.src/common/public.h uint32_t lpParameter 改为 void* lpParameter; 2.SocksMgr.cpp DWORD WINAPI CSocksM ...

  7. 数据人员Sql必会——行转列

    今天被问到列转行的问题,竟然没有回答上来,回想自己也是数据开发人员,平时的积累真是不到位,下面总结一下列转行. 假设咱们有一个学生得分数据表:student_score CREATE TABLE st ...

  8. ODAC(V9.5.15) 学习笔记(十八) 数据集缓冲模式

    数据集的缓冲模式(Cached mode)是将数据库服务器的数据缓冲在客户端内存中进行处理,不再依赖服务器.只有当数据需要提交数据库服务器进行保存时,才将变更数据一次性提交数据库服务器. 数据集缓冲模 ...

  9. lxde桌面默认快捷键

    ctrl+alt+左右      选择左右桌面shift+alt+左右     当前窗口送至左右桌面房子键+F1~F4       切换桌面1-4房子键+d           显示桌面alt+esc ...

  10. java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

    提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定 ...