Android录屏单帧获取方案
没啥好说的,还是公司需求,需要直播手机上的画面,麻烦的是目前的产品线都只支持单帧数据编解码,那Android的硬编,只能pass了。老实说离开了硬编码,手机变暖手宝是跑不了了,胜在兼容性强,好在对帧数没有高要求,勉强能看就行,硬着头皮写吧
MediaProjection
MediaProjection是由Android5.0开始提供的录屏方案,不再需要root支持,貌似录屏直播也只能选择这也一种方案了,其余的要么需要root,要么得连接电脑借助adb,与需求相悖。
请求录屏
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void getMediaProjection(Activity activity) {
mMediaProjectionManager = (MediaProjectionManager) activity.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
if (null == mMediaProjectionManager) {
//TODO 错误处理
return;
}
activity.startActivityForResult(mMediaProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);
}
首先需要发起录屏请求,可以看到这里启动了一个acitivity以获取相关权限,类似6.0以后获取权限的方式,屏幕将会弹出一个窗口要求用户授权,早期这里有个系统安全问题,可以将申请权限的文字描述挤到框外以实现不被用户察觉的情况下后台录屏,当然已经被谷歌修复了。
发起录屏
请求权限之后我们就可以拿到MediaProjectionManager的实例了,然后用它来发起录屏即可,这里的步骤为了保证线程安全,我是在子线程中进行的,之后所有的操作都在子线程执行。
case StartRecord: //开始录屏
if (null == mMediaProjection) break;
//最少2张
mImageReader = ImageReader.newInstance