SDP详解-国标与工程实践

1 阅读19分钟

SDP 详解:国标(GB/T 28181)字段、收发差异与代码对照

本文详细说明 SDP(Session Description Protocol)SIP 信令 + 国标监控里怎么用:
    捋清楚谁发、谁收;字段值在发送方 SDP 与对端 SDP 中的分工是理解 recvonly / sendonly、TCP setupy=(SSRC) 的关键。
    结合项目代码实现(core/pkg/sdpGBSSender.VideoLiveInvitemakeInviteSDPRespgbs_proc/send_sip_proc.goVideoLiveInvite / talkInvite 对 200 OK 的 ParseString)。

文档参考: GBT+28181-2016(扫描版-带目录).pdf

项目地址 github.com/openskeye/g…


一、SDP 放在哪?谁是「发送方 SDP」?

SIP + 国标 场景里,媒体能力主要通过 Content-Type: application/sdp 的消息体携带。

消息典型谁发SDP 语义
INVITE 请求体平台(信令服务器)「我希望建立的媒体会话长什么样」:往哪连、要不要 RTP、.payload 用啥、SSRC 规则等。对视频点播,平台往往写 自己侧的连接信息(常为 MS 地址)a=recvonly(表示「我这端接收媒体」→ 设备负责)。
200 OK 应答体设备(或下级平台)「我同意并按以下方式发媒体」:真正用于 RTP 的 IP/端口、最终 payload、a=sendonly(我发)、TCP 时 setup:active 等。
ACK一般不再携带 SDP确认会话,媒体按 200 OK 里约定建立。

因此:同一字段名(如 o=c=a=)在 INVITE 与 200 OK 里都出现,但描述的是「各自这一侧的会话描述」,数值不必相同——对端会选一套可协商结果(尤其是 m= 端口、编码、TCP 主动/被动)。

注意
SubjectContactVia 等是 SIP 头不是 SDP 行;它们和 SDP 一起描述一次呼叫,但别混到 v=/o= 里。
Subject 非常重要,放在 第二节 专门写。


二、SIP 头 Subject

国标里常见:

Subject: <发送端媒体标识>:<流序号等>,<接收端设备编码>:<ssrc>
  • 前半段通常对应 被点播的通道/媒体源平台侧约定的流序号相关字段
  • 后半段平台(信令服务器)编码SSRC 占位(实时点播常见 :0,回放/下载可能带具体 ssrc 串)。
Subject: 34020000001320000105:0200000105,31010000042220000002:0
  • 通道 34020000001320000105,中间 0200000105 与 SDP 里 y= 常对应同一套 SSRC 规划。
  • 31010000042220000002 为平台 ID,:0 表示实时流时平台侧占位。

仓库代码core/app/sev/vss/internal/pkg/sip/gbs_send.go VideoLiveInvite):

  • 实时流fmt.Sprintf("%s:%d%s,%s:0", ChannelUniqueId, playFlag, ssrc, Sip.ID)
  • 回放且带下载等场景:后半段也会带上 ssrc 串,与国标「接收端 ssrc」一致。

三、国标要求的 SDP 行总览(RFC 2327/4566 + 国标附录)

下面按 行类型 说明。平台 INVITE设备 200 OK各写一栏,便于对比 字段值的收发差异


v=(协议版本)

说明
v=0SDP 版本,固定为 0

发送方 / 接收方:双方都是 0,无方向差异。


o=(Origin:会话所有者标识)

格式:o=<用户名> <会话ID> <版本> <网络类型> <地址类型> <地址>
例:o=34020000001320000105 0 0 IN IP4 192.168.50.87

字段说明
用户名常填 20 位 ID:平台侧 INVITE 里常见填 通道 ID;设备 200 OK 里常见填 设备 ID(通道 34020000001320000105、设备 34020000001320000104)。
会话 ID / 版本国标示例里常见 0 0 或设备侧 非 0 成对数字(如 1578 1578),用于会话一致性。
IN IP4 + 地址本条 SDP 所描述端的「控制面/会话所属」地址:平台 INVITE 常为 信令服务器或 MS 的 IP;设备 200 OK 为 设备 IP

收发差异

  • INVITE 的 o=:「这次会话(信令服务器)用哪个 ID、挂哪个 IP 做会话原点」。
  • 200 OK 的 o=:「设备用哪个 ID、挂哪个 IP 做会话原点」。
    两者各自标识自己。

