GB28181执法记录仪功能设计
在当今的安防监控与视频通信领域,GB28181协议已成为实现设备互联互通的关键标准。执法记录仪作为重要的安防设备,其GB28181接入能力对于提升执法效率和实现统一指挥调度具有重要意义。本文将深入探讨基于大牛直播SDK的Android平台GB28181设备接入模块(SmartGBD)在执法记录仪中的技术实现与应用。
GB28181协议全称为《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是由中国公安部科技信息化局提出的一项国家标准。该协议旨在规范安全防范视频监控联网系统中信息传输、交换、控制的互联结构、通信协议结构,以及传输、交换、控制的基本要求和安全性要求。GB/T28181-2016和GB/T28181-2022规范的推出,进一步细化和完善了视频监控设备之间的通信协议规范,使得不同厂商的设备能够更好地在同一平台上协同工作。
一、基本功能
-
设备注册与身份认证
-
能够向监控中心注册设备信息,包括设备 ID、设备类型、设备名称等。
-
支持基于用户名和密码的身份认证机制,确保只有合法的设备能够接入监控系统。
-
-
实时视频传输
-
支持将实时视频流传输到监控中心,常用的视频编码格式有 H.264 和 H.265。
-
能够根据网络状况自动调整视频质量和帧率,保证视频传输的流畅性。
-
-
实时音频传输
-
可以将现场的音频信息实时传输给监控中心,支持双工通信,使指挥人员可以与现场人员进行实时对话。
-
支持音频降噪和回声消除功能,保证音频质量。
-
-
设备控制
-
能够响应监控中心的控制指令,如启动录像、抓拍图片、开启声音警告灯等。
-
支持云台控制功能,可远程调整摄像头的角度和方向。
-
-
设备状态查询
-
可以实时向监控中心报告设备的状态,如电池电量、存储空间、网络连接状态等。
-
二、GB28181 特定功能
-
设备注册与注销
-
支持自动注册到监控中心,并在设备关机或网络连接中断时自动注销。
-
支持手动注册和注销功能,方便设备在不同监控中心之间的切换。
-
-
心跳机制
-
定期向监控中心发送心跳包,以保持与监控中心的连接,通常心跳周期为 60 秒。
-
-
设备巡检
-
能够响应监控中心的巡检请求,返回设备的当前状态和信息。
-
-
设备配置
-
支持从监控中心获取设备配置参数,如视频分辨率、帧率、码率等,并根据配置参数进行调整。
-
-
报警功能
-
支持多种报警触发方式,如移动侦测、声音报警检测等,并在报警时向监控中心发送报警信息。
-
能够接收监控中心的报警指令,如开始录像、抓拍图片等。
-
三、执法记录仪特定功能
-
高清视频录制
-
支持高清视频录制,常见的分辨率有 1080p、720p 等,能够清晰记录执法现场的细节。
-
-
夜视功能
-
配备红外夜视功能或低照度模式,能够在夜间或光线较暗的环境下清晰拍摄。
-
-
紧急录像功能
-
能够在紧急情况下(如按下紧急按钮或检测到异常事件)自动启动录像,并以高优先级保存录像文件。
-
-
图片抓拍
-
支持手动抓拍和自动抓拍功能,可以将特定时刻的现场画面以图片的形式保存下来。
-
-
地理位置信息记录
-
集成 GPS 模块,能够实时记录设备的地理位置信息,并在录像和图片中嵌入地理位置水印。
-
-
电池续航
-
配备大容量电池,保证在执法过程中有足够的续航时间。同时,具有电池电量监测功能,并在电量低时发出警报。
-
-
数据加密与安全
-
对存储和传输的数据进行加密,防止数据被非法篡改或泄漏。
-
具有防拆卸和防恶意操作的机制,确保设备的安全性。
-
-
存储和回放
-
配备大容量存储卡,能够存储大量的视频和图片数据。
-
支持本地回放和远程回放功能,方便用户在事后查看和分析执法过程。
-
-
日志管理
-
记录设备的操作日志和报警记录,包括设备的开关机时间、录像开始和结束时间、报警触发时间等。
-
能够将日志信息上传到监控中心,便于进行设备管理和故障排查。
-
-
语音提示和通知
-
具有语音提示功能,能够在设备启动、录像开始和结束、电池电量低等情况下发出语音提示。
-
能够接收监控中心的语音通知,如调度指令等。
-
技术实现
SmartGBD是一款专为Android平台设计的GB28181接入SDK,它能够使不具备国标音视频能力的Android终端通过平台注册接入到现有的GB/T28181—2016或GB/T28181—2022服务。这一SDK的推出,极大地拓展了Android设备在视频监控、智慧物联等领域的应用场景,如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公等。
一、SmartGBD的技术特点与优势
-
全自研框架与自适应算法:SmartGBD采用全自研框架,具有易于扩展的特点。其自适应算法能够有效降低延迟,提高采集、编码和传输的效率。
-
多功能支持:SmartGBD以SDK接口形式提供所有功能,并支持状态反馈。支持同时运行RTMP直播推送SDK、轻量级RTSP服务SDK和录像SDK。
-
外部数据源接入:支持外部YUV/RGB/H.264/H.265/AAC数据源接入,可以通过拉取RTSP或RTMP流的方式,将其他IPC的RTSP流接入到国标平台。
二、执法记录仪的GB28181接入实现
-
硬件选型:选择符合GB28181标准的执法记录仪设备,确保设备具备高清晰度摄像和音频采集能力,支持4G/5G或Wi-Fi等无线网络连接,并配备北斗/GPS等定位模块。
-
设备注册:执法记录仪通过网络接入到GB28181视频监控系统中,通过设备的唯一标识和密码完成注册和鉴权。
-
信令处理:根据GB28181协议要求,实现信令的编解码、交换与处理功能。例如,处理注册、心跳、设备位置请求等信令。
-
媒体传输:配置音视频数据的传输,确保数据的稳定性和实时性。可以通过拉取RTSP或RTMP流的方式,将视频数据接入到GB28181平台。
三、功能扩展与应用
-
移动设备位置订阅和通知:执法记录仪可以实时上报巡检人员的位置信息,实现对执法人员的精准定位和轨迹跟踪。
-
图像抓拍:支持远程控制执法记录仪进行图像抓拍,为抓取关键证据提供支持。
-
语音广播和语音对讲:实现指挥中心与执法人员之间的双向语音通信,提升指挥调度的效率。
-
历史视音频下载和回放:支持对执法记录仪存储的历史视音频数据进行下载和回放,便于事后审查和证据追溯。
四、功能特性
大牛直播SDK的SmartGBD,Android终端除支持常规的音视频数据接入外,还可以支持移动设备位置(MobilePosition)订阅和通知、语音广播和语音对讲、云台控制回调和预置位查询,支持对接数据类型如下:
- 编码前数据(目前支持的有YV12/NV21/NV12/I420/RGB24/RGBA32/RGB565等数据类型);
- 编码后数据(如无人机等264/HEVC数据,或者本地解析的MP4音视频数据);
- 拉取RTSP或RTMP流并接入至GB28181平台。
(一)音视频格式
-
视频格式 :支持 H.264/H.265(Android H.265 硬编码)。
-
音频格式 :支持 G.711 A 律、AAC。
(二)音视频处理
-
音量调节 :Android 平台采集端支持实时音量调节。
-
H.264 硬编码 :支持特定机型的 H.264 硬编码。
-
H.265 硬编码 :支持特定机型的 H.265 硬编码。
-
软硬编码参数配置 :支持 GOP 间隔、帧率、码率设置;支持软编码 profile、软编码速度、可变码率设置。
-
传输模式 :支持纯视频、音视频 PS 打包传输。
-
网络传输协议 :支持 RTP OVER UDP 和 RTP OVER TCP 被动模式;支持信令通道网络传输协议 TCP/UDP 设置。
(三)信令与控制
-
注册与注销 :支持注册、注销,支持注册刷新及注册有效期设置。
-
设备目录查询 :支持设备目录查询应答。
-
心跳机制 :支持心跳机制,支持心跳间隔、心跳检测次数设置。
-
移动设备位置 :支持移动设备位置(MobilePosition)订阅和通知。
-
云台控制 :支持云台控制和预置位查询。
(四)其他功能
-
语音广播 :支持语音广播。
-
语音对讲 :支持语音对讲。
-
图像抓拍 :支持图像抓拍。
-
历史视音频文件 :支持历史视音频文件检索、下载及回放。
-
实时水印 :支持动态文字水印、png 水印。
-
镜像功能 :Android 平台支持前置摄像头实时镜像功能。
-
实时静音 :支持实时静音 / 取消静音。
-
实时快照 :支持实时快照。
-
降噪处理 :支持环境音、手机干扰等引起的噪音降噪处理、自动增益、VAD 检测。
-
外部编码数据对接 :支持 YUV 数据、PCM 数据、外部 H.264 数据、外部 AAC 数据对接。
-
扩展录像功能 :支持和录像 SDK 组合使用,实现录像相关功能。
五、接口详解
(一)信令处理
1. GBSIPAgentListener
该接口主要涉及 GB28181 注册、心跳、设备位置请求等处理,包括以下方法:
方法名 | 描述 |
---|---|
ntsRegisterOK(String dateString) | 注册成功回调,返回注册成功的日期字符串 |
ntsRegisterTimeout() | 注册超时回调 |
ntsRegisterTransportError(String errorInfo) | 注册网络传输层错误回调,返回错误信息 |
ntsOnHeartBeatException(int exceptionCount, String lastExceptionInfo) | 心跳异常回调,返回异常次数和最后一次异常信息 |
ntsOnDevicePositionRequest(String deviceId, int interval) | 设备位置请求处理回调,返回设备 ID 和请求间隔 |
2. GBSIPAgentPlayListener
该接口主要涉及 GB28181 的 Invite、Ack、Bye 等处理,包括以下方法:
方法名 | 描述 |
---|---|
ntsOnInvitePlay(String deviceId, SessionDescription sessionDescription) | 收到 Invite 请求回调,返回设备 ID 和会话描述信息 |
ntsOnPlayInviteResponseException(String deviceId, int statusCode, String errorInfo) | Invite 响应异常回调,返回设备 ID、状态码和错误信息 |
ntsOnCancelPlay(String deviceId) | 取消播放回调,返回设备 ID |
ntsOnAckPlay(String deviceId) | Ack 确认回调,返回设备 ID |
ntsOnByePlay(String deviceId) | Bye 请求回调,返回设备 ID |
ntsOnTerminatePlay(String deviceId) | 终止播放回调,返回设备 ID |
ntsOnPlayDialogTerminated(String deviceId) | 播放对话终止回调,返回设备 ID |
3. GBSIPAgentAudioBroadcastListener
该接口主要涉及 GB28181 语音广播处理相关,包括以下方法:
方法名 | 描述 |
---|---|
ntsOnNotifyBroadcastCommand(String fromUserName, String fromUserNameAtDomain, String sn, String sourceID, String targetID) | 通知广播命令回调,返回发送方用户名、发送方域名、序列号、源 ID 和目标 ID |
ntsOnAudioBroadcast(String commandFromUserName, String commandFromUserNameAtDomain, String sourceID, String targetID) | 语音广播回调,返回命令发送方用户名、命令发送方域名、源 ID 和目标 ID |
ntsOnInviteAudioBroadcastException(String sourceID, String targetID, String errorInfo) | Invite 语音广播异常回调,返回源 ID、目标 ID 和错误信息 |
ntsOnInviteAudioBroadcastTimeout(String sourceID, String targetID) | Invite 语音广播超时回调,返回源 ID 和目标 ID |
ntsOnInviteAudioBroadcastResponse(String sourceID, String targetID, int statusCode, SessionDescription sessionDescription) | Invite 语音广播响应回调,返回源 ID、目标 ID、状态码和会话描述信息 |
ntsOnByeAudioBroadcast(String sourceID, String targetID) | Bye 语音广播回调,返回源 ID 和目标 ID |
ntsOnTerminateAudioBroadcast(String sourceID, String targetID) | 终止语音广播回调,返回源 ID 和目标 ID |
4. GBSIPAgentDeviceControlListener
该接口主要涉及 GB28181 设备控制相关,如远程启动、云台控制等,包括以下方法:
方法名 | 描述 |
---|---|
ntsOnDeviceControlTeleBootCommand(String deviceId, String teleBootValue) | 设备远程启动命令回调,返回设备 ID 和远程启动值 |
ntsOnDeviceControlPTZCmd(String deviceId, String typeValue) | 云台控制命令回调,返回设备 ID 和类型值 |
5. GBSIPAgentQueryCommandListener
该接口主要涉及 GB28181 查询命令,如预置位查询等,包括以下方法:
方法名 | 描述 |
---|---|
ntsOnDevicePresetQueryCommand(String fromUserName, String fromUserNameAtDomain, String sn, String deviceId) | 设备预置位查询命令回调,返回发送方用户名、发送方域名、序列号和设备 ID |
6. GBSIPAgentTalkListener
该接口主要涉及 GB28181 语音对讲相关处理,包括以下方法:
方法名 | 描述 |
---|---|
ntsOnInviteTalk(String deviceId, SessionDescription sessionDescription) | 收到 Invite 对讲请求回调,返回设备 ID 和会话描述信息 |
ntsOnTalkInviteResponseException(String deviceId, int statusCode, String errorInfo) | Invite 对讲响应异常回调,返回设备 ID、状态码和错误信息 |
ntsOnCancelTalk(String deviceId) | 取消对讲回调,返回设备 ID |
ntsOnAckTalk(String deviceId) | Ack 确认回调,返回设备 ID |
ntsOnByeTalk(String deviceId) | Bye 请求回调,返回设备 ID |
ntsOnTerminateTalk(String deviceId) | 终止对讲回调,返回设备 ID |
ntsOnTalkDialogTerminated(String deviceId) | 对讲对话终止回调,返回设备 ID |
7. GBSIPAgentPlaybackListener
该接口主要涉及历史视音频回放相关,包括以下方法:
方法名 | 描述 |
---|---|
ntsOnInvitePlayback(long var1, String var3, SessionDescription var4) | 收到 Invite 回放请求回调,返回相关参数 |
ntsOnPlaybackInviteResponseException(long var1, String var3, int var4, String var5) | Invite 回放响应异常回调,返回相关参数 |
ntsOnCancelPlayback(long var1, String var3) | 取消回放回调,返回相关参数 |
ntsOnAckPlayback(long var1, String var3) | Ack 确认回调,返回相关参数 |
ntsOnPlaybackMANSRTSPPlayCommand(long var1, String var3) | 回放 RTSP 播放命令回调,返回相关参数 |
ntsOnPlaybackMANSRTSPPauseCommand(long var1, String var3) | 回放 RTSP 暂停命令回调,返回相关参数 |
ntsOnPlaybackMANSRTSPScaleCommand(long var1, String var3, double var4) | 回放 RTSP 缩放命令回调,返回相关参数 |
ntsOnPlaybackMANSRTSPSeekCommand(long var1, String var3, double var4) | 回放 RTSP 定位命令回调,返回相关参数 |
ntsOnPlaybackMANSRTSPTeardownCommand(long var1, String var3) | 回放 RTSP 拆卸命令回调,返回相关参数 |
ntsOnByePlayback(long var1, String var3) | Bye 请求回调,返回相关参数 |
ntsOnTerminatePlayback(long var1, String var3) | 终止回放回调,返回相关参数 |
ntsOnPlaybackDialogTerminated(long var1, String var3) | 回放对话终止回调,返回相关参数 |
8. GBSIPAgentDownloadListener
该接口主要涉及历史视音频下载相关,包括以下方法:
方法名 | 描述 |
---|---|
ntsOnInviteDownload(long var1, String var3, SessionDescription var4) | 收到 Invite 下载请求回调,返回相关参数 |
ntsOnDownloadInviteResponseException(long var1, String var3, int var4, String var5) | Invite 下载响应异常回调,返回相关参数 |
ntsOnCancelDownload(long var1, String var3) | 取消下载回调,返回相关参数 |
ntsOnAckDownload(long var1, String var3) | Ack 确认回调,返回相关参数 |
ntsOnDownloadMANSRTSPScaleCommand(long var1, String var3, double var4) | 下载 RTSP 缩放命令回调,返回相关参数 |
ntsOnByeDownload(long var1, String var3) | Bye 请求回调,返回相关参数 |
ntsOnTerminateDownload(long var1, String var3) | 终止下载回调,返回相关参数 |
ntsOnDownloadDialogTerminated(long var1, String var3) | 下载对话终止回调,返回相关参数 |
(二)媒体数据处理
1. RTP 数据发送
RTP Sender(SmartPublisherJniV2.java
)相关接口设计如下:
方法名 | 描述 |
---|---|
public native long CreateRTPSender(int reserve) | 创建 RTP 发送器,返回发送器句柄 |
public native int SetRTPSenderTransportProtocol(long rtp_sender_handle, int transport_protocol) | 设置 RTP 发送器传输协议,参数为发送器句柄和传输协议类型 |
public native int SetRTPSenderIPAddressType(long rtp_sender_handle, int ip_address_type) | 设置 RTP 发送器 IP 地址类型,参数为发送器句柄和 IP 地址类型 |
public native int SetRTPSenderLocalPort(long rtp_sender_handle, int port) | 设置 RTP 发送器本地端口,参数为发送器句柄和端口号 |
public native int SetRTPSenderSSRC(long rtp_sender_handle, String ssrc) | 设置 RTP 发送器 SSRC,参数为发送器句柄和 SSRC 值 |
public native int SetRTPSenderSocketSendBuffer(long rtp_sender_handle, int buffer_size) | 设置 RTP 发送器套接字发送缓冲区大小,参数为发送器句柄和缓冲区大小 |
public native int SetRTPSenderClockRate(long rtp_sender_handle, int clock_rate) | 设置 RTP 发送器时钟速率,参数为发送器句柄和时钟速率 |
public native int SetRTPSenderDestination(long rtp_sender_handle, String address, int port) | 设置 RTP 发送器目标地址和端口,参数为发送器句柄、地址和端口 |
public native int EnableRTPSenderReceive(long rtp_sender_handle, int is_enable) | 启用或禁用 RTP 发送器接收功能,参数为发送器句柄和是否启用标志 |
public native int SetRTPSenderReceiveSSRC(long rtp_sender_handle, String ssrc) | 设置 RTP 发送器接收 SSRC,参数为发送器句柄和 SSRC 值 |
public native int SetRTPSenderReceivePayloadType(long rtp_sender_handle, int payload_type, String encoding_name, int media_type, int clock_rate) | 设置 RTP 发送器接收负载类型,参数为发送器句柄、负载类型、编码名称、媒体类型和时钟速率 |
public native int SetRTPSenderReceivePSClockFrequency(long rtp_sender_handle, int ps_clock_frequency) | 设置 RTP 发送器接收 PS 时钟频率,参数为发送器句柄和 PS 时钟频率 |
public native int SetRTPSenderReceiveAudioSamplingRate(long rtp_sender_handle, int sampling_rate) | 设置 RTP 发送器接收音频采样率,参数为发送器句柄和采样率 |
public native int SetRTPSenderReceiveAudioChannels(long rtp_sender_handle, int channels) | 设置 RTP 发送器接收音频声道数,参数为发送器句柄和声道数 |
public native int InitRTPSender(long rtp_sender_handle) | 初始化 RTP 发送器,参数为发送器句柄 |
public native int GetRTPSenderLocalPort(long rtp_sender_handle) | 获取 RTP 发送器本地端口,参数为发送器句柄 |
public native int UnInitRTPSender(long rtp_sender_handle) | 反初始化 RTP 发送器,参数为发送器句柄 |
public native int DestoryRTPSender(long rtp_sender_handle) | 销毁 RTP 发送器,参数为发送器句柄 |
2. RTP 数据接收
对应 RTP Receiver(SmartPlayerJniV2.java
)相关接口设计如下(如无语音广播或语音对讲相关技术需求,这部分可忽略):
方法名 | 描述 |
---|---|
public native long CreateRTPReceiver(int reserve) | 创建 RTP 接收器,返回接收器句柄 |
public native int SetRTPReceiverTransportProtocol(long rtp_receiver_handle, int transport_protocol) | 设置 RTP 接收器传输协议,参数为接收器句柄和传输协议类型 |
public native int SetRTPReceiverIPAddressType(long rtp_receiver_handle, int ip_address_type) | 设置 RTP 接收器 IP 地址类型,参数为接收器句柄和 IP 地址类型 |
public native int SetRTPReceiverLocalPort(long rtp_receiver_handle, int port) | 设置 RTP 接收器本地端口,参数为接收器句柄和端口号 |
public native int SetRTPReceiverSSRC(long rtp_receiver_handle, String ssrc) | 设置 RTP 接收器 SSRC,参数为接收器句柄和 SSRC 值 |
public native int CreateRTPReceiverSession(long rtp_receiver_handle, int reserve) | 创建 RTP 接收器会话,参数为接收器句柄和保留参数 |
public native int GetRTPReceiverLocalPort(long rtp_receiver_handle) | 获取 RTP 接收器本地端口,参数为接收器句柄 |
public native int SetRTPReceiverPayloadType(long rtp_receiver_handle, int payload_type, String encoding_name, int media_type, int clock_rate) | 设置 RTP 接收器负载类型,参数为接收器句柄、负载类型、编码名称、媒体类型和时钟速率 |
public native int SetRTPReceiverAudioSamplingRate(long rtp_receiver_handle, int sampling_rate) | 设置 RTP 接收器音频采样率,参数为接收器句柄和采样率 |
public native int SetRTPReceiverAudioChannels(long rtp_receiver_handle, int channels) | 设置 RTP 接收器音频声道数,参数为接收器句柄和声道数 |
public native int SetRTPReceiverRemoteAddress(long rtp_receiver_handle, String address, int port) | 设置 RTP 接收器远程地址和端口,参数为接收器句柄、地址和端口 |
public native int InitRTPReceiver(long rtp_receiver_handle) | 初始化 RTP 接收器,参数为接收器句柄 |
public native int UnInitRTPReceiver(long rtp_receiver_handle) | 反初始化 RTP 接收器,参数为接收器句柄 |
public native int DestoryRTPReceiverSession(long rtp_receiver_handle) | 销毁 RTP 接收器会话,参数为接收器句柄 |
public native int DestoryRTPReceiver(long rtp_receiver_handle) | 销毁 RTP 接收器,参数为接收器句柄 |
3. PostAudioPacket
PostAudioPacket
(SmartPlayerJniV2.java
)用于投递音频包给外部 Live source,目前仅于语音对讲使用,接口定义如下:
public native int PostAudioPacket(long handle, int codec_id,
java.nio.ByteBuffer packet, int offset, int size, long pts, boolean is_pts_discontinuity,
java.nio.ByteBuffer extra_data, int extra_data_offset, int extra_data_size, int sample_rate, int channels);
(三)GB28181 接口调用
对应 GB28181 相关接口调用相关设计如下:
public native int SetGB28181RTPSender(long handle, long rtp_sender_handle, int rtp_payload_type, String encoding_name);
public native int SetGB28181ReceiveAudioPacketCallback(long handle, NTAudioPacketCallback audio_packet_callback);
public native int StartGB28181MediaStream(long handle);
public native int StopGB28181MediaStream(long handle);
总结
基于大牛直播SDK的Android平台GB28181设备接入模块(SmartGBD)为执法记录仪的GB28181接入提供了高效、可靠的解决方案。通过SmartGBD,执法记录仪能够实现与GB28181平台的无缝对接,具备丰富的功能和良好的性能表现。未来,随着GB28181协议的进一步推广和应用,SmartGBD将在更多的领域和场景中发挥重要作用,为视频监控和智慧物联的发展提供有力支持。以上是基于GB28181执法记录仪基础功能设计和技术实现,感兴趣的开发者,可以单独跟我沟通探讨。