Android录屏单帧获取方案

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
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值