【音视频】SIP(推流中涉及SIP信息分析)
概述
RFC3261 中文翻译 中文RFC RFC文档 RFC翻译 RFC中文版
本文仅仅是对sip的基本了解,主要是实现sip的基本交互,详细参考上述文档
INVITE请求处理事例
GB28181平台向目标设备发送获取视频的请求(INVITE)
INVITE sip:34020000001320000001@221.230.1.1:15060 SIP/2.0
Via: SIP/2.0/UDP 121.229.21.99:15060;rport;branch=z9hG4bK881052973
From: <sip:34020000002000000001@3402000000>;tag=410052973
To: <sip:34020000001320000001@231.230.1.1:15060>
Call-ID: 184052872
CSeq: 8549084 INVITE
Content-Type: APPLICATION/SDP
Contact: <sip:34020000002000000001@121.229.21.99:15060>
Max-Forwards: 70
User-Agent: LiveGBS v240830
Subject: 34020000001320000001:0200000001,34020000002000000001:0
Content-Length: 222
参数分析
- INVITE sip:34020000001320000001@231.230.1.1:15060 SIP/2.0
- INVITE:SIP 请求方法,用于发起会话或通话
- sip: 目标sip标识符@目标服务器IP地址:目标服务器的监听端口号
- Via: SIP/2.0/UDP 121.229.21.99:15060;rport;branch=z9hG4bK881052973
- via:经过的代理,主要是用于追踪路由,对于整体逻辑不影响
- From: <sip:34020000002000000001@3402000000>;tag=410052973
- 请求发起方:告知接受者谁发起的请求
- tag:发起方的标识符,主要用于区分同一个设备的多个会话
- To: <sip:34020000001320000001@231.230.1.1:15060>
- 请求到达的目标地址:也就接收地址
- Call-ID: 184052872
- 用于表示一个会话 :同一个会话,所有的请求和响应都会使用相同的Call-ID,从而确保它们可以被正确的关联
- CSeq: 8549084 INVITE
- 请求序列号+方法:主要就是用来区分同一个会话中的多个请求
- Content-Type: APPLICATION/SDP
- 请求体的媒体类型:该处表示请求体内容是一个SDP消息
- Contact: <sip:34020000002000000001@121.229.21.99:15060>
- 发起请求的设备IP地址:注意后续也就是通过这个地址来回复请求或者进行后面的通信
SDP信息
v=0
o=34020000001320000001 0 0 IN IP4 121.229.21.99
s=Play
c=IN IP4 121.229.21.99
t=0 0
m=video 30196 RTP/AVP 96 97 98
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:97 MPEG4/90000
a=rtpmap:98 H264/90000
y=0200000001
- v=0
- 版本号,SDP协议
- o=34020000001320000001 0 0 IN IP4 121.229.21.99
- o:会话创建者的会话标识符,也就是创建会话的设备
- IN:表示会话地址类型和使用的IP地址
- s=Play
- 会话名称:此处是播放会话
- c=IN IP4 121.229.21.99
- 连接信息:此处是连接sip服务端的地址信息
- t=0 0
- 会话时间范围:开始时间到结束时间,此处表示的是一个实时流媒体
- m=video 30196 RTP/AVP 96 97 98
- m:媒体描述,这里表示有一个视频流
- 端口号+支持的协议类型
- 96 PS
- 97 MPEG4
- 98 H264
- a=recvonly
- 会话属性:这里表示只接收数据
- a=rtpmap:96 PS/90000
- 媒体流的编码格式:96表示ps(播放顺序),90000则是媒体流的时钟频率
- a=rtpmap:97 MPEG4/90000
- 同上
- a=rtpmap:98 H264/90000
- 同上
- y=0200000001
- 某种设备或者会话标识符
- 某种设备或者会话标识符
补充
INVITE请求中 from地址和Contact地址不同的原因
- From地址是逻辑上的标识符,用于标识发起者(用于标识谁发起了请求)
- 此处的From地址是静态的,根据平台的设定条件,一般是跟注册的时候使用的ID相同
- Contact
- 后面两者沟通使用的地址:用于指定发起者的实际联系地址,告诉接收者如何直接联系发起者。这是一个动态地址,可能包括实际的 IP 和端口