GB28181设备控制和TeleBoot远程启动命令探究
设备控制
设备控制基本要求
源设备向目标设备发送设备控制命令,控制命令的类型包括球机/云台控制、远程启动、录像控制、 报警布防/撤防、报警复位、强制关键帧、拉框放大、拉框缩小、看守位控制、设备配置等。
设备控制采用 IETFRFC3428中的 Message方法实现。
源设备包括SIP客户端、网关或者联网系统,目标设备包括SIP设备、网关或者联网系统。
源设备向目标设备发送球机/云台控制命令、远程启动命令、强制关键帧、拉框放大、拉框缩小命令后,目标设备不发送应答命令。
源设备向目标设备发送录像控制、报警布防/撤防、 报警复位、看守位控制、设备配置命令后,目 标设备应发送应答命令表示执行的结果。
命令流程
无应答命令流程
命令流程描述如下:
a) 1:源设备向SIP服务器发送设备控制命令,设备控制命令采用 Message方法携带;
b) 2:SIP服务器收到命令后返回200OK;
c) 3:SIP服务器向目标设备发送设备控制命令,设备控制命令采用 Message方法携带;
d) 4:目标设备收到命令后返回200OK。
有应答命令流程
命令流程描述如下:
a) 1:源设备向SIP服务器发送设备控制命令,设备控制命令采用 Message方法携带;
b) 2:SIP服务器收到命令后返回200OK;
c) 3:SIP服务器向目标设备发送设备控制命令,设备控制命令采用 Message方法携带;
d) 4:目标设备收到命令后返回200OK;
e) 5:目标设备向SIP服务器发送设备控制响应命令,设备控制响应命令采用 Message方法携带;
f) 6:SIP服务器收到命令后返回200OK;
g) 7:SIP服务器向源设备转发设备控制响应命令,设备控制响应命令采用 Message方法携带;
h) 8:源设备收到命令后返回200OK。
TeleRoot技术实现
本文以我们实现的Android平台GB28181设备对接模块为例,如果GB平台端支持远程启动,发送的信令如下:
MESSAGE sip:34020000011310000038@183.192.2.222:11589 SIP/2.0
Via: SIP/2.0/UDP 152.100.10.22:5063;branch=z9hG4bK3ee5503300e5503344e55033c,SIP/2.0/UDP 152.100.10.22:5060;branch=z9hG4bKc75e3979f95e3979bd5e39793
Call-ID: 262de6fd182de6fd5c2de6fddd2de6fda82de@152.100.10.22
From: <sip:43010000012000500001@152.100.10.22:5063>;tag=1eb40c8f20b40c8f64b40c8fe5b40c8f
To: <sip:34020000011310000038@183.192.2.222>
CSeq: 777 MESSAGE
Max-Forwards: 70
Expires: 90
User-Agent: GbAgent
Contact: <sip:43010000012000500001@152.100.10.22:5063>
Content-Type: application/MANSCDP+xml
Content-Length: 161
<?xml version="1.0"?>
<Control>
<CmdType>DeviceControl</CmdType>
<SN>30</SN>
<DeviceID>34020000011310000038</DeviceID>
<TeleBoot>Boot</TeleBoot>
</Control>
对应的Android处理如下:
如果在进行语音广播,先停掉广播数据接收和播放,重置目前状态,重新注册或有针对性的做其他处理即可。
/*
* MainActivity.java
*
* WebSite: https://daniusdk.com
* Github: https://github.com/daniulive/SmarterStreaming
*
*/
@Override
public void ntsOnDeviceControlTeleBootCommand(String deviceId, String teleBootValue) {
handler_.postDelayed(new Runnable() {
@Override
public void run() {
Log.i(TAG, "ntsOnDeviceControlTeleBootCommand device_id:" + device_id_ + " tele_boot_value:" + tele_boot_value_);
stopAudioPlayer();
destoryRTPReceiver();
if ( gb28181_agent_ != null) {
if (gb_broadcast_source_id_ != null && gb_broadcast_target_id_ != null)
gb28181_agent_.byeAudioBroadcast(gb_broadcast_source_id_, gb_broadcast_target_id_);
}
gb_broadcast_source_id_ = null;
gb_broadcast_target_id_ = null;
btnGB28181AudioBroadcast.setText("GB28181语音广播");
btnGB28181AudioBroadcast.setEnabled(false);
stopGB28181Stream();
destoryRTPSender();
if (gb28181_agent_ != null ) {
gb28181_agent_.terminateAllPlays(true);
gb28181_agent_.stop();
}
// 发送注销消息后,等待2000毫秒, 再释放资源
handler_.postDelayed(new Runnable() {
@Override
public void run() {
if (gb28181_agent_ != null ) {
Log.i(TAG, " gb28181_agent_.unInitialize++");
gb28181_agent_.unInitialize();
gb28181_agent_.unBindLocalPort();
gb28181_agent_.releaseSipStack();
Log.i(TAG, " gb28181_agent_.unInitialize--");
gb28181_agent_ = null;
}
// 200毫秒后再重启
handler_.postDelayed(new Runnable() {
@Override
public void run() {
Log.i(TAG, "restart gb sip agent.");
if (null==gb28181_agent_) {
if (!initGB28181Agent()) {
Log.e(TAG, "init gb sip agent failed.");
return;
}
}
if (!gb28181_agent_.isRunning()) {
if ( !gb28181_agent_.start() ) {
Log.e(TAG, "restart gb sip agent failed.");
}
}
}
},200);
}
},2000);
}
private String device_id_;
private String tele_boot_value_;
public Runnable set(String device_id, String tele_boot_value) {
this.device_id_ = device_id;
this.tele_boot_value_ = tele_boot_value;
return this;
}
}.set(deviceId, teleBootValue),0);
}
需要注意的是,由于国标平台虽有统一标准,但是实现细节并不统一,在做GB28181平台对接的时候,还是尽量以官网spec和其他相关规范为准。
相关文章
- AirDroid2-用浏览器控制安卓设备
- 如何让Android平台像IPC一样实现GB28181前端设备接入
- 美网攻西工大最新调查结果:查明攻击者13名,渗透控制核心设备,窃取查询隐私数据
- JAVA实验室设备管理系统代码_java做一个简单学生管理系统
- 原创Paper | Tenda Ax12 设备分析
- 一文搞懂CPU如何控制I/O设备
- 内网穿透/组网/设备上云平台EasyNTS上云网关的安装操作指南
- 为什么越来越多企业用二维码做设备巡检?
- 【计算机网络】数据链路层 : 总结 ( 封装成帧 | 流量控制与可靠传输 | 差错控制 | 介质访问控制 | 局域网 | 广域网 | 数据链路层设备 ) ★★★
- 如何使用scrcpy管理和控制你的Android设备
- 日本将限制23项半导体设备出口!对中国半导体产业影响几何?
- 漫途科技设备远程运维系统,改变传统运维模式!
- 设备深入浅出:Linux 控制 USB 设备新姿势(linux控制usb)
- Linux下的DTB:设备树的实现(linuxdtb)
- 硬核观察 #341 谷歌的推送更新少了一个 & 字符,致使 Chrome OS 设备无法登录
- 黑客是如何入侵和控制物联网设备的?
- 掌握Linux远程控制权限,轻松管理远程设备!(linux远程控制权限)
- 安卓手机刷 linux,让设备更加智能、多样化!(安卓手机刷linux)
- 深入剖析 Linux 设备开发过程(linux设备开发详解)
- ciaLinux PCMCIA设备驱动程序:精确控制你的计算机(linux pcm)
- 轻松实现多台设备Redis并发运行(多台设备redis并发)