Android终端GB28181音视频实时回传设计探讨

技术背景

好多开发者,在调研Android平台GB28181实时回传的时候,对这块整体的流程,没有个整体的了解,本文以大牛直播SDK的SmartGBD设计开发为例,聊下如何在Android终端实现GB28181音视频数据实时回传。

技术实现

Android终端除支持常规的音视频数据接入外,还可以支持移动设备位置(MobilePosition)订阅和通知、语音广播和语音对讲、云台控制回调和预置位查询,可以考虑支持对接数据类型如下:

  • 编码前数据(目前支持的有YV12/NV21/NV12/I420/RGB24/RGBA32/RGB565等数据类型);
  • 编码后数据(如无人机等264/HEVC数据,或者本地解析的MP4音视频数据);
  • 拉取RTSP或RTMP流并接入至GB28181平台(比如其他IPC的RTSP流,可通过Android平台GB28181接入到国标平台)。

如果要做个技术通用且功能齐全的Android平台GB28181实时音视频回传模块,一般来说,需要涉及的功能的如下:

  •  ​[视频格式]H.264/H.265(Android H.265硬编码);
  •  [音频格式]G.711 A律、AAC;
  •  [音量调节]Android平台采集端支持实时音量调节;
  •  [H.264硬编码]支持H.264特定机型硬编码;
  •  [H.265硬编码]支持H.265特定机型硬编码;
  •  [软硬编码参数配置]支持gop间隔、帧率、bit-rate设置;
  •  [软编码参数配置]支持软编码profile、软编码速度、可变码率设置;
  • 支持纯视频、音视频PS打包传输;
  • 支持RTP OVER UDP和RTP OVER TCP被动模式;
  • 支持信令通道网络传输协议TCP/UDP设置;
  • 支持注册、注销,支持注册刷新及注册有效期设置;
  • 支持设备目录查询应答;
  • 支持心跳机制,支持心跳间隔、心跳检测次数设置;
  • 支持移动设备位置(MobilePosition)订阅和通知;
  •  适用国家标准:GB/T 28181—2016;
  • 支持语音广播;
  • 支持语音对讲;
  • 支持图像抓拍;
  • 支持历史视音频文件检索;
  • 支持历史视音频文件下载;
  • 支持历史视音频文件回放;
  • 支持云台控制和预置位查询;
  •  [实时水印]支持动态文字水印、png水印;
  •  [镜像]Android平台支持前置摄像头实时镜像功能;
  •  [实时静音]支持实时静音/取消静音;
  •  [实时快照]支持实时快照;
  •  [降噪]支持环境音、手机干扰等引起的噪音降噪处理、自动增益、VAD检测;
  •  [外部编码前视频数据对接]支持YUV数据对接;
  •  [外部编码前音频数据对接]支持PCM对接;
  •  [外部编码后视频数据对接]支持外部H.264数据对接;
  •  [外部编码后音频数据对接]外部AAC数据对接;
  •  [扩展录像功能]支持和录像SDK组合使用,录像相关功能。​

系统要求:

  • SDK支持Android 5.1及以上版本;
  • 支持的CPU架构:armv7, arm64, x86, x86_64。

前期准备

  • 满足系统要求:确保 Android 设备的系统版本为 5.1 及以上,以支持相关的功能和库。
  • 添加权限:在 AndroidManifest.xml 文件中添加必要的权限,如网络访问权限<uses-permission android:name="android.permission.internet"></uses-permission>、存储权限<uses-permission android:name="android.permission.write_external_storage"></uses-permission>等,这些权限是实现数据传输和存储所必需的。
  • 引入库文件:将相关的库文件添加到项目中,例如 smartavengine.jar 和 smartgbsipagent.jar 等。同时,将对应的 .so 文件(如 libsmartpublisher.so 和 libsmartplayer.so,如果需要语音广播或语音对讲功能)拷贝到项目中。
  • 配置构建文件:在 build.gradle 文件中进行相关配置,比如配置 32 位和 64 位库的支持,以确保应用能够在不同架构的 Android 设备上运行。

信令交互

  • 注册与登录:设备需要向 GB28181 平台进行注册,发送注册请求并等待平台的响应。注册信息包括设备的唯一标识、IP 地址、端口号等。在 Android 中,通过调用相关的 GB28181 库函数来实现注册功能。例如,设置服务器参数gb28181_agent_.setServerParameter(gb28181_sip_server_addr_, gb28181_sip_server_port_, gb28181_sip_server_id_, gb28181_sip_domain_),其中包括服务器地址、端口、服务器 ID 和域等信息。
  • 心跳机制:为了保持与平台的连接,设备需要定期向平台发送心跳消息,以告知平台设备仍然在线。设置心跳间隔和心跳检测次数等参数,例如 gb28181_agent_.config(gb28181_reg_expired_, gb28181_heartbeat_interval_, gb28181_heartbeat_count_)
  • 事件处理:实现对平台发送的各种信令的处理,如订阅、查询等请求的响应。例如,当平台发起位置订阅请求时,设备需要按照订阅时间间隔,实时上报当前位置信息。

