技术背景
我们知道,Android平台不管RTMP推送、轻量级RTSP服务模块还是GB28181设备接入模块,早期,如果需要实现截图功能,又不想依赖Android系统接口,最好的办法是,在底层实现快照截图。
快照截图,实际上我们2016年就支持了,不过,需要在RTMP推送、轻量级RTSP服务发布RTSP流、开启实时录像或GB28181设备接入侧已经在传数据的时候,有数据下去,才可以实现截图快照。
本次,我们要实现的是,上述条件不满足的情况下,如何让大牛直播SDK的底层模块(libSmartPublisher.so)实时截图。
技术实现
本文以大牛直播SDK的Camera2Demo为例,废话不多说,上方案:
这里,我们专门封装了 SnapShotImpl.java
init_sdk_instance()实现:
capture()实现:
对应的CaptureImge()封装如下:
模块头文件SmartPublisherJniV2.java接口设计如下:
最外层MainActivity.java调用示例如下:
记得投递数据,让有截图快照的数据源传递到底层模块:
onDestroy()的时候,记得停掉,并释放资源:
总结
市面上,咱们能看到的实时截图快照,大多是要么直接基于Android系统接口实现,要么只能在RTMP推送、实时录像、轻量级RTSP服务发布流数据、GB28181设备接入侧回传音视频数据的时候才可以用,如果想要更灵活的处理快照数据,特别是,实现GB/T28181-2022关于快照的技术规范诉求,灵活的快照模式,需要底层模块设计的非常灵活才行,以上是Android平台推送端实时快照的大概设计逻辑,感兴趣的开发者,可以单独跟我沟通讨论。