武汉一直笼罩在新冠状病毒的疫情中,我不喜欢在朋友圈拿疫情去炒作,但我知道,如果真的智能AI智能识别,智能机器人,自动驾驶,远程分级诊疗等热门技术如果只要有一样能够落地能够应用,武汉的疫情不会如此被动。所以一切不以应用为目的的技术炒作都是耍流氓。

待在家里无法出门,解决了食物的储备后,无聊至极,于是想着干脆开发GB28181的客户端手机版APP以度过闲暇时光。下面开始言归正传。

我有过做android解码器的经历,那是在上家公司,当时从0开始,那是android版本主流是4.4.2,刚开始用ffmpeg解码,opengles显示渲染,音频用opensl,native c++实现,后来要多路解码,支持H265解码,使用硬解。公司做军品,硬件固定型号,为了追求低延时直接从源码上修改了编译,基本是针对指定硬件的方案,兼容性差。

而本次GB28181移动客户端的开发,解码和渲染是少不了的。对于这种手机APP,我首先考虑的是性能和兼容性。而且现在手机版本都到android 10了,所以兼容性十分重要。

GB28181协议这一块因为之前PC客户端已实现,基于esosip和osp库,用c++开发的,所以直接移植到android版即可,在android上关键需要实现解码和音视频的渲染播放。

当然我们还是得选择硬解码,android如果硬解码和渲染是一个管线式的流程,可以理解为通过解码后数据块在GPU的显存,通过指针直接丢向ANativeWindow显示,ANativeWindow是natvie c++层的对象,其实它与android java层的surfaceview是关联的,通过如下代码:

private SurfaceView  sfvideoview;
SurfaceHolder sfholder;
long     natviewindow = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);sfvideoview = (SurfaceView) findViewById(R.id.videoView);sfholder = sfvideoview.getHolder();sfholder.addCallback(new SurfaceHolder.Callback(){@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}public void surfaceCreated(SurfaceHolder holder) {if(natviewindow == 0)natviewindow = GbtClientJni.gbtclient_createnativewindow                       (sfholder.getSurface());}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format,int width, int height) {}});}    

GbtClientJni.gbtclient_createnativewindow函数就是传的surfaceview的surface,该函数必须在surfaceCreated中,因为该函数属于在glrender线程中,渲染相关流程必须要oepngles的rander线程中。我们把surface传入到native层,通过ANativeWindow_fromSurface函数可以得到ANativeWindow,而在底层,ANativeWindow就是渲染解码数据的载体。

ANativeWindow  *anw = NULL;
anw = ANativeWindow_fromSurface(env, jsurface);

这样就完成了视频渲染的上下层衔接。

对于目前android音频的播放,好像还是两种方案,audiotrack和opensl,我依然选择使用opensl,因为audiotrack靠近底层了,担心其兼容性。对于接口都很简单,无非都是回调函数,然后往里面塞数据。首先取出解码后的音频数据,可以用ffmpeg解码,然后调用opensl的接口:

SLresult result = (*bq)->Enqueue(bq, m_pAudioBuffer, m_nAudioBufferConsumed);

基于有PC版GB28181客户端的基础,解决了移动端设备相关的差异性后,GB28181移动客户端就开发完毕了,如下图:

更多信息

e-mail: yujesoft@163.com

tel: 13971177602

web:www.founu.com