视频采集与编码

  • 视频采集:使用 Android 设备的摄像头进行视频采集。可以通过 Camera 类或者更高版本的 Camera2 API 来获取摄像头的视频数据。设置视频的分辨率、帧率等参数,以满足实际需求。
  • 视频编码:对采集到的视频数据进行编码,使其符合 GB28181 标准要求的编码格式,如 H.264 或 H.265。在 Android 中,可以使用 MediaCodec 类进行硬件加速编码,提高编码效率。

数据传输

  • 建立连接:根据 GB28181 协议的要求,使用 SIP 协议建立与平台的会话连接。在连接建立过程中,需要指定传输协议(如 UDP 或 TCP)和端口号等信息。
  • 数据发送:将编码后的视频数据封装成 RTP 数据包,并通过建立的连接发送到 GB28181 平台。在发送过程中,需要注意网络状况,对数据进行适当的分包和组包处理,以确保数据的正确传输。

异常处理

  • 网络异常:当网络出现异常时,如网络断开或连接超时,需要及时进行重连或重新注册等操作,以保证数据的实时回传。
  • 设备故障:当设备出现故障或异常情况时,如摄像头故障或编码失败,需要及时进行错误处理,并向平台发送相应的错误报告。

总结

Android 上实现 GB28181 实时回传,我们从前期准备、信令交互、视频采集与编码、数据传输和异常处理这几个关键方面进行阐述。前期准备包括满足系统要求、添加权限、引入库文件和配置构建文件,为后续的开发提供基础环境。信令交互涵盖注册与登录、心跳机制和事件处理,确保设备与平台的正常通信。视频采集与编码部分介绍了如何利用 Android 设备的摄像头进行视频采集以及对采集到的数据进行编码。数据传输则说明了如何建立连接和发送数据。最后,异常处理考虑了网络异常和设备故障等情况的应对措施。以上是大概的设计思路,感兴趣的开发者,可以单独跟我沟通探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/891971.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光伏仿真系统在光伏项目开发中有哪些应用场景?

光伏仿真系统在光伏项目开发中的应用场景广泛&#xff0c;涵盖了从项目规划、设计优化到运维管理的全过程。 一、项目规划与选址 1、气象模拟与评估 光伏仿真系统能够基于历史气象数据和先进的预测模型&#xff0c;模拟不同地理位置、不同季节和时间段的光照强度、温度、湿度…

【学术论文投稿】Java入门:零基础小白也能轻松掌握的全攻略

