录制surfaceview内容
时间: 2023-10-13 21:05:17 浏览: 50
要录制SurfaceView的内容,可以使用MediaRecorder类。下面是一个简单的例子:
```java
public class MainActivity extends AppCompatActivity {
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private Camera camera;
private MediaRecorder mediaRecorder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
Camera.Parameters params = camera.getParameters();
camera.setParameters(params);
camera.setDisplayOrientation(90);
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
}
});
// 初始化MediaRecorder
mediaRecorder = new MediaRecorder();
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mediaRecorder.setVideoSize(640, 480);
mediaRecorder.setVideoFrameRate(30);
mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory().getPath() + "/test.mp4");
}
public void startRecording(View view) {
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
public void stopRecording(View view) {
mediaRecorder.stop();
mediaRecorder.reset();
}
}
```
在这个例子中,我们使用了Android自带的Camera类来获取SurfaceView的预览画面。然后,我们使用MediaRecorder类来录制视频。在startRecording方法中,我们调用mediaRecorder.prepare()和mediaRecorder.start()来开始录制视频。在stopRecording方法中,我们调用mediaRecorder.stop()来停止录制。最后,我们把录制好的视频保存在SD卡的根目录下,文件名为test.mp4。
需要注意的是,在Android 6.0及以上的版本中,需要动态获取录音和存储权限。可以参考官方文档:https://developer.android.com/training/permissions/requesting.html