MediaRecorder类介绍:
MediaRecorder类是Android sdk提供的一个专门用于音视频录制,一般利用手机麦克风采集音频,摄像头采集图片信息。
Android录屏的三种方案
1、adb shell命令screenrecord
2、MediaRecorder, MediaProjection
3、MediaCodec和MediaMuxer, MediaProjection ,
一、screenrecord命令
screenrecord是一个shell命令,支持Android4.4(API level 19)以上,
录制的视频格式为mp4 ,存放到手机sd卡里,默认录制时间为180s
adb shell screenrecord --size 1280x720 --bit-rate 6000000 --time-limit 30 /sdcard/demo.mp4
--size 指定视频分辨率,根据手机情况决定
--bit-rate 指定视频比特率,默认为4M,该值越小,保存的视频文件越小;
--time-limit 指定录制时长,若设定大于180,命令不会被执行;
并不是所以手机都执行screenrecord命令,部分手机不识别。
我在几款华为手机就没执行成功报错:
/system/bin/sh: screenrecord: inaccessible or not found
二、 MediaRecorder
MediaProjection是Android5.0后才开放的屏幕采集接口,通过系统级服务MediaProjectionManager进行管理。
这里先整体说一下屏幕录制的流程,不然看起来费劲。
1、通过startActivityForResult(Intent intent)判断是否录屏授权的Activity
其中intent对象就需要MediaProjectionManager.createScreenCaptureIntent();获取
2、在onActivityResult回调方法中做具体录屏工作
比如:创建MediaRecorder,设置MP4文件路径
创建VirtualDisplay,设置屏幕相关参数
如果不在onActivityResult回调中执行会有问题。
3、开始录屏
MediaRecorder.start()
4、停止录屏
MediaRecorder.reset();
MediaRecorder.release();
录屏过程用到录音权限和数据读写权限。
三、MediaCodec和MediaMuxer
MediaCodec提供对音视频压缩编码和解码功能,MediaMuxer可以将音视频混合生成多媒体文件,生成MP4文件。
这个录屏的方式和MediaRecorder是类似的,只是流程第二部有点不同,这里不做介绍。
四、MediaRecorder项目示例的主要代码
这里只做了录制和停止录制,没有做相关适配,比如横竖屏切换后尺寸变化。
简单效果:
生成的MP4文件会在sdcard目录下,并且以录屏时间为文件名。
1、MainActivity
package com.liwenzhi.screen;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
p