代码VideoLiveInviteOrigin.Username = data.ChannelUniqueIdAddress = data.MediaServerIP(平台侧作为会话连接描述的中心IP)。


s=(业务类型)

国标:Play / Playback / Download / Talk 等,表示 请求媒体类型

取值说明
Play实时流
Playback回放
Download文件下载(配合 a=downloadspeeda=filesize
Talk实时语音对讲

收发差异

  • INVITE 由平台写「需要什么业务」;200 OK 里设备常 沿用相同 s=,表示接受同类会话。

代码:直播/预览时 Name 来自 Capitalize(PlayType)(如 Play);回放时强制 sdpInfo.Name = "Playback";下载再改为 "Download"


u=(URI)

国标:媒体文件定位:简写 设备ID:参数... 或 HTTP URL。

收发差异:多在 平台 INVITE 中带;设备端可省略或回显。告诉对端「若与文件/通道强绑定,资源键是啥」。

代码URI: fmt.Sprintf("%s:0", data.ChannelUniqueId)


i=(会话信息)

Information 会话详细信息。


c=(连接信息)

格式:c=<网络类型> <地址类型> <地址>,例:c=IN IP4 192.168.50.87

RTP(或 TCP 承载 RTP)应发往/来自的网络地址

收发差异

  • 平台 INVITE:常为 公网/内网 IP(媒体在 MS 与设备之间落地,平台 SDP 描述的是 MS 这一侧的监听/连接点 与后续 INVITE 里 m= 端口 一致)。
  • 设备 200 OK:为 设备侧 IPm= 端口 为设备 实际发流或监听 的端口。

平台 c=o= 同为 192.168.50.87设备 c= 为 192.168.50.104,与 m=video 15060 一致。

会话级 Connection.Address = data.MediaServerIP


t=(时间)

取值说明
t=0 0实时流:不限制起止(RFC)。
t=<start> <stop>回放/下载UNIX 秒级时间戳(国标),录像片段的区间。

收发差异INVITE 由平台写区间;200 OK0 0 或简写,取决于实现;真正回放区间以平台 INVITE 为准

代码encoder.timing 对零值输出 0 0;回放时 Timing.Start/Stop 用本地解析后的 time.Time,编码为 Unix 秒(见 core/pkg/sdp/encoder.go time.Unix())。


m=(媒体描述)

格式:m=<媒体类型> <端口>[/<端口数>] <协议> <payload列表>

子项说明
媒体类型video / audio
端口本 SDP 描述端的 RTP(或 RTCP)端口;TCP 模式下也常表示 本端在该端口上监听或期望连接(具体结合 setup
协议RTP/AVP = RTP over UDPTCP/RTP/AVP = RTP over TCP(GB28181 常见)
payload列举支持的 PT,如 96 97 98 99

收发差异

  • 平台 INVITE:列出 MS 侧 为接流准备的 端口30515)和 本端编码列表
  • 设备 200 OK:给出 设备侧 最终端口15060)和 设备选中的 payload96 PS)。

「发送方 / 接收方」:不是「谁发 SIP 谁就是媒体发送方」;要看 a=sendonly/recvonly 描述的是「谁发 RTP 媒体」。平台 INVITE 用 recvonly = 平台(MS),设备

代码(平台 INVITE)Port: data.StreamPortProtoMediaProtocolMode==1 时为 TCP/RTP/AVP,否则 RTP/AVPFormatsPS/MPEG4/H264/H265


a=(属性)

  • 通用 RTP:a=rtpmap:<pt> <编码名>/<时钟>
  • 方向:a=recvonly|sendonly|sendrecv|inactive
  • 国标 TCP:a=setup:active|passivea=connection:new
  • 国标扩展:a=downloadspeed:a=filesize:a=svcspace: 等。
a=recvonly / a=sendonly
出现在哪一方的 SDP说明
平台 INVITE:recvonly当前这一路只接收 RTP」→ 对端(设备)应发送 媒体到我们给出的 IP/端口(MS)。
设备 200 OK:sendonly当前这一路只发送 RTP」→ 设备出站 到协商好的对端。

常见组合:平台 recvonly + 设备 sendonly = 单工单向下行视频(预览/回放设备→平台)。

平台 recvonly,设备 sendonly

代码(平台侧 INVITE)Mode: sdp.ModeRecvOnly → 编码为 a=recvonly

a=rtpmap:96 PS/90000
说明
96payload type(动态 PT,需在 m= 列出)
PSMPEG-PS 封装(国标常见)
90000RTP 时钟频率(视频常用 90000)

