GBT-28181-2016实时视频点播

一、基本要求

实时音视频点播主要位于协议9.2章
在这里插入图片描述

二、点播流程

在这里插入图片描述

三、信令示例

INVITE sip:51013197011318001152@100.100.101.22:5060 SIP/2.0
Via: SIP/2.0/UDP 100.100.101.5:1024;rport;branch=z9hG4bK1070025303z77843_fda0b2132dc2
From: <sip:51013100002000100001@100.100.101.5:1024>;tag=566431331_fda0b2132dc2
To: <sip:51013197011318001152@100.100.101.22:5060>
Call-ID: 271967626_fda0b2132dc2
CSeq: 881793 INVITE
Contact: <sip:51013100002000100001@100.100.101.5:1024>
Content-Type: Application/SDP
Subject: 51013197011318001152:0,51013100002000100001:0
X-preferredpath: 51013100002000100225
Max-Forwards: 70
User-Agent: NcgV5.15.201
Content-Length:   249

v=0
o=51013197011318001152 0 0 IN IP4 172.16.0.2
s=Play
c=IN IP4 100.100.101.5
t=0 0
m=video 1028 RTP/AVP 96 97 98 99
a=rtpmap:96 PS/90000
a=rtpmap:97 MPEG4/90000
a=rtpmap:98 H264/90000
a=rtpmap:99 H265/90000
a=recvonly
a=streamnumber:0

SIP/2.0 100 Trying
CSeq: 881793 INVITE
Call-ID: 271967626_fda0b2132dc2
From: <sip:51013100002000100001@100.100.101.5:1024>;tag=566431331_fda0b2132dc2
To: <sip:51013197011318001152@100.100.101.22:5060>;tag=1749526935463
Via: SIP/2.0/UDP 100.100.101.5:1024;rport=1024;branch=z9hG4bK1070025303z77843_fda0b2132dc2;received=100.100.101.5
User-Agent: WVP-Pro v2.3.2.20240220
Content-Length: 0

SIP/2.0 200 OK
CSeq: 881793 INVITE
Call-ID: 271967626_fda0b2132dc2
From: <sip:51013100002000100001@100.100.101.5:1024>;tag=566431331_fda0b2132dc2
To: <sip:51013197011318001152@100.100.101.22:5060>;tag=1749526935463
Via: SIP/2.0/UDP 100.100.101.5:1024;rport=1024;branch=z9hG4bK1070025303z77843_fda0b2132dc2;received=100.100.101.5
Contact: <sip:51013197011318001152@100.100.101.22:5060>
Content-Type: APPLICATION/SDP
User-Agent: WVP-Pro v2.3.2.20240220
Content-Length: 173

v=0
o=51013197011318001152 0 0 IN IP4 100.100.101.22
s=Play
c=IN IP4 100.100.101.22
t=0 0
m=video 30000 RTP/AVP 96
a=sendonly
a=rtpmap:96 PS/90000
y=0131004057
f=

ACK sip:51013197011318001152@100.100.101.22:5060 SIP/2.0
Via: SIP/2.0/UDP 100.100.101.5:1024;rport;branch=z9hG4bK18306665_fda0b2132dc2
From: <sip:51013100002000100001@100.100.101.5:1024>;tag=566431331_fda0b2132dc2
To: <sip:51013197011318001152@100.100.101.22:5060>;tag=1749526935463
Call-ID: 271967626_fda0b2132dc2
CSeq: 881793 ACK
Max-Forwards: 70
User-Agent: NcgV5.15.201
Content-Length: 0

BYE sip:51013197011318001152@100.100.101.22:5060 SIP/2.0
Via: SIP/2.0/UDP 100.100.101.5:1024;rport;branch=z9hG4bK1950614979_fda0b2132dc2
From: <sip:51013100002000100001@100.100.101.5:1024>;tag=566431331_fda0b2132dc2
To: <sip:51013197011318001152@100.100.101.22:5060>;tag=1749526935463
Call-ID: 271967626_fda0b2132dc2
CSeq: 881895 BYE
Max-Forwards: 70
User-Agent: NcgV5.15.201
Content-Length: 0


SIP/2.0 200 OK
CSeq: 881895 BYE
Call-ID: 271967626_fda0b2132dc2
From: <sip:51013100002000100001@100.100.101.5:1024>;tag=566431331_fda0b2132dc2
To: <sip:51013197011318001152@100.100.101.22:5060>;tag=1749526935463
Via: SIP/2.0/UDP 100.100.101.5:1024;rport=1024;branch=z9hG4bK1950614979_fda0b2132dc2;received=100.100.101.5
User-Agent: WVP-Pro v2.3.2.20240220
Content-Length: 0

