GB28181设备控制和TeleBoot远程启动命令探究

简介: 源设备向目标设备发送设备控制命令,控制命令的类型包括球机/云台控制、远程启动、录像控制、 报警布防/撤防、报警复位、强制关键帧、拉框放大、拉框缩小、看守位控制、设备配置等。

设备控制

设备控制基本要求

源设备向目标设备发送设备控制命令,控制命令的类型包括球机/云台控制、远程启动、录像控制、 报警布防/撤防、报警复位、强制关键帧、拉框放大、拉框缩小、看守位控制、设备配置等。


设备控制采用 IETFRFC3428中的 Message方法实现。


源设备包括SIP客户端、网关或者联网系统,目标设备包括SIP设备、网关或者联网系统。


源设备向目标设备发送球机/云台控制命令、远程启动命令、强制关键帧、拉框放大、拉框缩小命令后,目标设备不发送应答命令


源设备向目标设备发送录像控制、报警布防/撤防、 报警复位、看守位控制、设备配置命令后,目 标设备应发送应答命令表示执行的结果。

命令流程

无应答命令流程

d2e95a4103a143eda10adb9d6c043128.png

命令流程描述如下:


a) 1:源设备向SIP服务器发送设备控制命令,设备控制命令采用 Message方法携带;


b) 2:SIP服务器收到命令后返回200OK;


c) 3:SIP服务器向目标设备发送设备控制命令,设备控制命令采用 Message方法携带;


d) 4:目标设备收到命令后返回200OK。


有应答命令流程

960bbdf7850a4b9fae11d01e8a95be4c.png

命令流程描述如下:

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和其他相关规范为准。

目录
打赏
0
0
0
0
45
分享
相关文章
iperf3 交叉编译
iperf3 交叉编译
528 0
多代理强化学习综述:原理、算法与挑战
多代理强化学习是强化学习的一个子领域,专注于研究在共享环境中共存的多个学习代理的行为。每个代理都受其个体奖励驱动,采取行动以推进自身利益;在某些环境中,这些利益可能与其他代理的利益相冲突,从而产生复杂的群体动态。
417 5
MySQL 查询索引失效及如何进行索引优化
MySQL 查询索引失效及如何进行索引优化
271 1
龙蜥Anolis OS:国产操作系统的逆袭之路,它将如何引领中国IT业翻天覆地的变化?揭秘未来数字世界的心脏!
【9月更文挑战第4天】在信息化时代,操作系统作为计算机系统的核心,连接着上层软件与底层硬件。随着全球化及地缘政治的影响,国产操作系统愈发重要。龙蜥Anolis OS作为佼佼者,基于Linux内核,兼具开源、灵活与安全特性,针对国内用户优化,支持多种编码标准和汉字输入法,提升中文用户体验。其采用角色访问控制、SELinux等技术,保障系统安全。Anolis OS还拥有活跃的开源社区,促进功能完善与创新。随着国家政策扶持和产业链协同,Anolis OS正引领国产操作系统迈向更广阔的应用领域,推动软硬件生态系统的成熟,成为全球多元化计算生态的重要组成部分。
151 0
AI初探:人工智能的定义、历史与未来展望
【7月更文第15天】在科技飞速发展的今天,人工智能(Artificial Intelligence, AI)已经成为推动社会进步的关键力量,渗透到我们生活的方方面面,从智能家居到自动驾驶汽车,从精准医疗到智能金融,无不展现出其深远的影响。本文旨在为读者揭开人工智能的神秘面纱,从基本概念出发,回顾其发展历程,并探索未来的无限可能。
1122 2
MySQL in 太慢的 3 种优化方案
MySQL中的`eq_range_index_dive_limit`参数默认值为200,影响了IN查询的执行方式。当IN列表项少于这个值时,MySQL会使用扫描索引树(精确成本计算),而多于此值则使用索引统计(快速但可能不准)来分析查询成本。大量IN值可能导致性能下降。解决方案包括:1) 分批查询;2) 使用UNION ALL创建内存临时表;3) 创建实体表存储IN值并进行JOIN操作。注意,实体表需及时清理并避免反复插入删除导致性能下降。
1492 0
国标GB28181协议客户端开发(三)查询和实时视频画面
国标GB28181协议客户端开发(三)查询和实时视频画面
691 0
|
9月前
GB28181 基于osip和exosip 环境搭建
GB28181 基于osip和exosip 环境搭建
198 0

热门文章

最新文章