首页 > 其他分享 >安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)

安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)

时间:2023-10-26 13:01:36浏览次数:38  
标签:订阅 String GB28181 void 安卓端 device MobilePosition public 设备

技术背景

实时位置(MobilePosition)订阅和上报,对GB28281设备接入终端尤其重要,如移动单兵设备、执法记录仪、智能安全帽、车载终端等,Android国标接入设备通过获取到实时经纬度信息,按照一定的间隔上报到国标服务平台,国标服务平台通过如电子地图,实时动态显示前端设备的定位信息,从而实现前端接入设备的可视可控管理。比如4G/5G执法仪,智能安全帽,智能警用头盔,单兵等。

我们先看看GB/T28181-2016针对MobilePosition描述:

<elementname="TargetID"type="tg:deviceIDType"/>移动设备位置数据通知
<! -- 命令类型:移动设备位置数据通知(必选)-->
<elementname="CmdType"fixed="MobilePosition"/>
<! -- 命令序列号(必选)-->
<elementname="SN" type="integer"minInclusivevalue= "1"/>
<! -- 产生通知时间(必选)--> 
<elementname="Time" type="dateTime"/> 
<! --经度(必选)--> <elementname="Longitude"type="double"/> 
<! -- 纬度(必选)--> <elementname="Latitude"type="double"/> 
<! --速度,单位:km/h(可选)--> 
<elementname="Speed"type="double"/> 
<!--方向,取值为当前摄像头方向与正北方的顺时针夹角,取值范围0°~360°,单位:(°)(可选)-->
<elementname="Direction"type="double"/>
<! --海拔高度,单位:m(可选)-->
<elementname="Altitude"type="tg:deviceIDType"/>

安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)_大牛直播SDK

安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)_GB28181安卓端_02

1. 配置设备支持位置订阅:在GB28181设备中需要配置支持位置订阅功能。可以通过设备管理平台或者设备自身的管理界面进行配置。

2. 获取SIP服务器地址和端口:在位置订阅的过程中,需要知道SIP服务器的地址和端口信息。

3. 发送订阅请求:使用SIP协议发送一个位置订阅请求。在SIP消息中定义请求的订阅参数,如订阅的设备ID、订阅类型、订阅的时间间隔等。

4. 响应订阅请求:SIP服务器收到位置订阅请求后,会返回一个订阅成功的响应消息。

5. 接收位置更新消息:当设备位置发生变化时,设备会向SIP服务器发送位置更新消息。SIP服务器会将该消息传递给订阅者。

6. 处理位置更新消息:订阅者收到位置更新消息后,可以根据需要进行相应的处理,如在地图上实时显示设备位置、记录设备行踪等。

技术实现

本文以大牛直播SDK的Andorid平台GB28181设备对接模块为例,Android国标接入端DevicePosition基本结构如下:

安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)_GB28181安卓端_03

/*
 * DevicePosition.java
 *
 * Author: https://daniusdk.com
 *
 */
public class DevicePosition {
    private String mTime; // 产生位置信息的时间,格式如:2022-03-16T10:37:21, yyyy-MM-dd'T'HH:mm:ss
    private String mLongitude; // 经度
    private String mLatitude; //纬度
    private String mSpeed; // 速度,单位:km/h
    private String mDirection; // 方向,取值为当前摄像头方向与正北方的顺时针夹角,取值范围0°~360°,单位:(°)
    private String mAltitude; // 海拔高度,单位:m
 
    public String getTime() {
        return mTime;
    }
 
    public void setTime(String time) {
        this.mTime = time;
    }
 
    public String getLongitude() {
        return mLongitude;
    }
 
    public void setLongitude(double longitude) {
        this.mLongitude = String.valueOf(longitude);
    }
 
    public void setLongitude(String longitude) { this.mLongitude =longitude; }
 
    public String getLatitude() {
        return mLatitude;
    }
 
    public void setLatitude(double latitude) {
        this.mLatitude = String.valueOf(latitude);
    }
 
    public void setLatitude(String latitude) { this.mLatitude = latitude;}
 
    public String getSpeed() {
        return mSpeed;
    }
 
    public void setSpeed(double speed) {
        this.mSpeed = String.valueOf(speed);
    }
 
    public String getDirection() {
        return mDirection;
    }
 
    public void setDirection(double direction) {
        this.mDirection = String.valueOf(direction);
    }
 
    public String getAltitude() {
        return mAltitude;
    }
 
    public void setAltitude(double altitude) {
        this.mAltitude = String.valueOf(altitude);
    }
}

当有SUBSCRIBE request请求位置更新,把请求回到上层:

/*
 * 设备位置请求, 这个主要用在移动设备位置订阅上
 * @param interval 请求间隔, 单位是毫秒
 */
void ntsOnDevicePositionRequest(String deviceId, int interval);

对外提供个更新设备位置信息的接口:

/*
 *更新设备位置信息 
 */
boolean updateDevicePosition(String deviceId, DevicePosition position)

上层具体处理ntsOnDevicePositionRequest:

