https://blog.csdn.net/smllyy/article/details/40825595

其中在pjsip-apps/src/下的PJSUA是一个开源的命令行SIP用户代理(软电话),用PJSIP协议,PJNATH,和PJMEDIA实现。它虽然只有很简单的命令行界面,但是功能齐全。

PJSUA手册

Pjsua是一个开源的命令行SIP UA(软电话),是PJSIP,PJNATH和PJMEDIA的实现。尽管它只是简单的命令行展现,但是它具有很多特性。

简介          

SIP 特性:

多个id(帐户注册);
多个呼叫;
支持IPv6(在1.2版本中添加);
PRACK(100rel,RFC 3262);
UPDATE (RFC 3311);
OPTIONS;
呼叫保持;
呼叫转移;(已参加的或没参加的,有或没有refersub,RFC3515, 3891, 3892, 4488)
简单的PIDF和XPIDF的支持(SUBSCRIBE/NOTIFY,RFC 3265,3856,3863);
自定义存在状态文本(RPID,RFC 4480);
支持PUBLISH(RFC 3903);
即时消息(消息)和消息组成指示(RFC 3428,3994);
支持UDP,TCP和TLS传输;
SIP服务器的DNS SRV解析(RFC 3263);
带INFO的DTMF(RFC 2976);
STUN(RFC 3489bis);
使用AKA认证(开发中,RFC 3310,4169)。

媒体特性:

多个并发调用;
会议;
支持Speex,iLBC,GSM,G711,G722,和L16编解码;
宽带和超宽带编解码(Speex);
通过Intel的IPP库支持更多编解码:AMR-WB,AMR-NB,G.722.1(Siren7),G.723.1,G.726,G.728,G.729A;
立体声编解码(L16);
WAV文件播放,流媒体和录制;
支持RTCP协议;
通话质量监测;
RFC 2833;
自动应答,自动播放文件,自动循环RTP;
产生声音;
AEC(回声消除);
自适应抖动缓冲器;
自适应静音检测;
PLC(包丢失隐藏);
丢包模拟;
每个RTP包中包含多个帧;
支持SRTP(安全RTP)

NAT穿透特性:

ICE(互动式连接建立,最新ICE草案);
STUN(最新的RFC3489-bis)
TURN(最新草案);
rport;
SIP的TCP和TLS保持连接(keep-alive);
自动检测和恢复SIP UDP地址的变更;
自动检测ICE媒体传输的变化;

 

参考

概要

