技术背景
我们在对接SmartGBD(GB28181设备接入模块)的时候,除了常规的海康大华宇视等国标平台外,有些公司会选择wvp-gb28181-pro。
众所周知,WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将不带国标功能的摄像机/直播流/直播推流转发到其他国标平台。适用于支持浏览器无插件播放摄像头视频。 支持国标设备(摄像机、平台、NVR等)设备接入 支持非国标(onvif, rtsp, rtmp,直播设备等等)设备接入,充分利旧。 支持国标级联。多平台级联。跨网视频预览。 支持跨网网闸平台互联。
基于此,我们也编译了wvp-gb28181-pro,本地部署了他们的服务。编译安装不再赘述,wvp-gb28181-pro提供了相关的技术说明,有一定开发能力的技术人员,应该很容易搭建起来。
技术对接
一切准备就绪,我们在大牛直播SDK的SmartGBD Android的demo上,设置下wvp-gb28181-pro的平台对接参数:
/*** GB28181 相关参数,可以修改相关参数后测试 ***/
GBSIPAgent gb28181_agent_ = null;
private int gb28181_sip_local_port_base_ = 5060;
private String gb28181_sip_server_id_ = "41010500002000000001";
private String gb28181_sip_domain_ = "4101050000";
private String gb28181_sip_server_addr_ = "192.168.0.106";
private int gb28181_sip_server_port_ = 8118;
private String gb28181_sip_user_agent_filed_ = null; // "NT GB UserAgent V1.7";
private String gb28181_sip_username_ = "41010500001310000039";
private String gb28181_sip_password_ = "12345678";
private int gb28181_reg_expired_ = 3600; // 注册有效期时间最小3600秒
private int gb28181_heartbeat_interval_ = 20; // 心跳间隔GB28181默认是60, 目前调整到20秒
private int gb28181_heartbeat_count_ = 3; // 心跳间隔3次失败,表示和服务器断开了
private int gb28181_sip_trans_protocol_ = 0; // 0表示信令用UDP传输, 1表示信令用TCP传输
private long gb28181_rtp_sender_handle_ = 0;
private int gb28181_rtp_payload_type_ = 96;
private String gb28181_rtp_encoding_name_ = "PS";
启动GB28181:
class ButtonGB28181AgentListener implements View.OnClickListener {
public void onClick(View v) {
record_executor_.cancel_tasks();
stopRecordDownloads(true);
stopPlaybacks(true);
stopAudioPlayer();
destoryRTPReceiver();
gb_broadcast_source_id_ = null;
gb_broadcast_target_id_ = null;
btnGB28181AudioBroadcast.setText("GB28181语音广播");
btnGB28181AudioBroadcast.setEnabled(false);
stopGB28181Stream();
destoryRTPSender();
if (null == gb28181_agent_ ) {
if( !initGB28181Agent() )
return;
}
if (gb28181_agent_.isRunning()) {
gb28181_agent_.terminateAllAudioBroadcasts(true);
gb28181_agent_.terminateAllPlays(true);// 目前测试下来,发送BYE之后,有些服务器会立即发送INVITE,是否发送BYE根据实际情况看
gb28181_agent_.stop();
btnGB28181Agent.setText("启动GB28181");
}
else {
record_executor_.cancel_tasks();
initPlaybacks(null);
initRecordDownloads(null);
if ( gb28181_agent_.start() ) {
btnGB28181Agent.setText("停止GB28181");
}
}
}
}
如果注册成功的话,wvp-gb28181-pro平台会显示在线:
点击“通道”,进入相应channel页面:
这里可以选择,直接播放,wvp国标平台侧会发INVITE请求过来:
INVITE sip:34020000001380000001@192.168.0.104:5060 SIP/2.0
Call-ID: b8787860378195821a173f98138b77fb@192.168.0.106
CSeq: 613 INVITE
From: <sip:41010500002000000001@4101050000>;tag=fbc9cccc34234fc3b4d78cb7035ca7a5
To: <sip:34020000001380000001@192.168.0.104:5060>
Via: SIP/2.0/UDP 192.168.0.106:8118;branch=z9hG4bK2349190019;rport=8118;received=192.168.0.106
Max-Forwards: 70
User-Agent: WVP-Pro v2.6.9.20231103
Contact: <sip:41010500002000000001@192.168.0.106:8118>
Subject: 34020000001380000001:0105008771,41010500002000000001:0
Content-Type: APPLICATION/SDP
Content-Length: 288
v=0
o=34020000001380000001 0 0 IN IP4 192.168.0.106
s=Play
c=IN IP4 192.168.0.106
t=0 0
m=video 50136 TCP/RTP/AVP 96 97 98 99
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
a=rtpmap:99 H265/90000
a=setup:passive
a=connection:new
y=0105008771
Android平台GB28181设备接入侧响应处理,然后发送打包后的ps数据即可。
wvp-gb28181-pro还支持李是视音频回放,点击页面的设备录像即可进入回放页面,选择相应的日期,国标平台侧会发文件检索请求(RecordInfo):
MESSAGE sip:41010500001310000039@192.168.0.104:5060 SIP/2.0
Call-ID: a1b37a6c55bf502c790df7ca66591942@192.168.0.106
CSeq: 622 MESSAGE
From: <sip:41010500002000000001@4101050000>;tag=5adbe8c090fd40698b58c9d77795e5c2
To: <sip:41010500001310000039@192.168.0.104:5060>
Via: SIP/2.0/UDP 192.168.0.106:8118;branch=z9hG4bK2970158694;rport=8118;received=192.168.0.106
Max-Forwards: 70
User-Agent: WVP-Pro v2.6.9.20231103
Content-Type: Application/MANSCDP+xml
Content-Length: 277
<?xml version="1.0" encoding="GB2312"?>
<Query>
<CmdType>RecordInfo</CmdType>
<SN>813631</SN>
<DeviceID>34020000001380000001</DeviceID>
<StartTime>2023-11-05T00:00:00</StartTime>
<EndTime>2023-11-05T23:59:59</EndTime>
<Secrecy> 0 </Secrecy>
<Type>all</Type>
</Query>
检索的文件列表如下,点击播放即可。
如果需要录像文件下载,还需要安装wvp-pro-assist插件,这里就不再尝试了。
除了常规功能外,比如视频预览、云台控制、预置位、支持订阅和通知、心跳保活外,wvp-gb28181-pro还支持实时位置订阅,遗憾的是,demo没有看到语音广播和语音对讲,由于平台是开放的,感兴趣的开发者也可以扩展支持。