【IEEE | 往届见刊1个月检索 | 国际双会场】第四届智能电力与系统国际学术会议(ICIPS 2024)_艾思科蓝_学术一站式服务平台 更多学术论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 【IEEE | 往届见刊1个月检索 | 国际双会场】第四届智能电力与系统国际学术会议(ICIPS…

『网络游戏』三端增加数据.dll替换【32】三端

修改服务器脚本&#xff1a;DBMgr 增加数据库 修改客户端脚本&#xff1a;MainCityWnd.cs 拖拽绑定 查看服务端PlayerData调用的协议位置 在客户端中替换 之后客户端就可以调用服务端新增的数据了

Elasticsearch Ingest Pipelines

1. 前言 在将第三方数据源的数据导入到Elasticsearch中时&#xff0c;原始数据长什么样&#xff0c;索引后的文档就是什么样。文档数据结构不统一&#xff0c;导致后续数据分析时变得麻烦&#xff0c;以往需要额外写一个中间程序来读取原始数据&#xff0c;转换加工后再写入到…

Linux下Docker方式Jenkins安装和配置

一、下载&安装 Jenkins官方Docker仓库地址&#xff1a;https://hub.docker.com/r/jenkins/jenkins 从官网上可以看到&#xff0c;当前最新的稳定版本是 jenkins/jenkins:lts-jdk17。建议下在新的&#xff0c;后面依赖下不来 所以&#xff0c;我们这里&#xff0c;执行doc…

智绘城市地图:使用百度地图 API 实现智能定位

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

测网速小程序,纯前端

搜索&#xff1a;证寸照制作 源码介绍: 测网速小程序源码&#xff0c;是一款纯前端无需服务器的测网速小程序&#xff0c;依赖百度开发者中心js接口&#xff0c;真正的永久使用的小工具源码&#xff0c;很实用&#xff0c;可以单独运行&#xff0c;测网速很流畅~ 合法域名: ht…

深入理解 pnpm(Performant NPM) 的实现原理及其与 npm 的区别

深入理解 pnpm 的实现原理及其与 npm 的区别 在 JavaScript 生态系统中&#xff0c;包管理器是开发者日常工作中不可或缺的工具。npm&#xff08;Node Package Manager&#xff09;作为 Node.js 的默认包管理器&#xff0c;已经广泛应用于各种项目中。然而&#xff0c;随着项目…

力扣之接雨水(42)

刷题不在多&#xff0c;而在精。 这道题号称字节的保洁阿姨都能做出的。 方法一&#xff1a;动态规划 下面这幅图简直封神&#xff0c;看了下图我才做出来的。 两个方向遍历&#xff0c;然后取相同覆盖值-原始值&#xff08;heigth数组&#xff09; 这种方法更好理解。但是也有…

厨房老鼠数据集:掀起餐饮卫生监测的科技浪潮

厨房老鼠数据集&#xff1a;掀起餐饮卫生监测的科技浪潮 摘要&#xff1a;本文深入探讨了厨房老鼠数据集在餐饮行业卫生管理中的重要性及其相关技术应用。厨房老鼠数据集通过收集夜间厨房图像、老鼠标注信息以及环境数据&#xff0c;为深度学习模型提供了丰富的训练样本。基于…

新手爬虫DAY1

这个错误信息表明在你的Python程序中&#xff0c;re.search() 函数没有找到预期的匹配项&#xff0c;因此返回了 None。当你尝试在 None 对象上调用 group(1) 方法时&#xff0c;Python 抛出了一个 AttributeError。 具体来说&#xff0c;错误发生在 pc.py 文件的第6行&#x…

QT开发--QT基础

第0章 QT工具介绍 0.1 编译工具 uic&#xff0c;rcc&#xff0c;moc&#xff0c;qmake 都是 qt 的工具 uic 主要是 编译 .ui文件 -> ui_xxx.h //.ui文件 .h rcc 主要是 编译 资源文件.qrc文件 -> xxx.rcc …

某电子元器件企业人力资源管理体系搭建咨询项目

某电子元器件企业人力资源管理体系搭建咨询项目 ——搭建管理体系&#xff0c;梳理工作流程 【导读】 与其他同类企业一样&#xff0c;该电子公司面临招不到合适的人才、留不住人才的难题&#xff0c;自然也加大了人力资源管理的成本。公司人事部员工的工作基本上陷入了“招…

OpenUAV:首个专为现实无人机视觉语言导航设计的大规模轨迹数据集,由大约 12k 个轨迹组成,涵盖了多种环境和复杂的飞行动态。

2024-10-10&#xff0c;由北京航空航天大学人工智能研究所、香港中文大学MMLab以及感知与交互智能中心共同创建了OpenUAV数据集&#xff0c;首个专为现实无人机&#xff08;UAV&#xff09;视觉语言导航&#xff08;VLN&#xff09;任务设计的大型轨迹数据集&#xff0c;该数据…

波司登超1000+门店用钉钉Teambition开店管理,实现拓店“自动化”

门店开在哪里&#xff1f;什么时候装修&#xff1f;什么时候开门迎客&#xff1f; 在瞬息万变的零售行业&#xff0c;门店作为连接产品和消费者、融合线上和线下的核心场景&#xff0c;其运营效率和管理策略至关重要。 近日&#xff0c;波司登正式启用钉钉项目 Teambition&am…

【uniapp】打包成H5并发布

目录 1、设置配置mainifest.sjon 1.1 页面标题 1.2 路由模式 1.3 运行的基础路径 2、打包 2.1 打包入口 2.2 打包成功 2.3 依据目录找到web目录 3、 将web目录整体拷贝出来 4、上传 4.1 登录uniapp官网注册免费空间 4.2 上传拷贝的目录 4.3 检查上传是否正确 5、…

内容共创与UGC:TikTok腰部达人推动品牌海外传播新风向

当今数字营销的新时代&#xff0c;内容共创已成为品牌与用户之间构建深度互动的关键方式。在TikTok上&#xff0c;腰部达人通过UGC等形式&#xff0c;不仅能增强品牌与用户的互动性和参与度&#xff0c;还能够帮助品牌在海外市场上实现声量和知名度的提升。本文Nox聚星将和大家…

嵌入式开发学习日记——认识指针及和数组函数的联系(c语言)

一、指针的定义 一般格式&#xff1a; 数据类型 * 指针变量名 [初始地址值]; 数据类型是指针所指向的地址处的数据类型&#xff0c;如 int、char、float 等。 符号 * 用于通知系统&#xff0c;这里定义的是一个指针变量&#xff0c;通常跟在类型关键字的后面&#xff0c;表示…

从入门到高手的99个Python案例

想掌握Python编程语言&#xff0c;从零基础的小白晋升为大神&#xff1f;没问题&#xff01;接下来我们将以轻松有趣的方式&#xff0c;逐一解锁Python学习路上的99个关键知识点。每一步都将结合实际应用场景、函数功能解析及简洁代码演示&#xff0c;带你深度领略Python的魅力…

为什么火箭回收技术如此重要?——以马斯克的星舰为例

引言 随着人类对太空探索的深入&#xff0c;火箭技术成为了人类通往星辰大海的关键工具。在这个领域&#xff0c;SpaceX 的火箭回收技术近年来取得了重要突破&#xff0c;尤其是其 “筷子夹火箭” 的设计进一步引发了广泛讨论。2024年10月13日&#xff0c;马斯克的第五次星舰试…