用法:PJSUA [选项] [SIP URL]一般选项:--config-file=file     读取从文件的配置/参数;--help         显示此帮助屏幕;--version         显示版本信息;日志记录选项:--log-file=fname    日志文件名(默认是stderr);--log-level=N       设置日志的最大级别为N(0(无)6(跟踪))(默认值= 5);--app-log-level=N   设置日志标准输出展示的最大等级(默认值= 4);--color             使用不同颜色标识日志(在Win32默认开启);--no-color          禁用不同颜色标识日志;--light-bg          使用白底黑字的颜色(默认是黑暗的背景);SIP帐户选项:--use-ims           开启和这个账号相关的3GPP/IMS设置;--use-srtp=N        是否使用SRTP?  0:不使用, 1:可选, 2:强制使用 (默认:0);--srtp-secure=N     SRTP 是否需要安全的SIP? 0:不需要, 1:tls方式, 2:sips (默认:1);--registrar=url     设置注册服务器的URL;--id=url            设置本地账户的URL(From字段)--contact=url       可选地覆盖联系人信息--contact-params=S  给指定的联系URI添加S参数--proxy=url         可选择的访问代理服务器的URL                     --reg-timeout=SEC   注册时间间隔 (default 55)--realm=string      设置realm--username=string   设置用户名--password=string   设置密码--publish           发PUBLISH--use-100rel        需要可靠的临时响应(100rel)--auto-update-nat=N n为0或1来启用/禁用SIP穿透对称NAT(默认1)--next-cred         添加其他凭据SIP帐户控制:--next-account      添加更多的账户传输选项:--ipv6              使用IPv6--local-port=port   端口(TCP,UDP)--ip-addr=IP        ip地址--bound-addr=IP     绑定端口--no-tcp            禁用TCP传输--no-udp            禁用UDP传输--nameserver=NS     域名服务器, 可以指定多次--outbound=url      设置全局代理服务器的URL,可以指定多次--stun-srv=name     设置STUN服务器主机或域名TLS选项:--use-tls           启用TLS传输(默认不开启)--tls-ca-file       指定TLS CA文件(默认为无)--tls-cert-file     指定TLS证书文件(默认为无)--tls-privkey-file  指定TLS私钥文件(默认值=无)--tls-password      指定TLS私钥文件密码(默认为无)--tls-verify-server 验证服务器的证书(默认=没有)--tls-verify-client 验证客户端的证书(默认=没有)--tls-neg-timeout   指定超时(默认值无)--tls-cipher        指定TLS首选的密码,可以指定多次媒体选项:--add-codec=name    手工添加编解码(默认开启所有)--dis-codec=name    禁用某个编解码(可以多次使用)--clock-rate=N      覆盖会议桥时钟频率--snd-clock-rate=N  覆盖音频设备时钟频率--stereo            音频设备及会议桥开通立体声模式--null-audio        使用NULL音频设备--play-file=file    在会议桥中注册WAV文件--play-tone=FORMAT  向会议桥注册音调,格式是'F1,F2,ON,OFF',其中F1,F2为频率,ON,OFF=on/off ,可以指定多次。--auto-play         自动播放文件(仅来电)--auto-loop         自动循环传入RTP到传出RTP--auto-conf         自动加入会议--rec-file=file     打开录音文件(扩展名可以使.wav 或者 .mp3)--auto-rec          自动记录通话--quality=N         指定媒介质量(0-10,默认6)--ptime=MSEC        覆盖编解码器ptime的毫秒的--no-vad            停用VAD方案/静音探测器(默认启用VAD)--ec-tail=MSEC      设置回波抵消尾长度(默认值256)--ec-opt=OPT        选择回波抵消算法(0 =默认,1 = SPEEX,2 =抑制)--ilbc-mode=MODE    设置iLBC语音编解码器模式(20或30,默认是30)--capture-dev=id    音频捕获的设备ID(默认值= -1)--playback-dev=id   音频播放设备ID(默认值= -1)--capture-lat=N     音频捕获延迟(毫秒,默认值= 100)--playback-lat=N    音频播放延迟(毫秒,默认值= 100)--snd-auto-close=N  闲置N秒后自动关闭音频设备指定n = -1(默认)禁用此功能。指定即时关闭不使用时,N = 0。--no-tones          禁音--jb-max-size       指定抖动缓冲最大值(帧,默认= -1)媒体传输选项:--use-ice           使用ICE(默认:不使用)--ice-no-host       禁用ICE主机候选(默认:no)--ice-no-rtcp       在ICE中禁用RTCP组件(默认:no)--rtp-port=N        RTP尝试端口(默认4000)--rx-drop-pct=PCT   降低RX RTP中PCT的百分比 (for pkt lost sim, default: 0)--tx-drop-pct=PCT   降低 TX RTP中PCT的百分比 (for pkt lost sim, default: 0)--use-turn          开启ICE中的TURN 转发(default:no)--turn-srv          TURN服务器的域或主机名称--turn-tcp          使用TCP连接到TURN服务器(默认:no)--turn-user         TURN用户名--turn-passwd       TURN密码好友名单(可以是多个):--add-buddy url     添加指定的URL到好友列表中用户代理选项:--auto-answer=code  自动接听来电的应答代码(如200)--max-calls=N       最大并发呼叫数(默认:4,最大:255)--thread-cnt=N      工作线程数目(默认:1)--duration=SEC      设置最大通话时间(默认是:没有限制)--norefersub        转接通话时禁止事件订阅--use-compact-form  最小的SIP消息大小--no-force-lr       允许使用严格路由--accept-redirect=N 指定如何处理呼叫重定向响应(3XX)。0:拒绝,1:自动(默认),2:询问

应用程序菜单

