mediarecord录屏
时间: 2023-10-26 10:05:34 浏览: 27
MediaRecorder 是 Android 平台上的一个类,可以用来录制音视频,包括屏幕录制。以下是使用 MediaRecorder 实现屏幕录制的基本步骤:
1. 获取屏幕的尺寸和密度信息。
```
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenWidth = metrics.widthPixels;
int screenHeight = metrics.heightPixels;
int screenDensity = metrics.densityDpi;
```
2. 创建一个 MediaRecorder 对象,并设置音频和视频来源、编码格式、输出格式、输出路径等参数。
```
MediaRecorder recorder = new MediaRecorder();
recorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setVideoEncodingBitRate(5 * 1024 * 1024);
recorder.setVideoFrameRate(30);
recorder.setVideoSize(screenWidth, screenHeight);
recorder.setAudioChannels(1);
recorder.setAudioEncodingBitRate(128 * 1024);
recorder.setAudioSamplingRate(44100);
recorder.setOutputFile(outputFilePath);
```
3. 创建一个 MediaProjection 对象,并使用它创建一个 Surface 对象。
```
MediaProjectionManager projectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
Intent intent = projectionManager.createScreenCaptureIntent();
startActivityForResult(intent, REQUEST_CODE_SCREEN_CAPTURE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_SCREEN_CAPTURE && resultCode == RESULT_OK) {
MediaProjection projection = projectionManager.getMediaProjection(resultCode, data);
Surface surface = recorder.getSurface();
projection.createVirtualDisplay("ScreenCapture", screenWidth, screenHeight, screenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null);
recorder.prepare();
recorder.start();
}
}
```
4. 在录制完成后,调用 MediaRecorder 的 stop() 和 release() 方法释放资源。
```
recorder.stop();
recorder.release();
```
需要注意的是,屏幕录制需要获取系统级别的权限,因此需要在 AndroidManifest.xml 文件中添加 RECORD_AUDIO 和 RECORD_VIDEO 权限,并且在运行时需要动态获取屏幕录制权限。