收发差异:INVITE 可列 多个 rtpmap;200 OK 常 收敛到实际选用的一种

a=setup: / a=connection:(TCP RTP)
说明
passive「当前方被动监听,请接收方 主动连 当前方」(类似 TCP server)。
active「当前方主动去连 接收方的被动端口」(类似 TCP client)。
connection:new使用 新 TCP 连接 传 RTP(国标建议可固定 new)。
  • 平台 INVITE:setup:passive → MS(或平台侧媒体点)建好监听,等设备来连。
  • 设备 200 OK:setup:active → 设备 主动发起 TCP 连接对端。

二者 配对:一边 passive、一边 active,TCP 才能建起来。

代码:平台在 TCP 模式setup 取自 data.TransportProtocol.MediaTransMode(与配置一致),connection:new 固定。

a=downloadspeed / a=filesize
  • downloadspeed:下载倍速(整型)。
  • filesize:下载文件大小(Byte),设备可在 200 OK 带回 a=filesize:0 表示未知或占位。

代码:下载场景 Name=Download 且可追加 downloadspeeddata.Speed)。

厂商扩展 rtpmap

a=rtpmap:96 DAHUA/90000:表示非标准厂商流;标准 PS/H264 一般不需要。


y=(SSRC,国标扩展行,非 RFC 必选项)

格式:十进制字符串,国标对各位段位有定义(首位 0 实时 / 1 历史,后段与 域编号、域内序号 相关)。

域内典型流程

  1. 平台在 INVITE SDP 里带 y=(与 Subject、流序号一致规划)。
  2. 设备在 200 OK 里回显同一 y=(与 INVITE 一致)。
  3. 设备发出的 RTP 包头 SSRC 使用该值(或约定映射),便于 MS/平台 区分流。

发送方 / 接收方名字都叫 y=,但 INVITE 由平台「提议」200 OK 由设备「确认」 y=0200000105 两边一致,即 协商一致

代码(平台 INVITE)SSRC: fmt.Sprintf("%d%s", playFlag, ssrc)

  • 实时 playFlag=0ssrc通道 ID 截取拼接
  • 回放 playFlag=1ssrc自增计数器(避免冲突)。

f=(媒体描述扩展,国标)

固定结构:f=v/编码/分辨率/帧率/码率类型/码率 a/音频编码/码率/采样率「v/////」「a///」)。

视频档次、音频参数 压缩进一行,设备可按 f= 选码流。

代码:对讲应答 makeInviteSDPResp 使用常量 SDPMediaDescription_1types.gov/////a/1/8/1)作为 Media.Description,编码器输出 f= 行。
视频/音频各分项的国标取值码表 见文末 附录 A


四、信令逐行对照

信令服务器发送至设备

[GBS] 2026-03-17 00:01:26 [UDP][192.168.50.87:11008]>>>>>>[192.168.50.104:5060]>>>>>>
INVITE sip:34020000001320000105@192.168.50.104:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.50.87:11008;rport=11008;branch=z9hG4bK4376380519
From: <sip:31010000042220000002@192.168.50.87:11008>;tag=351414583
To: <sip:34020000001320000105@192.168.50.104:5060>
Call-ID: 3903197993
User-Agent: SkeyevssSevVss 192.168.50.87
CSeq: 3607 INVITE
Max-Forwards: 70
Content-Type: APPLICATION/SDP
Contact: <sip:31010000042220000002@192.168.50.87:11008>
Subject: 34020000001320000105:0200000105,31010000042220000002:0
Content-Length: 314

v=0
o=34020000001320000105 0 0 IN IP4 192.168.50.87
s=Play
u=34020000001320000105:0
c=IN IP4 192.168.50.87
t=0 0
m=video 30515 TCP/RTP/AVP 96 97 98 99
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:97 MPEG4/90000
a=rtpmap:98 H264/90000
a=rtpmap:99 H265/90000
a=setup:passive
a=connection:new
y=0200000105

设备响应信令服务器

[GBS] 2026-03-17 00:01:26 [UDP][192.168.50.87:11008]<<<<<<[192.168.50.104:5060]<<<<<<
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.50.87:11008;rport=11008;branch=z9hG4bK4376380519
From: <sip:31010000042220000002@192.168.50.87:11008>;tag=351414583
To: <sip:34020000001320000105@192.168.50.104:5060>;tag=2046511126
Call-ID: 3903197993
CSeq: 3607 INVITE
Contact: <sip:34020000001320000104@192.168.50.104:5060>
Content-Type: application/sdp
User-Agent: IP Camera
Content-Length: 209