@Override
 public void ntsOnDevicePositionRequest(String deviceId, int interval) {
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            getLocation(myContext);

            Log.i(TAG, "ntsOnDevicePositionRequest, deviceId:" + this.device_id_ + ", Longitude:" + mLongitude + ", Latitude:" + mLatitude + ", Time:" + mLocationTime);

            if (mLongitude != null && mLatitude != null) {
                com.gb28181.ntsignalling.DevicePosition device_pos = new com.gb28181.ntsignalling.DevicePosition();

                device_pos.setTime(mLocationTime);
                device_pos.setLongitude(mLongitude);
                device_pos.setLatitude(mLatitude);

                if (gb28181_agent_ != null ) {
                    gb28181_agent_.updateDevicePosition(device_id_, device_pos);
                }
            }
        }

        private String device_id_;
        private int interval_;

        public Runnable set(String device_id, int interval) {
            this.device_id_ = device_id;
            this.interval_ = interval;
            return this;
        }

    }.set(deviceId, interval),0);
}

如何添加设备:

private void addTestDevice() {
com.gb28181.ntsignalling.Device gb_device = new com.gb28181.ntsignalling.Device("34020000001380000037", "某安卓设备", Build.MANUFACTURER, Build.MODEL,
                    "宇宙","火星1","火星", true);
        
     if (mLongitude != null && mLatitude != null) {
          com.gb28181.ntsignalling.DevicePosition device_pos = new com.gb28181.ntsignalling.DevicePosition();

          device_pos.setTime(mLocationTime);
          device_pos.setLongitude(mLongitude);
          device_pos.setLatitude(mLatitude);
          gb_device.setPosition(device_pos);

          gb_device.setSupportMobilePosition(true); // 设置支持移动位置上报
      }

      gb28181_agent_.addDevice(gb_device);
}

标签:订阅,String,GB28181,void,安卓端,device,MobilePosition,public,设备
From: https://blog.51cto.com/daniusdk/8032872

相关文章

  • 关于GB28181你了解多少?
    GB28181实时视频接入:实现安全、高效的视频监控系统一、概述GB28181是一种国家标准,它规定了公共安全视频监控联网系统的基本要求和技术指标。该协议的实时视频接入功能可以实现不同厂商的设备之间进行无缝互联互通,从而为视频监控系统提供高效、安全的数据传输和监控控制能力。......
  • 视频监控LiteCVR如何通过API接口获取国标GB28181协议接入的实时录像?
    以人工智能为代表的新兴技术,不断驱动着安防等各领域业务层面的创新,同时AI技术的深度应用将成为安防等各领域有效的视频监控解决方案。安防监控视频国标GB28181平台LiteCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检......
  • 国标GB28181视频平台EasyGBS国标视频监控平台的特点及其应用场景
    ​EasyGBS是一款基于国标GB28181协议的视频云服务平台,支持多路设备同时接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。能将GB/T28181备/平台推送的PS流转ES流,并提供RTSP、RTMP、FLV、HLS、WebRTC等多种格式视频流的分发服务,实现Web浏览器、......
  • 安防监控国标GB28181平台LiteCVR修改录像计划的等待时间较长,该如何解决?
    我国在智能视频安防监控领域相较国外起步较晚,但随着近些年互联网等技术的发展,我国在该领域迅猛发展,取得了不错的成果。有用户反馈,GB28181视频监控平台LiteCVR修改录像计划的等待时间较长。今天我们来针对这个案例做一个分析和讲解。根据反馈我们立即进行排查,发现其实修改单个通......
  • 设备或平台通过GB28181协议接入上级平台不在线怎么办?
    设备或平台通过GB28181协议接入上级平台不在线可按如下方法排查:检查GB28181参数配置是否有问题摄像机或平台作为下级所配置的上级平台信息是否正确,如SIP服务器IP、端口、域、鉴权密码【注意鉴权密码要根据上级平台提供的秘钥来设置】等关键信息,这些信息一定要OK。以海康为例......
  • 国标GB28181视频平台LiteCVR接入云台控制接口,为何出现了延时?
    随着现代科学技术发展越来越迅速,我国安防领域开始不断顺应技术改革需求,对监控技术进行创新,应用和提高智能视频监控技术的功能性,进一步推动现代安防领域工作的有效发展。LiteCVR视频融合平台基于云边端一体化架构,部署轻快、功能灵活,平台可支持多协议、多类型设备接入,包括:国标GB28......
  • 国标GB28181视频平台LiteCVR运行CPU占用与实际使用不符,如何排查?
    在高清化、智能化和网联化的需求下,5G、人工智能、云计算等信息技术快速发展带动用途单一的安防系统功能走向多元化,并开始与电信、交通、建筑、物业等多领域进行融合,进入泛安防时代。LiteCVR平台可支持多协议、多类型设备接入,平台可在复杂的网络环境中,将分散的各类视频资源进行统......
  • 国标GB28181安防视频系统LiteGBS配置完成之后,视频无法播放是什么原因?
    国标GB28181系统LiteGBS设计了转码、上传一体化的功能,使音视频资源转码后可立即面向互联网进行发布和分发。在视频能力上,LiteGBS可以实现视频监控直播、录像检索与回看、云台控制、语音对讲、告警上报、平台级联等能力,在安防领域也有着广泛的应用,如明厨亮灶、平安乡村、雪亮工程、......
  • 国标GB28181视频智能分析平台EasyGBS系统的设计与应用
    国标GB28181视频智能分析平台EasyGBS系统是一种基于GB28181-2016标准实现的网络视频平台,它负责实现核心信令与设备管理后台部分。该平台支持NAT穿透,可以接入海康、大华、宇视等品牌的IPC、NVR设备。它还支持国标级联,可以将不带国标功能的摄像机、直播流、直播推流转发到其他国标平......
  • 视频监控系统EasyCVR如何通过API接口获取国标GB28181协议接入的实时录像?
    安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台也提供丰富的API接口供开发者集成、调用与二次开发。今天来介绍下......