呼叫命令
m    产生一个呼叫
M    向同一个地址产生多个呼叫
a    响应呼叫(发送100-699)
h    挂断当前呼叫(ha为挂断所有)
H    呼叫保持
v    恢复通话(解除呼叫保持)
U    发送UPDATE请求
],[ 选择通话(下一个/上一个)
x    呼叫转移
X    呼叫替换
#    发送DTMF(RFC238)
*    发送DTMF(SIP INFO)
dq    显示当前通话质量
S    给远端主机发送任意请求

即时通讯
+b    添加好友
-b  删除好友
i      发送即时消息
s    订阅(好友)当前状态
u    取消订阅(好友)当前状态
t      在线状态切换
T     设置在线状态

帐户
+a  添加
-a  删除
!a  修改
rr  重新注册
ru  注销
>   选择下一个账号
<   选择前一个账号

会议命令

cl  列出注册到会议桥的所有端口
cc  会议连接
cd  会议连接断开
V   调节音量
Cp  管理编码器的优先级

状态和设置
d    显示状态
dd    显示状态详情
dc    显示配置
f    保存配置

其它命令:
q                退出
sleep MS        暂停键盘输入(毫秒)
echo [0|1|TXT]    控制echo命令(0:禁用,1:启用,TXT :回显)
n                探测NAT网络

PJSUA的使用

1、简单点对点(最简单的使用方式,无服务器配置,UA之间直接连接,默认端口:5060)

启动: $ ./pjsua

呼叫:$ ./pjsua sip:192.168.0.10

2、向SIP供应商注册

使用下面的命令将运行pjsua,并设置From域为alice@example.com,但是无注册

$ ./pjsua --id sip:alice@example.com

单帐户注册:

$./pjsua --id sip:alice@example.com --registrar sip:example.com \

--realm* --username alice --password secret

多帐户注册:

$./pjsua --id sip:bob@provider1.com --registrar sip:provider1.com \

--realmprovider.1.com --username bob --password secret \

--next-account\

--idsip:bob@provider2.com --registrar sip:provider2.com \

--realmprovider2.com --username bob --password secret

向example.com服务器注册,并想outbound.home.com发送鉴权请求

$./pjsua --id sip:alice@example.com --registrar sip:example.com \

--proxy outbound.home.com \

--realm example.com --username alice--password secret --next-cred \

--realm outbound.home.com --usernameblah --password blahblah

3、使用TCP传输

默认地,TCP传输时会被创建和初始化的。然而,只有在目标URL中包含";transport=tcp"参数时才会自动初始化。

例如注册时,使用TCP传输

"--registrar sip:example.com;transport=tcp"

4、使用IPv6

IPv6支持需要在编译过程中在config_site.h文件中声明"#define PJ_HAS_IPV6 1"

启动pjsua使用IPv6

$ ./pjsua --ipv6

强制pjsua去使用一个指定的IPv6地址

$ ./pjsua --ipv6 --bound-addrfec0::2 --no-tcp

注意:SIP TCP传输目前不支持IPv6

一个简单的IPv6下的注册

$ ./pjsua --ipv6 --idsip:myself@[fec0::1] --registrar sip:[fec0::1] \

--username myself --realm "*" --password secret

5、 自动应答200OK并在来电时播放wav文件:

$pjsua --play-file PROMPT.WAV --auto-answer 200 --auto-play --auto-loop \

--max-calls100

配置文件

配置文件就是将命令写在一个文件里

下面是配置文件中的一个语句

--id sip:alice@example.com

--registrar sip:example.com

--realm *

--username alice

--password secret

使用配置文件运行pjsua

$ ./pjsua --config-file alice.cfg

PJSUA手册 --系列文章相关推荐

  1. .NET Core on K8S 学习与实践系列文章索引 (更新至20191126)

    更新记录: -- 2019-11-26 增加Docker容器日志系列文章 近期在学习Kubernetes,基于之前做笔记的习惯,已经写了一部分文章,因此给自己立一个flag:完成这个<.NET ...

  2. .NET Core on K8S学习实践系列文章索引(持续更新)

    近期在学习Kubernetes,基于之前做笔记的习惯,已经写了一部分文章,因此给自己立一个2019年的flag:完成这个<.NET Core on K8S学习实践>系列文章!这个系列会持续 ...

  3. 《 FRIDA系列文章 》

    转载:<FRIDA系列文章>github 地址:https://github.com/r0ysue/AndroidSecurityStudy 由 Frida 提供的很棒的 项目.库和工具的 ...

  4. saltstack之基础入门系列文章简介

    使用saltstack已有一段时间,最近由于各种原因,特来整理了saltstack基础入门系列文章,已备后续不断查阅(俗话说好记性不如烂笔头),也算是使用此工具的一个总结. saltstack的前六篇 ...

  5. Prometheus技术系列文章——prometheus调研总结

    Prometheus技术系列文章--prometheus调研总结 prometheus调研总结 文章目录 Prometheus技术系列文章--prometheus调研总结 前言 1. Promethe ...

  6. ART-Pi系列文章

    目录 资料整理 系列文章链接 概念: 1.BSP 2.SDK 3.USB_OTG 4.FLASH 5.SSID 6.GNU ART-Pi 是 RT-Thread 官方推出一款具有高度可扩展性的硬件,能 ...

  7. 博客园技术系列文章目录

    目录1.5版-2015 05 05 如果大家觉得不全,或者有更好的可以评论里面留言啊,后续还会有2.0  3.0  n.0版本 关于大型网站的思考--夏森 http://www.cnblogs.com ...

  8. 开发者头条 2016 年度盘点系列文章

    2016 年开发者头条十大获赞最多文章 0. 如果有人问你数据库的原理,叫他看这篇文章 如果你对了解一个数据库感兴趣,但是从未有时间或意愿来刻苦钻研这个内容广泛的课题,你应该喜欢这篇文章. 1. 吐血 ...

  9. TiDB 源码阅读系列文章(五)TiDB SQL Parser 的实现

    本文为 TiDB 源码阅读系列文章的第五篇,主要对 SQL Parser 功能的实现进行了讲解,内容来自社区小伙伴--马震(GitHub ID:mz1999 )的投稿. TiDB 源码阅读系列文章的撰 ...

最新文章

  1. IP多播技术及其应用
  2. redis查询所有key命令_想在生产搞事情?那试试这些 Redis 命令
  3. [芯片] 2、接口技术·实验二·定时/计数器8253
  4. 洛谷 P1404 平均数
  5. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)
  6. linux下epoll网络编程模型,C++ - 网络编程模型 - Linux EPOLL
  7. 插入目录后 正文页码重新怎么从1开始
  8. python3 教程 下载图片资源
  9. 徐磊英语语法整理1-3 词性,语序
  10. webpack入门学习笔记10 —— 在项目中使用图片资源
  11. (VS)c++调用matlab函数
  12. 优秀不够,你是否无可替代
  13. 单测利器——PowerMockito使用心得
  14. 【Python使用】Python解析JSON数据的基本方法/用MATLAB解析json格式数据
  15. Android源代码编译原理与前期准备
  16. Unity3d 在 twitter 转载(周报) 2018.11.10
  17. QT实现简单的贪吃蛇小游戏
  18. Python简单?先来40道基础面试题测试下
  19. 猿创征文|从酒店前台收银到软件研发教学主管到技术经理之路~
  20. 《动机与人格》笔记(一)——人类似乎从来就没有长久地感到过心满意足

热门文章

  1. 童年游戏机项目,每天被动收入200+
  2. 快速实现分布式商业应用?这个下一代公链提供了可能
  3. IDEA快捷键功能大全,分类明确
  4. 【sdx62】sdx62分析代码中Serial Number的寄存器地址及获取Serial Number的方法
  5. 【Python】Python猜拳游戏、数字竞猜游戏小实例、随机密码注册,模拟用户登陆实例
  6. 用微信小程序开店之七——小程序组件3:“表单”(1)
  7. Oracle期中考试上机试题
  8. 完美解决Mac系统下Chrome插件安装时程序包无效:CRX_HEADER_INVALID
  9. 2022 大三上规划
  10. 朴素贝叶斯分类器的例子