Android平台GB28181接入模块(SmartGBD)技术接入说明

server/2025/2/26 9:48:55/

一、技术背景

GB/T 28181-2016/2022是中国国家标准,旨在规范网络视频监控设备的接入与互操作性。本模块的设计目标是使不具备国标音视频能力的 Android 终端能够通过平台注册接入到现有的GB/T 28181-2016/2022服务平台。该模块可广泛应用于智能监控、智慧零售、智慧教育、远程办公、生产运输、智慧交通、车载及执法记录仪等多种场景。

二、功能支持

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 组合使用,实现录像相关功能。

三、系统要求

  • SDK 支持 :Android 5.1 及以上版本。

  • CPU 架构 :支持 armv7、arm64、x86、x86_64。

四、准备工作

(一)代码文件放置

  • 确保 SmartPublisherJniV2.java 放置于 com.daniulive.smartpublisher 包名下(可在其他包名下调用)。

  • 如需集成语音广播、语音对讲功能,确保 SmartPlayerJniV2.java 放置于 com.daniulive.smartplayer 包名下(可在其他包名下调用)。

(二)库文件添加

  • smartavengine.jarsmartgbsipagent.jar 添加到工程中。

  • 拷贝 libSmartPublisher.solibSmartPlayer.so(如需语音广播或语音对讲)到工程中。

(三)权限配置

AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

(四)动态加载库

static {System.loadLibrary("SmartPublisher");System.loadLibrary("SmartPlayer");
}

(五)build.gradle 配置

splits {abi {enable truereset()include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'universalApk true}
}

(六)app-name 修改

如需集成到自己系统测试,请用大牛直播 SDK 的 app name,授权版按照授权 app name 正常使用即可。在 strings.xml 中修改如下:

<string name="app_name">SmartPublisherSDKDemo</string>

五、接口详解

(一)信令处理

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

PostAudioPacketSmartPlayerJniV2.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 设备接入模块的相关说明。除了上述接口设计外,该模块还具备良好的可扩展性,可实现如实时静音、实时快照、按需录像、实时音量调节等功能。


http://www.ppmy.cn/server/170713.html

相关文章

使用Python爬虫获取孔夫子旧书网已售商品数据:调用item_search_sold接口

在二手书市场中&#xff0c;孔夫子旧书网是国内知名的平台&#xff0c;拥有丰富的古籍和二手书资源。通过其提供的API接口&#xff0c;开发者可以方便地获取已售商品的信息&#xff0c;这对于市场分析、价格研究和书籍收藏等领域具有重要价值。本文将详细介绍如何使用Python爬虫…

多智能体集群编队实验平台构成

“智群”多智能体集群编队实验平台是一套基于光学动捕定位为基础的无人机和无人车室内多智能体集群编队实验平台&#xff0c;配套丰富的二次开发例程和简洁的集群控制地面站&#xff0c;支持集群控制、路径规划、目标识别、任务决策等教学任务和算法验证。 实验平台基于NOKOV高…

nodejs npm install、npm run dev运行的坎坷之路

1、前面的种种都不说了&#xff0c;好不容易运行起来oap-portal项目&#xff0c;运行idm-ui项目死活运行不起来&#xff0c;各种报错&#xff0c;各种安装&#xff0c;各种卸载nodejs&#xff0c;卸载nvm&#xff0c;重装&#xff0c;都不好使。 2、甚至后来运行npm install会…

学习笔记05——HashMap实现原理及源码解析(JDK8)

一、核心设计思想 数组链表红黑树&#xff1a;桶数组存储Node节点&#xff0c;哈希冲突时形成链表&#xff0c;链表长度≥8且桶数量≥64时转红黑树扰动函数&#xff1a;(h key.hashCode()) ^ (h >>> 16) 消除高位变化的影响懒加载&#xff1a;首次put时初始化数组负…

论文汇总-LLM+Cold Start

论文汇总-Cold Start Recommendation-World Knowledge from LLMs 1.LLM 作为推荐系统1.1提示策略1.1.1直接提示&#xff08;2篇&#xff09;LLMRank-ECIR 2024PromptRec-WWW2024 1.1.2多步骤提示&#xff08;3篇&#xff09;LLMMove-CAI 2024LLM4POI-SIGIR 2024TaxRec-COLING 2…

【前沿探索篇七】【DeepSeek自动驾驶:端到端决策网络】

第一章 自动驾驶的"感官革命":多模态神经交响乐团 1.1 传感器矩阵的量子纠缠 我们把8路摄像头+4D毫米波雷达+128线激光雷达的融合称为"传感器交响乐",其数据融合公式可以简化为: def sensor_fusion(cam, radar, lidar):# 像素级特征提取 (ResNet-152…

可扩展调度在时间敏感网络中的应用:一种高效的流冲突检测方法

论文标题 **中文标题&#xff1a;**可扩展调度在时间敏感网络中的应用&#xff1a;一种高效的流冲突检测方法 **英文标题&#xff1a;**Scalable Scheduling in Time-Sensitive Networking: An Efficient Stream Conflict Detection Method 作者信息 Lei Xu, Cailian Chen (…

高清下载油管视频到本地

下载工具并安装: yt-dlp官网地址&#xff1a; GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader ffmpeg官网地址&#xff1a; Download FFmpeg 注&#xff1a;记住为其添加环境变量 操作命令&#xff1a; 该指令表示以720p码率下载VIDEO_UR…