Android平台GB28181设备接入端PTZ对接详解

简介: 上一篇blog“Android平台GB28181设备接入模块之球机/云台控制探究”谈到,Android平台做国标GB28181设备接入端的时候,PTZ控制要不要处理?如果处理,难度大不大?

PTZCmd实现背景

上一篇blog“Android平台GB28181设备接入模块之球机/云台控制探究”谈到,Android平台做国标GB28181设备接入端的时候,PTZ控制要不要处理?如果处理,难度大不大?


首先说要不要处理:如果只是做执法记录仪相关,Android终端作为数据采集模块,一般不具备云台上下、左右指令控制能力,但有一点,镜头的变倍(Zoom),如果有诉求的话,还是有技术必要性,特别是国标平台终端,对前端设备细节感兴趣的时候,可以通过Zoom In、Zoom Out来调整Android GB28181设备接入终端,实现摄像头的变焦。


其次,我们说一下技术实现难度:需要明确的一点是,目标设备不发送应答命令,所以实现起来,对我们已经有扩展性非常好的技术框架来说,难度不太大,如果从头实现,相对麻烦一些。


PTZ指令我们之前有提到过,如下图所示,Bit5和 Bit4不应同时为1,Bit3和 Bit2不应同时为1;Bit1和 Bit0不应同 时为1。镜头变倍指令、云台上下指令、云台左右指令三者可以组合。

2d67bd7df94343d1b0fd1f479870c3ea.png

技术实现细节

GB28181的云台控制命令,对Android平台设备接入端来说,难度不大,只需要把相应的云台控制命令字段回调到上层,上层做个解析,然后进行相应的命令控制即可。


让我们先来看看,国标平台侧发过来的控制消息:

MESSAGE sip:34020000001380000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.6:15060;rport;branch=z9hG4bK623469675
From: <sip:34020000002000000001@3402000000>;tag=119469675
To: <sip:34020000001380000001@3402000000>
Call-ID: 696469675
CSeq: 342 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: GB28181 Agent
Content-Length: 267
<?xml version="1.0" encoding="GB2312"?>
<Control>
  <CmdType>DeviceControl</CmdType>
  <SN>204469675</SN>
  <DeviceID>34020000001380000001</DeviceID>
  <PTZCmd>A50F0110000010D5</PTZCmd>
  <Info>
    <ControlPriority>5</ControlPriority>
  </Info>
</Control>

由于PTZCmd无需发送应答命令,只需要回复200 OK即可:

SIP/2.0 200 OK
CSeq: 342 MESSAGE
Call-ID: 696469675
From: <sip:34020000002000000001@3402000000>;tag=119469675
To: <sip:34020000001380000001@3402000000>
Via: SIP/2.0/UDP 192.168.1.6:15060;rport=15060;branch=z9hG4bK623469675;received=192.168.1.6
Content-Length: 0

针对PTZ命令回调,大牛直播SDK的处理如下:

    @Override
    public void ntsOnDeviceControlPTZCmd(String deviceId, String typeValue) {
        handler_.postDelayed(new Runnable() {
            @Override
            public void run() {
                Log.i(TAG, "DaniuSDK ntsOnDeviceControlPTZCmd device_id:" + device_id_ + " PTZType:" + ptz_type_);
                if (null == ptz_type_)
                    return;
                ptz_type_ = ptz_type_.trim();
                if (ptz_type_.length() != 16)
                    return;
                int instruction = hexStringToInt(ptz_type_.substring(6, 8));
                int combination_code2 = hexStringToInt(ptz_type_.substring(12, 14));
                if ((instruction & 0xc0) == 0 ) {
                    if ((instruction & 0x20) != 0) {
                        // Zoom Out
                        int zoom_speed = getZoomSpeed(combination_code2);
                        Log.i(TAG, "ntsOnDeviceControlPTZCmd device_id:" + device_id_ + " PTZType:" + ptz_type_ + " Zoom Out, speed:" +zoom_speed);
                        cameraZoom(true, zoom_speed);
                    }
                    else if ((instruction & 0x10) != 0) {
                        // Zoom In
                        int zoom_speed = getZoomSpeed(combination_code2);
                        Log.i(TAG, "ntsOnDeviceControlPTZCmd device_id:" + device_id_ + " PTZType:" + ptz_type_ + " Zoom In, speed:" +zoom_speed);
                        cameraZoom(false, zoom_speed);
                    }
                }
            }
            private String device_id_;
            private String ptz_type_;
            public Runnable set(String device_id, String ptz_type) {
                this.device_id_ = device_id;
                this.ptz_type_ = ptz_type;
                return this;
            }
        }.set(deviceId, typeValue),0);
    }

PTZ命令的解析非常简单,只需要针对字段按照相关规范解出来即可,获取到zoom in,zoom out和zoom speed后,直接调用cameraZoom()实现针对Android摄像头变焦即可。

总结

国标平台侧通过PTZ指令,特别是针对Android的国标接入终端,实现摄像头的实时变焦,实际场景下,非常实用,特别是,如果Android平台国标设备接入端,对接有可以云台控制的RTSP摄像头,做PTZ指令的二次转发操作,也非常方便。

相关文章
|
5月前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
253 64
|
5月前
|
存储 Android开发 数据安全/隐私保护
如何在Android设备上撤销Flutter应用程序的所有权限?
如何在Android设备上撤销Flutter应用程序的所有权限?
316 64
|
5月前
|
缓存 Android开发 开发者
Flutter环境配置完成后,如何在Android设备上运行Flutter应用程序?
Flutter环境配置完成后,如何在Android设备上运行Flutter应用程序?
895 62
|
5月前
|
开发工具 Android开发 开发者
在Android设备上运行Flutter应用程序时,如果遇到设备未授权的问题该如何解决?
在Android设备上运行Flutter应用程序时,如果遇到设备未授权的问题该如何解决?
286 61
|
2月前
|
监控 Android开发 数据安全/隐私保护
批量发送短信的平台,安卓群发短信工具插件脚本,批量群发短信软件【autojs版】
这个Auto.js脚本实现了完整的批量短信发送功能,包含联系人管理、短信内容编辑、发送状态监控等功能
|
6月前
|
存储 编解码 监控
Android平台GB28181执法记录仪技术方案与实现
本文介绍了大牛直播SDK的SmartGBD在执法记录仪场景中的应用。GB28181协议作为视频监控联网的国家标准,为设备互联互通提供规范。SmartGBD专为Android平台设计,支持音视频采集、编码与传输,具备自适应算法和多功能扩展优势。文章分析了执法记录仪的需求,如实时音视频传输、设备管理及数据安全,并详细阐述了基于SmartGBD的技术实现方案,包括环境准备、SDK集成、设备注册、音视频处理及功能扩展等步骤。最后展望了SmartGBD在未来智慧物联领域的广阔应用前景。
215 13
|
6月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
2月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
124 11
|
6月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1139 77
|
3月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
154 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