部分开发者在实现GB28181设备接入或国标平台侧的时候,容易忽略Subject头域信息,本文就Subject头域定义,做个简单的回顾。
GB/T28181-2016中提到:SIP监控域建立实时、回放、下载等媒体链路时,SIP服务器发出的Invite消息应携带Subject头域作为此媒体链路的标识。SIP监控域应具有媒体分发能力,对于Subject中媒体发送方标识相同的视频应仅向目标SIP监控域或设备发起一次请求,通过自身的媒体分发能力将视频资源发往不同的接收端。
Subject字段的格式如下:
Subject:媒体流发送者ID:发送方媒体流序列号,媒体流接收者ID:接收方媒体流序列号
各字段定义如下:
媒体流发送者ID:为符合附录D(统一编码规则)定义的媒体流发送者的ID编码。
发送方媒体流序列号:发送方媒体流序列号为不超过20位的字符串;当请求为实时视频时,首位取
值为0,对于相同的实时视频取值唯一;当请求的媒体流为历史视频时,首位取值为1,对于每一路历史视频取值唯一。
媒体流接收者ID:为符合附录D(统一编码规则)定义的媒体流接收者的ID编码。
接收方媒体流序列号:为媒体流接收端的标识序列号,在同一时刻该序列号在媒体流接收者端为不
重复的字符串。当接收者为客户端时,可以作为窗口的标识符。
下一个问题:如何构建Subject头域?
废话不多说,以Android平台GB28181设备端为例,直接上代码:
private String makeSubject(String ssrc) { StringBuilder sb = new StringBuilder(64); sb.append(session.getSrcID()); sb.append(":"); //发送方媒体流序列号 sb.append(ssrc); sb.append(","); sb.append(session.getTargetID()); sb.append(":"); //接收方媒体流序列号, 暂时填0 sb.append(0); return sb.toString(); }
感兴趣的开发者,欢迎沟通交流。。