当前位置: 首页 > 工具软件 > QuteCom > 使用案例 >

QuteCom手记:sip简介&SIP:INVITE消息

吕利
2023-12-01

参考《sip中文参考手册.pdf》已经放在在csdn的资源里

 

该协议的实现在exosip和osip2两个工程里。

phapi调用了exosip的接口 

 

SIP:会话控制协议

 

1.1简介

作用:

1、根据SIP帐号定位用户(IP)。

2、商讨会话(语音通话,视频连接之类)的参数(语音编码之类)。

3、建立、终止回话。

4、其他没有在qutecom中用到的功能不记。

 

在QuteCom项目里可以简单认为使用SIP协议做以下几件事:

1、User1向SIP服务器注册一个形如:sip:User1@xxxx.com的账号 

2、User1打电话给一个用户SIP:User2@xxxx.com,此时服务器通过SIP协议找到User1的IP地址(定位)

3、服务器处理User1向User2发起的邀请(INVITE),找到用户后,通过SIP协议协商通话的参数,比如User1向User2提供了一个语音编码的选项表(G711,G723,G726,G729等等),User2收到邀请(INVITE)后查看列表和自己支持的列表,假如自己的列表首选的是G723,那么发送一个OK(200)消息给User1。这样两方就协商好了通话的音频编码为G723(或者其他)。这就是商讨会话参数

4、建立、终止会话,基本上就是打电话,接电话之类。就是发送各种消息改变通话状态。这部分内容茫茫多,将另外写一篇笔记。

 

特点:

1、基于文本,例如发起邀请的INVITE请求格式为:

  1. INVITE sip:to@192.168.105.14 SIP/2.0  
  2. Via: SIP/2.0/UDP 192.168.105.5:5060;rport;branch=z9hG4bK2195  
  3. From: <sip:from@192.168.105.5>;tag=29244  
  4. To: <sip:to@192.168.105.14>  
  5. Call-ID: 8103  
  6. CSeq: 20 INVITE  
  7. Contact: <sip:from@192.168.105.5:5060>  
  8. Content-Type: application/sdp  
  9. Max-Forwards: 70  
  10. User-Agent: Linphone/3.2.1 (eXosip2/3.3.0)  
  11. Subject: Phone call  
  12. Content-Length:   315  
  13. v=0  
  14. o=from 123456 654321 IN IP4 192.168.105.5  
  15. s=A conversation  
  16. c=IN IP4 192.168.105.5  
  17. t=0 0  
  18. m=audio 7078 RTP/AVP 111 110 0 3 8 101  
  19. a=rtpmap:111 speex/16000/1  
  20. a=rtpmap:110 speex/8000/1  
  21. a=rtpmap:0 PCMU/8000/1  
  22. a=rtpmap:3 GSM/8000/1  
  23. a=rtpmap:8 PCMA/8000/1  
  24. a=rtpmap:101 telephone-event/8000  
  25. a=fmtp:101 0-11
全是字符串格式的格式,类似HTTP协议,SMTP协议。这样的好处是可读行好,解析也方便。如解读方用正则表达式就可以十分方便解析出各种参数。

1.2 INVITE格式解析
第1~12行是SIP的包头,其中第一行为请求类型(INIVITE),其后至12行为该请求的头域,格式为(xx:yy)。第13~25是该SIP包携带的SDP包(即为该SIP包的消息正文)
第1行:请求的类型(INVITE)。
第2行:VIA域指定SIP版本2.0,传输协议为UDP。包含了Alice 接收发送请求的服务器地址(pc33.atlanta.com)。同样这个包含了一个分支参数来标志Alice和这个服务器的会话事务。
第3行和第4行:指定发起者和接收者。
第5行:Call_ID 包含一个全局的唯一标志,用来唯一标志这个呼叫,通过随机字串和softphone的自己名字或者IP地址混和产生的。通过TO TAG, FROM TAG 和CALL-ID 完整定义了Alice和Bob之间的端到端的SIP 关系,并且表示这个是一个对话性质的关系。
第6行:CSEQ 或者Command Sequence 包含了一个整数和一个请求名字。这个Cseq 数字是顺序递增的。每当对话中发起一个新的请求都会引起这个数字的顺序递增。
第7行:服务器,IP:Port
第8行:Content-Type: application/sdp  表示该SIP消息携带的消息正文类型为sdp包。
第9行:Max-Forwards规定了最大转发数量,它通讯中本消息转发的最大次数,每转发一次减一。这个可以不理他。
第10行:User-Agent,用户客户端描述。这里说明客户端是Linphone版本为3.2.1 使用的eXosip2库版本为3.3.0。这个可以是wengophone/qutecom等等。
第11行:Subject: Phone call。说明这个SIP包的主题是一个Phone Call。这个可以不理它。
地12行:Content-Length:   315  表示该SIP消息携带的内容的长度为315字节
第18行代表的所负载类型 m=audio 表示负载是声音数据,
7078 RTP/AVP 表示使用RTP传输,发起方RTP端口7078.
111,110,0,3,8,101是负载的编码/解码方式的数字表示。
第19~23表示对应(111,110,0,3,8,101)的具体格式。
18~23行给对方提出选项,对方可以选择其中之一codec用于建立会话。如对方可以选择GSM作为语音编码作为双方的编码。这就是SIP的“会话协商”功能。
"a=rtpmap:3 GSM/8000/1"的具体意义如下
3:代表RTP负载GSM的数字代码。
GSM:类型描述
8000:语音数据取样率8kHz
1:单声道

特别注意18~23行的编码选项:如果对方不支持里面的codec之一则无法建立通话。
 类似资料: