上一篇在编译完之后,就很不负责的结束了,本篇就对 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. JS错误 theForm.submit();SCRIPT3: 找不到成员。

    最近发现一个问题 当我点击 gridview中 “修改” 按钮时 会出现如下错误. 通过一系列的排查,也没有发现什么错误..后来发现在页面中 有一个按钮 的id为submit . 于是更改这个 but ...

  2. 高吞吐量的分布式发布订阅消息系统Kafka--安装及测试

    一.Kafka概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因 ...

  3. android google 统计导致的文件冲突

    android studio 加入google 统计 1. buildscript { repositories { jcenter() } dependencies { classpath 'com ...

  4. [Core Javascirpt] Basic Metaprogramming: Dynamic Method

    Somehow it looks like reflect in Java. For example: We define an mothod on the Object, it called def ...

  5. 聊聊IO多路复用之select、poll、epoll详解

    本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538922&idx=1&sn=e6b436ef ...

  6. ROS vpn (pptp) 配置及端口绑定配置

    网络搜集 一. 按VPN的协议分类 VPN的隧道协议主要有三种,PPTP,L2TP和IPSec,其中PPTP和L2TP协议工作在OSI模型的第二层,又称为二层隧道协议:IPSec是第三层隧道协议,是最 ...

  7. CSS基础(六):浮动深入

    参考了<CSS彻底设计研究>的文章,说的很不错,所以拿来做笔记. 浮动 在标准流中,一个块级元素在水平方向会自动伸展,直到包含它的元素边界:而在竖直方向和兄弟元素依次排列,不能并排.使用浮 ...

  8. Http 1.1协议

    HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间数据交换的过程. 1.Http1. ...

  9. Gradle 脚本剪片---copy

    Gradle是以Groovy语言为基础,基于DSL语法的自动化构建工具,一个构建脚本能够包含任何Groovy语言元素,每个脚本都是UTF-8编码的文件. 6-1 Project对象API 前面我们说过 ...

  10. java框架篇---spring IOC依赖注入

    spring依赖注入的方式有4种 构造方法注入 属性注入 工厂注入 注解注入 下面通过一个实例统一讲解: User.java package com.bjsxt.model; public class ...