android 10 MediaRecorder录像成mp4文件,视频添加时间水印的实现方法
时间: 2023-11-28 22:47:47 浏览: 244
可以使用以下步骤实现在 Android 10 上使用 MediaRecorder 录制视频并添加时间水印:
1. 首先,创建一个 SurfaceView 以预览摄像头捕获的视频。在 onCreate() 方法中添加以下代码:
```
SurfaceView surfaceView = findViewById(R.id.surface_view);
SurfaceHolder holder = surfaceView.getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 初始化 Camera
initCamera(holder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// 空实现
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 释放资源
releaseCamera();
}
});
```
2. 接下来,初始化 MediaRecorder 并配置它以录制视频。在 initCamera() 方法中添加以下代码:
```
private void initCamera(SurfaceHolder holder) {
try {
camera = Camera.open();
camera.setPreviewDisplay(holder);
camera.setDisplayOrientation(90);
camera.startPreview();
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoSize(640, 480);
mediaRecorder.setVideoFrameRate(30);
mediaRecorder.setVideoEncodingBitRate(3 * 1024 * 1024);
mediaRecorder.setOrientationHint(90);
// 设置输出文件
String filePath = getExternalFilesDir(null).getAbsolutePath() + "/video.mp4";
File file = new File(filePath);
if (file.exists()) {
file.delete();
}
mediaRecorder.setOutputFile(filePath);
// 准备录制
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
```
3. 开始录制视频。在 startRecording() 方法中添加以下代码:
```
private void startRecording() {
if (mediaRecorder != null) {
try {
// 开始录制
mediaRecorder.start();
// 显示时间水印
startTimer();
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
```
4. 实现时间水印。在 startTimer() 方法中添加以下代码:
```
private void startTimer() {
final TextView textView = findViewById(R.id.time_stamp);
textView.setVisibility(View.VISIBLE);
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
textView.setText(simpleDateFormat.format(new Date()));
}
});
}
}, 0, 1000);
}
```
5. 停止录制视频。在 stopRecording() 方法中添加以下代码:
```
private void stopRecording() {
if (mediaRecorder != null) {
try {
// 停止录制
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
// 停止时间水印
stopTimer();
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
```
6. 停止时间水印。在 stopTimer() 方法中添加以下代码:
```
private void stopTimer() {
TextView textView = findViewById(R.id.time_stamp);
textView.setVisibility(View.GONE);
if (timer != null) {
timer.cancel();
timer = null;
}
}
```
最后,在 AndroidManifest.xml 文件中添加以下权限:
```
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
```
完成后,你的应用程序现在可以在 Android 10 上使用 MediaRecorder 录制视频并添加时间水印。
阅读全文