四、信令解析

GB28181 视频点播核心流程

流程主要基于 SIP (会话初始协议) + SDP (会话描述协议) + RTP/RTCP (媒体传输)。

  1. 客户端发起点播请求 (INVITE)
    • 信令: INVITE
    • 发起方: 客户端 (SIP UA - User Agent)
    • 目标方: 设备指定通道 (SIP URI, 如 sip:34020000001320000001@3402000000)
    • 关键头域:
      • From: 客户端SIP URI
      • To: 目标设备通道SIP URI
      • Call-ID: 唯一会话标识
      • CSeq: 序列号 (递增)
      • Subject: 至关重要! 包含 媒体流发送方ID,媒体流接收方ID,是否要求回放(实时点播填0),Invite 序列号。格式:SendID: RecvID: PlayType(0): InviteSN
      • Content-Type: application/sdp (表示消息体是SDP)
    • 消息体 (SDP Offer):
      • 描述客户端希望接收媒体流的能力和要求。
      • 关键字段:
        • v=0 (SDP版本)
        • o= (会话发起者信息,包含用户名、会话ID、版本、网络类型、地址类型、地址 - 通常填客户端IP)
        • s=Play (会话名称)
        • c=IN IP4 (连接信息 - 客户端接收流的IP地址)
        • t=0 0 (时间描述,0 0 表示持久会话)
        • m= 媒体行 (核心):
          • m=video 表示视频流。
          • 端口: 客户端开放的用于接收RTP流的端口。重要!
          • 传输协议: RTP/AVP (通常) 或 TCP/RTP/AVP (如果要求TCP传输)。
          • 媒体格式: 负载类型列表 (Payload Type Number)。GB28181常用 96 (H.264), 98 (H.265), 8 (G.711A), 101 (AAC) 等。客户端列出自己支持的编码格式。
        • a= 属性行 (关键补充):
          • a=recvonly (必须):明确表示客户端只接收流。
          • a=rtpmap: 映射负载类型到具体编码和参数 (如 a=rtpmap:96 H264/90000 表示负载96是H.264, 时钟频率90000)。
          • a=fmtp: 提供编码的详细参数 (如H.264的SPS/PPS: a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AH5Y1QKALdNwEBAQI,aO48gA==)。客户端可能请求SPS/PPS内包含在码流中(sprop-parameter-sets为空)或通过DESCRIBE获取。
          • y= (GB特有!):SSRC值 (10位十进制数),用于标识媒体源。必须,且在整个会话中唯一稳定。
          • f= (GB特有!):媒体流参数。视频常用 v= 后跟分辨率、帧率、码率等 (如 v=25/90000/1920/1080 表示25fps, 90000时钟, 1920x1080)。音频常用 a=1。设备可能忽略或参考此参数。
  2. 设备响应 (100 Trying -> 200 OK)
    • 100 Trying (临时响应): 设备收到INVITE,表示正在处理,防止客户端重传。
    • 200 OK (最终成功响应): 设备同意建立会话。
      • 关键头域:
        • From, To, Call-ID, CSeq: 与INVITE对应。
        • Contact: 设备的SIP URI (用于后续请求如BYE)。
      • 消息体 (SDP Answer):
        • 描述设备将发送的媒体流信息。
        • 关键字段:
          • o=: 设备信息 (用户名通常是设备ID/通道ID)。
          • c=IN IP4 (重要!):设备发送流的源IP地址 (可能是设备自身IP或流媒体服务器IP)。
          • m= 媒体行:
            • 端口:设备发送RTP流的目的端口 (通常与INVITE中客户端指定的接收端口一致)。
            • 传输协议:与INVITE一致或协商结果。
            • 媒体格式:设备选择并确认的一种编码格式 (从INVITE中客户端支持的列表里选)。
          • a= 属性行:
            • a=sendonly (必须):明确表示设备只发送流。
            • a=rtpmap: :对应选中的负载类型。
            • a=fmtp: :提供所选编码的具体参数 (如SPS/PPS)。这是获取SPS/PPS的关键地方之一!
            • y= (GB特有!):设备的SSRC值 (10位十进制数)。必须,唯一标识设备发出的流。
            • f= (GB特有!):设备实际发送流的参数 (可能不同于INVITE中的请求)。
  3. 客户端确认 (ACK)
    • 信令: ACK
    • 发起方: 客户端
    • 目标方: 设备 (或流媒体服务器)
    • 作用: 确认收到200 OK,完成三次握手,会话正式建立。
    • 内容: 通常无消息体。
  4. 媒体流传输 (RTP/RTCP over UDP/TCP)
    • 设备开始按照SDP Answer中约定的参数(IP、端口、编码格式、SSRC),向客户端在INVITE SDP中指定的IP和端口发送 RTP 封装的音视频数据包。
    • 同时,双方会发送 RTCP 包(SR-发送者报告, RR-接收者报告等)用于QoS统计(丢包、抖动、延迟)和同步。
  5. 点播终止 (BYE)
    • 发起方: 客户端 (主动停止) 或 设备 (异常情况)。
    • 信令: BYE
    • 关键头域: From, To, Call-ID, CSeq (新序列号)。
    • 响应: 另一方回复 200 OK 确认会话结束。
    • 动作: 双方停止发送RTP/RTCP流,释放资源。