v=0
o=34020000001320000104 1578 1578 IN IP4 192.168.50.104
s=Play
c=IN IP4 192.168.50.104
t=0 0
m=video 15060 TCP/RTP/AVP 96
a=setup:active
a=sendonly
a=rtpmap:96 PS/90000
a=filesize:0
y=0200000105

平台 INVITE

说明
o=34020000001320000105 ... 192.168.50.87会话用户名用 通道 ID,地址用 平台/MS 侧 IP
s=Play实时预览。
u=34020000001320000105:0简写 URI:通道 + 参数。
c=IN IP4 192.168.50.87会话级连接:与 MS/信令同网段示例。
t=0 0不限时实时。
m=video 30515 TCP/RTP/AVP 96–99MS 在 30515TCP 收 RTP,列出多种 PT。
a=recvonly平台/MS 只收,设备发。
a=rtpmap:96 PS/90000声明各 PT 说明。
a=setup:passive等待设备连进来
a=connection:new新 TCP 连接
y=0200000105约定 SSRC

设备 200 OK

与 INVITE 的差异
o=34020000001320000104 ... 192.168.50.104设备自己的 ID/IP与平台 o= 不同
m=video 15060 TCP/RTP/AVP 96端口变为 15060只保留 PS/96
a=setup:active设备主动连 到平台 passive 侧。
a=sendonly设备只发 RTP。
a=filesize:0下载/文件场景下大小占位;实时也可能带。
y=0200000105与邀请一致,确认 SSRC。

五、本仓库中的实际使用(对照代码)

5.1 SDP 模型与编码:core/pkg/sdp

  • Session 聚合 OriginNameURIConnectionTimingMedia
  • MediaMode(方向)、Formats(输出 a=rtpmap)、Attributessetupconnectiondownloadspeed)、SSRCy=Descriptionf=
  • Encoderencoder.go)按行输出 GB 常用的 y=f=

5.2 平台发起视频 Invite:GBSSender.VideoLiveInvite

文件:core/app/sev/vss/internal/pkg/sip/gbs_send.go

  1. 组装 SIP 头Via/From/To/...)与 Subject(上一节)。
  2. TransportProtocol.MediaProtocolModeUDP RTP/AVPTCP TCP/RTP/AVP
  3. 构造 sdp.Session
    • Origin:通道 ID + MS IP
    • NamePlay / Playback / Download
    • URI通道:0
    • Connection:MS IP
    • Mediarecvonly,多 rtpmapy=playFlag+ssrc
    • TCPsetup + connection:new
  4. 回放:写 Timing(起止时间);下载downloadspeed
  5. sdpInfo.String() 作为 INVITE body 发出。

5.3 平台对设备 SDP 做 200 OK 应答(对讲等):makeInviteSDPResp

同一文件:从设备 INVITE 解析出的 sdp.Session 中提取 音频/视频payloadSSRC,生成 平台侧应答 SDP(示例分支里 sendonly 音频、Port: usablePortDescription 来自常量),用于 InviteSDPResponse

5.4 SendLogic.VideoLiveInvite:先发 INVITE,再解析 设备 200 OK 里的 SDP

文件:core/app/sev/vss/internal/logic/gbs_proc/send_sip_proc.goVideoLiveInvite方法

这里体现的是 「SDP 在代码里第二次起作用」:第一次是 GBSSender.VideoLiveInvite平台侧 INVITE body;第二次是 拿到设备 200 OK 后,对 inviteRes.Body()sdp.ParseString,用 对端 SDP 驱动 ACKMS 收流

建议按源码顺序理解(与 SDP 相关的步骤):

