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