关键信令解析与注意事项

  1. Subject 头域 (INVITE中):
    • SendID: 必须是媒体流接收方(即客户端)的ID (20位)。 常见错误是填成设备ID。
    • RecvID: 必须是媒体流发送方(即设备通道)的ID (20位)。
    • PlayType: 实时点播填 0。
    • InviteSN: 邀请序列号,每次新会话递增(通常6位数字)。
    • 格式示例: Subject: 34020000002000000001:34020000001320000001:0:000001
  2. y= 属性 (SDP中):
    • SSRC (Synchronization Source Identifier): 32位标识符,在RTP头部和RTCP包中使用,用于关联媒体流和信令会话、区分同一设备发出的不同流(如主辅流)。
    • GB28181要求SDP中 y= 字段用10位十进制数表示SSRC的低28位 (前4位固定为0x00或0x10)。实际RTP包中的SSRC是完整的32位。
    • 客户端SSRC (y= in INVITE SDP): 客户端生成,标识它将接收的流的来源(预期设备的SSRC)。
    • 设备SSRC (y= in 200 OK SDP): 设备生成,标识它发出的流的来源。两者不同!
  3. f= 属性 (SDP中):
    • 提供媒体流详细参数。
    • 视频 (v=): 帧率/时间刻度/分辨率宽/分辨率高 (如 25/90000/1920/1080)。时间刻度通常视频90000,音频8000/16000/44100等。
    • 音频 (a=): 常用 a=1 (无特殊参数) 或更详细的描述。
    • 设备在200 OK SDP中的 f= 描述的是实际发送的流参数,可能低于客户端的请求(如果设备能力不足)。
  4. 传输协议:
    • RTP/AVP (UDP):最常见,效率高,但可能受NAT/防火墙限制。
    • TCP/RTP/AVP (TCP):通过TCP连接传输RTP/RTCP。需要建立TCP连接。m= 行端口通常为0,实际流通过已建立的TCP连接传输。能更好地穿透防火墙,但延迟和开销稍大。GB28181定义了TCP主动模式(设备主动连接客户端)和被动模式(客户端连接设备)。
  5. 媒体格式协商:
    • 客户端在INVITE SDP的 m= 行列出支持的编码 (Payload Type Numbers)。
    • 设备在200 OK SDP的 m= 行选择一个并确认。
    • 必须通过 a=rtpmap 和 a=fmtp 明确编码细节 (如H.264 profile/level, SPS/PPS, AAC config)。
  6. SPS/PPS 获取:
    • 关键!用于解码H.264/H.265流。
    • 主要途径:
      1. a=fmtp in 200 OK SDP: sprop-parameter-sets 属性包含Base64编码的SPS和PPS。
      2. 码流内携带: 如果 sprop-parameter-sets 为空,需要在码流的IDR帧前寻找SPS/PPS NAL单元 (通常nal_unit_type=7和8)。
      3. DESCRIBE 方法 (可选): 客户端可在INVITE前或后发送DESCRIBE请求媒体描述,响应(SDP)中也可能包含SPS/PPS。非所有设备支持。
  7. NAT/Firewall 穿越:
    • 客户端NAT: 客户端在INVITE SDP (c=, m=) 中必须填写其公网可达的IP和端口(通常需要STUN或由SIP服务器/流媒体服务器协助)。
    • 设备NAT: 更复杂。常用解决方案:
      • 流媒体服务器转发: 设备注册到流媒体服务器并将流推送给它。客户端从流媒体服务器拉流。平台协调。
      • TCP 主动模式: 设备主动连接客户端公网IP/端口。
      • 端口预测/UPnP/STUN (设备侧较难实现)。
  8. Keepalive:
    • 长时间点播需维持NAT映射/SIP会话。常用:
      • SIP OPTIONS: 周期性地在SIP会话上发送。
      • RTCP RR/SR: 媒体层面的保活。
      • 平台级心跳: 设备与平台间的心跳。
Logo

邀请您加入社区

更多推荐