代码/调用与 SDP 的关系
1ms.RTPPub(req)MS 侧先占位/建收流资源,与后续设备实际推流配合;失败则不进入 Invite。
2VideoLiveInvite(req)发出 带平台 SDP 的 INVITE;inviteStep 里把 整包 inviteData.String() 记下来(含 SDP,便于排障)。
3检查 inviteRes.StatusCode()非成功则丢弃,不会解析 SDP
4AckReq(inviteRes)200 OK 里的 To-tag 等 生成 ACK;并缓存到 AckRequestMapReq.ID / StreamName),保证后续 BYE 等与 同一 dialog 一致(注释写明 从 ack 开始 from/to/tag/call-id 需一致)。
5sdp.ParseString(inviteRes.Body())解析的是设备响应体中的 SDP(不是平台自己发的 INVITE body)。
6校验 sdpInfo.MediasdpInfo.Connectionm= 列表不能为空会话级 c= 不能为空,否则认为 SDP 不可用,stop()StopStream 清场。
7扫描 Media[].Attributesfilesize国标 a=filesize:<字节>,解析为 filesize uint64;用于 ACKRtpPub(下载/回放进度、长度协商);0 与抓包里 a=filesize:0 一致,表示未知或占位。
8SendDirect(ackData)ACK 发到设备,完成 SIP 侧确认。
9ms.ACKRtpPub(req, sdpInfo.Media[0].Port, sdpInfo.Connection.Address, filesize)200 OK SDP 里的 m= 端口(取 Media[0].Port)、c= 地址Connection.Address)以及 filesize 交给 MS,让媒体面 按设备声明的 IP:端口 完成 RTP(或 TCP RTP)收流 的最终参数对齐。
10PubStreamExistsState.Add标记该 StreamName 已有发布会话,与停流、重复 Invite 等逻辑配合。

小结:平台 INVITE 里的 SDP 描述 「希望怎么建会话」真正决定「设备往哪发、发哪一路端口」的是 200 OK 里的 SDPsend_sip_proc 这一段就是在消费这份 SDP,并把它组装成 MS 的 ACKRtpPub

5.5 SendLogic.talkInvite:对讲场景下的 SDP 解析

步骤作用
UsablePort为本端对讲 RTP 取可用端口;失败则 WS 通知并停止。
TalkInvite对讲 INVITE(具体 SDP 由 gbs_send 对讲链路构)。
sdp.ParseString(inviteRes.Body())同样解析 设备 200 OK 的 SDP。
AckReq + SendDirect发 ACK。
SetTalkRtpConnInfo / SetTalkRtpConn把 SDP 中的 媒体与连接信息 落到 TalkSipData,建立 RTP 会话,与 WebSocket 上行音频SipSendTalk 串联。

5.4 的共同点:ParseString 的对象始终是「对端 inviteRes.Body(),即 设备侧 SDP平台侧 INVITE 的 SDP 不在这里解析


六、小结

概念平台 INVITE设备 200 OK
o=我这次用通道/平台身份 + MS 侧会话地址我用 设备身份 + 设备 IP
c= / m=来 MS 这个 IP:端口(TCP/UDP 见 m=从我设备这个 IP:端口 发出去
recvonly / sendonly → 请你 → 配合你收
setup被动 等你连 / 或配置为 active主动 连你 / 与你配对
y=我建议 SSRC确认 SSRC(常与 INVITE 一致)
t=回放 区间0 0 或简化
以信令服务器发送至设备为例
34020000001320000105 视频通道id
192.168.50.104:5060 设备地址
Via: sip协议交互通信方式 sip服务器地址;rport=接受信令端口(公网路由穿透);branch=随机标识
From: <sip:sip信令服务器id@信令服务器域(信令服务器ip:端口)>;tag=发送端唯一标识(Invite ack bye需要统一)
To: <sip:视频通道id@设备端(设备域)>
Call-ID:当前链路唯一呼号(Invite ack bye需要统一)
Content-Type: 当前信令交互内容类型 (sdp),不同类型注意区分
如果处于跨域情况下,可以通过contact找到信令服务器源
Contact: <sip:sip信令服务器id@信令服务器域(信令服务器ip:端口)>
Subject: 视频通道id:设备通道序列号,sip信令服务器id:0 文档说明: 媒体流发送者设备编码:发送端媒体流序列号,媒体流接收者设备编码:ssrc(流序号)

附录摘抄自GBT+28181-2016(扫描版-带目录).pdf

附录 A:f= 媒体描述国标结构与参数取值表

国标规定 f= 为单行字符串,视频段音频段用固定顺序拼接;视、音频两段之间不留空格。整体模板为:

f=v/<编码格式>/<分辨率>/<帧率>/<码率类型>/<码率大小>a/<音频编码>/<码率大小>/<采样率>

参数约定(国标文本摘编,与工程对接设备时作字典用)

  1. 「十进制整数字符串」:取值范围描述为 0~4294967296 间的十进制数字字符串(以标准正文为准)。
  2. 分隔符:各参数以 / 分隔;不可省略分隔符;若两 / 之间无内容,表示 该位无取值(空参数)。
  3. 结构完整性:任意时刻 f= 的整体结构应完整
    • 仅视频:音频段各分项可不填,但须保留 a/// 占位:
      f=v/<编码>/<分辨率>/<帧率>/<码率类型>/<码率大小>a///
    • 仅音频:视频段各分项可不填,但须保留 v///// 占位:
      f=v/////a/<编码>/<码率>/<采样率>
  4. 分辨率:可用其区分 同一设备多码流

A.1 视频子段 v/...v 表示后续为视频参数)

