之前发布过一行代码实现安卓屏幕采集编码,并介绍了如何屏幕采集编码并进行了封装,简单的调用即可实现MediaProjection权限申请、H264硬编码、错误处理等功能。本文将介绍新增的功能,还是只需一行代码即可实现屏幕、声音采集。
一行代码实现屏幕采集编码
之前的文章,我们已经介绍过如何一行代码实现安卓屏幕采集编码,这里再次简单介绍一下
ScreenShareKit.init(this).onH264({
buffer, isKeyFrame, w, h, ts ->
//获取编码后的屏幕内容数据
}).onStart({
//用户同意采集,开始采集数据
}).start()
通过这段代码,我们可以实现MediaProjection权限申请、H264硬编码、错误处理等功能。同时,我们也新增了一个onStart回调,会在用户同意屏幕采集后回调该方法,更加方便的处理业务。
增加全局屏幕旋转监测
在之前版本中,屏幕旋转,会导致画面变形,宽高错乱。本次更新中,屏幕旋转监测是通过反射监听IRotationWatcher来实现的。IRotationWatcher是一个AIDL接口,它定义了一个旋转监测器,用于监测屏幕旋转事件。在ScreenShare库中,我们通过反射获取IRotationWatcher对象,并注册一个IRotationWatcher.Stub实例来监听屏幕旋转事件。当屏幕旋转时,该Stub实例会收到回调,并根据旋转角度重置编码器,更改宽高,以保证屏幕方向正确。这里不是简单判断设备是否旋转,而是判断屏幕内容或者其他app布局是否旋转。然后重置编码器,更改宽高。始终保持方向正确。
参考:scrcpy
增加RGBA数据回调
由于And