SIP(Session Initiation Protocol)是一个应用层协议,用于在IP网络中创建、修改和终止多媒体通信会话,比如语音、视频通话、即时消息等。SIP 协议特别适合实现多方参与的会议(会议呼叫)功能。下面我们将详细讲解 SIP 会议信令及其工作原理。
SIP 会议信令的基本原理
SIP 是一种文本协议,类似于 HTTP,用于管理和控制会话的建立、管理以及终止。SIP 通过请求和响应的交互方式来完成这些任务。
在 SIP 会议中,涉及多个用户或设备进行通话,会议通常由一个会议服务器(Conference Server)或多点控制单元(MCU)来协调。SIP 会议信令流程分为邀请用户加入会议、管理会议、终止会议等几个阶段。
核心概念:
- User Agent (UA): SIP 用户代理,通常是 SIP 客户端(如电话、软终端等),负责发起或接收 SIP 请求和响应。
- Proxy Server: 代理服务器,用于中转和路由 SIP 信令。
- Registrar Server: 注册服务器,负责维护 UA 的注册信息。
- Conference Focus: 会议的核心节点,负责处理所有 SIP 会议相关的信令和媒体流,通常由 MCU 扮演。
- Dialog: SIP 中的一次会话,表示两个终端之间的交互。
常见的 SIP 信令方法
SIP 使用了多个信令方法来完成会话的不同阶段。以下是 SIP 会议信令中的主要方法及其作用:
-
INVITE
- 用途: 用于邀请用户加入一个会话或会议。会议信令流程通常从 INVITE 开始。
- 原理: SIP UA 向会议服务器或其他用户代理发送 INVITE 请求,包含会话的初始信息,如 SDP(Session Description Protocol)数据,描述会议的媒体格式、编码方式等。
- 示例:
INVITE sip:bob@conference.example.com SIP/2.0 Via: SIP/2.0/UDP 192.0.2.1 From: <sip:alice@example.com>;tag=1928301774 To: <sip:bob@conference.example.com> Call-ID: a84b4c76e66710 CSeq: 314159 INVITE Content-Type: application/sdp
-
ACK
- 用途: 用于确认对 INVITE 的成功响应。
- 原理: 当 INVITE 请求得到 200 OK 响应后,UA 发送 ACK 确认,表示会话已建立。ACK 确保双方都同意会话的设置。
-
BYE
- 用途: 用于终止会话或离开会议。
- 原理: 当用户希望挂断或离开会议时,发送 BYE 请求,会议服务器或对方收到后,会终止媒体流并释放资源。
-
OPTIONS
- 用途: 查询对方的能力(如支持的媒体类型)。
- 原理: 在会议中,可以使用 OPTIONS 请求来检查对方的能力而不发起实际的会话。
-
CANCEL
- 用途: 取消正在进行的 INVITE 请求。
- 原理: 如果在会议中某个用户邀请了另一方但希望在对方接听之前取消邀请,可以发送 CANCEL 请求。
-
REGISTER
- 用途: 注册用户的位置或设备信息。
- 原理: 用户代理通过 REGISTER 请求向 Registrar 服务器注册它的位置信息,以便其他用户可以找到该用户。
-
PRACK (Provisional Acknowledgment)
- 用途: 用于确认临时响应(如 1xx 消息),增强了 INVITE 请求的可靠性。
- 原理: 在 SIP 会议中,PRACK 用于确保临时消息得到确认,尤其是在较复杂的多方会议环境下。
-
REFER
- 用途: 转接呼叫,或者邀请第三方进入现有的会话。
- 原理: REFER 通常用于 SIP 会议中邀请新用户加入或将会议转移到其他终端。
- 示例:
REFER sip:bob@conference.example.com SIP/2.0 Refer-To: sip:charlie@conference.example.com
-
NOTIFY
- 用途: 通知状态的改变。
- 原理: 通常与 SUBSCRIBE 配合使用,NOTIFY 用于向会议中的其他成员通报状态改变(例如用户离开、加入或媒体状态的改变)。
-
SUBSCRIBE
- 用途: 订阅会议状态的更新。
- 原理: 在会议中,某些 UA 可以通过 SUBSCRIBE 请求订阅会议相关的事件,如谁正在讲话,谁加入或离开会议等。
SIP 会议中的 SDP(Session Description Protocol)
SIP 通常与 SDP 结合使用来描述会话中的媒体信息。SDP 包含会议中的音频、视频流的具体编码格式、传输地址和端口等信息。
SDP 示例:
v=0
o=alice 2890844526 2890844526 IN IP4 192.0.2.1
s=Conference Call
c=IN IP4 192.0.2.1
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000
SDP 的几个重要字段:
v=
: SDP 版本。o=
: 会话创建者的身份信息。s=
: 会话名称(这里是“Conference Call”)。c=
: 媒体流的连接信息,包括IP地址和传输类型。m=
: 媒体类型和传输端口(如音频和视频的 RTP 端口)。a=
: 媒体属性,如媒体编码格式(PCMU 和 H261)。
SIP 会议的工作流程
- 会议创建: 一个 UA 通过向会议服务器发送 INVITE 请求,邀请其他用户加入。服务器响应 INVITE,并发送
200 OK
消息,确认会话的建立。 - 用户加入会议: 每个新的 UA 可以通过发送 INVITE 请求加入会议。会议服务器会协调和转发 INVITE 到其他参与者。
- 媒体协商: SIP 使用 SDP 协商会议中的音频、视频编码格式和网络传输参数。
- 会议管理: SIP 使用 REFER 和 NOTIFY 来管理会议中的用户邀请、状态更新和媒体改变。
- 会议终止: 当会议结束时,会议服务器或参与方发送 BYE 请求终止会话。
SIP 会议信令的示例流程
假设 Alice 邀请 Bob 和 Charlie 参加一个 SIP 会议:
-
Alice 发起会议: Alice 向会议服务器发送 INVITE 请求,创建会议会话。
INVITE sip:conference-server@example.com SIP/2.0
-
Bob 加入会议: 会议服务器向 Bob 发送 INVITE 请求,邀请 Bob 加入会议。
INVITE sip:bob@example.com SIP/2.0
Bob 发送
200 OK
响应,然后 Alice 发送 ACK 确认,Bob 加入会议。 -
Charlie 加入会议: Alice 使用 REFER 请求让 Charlie 加入会议。会议服务器向 Charlie 发送 INVITE 请求。
REFER sip:charlie@example.com SIP/2.0
-
会议结束: Alice 发送 BYE 请求,终止会议。
总结
SIP 是一个强大的协议,广泛应用于语音、视频通话及会议通信中。在 SIP 会议中,涉及 INVITE、ACK、BYE、REFER、NOTIFY 等核心信令,通过这些信令的交互,用户可以发起、加入、管理和终止会议。SIP 的灵活性使其可以适应复杂的多媒体应用场景,并且它与 SDP 协作实现了对媒体流的协商和管理。