部分开发者在实现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设备端为例,直接上代码:
代码语言:javascript复制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();
}
感兴趣的开发者,欢迎沟通交流。。