SIP (会话初始协议)初了解
在工作中,常常接触音视频流的传输,所以,整理一下关于音视频传输的一些常用协议。首先最简单的要数应用层的sip协议了。
SIP(Session Initiation Protocol)
会话初始协议,它是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。其应用特别广泛,可以说有有IP网络的地方就有SIP协议的存在。我们公司主要是应用在音视频数据传输方面。
sip主要由四部分组成:
- SIP 用户代理
user agent, 终端用户设备,简单说就是用户使用的设备,该设备与用户代理服务器交互。 - SIP 注册服务器
SIP 注册服务器是包含域中所有用户代理的位置的数据库。在 SIP 通信中,这些服务器会检索出对方的 IP 地址和其他相关信息,并将其发送到 SIP 代理服务器。 - SIP 代理服务器
SIP 代理服务器接受 SIP UA 的会话请求并查询 SIP 注册服务器,获取收件方 UA 的地址信息。然后,它将会话邀请信息直接转发给收件方 UA(如果它位于同一域中)或代理服务器(如果 UA 位于另一域中)。 - SIP 重定向服务器
SIP 重定向服务器允许 SIP 代理服务器将 SIP 会话邀请信息定向到外部域。SIP 重定向服务器可以与 SIP 注册服务器和 SIP 代理服务器同在一个硬件上。
下图中是两个用户通过sip服务进行呼叫对话的过程。
- 用户1向代理服务器发送会话消息,说明想要寻找用户2
- 代理服务器没有用户2的信息,即找不到用户2,向注册服务器请求帮助,寻找用户2
- 注册服务器中由所用的用户的注册消息,找到2的信息后,返回给代理服务器,此时代理服务器有了用户1 和用户2的信息
- 代理服务器向用户2发送消息,
- 用户2响应代理服务器请求
- 代理服务器响应用户1的呼叫请求,
- 因为用户1和用户2不能够直接对话,只能通过代理服务器对话,所以步骤1到步骤6即是二者在交互的过程。当步骤1-6走完之后,用户1和用户2就可以知道对方的所在,就能够单独对话,而不再靠代理服务器传话了。
SIP协议是一个Client/Sever协议,因此SIP消息分两种:请求消息和响应消息。请求消息是SIP客户端为了**特定操作而发给服务器端的消息。
常用的SIP请求消息如下:
- INVITE:表示主叫用户发起会话请求,邀请其他用户加入一个会话。也可以用在呼叫建立后用于更新会话(此时该INVITE又称为Re-invite)。
- ACK:客户端向服务器端证实它已经收到了对INVITE请求的最终响应。
- PRACK:表示对1xx响应消息的确认请求消息。
- BYE:表示终止一个已经建立的呼叫。
- CANCEL:表示在收到对请求的最终响应之前取消该请求,对于已完成的请求则无影响。
- REGISTER:表示客户端向SIP服务器端注册列在To字段中的地址信息。
- OPTIONS:表示查询被叫的相关信息和功能。
在使用sip服务器的过程中,互相发消息的过程中经常会碰见一些代码,下面是一些常用的交互结果码,我们可以熟悉一下:
100试呼叫(Trying)
180振铃(Ringing)
181呼叫正在前转(Call is Being Forwarded)
200成功响应(OK)
302临时迁移(Moved Temporarily)
400错误请求(Bad Request)
401未授权(Unauthorized)
403禁止(Forbidden)
404用户不存在(Not Found)
408请求超时(Request Timeout)
480暂时无人接听(Temporarily Unavailable)
486线路忙(Busy Here)
504服务器超时(Server Time-out)
600全忙(Busy Everywhere)
对于sip服务,我公司只是应用于音视频的数据交互传输过程,实际应用为,nvr向服务器发送视频流,视频流的建立过程就首先使用到了sip服务。而后进行adp协议交互,最终发送视频流。达到视频流传输到指定地址的目的。