Android录屏的三种解决方案录屏的三种解决方案
本文总结三种用于安卓录屏的解决方案:
adb shell命令screenrecord
MediaRecorder, MediaProjection
MediaProjection , MediaCodec和MediaMuxer
screenrecord命令命令
screenrecord是一个shell命令,支持Android4.4(API level 19)以上,录制的视频格式为mp4 ,存放到手机sd卡里,默认录制时
间为180s
adb shell screenrecord –size 1280*720 –bit-rate 6000000 –time-limit 30 /sdcard/demo.mp4
–size 指定视频分辨率;
–bit-rate 指定视频比特率,默认为4M,该值越小,保存的视频文件越小;
–time-limit 指定录制时长,若设定大于180,命令不会被执行;
MediaRecorder
MediaProjection是Android5.0后才开放的屏幕采集接口,通过系统级服务MediaProjectionManager进行管理。
录屏过程可以分成两个部分,即通过MediaProjectionManage申请录屏权限,用户允许后开始录制屏幕;然后通过
MediaRecorder对音视频数据进行处理。
获取MediaProjectionManager实例
MediaProjectionManager mProjectionManager = (MediaProjectionManager)
getSystemService(“media_projection”);
申请权限
Intent captureIntent = mProjectionManager.createScreenCaptureIntent();
startActivityForResult(captureIntent, LOCAL_REQUEST_CODE);
createScreenCaptureIntent()这个方法会返回一个intent,你可以通过startActivityForResult方法来传递这个intent,为了能开始
屏幕捕捉,activity会提示用户是否允许屏幕捕捉(为了防止开发者做一个木马,来捕获用户私人信息),你可以通过
getMediaProjection来获取屏幕捕捉的结果。
在onActivityResult中获取结果
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
MediaProjection mediaProjection = mProjectionManager.getMediaProjection(resultCode, data);
if (mediaProjection == null) {
Log.e(TAG, "media projection is null");
return;
}
File file = new File("xx.mp4"); //录屏生成文件
mediaRecord = new MediaRecordService(displayWidth, displayHeight, 6000000, 1,
mediaProjection, file.getAbsolutePath());
mediaRecord.start();
}
创建MediaRecorder进程
package com.unionpay.service;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.media.MediaRecorder;
import android.media.projection.MediaProjection;
import android.util.Log;
public class MediaRecordService extends Thread {
private static final String TAG = "MediaRecordService";
private int mWidth;
private int mHeight;
private int mBitRate;
private int mDpi;
private String mDstPath;
private MediaRecorder mMediaRecorder;
评论0