Android低版本需要实现屏幕录制,据我目前了解到的,都是需要获取Root权限才行。 本文介绍的屏幕录制是居于Android5.0及之后Android API实现的屏幕录制,以及录制后编码成h264格式保存到文件。屏幕采集主要使用类MediaProjection 和 MediaProjectionManager。数据编码使用类mediacodec 一、录屏步骤 1、获取MediaProjectionManager(getSystemService(MEDIA_PROJECTION_SERVICE)) 2、录屏申请(createScreenCaptureIntent) Intent intent = mediaProjectionManager.createScreenCaptureIntent(); startActivityForResult(intent, REQUEST_CODE); 3、申请同意后,获取到mediaProjection(ProjectionManager.getMediaProjection) 4、创建VirtualDisplay(createVirtualDisplay),输入参数surface,宽高、分辨率等 创建VirtualDisplay需要传入surface,所以创建VirtualDisplay前,先初始化并配置编码器mediacodec,从mediacodec获取到surface,参考Encoder 5、如果想实现截一张图保存下来,创建VirtualDisplay时也是传入surface(一般是通过ImageReader获取到surface)
通过步骤5实现屏幕保存bitmap到文件(demo 里的CaptureImageActivity.java)
通过步骤4实现屏幕录制,配合mediacodec实现h264编码,编码保存到文件,文件可以通过ffmpeg播放、查看属性等 (录屏、编码参考demo EncodeActivity.java及Encoder.java)
二、mediacodec实现视频数据编码(h264格式介绍)
1、在VirtualDisplay前创建mediacodec初始化(createEncoderByType),通过configure把编码参数配置好(MediaFormat)
2、通过VirtualDisplay创建后,循环mCodec.dequeueOutputBuffer获取编码器buffer输出index,index可以判断出buffer类型(sps、pps、图像帧),把数据保存到文件里。保存的文件可以使用vlc或者ffmpeg播放验证