05 March 2014
毕设题目《基于流媒体的语音视频通话系统》,基于Android实现。关于SIP协议的分析以及opensips注册和通话的研究。

本系统要基于网络进行对讲通话,SIP协议(会话发起协议)用于建立、保持、销毁会话,其功能和日常打电话的流程是一致的。SIP是完成是完成本系统要用到的核心协议。

IMG-THUMBNAIL

SIP协议位于网络七层协议中的会话层,位于TCP/IP协议中的应用层。虽然没有做过验证,但是我觉得iOS上的Facetime也是基于此协议。一个手机可以绑定多个SIP地址,注册之前也是要指明要绑定的地址。只不过iOS的注册是自动完成的。


OPTIONS请求可以作为建立会话的一部分,用来查询对方的SIP能力。常见的返回值,也就是SIP执行能力:

  • INVITE。用于发起SIP会话请求。
  • ACK。用于确认SIP请求。
  • CANCEL。用于取消SIP请求。
  • OPTIONS。用于查看对方SIP执行能力。
  • BYE。用于结束SIP请求。

##SIP注册 IMG-THUMBNAIL

SIP协议注册到服务器的一般过程:向SIP服务器发起请求,此处为asteriskguide.com。并发送自己的用户名,此处为8500。此外,还要附带本机IP地址,作为将来通信使用。Contact代表的就是当前用户的通信地址,其他用户可以通过此地址联系到当前用户,实现发送呼叫请求。

IMG-THUMBNAIL

我从WireShark[1]截到的图,也可以看到此通信过程,10.14.5.218121.199.55.106发起注册请求REGISTER。接着,收到了状态码,200 OK。SIP协议的设计借鉴了HTTP,返回状态码和HTTP的相同。此处为200。

其中,中间的PUBLISH是向服务器发送消息,告诉它我们在线[3]

IMG-THUMBNAIL

REGISTER请求[4]:

  • TO 是为哪一个用户注册的。是一个完整的SIP用户的SIP URI。发出注册请求的并不一定是SIP用户本身。所以要有FROM头域
  • FROM 谁发起的注册,就是谁的SIP URI
  • Call-ID 同一个SIP客户端的Call-ID是相同的。因为同一个sip客户端会间隔一定的时间就注册一次。在注册服务器里面用户的注册信息保留一定的时间,保存的时间并不是SIP规定的。
  • CSeq CSeq 值保证REGISTER 请求适当的排序。对于每个使用相同的Call-ID 的REGISTER 请求,UA 必须逐一增加Cseq 值。
  • Expires 注册绑定时间为3600s

IMG-THUMBNAIL

此处返回的状态码为200,表示注册成功。此外,相比REGISTER还增加了Contact,返回当前用户所有注册过的SIP URI,我用多台设备注册过,所以返回了多个结果。


##SIP发起会话 IMG-THUMBNAIL

IMG-THUMBNAIL

使用WireShark绘制的连接、通信、以及断开连接的流程图更直观一些。由sip:mint@121.199.55.106:5060sip:ad@10.14.5.202发送通话请求。当ad收到请求后,会立刻返回100 TRYING响应,等一段时间之后,再返回180 RINGING,接通之后,响应200 OK[5]

IMG-THUMBNAIL

该图中,由mint@121.199.55.106:5060ad@10.14.5.202:10060发起连接请求,内容格式是SDP描述格式,该格式内容会包含音视频传输参数和传输端口。详细内容参考下一节

系统所用的SIP服务器是opensips。该部分的配置和使用超出了本文范围,不作详细介绍。


######参考文献

原文链接:SIP协议的分析以及opensips注册和通话的研究,转载请注明来源!

EOF

欢迎加微信交流与吐槽



本站总访问量次; 本站访客数人次; 本文总阅读量次;