顺序:v/<编码格式>/<分辨率>/<帧率>/<码率类型>/<码率大小>

位置说明取值(十进制整数字符串)
编码格式视频编码1 — MPEG-4;2 — H.264;3 — SVAC;4 — 3GP
分辨率图像大小1 — QCIF;2 — CIF;3 — 4CIF;4 — D1;5 — 720P;6 — 1080P/I
帧率fps0~99
码率类型CBR/VBR1 — 固定码率(CBR);2 — 可变码率(VBR)
码率大小数值0~100000,示例 1 表示 1 kbps(以国标条文为准)

A.2 音频子段 a/...(第二个 a 表示音频参数段,勿与 SDP 的 a= 属性行混淆)

顺序:a/<编码格式>/<码率大小>/<采样率>

位置说明取值(十进制整数字符串)
音频编码编码类型1 — G.711;2 — G.723.1;3 — G.729;4 — G.722.1
码率大小音频码率档次1 — 5.3 kbps(G.723.1);2 — 6.3 kbps(G.723.1);3 — 8 kbps(G.729);4 — 16 kbps(G.722.1);5 — 24 kbps;6 — 32 kbps;7 — 48 kbps;8 — 64 kbps(G.711)
采样率采样频率1 — 8 kHz(G.711 / G.723.1 / G.729);2 — 14 kHz;3 — 16 kHz;4 — 32 kHz(多档针对 G.722.1 等,见国标表)

工程中的占位示例internal/pkg/sip/types.goSDPMediaDescription_1 = "v/////a/1/8/1" 表示在 f= 里保留 完整结构,视频段留空、音频段填 G.711 / 64kbps / 8kHz 等(与对讲 makeInviteSDPRespMedia.Description 一致)。


附录 B:国标 a= 扩展与 SSRC(y=)规则摘录

B.1 厂商编码名(RFC4566 rtpmap 扩展)

国标允许在 a=rtpmap:encoding name 位置写厂商标识,表示 非本标准规定码流符合标准的媒体流不需要该写法。
例:a=rtpmap:96 DAHUA/90000a=rtpmap:96 HIKVISION/90000

B.2 下载相关 a=

行例说明
a=downloadspeed:<整数>文件下载 倍速(整型)
a=filesize:<Byte>文件 大小,用于进度计算;0 常见于「未知」(与 send_sip_proc 解析 filesize 一致

B.3 TCP 媒体 a=setup / a=connection

行例说明
a=setup:active|passiveTCP 建连角色:主动向对方连 / 被动监听
a=connection:newRTP over TCP 时 新建 TCP 连接(可固定采用 new,见国标)

B.4 SVC

行例说明
a=svcspace:<整型>空域 SVC:0 不用;1~3 分别为 1~3 级增强层
a=svctime:<整型>时域 SVC:0 不用;1~3 分别为 1~3 级增强层

B.5 y=(SSRC)域内处理方式(概念)

  • SSRC媒体流发送设备所在 SIP 监控域 产生,作为 媒体流标识
  • 点播域内设备 时:监控系统生成 SSRC → 经 Invite(SDP 中带 y= 发给设备 → 200 OK 携带相同 y=RTP 使用同一 SSRC(与正文第三节 y=Subject 一致)。

附录 C:SIP 与 SDP 头字段对照

以下 非 SDP 行,常与 SDP 同包出现

头 / 行发送方(平台→设备)接收方理解
ViaSIP/UDP、本机地址、rportbranch回应路由与事务匹配
From<sip:平台ID@域>;tag=...tag 在 ACK/BYE 等需一致
To<sip:通道ID@设备>;初始可无 tag200 OK 补 To-tag
Call-ID呼叫唯一全流程一致
Contact平台可达地址设备知道 后续请求发到哪
Content-TypeAPPLICATION/SDP正文为 SDP