用android实现GB28181监控客户端app相关推荐

  1. android 应用性能监控软件,App性能监控工具,卡顿

    (609条消息) android 应用性能监控软件,App性能监控工具_weixin_39940154的博客-CSDN博客 APP性能监测的各种工具 - ClareBaby01 - 博客园 (cnbl ...

  2. android 应用性能监控软件,App性能监控工具

    Android的性能监控工具,之前已经介绍了Android monitor/DDMS,其他的Android App性能监控工具也能在某些测试需要的时候提供帮助. Android App性能监控工具介绍 ...

  3. 基于安卓Android手机微博系统客户端app

    本Android微博平台app包含有手机端(客户端)和电脑端(服务端),服务端开发环境是eclipse,客户端开发环境是Android eclipse ADT. 这个毕业设计题目不同于其他的题目,其他 ...

  4. 基于android的手机微博客户端app

    回到当今,在互联网的基础上促进人类沟通的大功臣要属日渐成熟地.多样的,各类聊天类.社交类.新闻类的app了.在国外的FaceBook的兴起,受到当地人强烈的追捧,因此,在国内,出现了微博.微博的意思就 ...

  5. Android手机实时视频监控

    最近手机安装了一个"千里眼"和千里眼家居远程监控的应用,对里面的实时监控交通路口的状态有点好奇.以是使用相应的方法反编译看看她的原理. 对于软件"千里眼",经过 ...

  6. 视频监控安卓App客户端--Mjpg-streamer推流的播放

    概述: 视频监控安卓App客户端其开发环境是Android Stdio.该软件实现了门禁系统的实时监控的视频的移动端的查看.该软件的设计较为简洁,采用两个文本输入框用于输入嵌入式Linux端服务器的I ...

  7. 视频监控客户端-GB28181之转码库-转码格式支持H265、H264、MPEG4、MPEG2

    视频监控客户端-GB28181之转码库-转码格式支持H265.H264.MPEG4.MPEG2 如需交流可联系QQ:123011785 转码库的基本内容是通过ffmepg的函数进行转码,主要针对市面上 ...

  8. java安卓怎么开发一个新闻app,一个基于Android系统的新闻客户端(一)

    一个基于Android系统的新闻客户端(一) 一.整体概述 在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻. 服务端用WCF,宿主为window服务,客户端为Java写的 ...

  9. 至简微博Android客户端APP开发以及源码

    前言 至简微博客户端APP根据微博开放品台API获取微博内容,UI展示 主要功能点: 好友微博列表 公共微博列表 微博详情 用户个人信息 微博个人信息 微博评论列表 每日一图 粉丝列表 关注列表 关注 ...

最新文章

  1. python的优缺点有哪些-python的优缺点有哪些
  2. python 求一个矩阵的距离矩阵的方法:
  3. java socket gui登录_java的socket服务端的GUI
  4. 关于JPQL UPDATE 语句的 一点体会
  5. 菜鸟学习数据科学家 5 大误区
  6. 关于application title一直是untitled的问题
  7. 使用thinkphp搞了一个简单的三级分销
  8. Time Limit Exceeded的原因及避免方法
  9. 阿里云赵明山:详解灵活可插拔的渐进式发布框架OpenKruise Rollout
  10. 利用依存分析完成开放领域关系抽取
  11. 丈母娘刚需支撑中国经济
  12. ViveInputUtility-手柄触摸3D物体(6)
  13. go语言 func函数
  14. openpyxl中的load_workbook()函数
  15. python byte 和 list[int]互转(byte to list,list to byte,byte to int)
  16. 101.为什么我们要学习理论课程?为什么要学习软件工程?(建议在校生必读)
  17. Java数据结构第五版期末考试_数据结构(java)期末复习
  18. Tomcat launch tomcat using security manager
  19. 扒一扒坑人的“微信支付”SDK开发文档
  20. 安装完CentOS 7 后必做的七件事

热门文章

  1. 精睿 ESS EAV 【中文商业特别版+纯净版-官方升级】【2.11更新3.0.685.0】
  2. 解析器生成器 ANTLR的详细介绍
  3. 【XSY2564】sequence(dp)
  4. iOS 九年,技术迭代迅捷下如何保持核心竞争力?
  5. kms工具(2021.7.24更新)
  6. Mac触控板设置以及使用
  7. 你可和差拨便去那里 视频转换软件
  8. NO7.const和volatile
  9. 欧拉折线法解常微分方程C语言,第五章:常微分方程数值解法第一节欧拉法
  10. linux基础 linux命令跟踪 strace命令