武汉一直笼罩在新冠状病毒的疫情中,我不喜欢在朋友圈拿疫情去炒作,但我知道,如果真的智能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;
@Override
protected void

最低0.47元/天 解锁文章
1871





