我有一个应用程序来录制屏幕视频。在一些设备,例如OnePlus 3t它工作正常,但在其他设备,如三星Galaxy s9,它停止录制后冻结整个应用程序。
这是我初始化录音机的方式:
private void initRecorder() {
mediaRecorder = new MediaRecorder();
mProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss")
.format(new Date());
File storeDirectory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Videos");
if (!storeDirectory.exists()) {
boolean success = storeDirectory.mkdirs();
if (!success) {
Log.e(TAG, "failed to create file storage directory.");
return;
}
}
mediaRecorder.setOutputFile(storeDirectory + "/video" + timeStamp + ".mp4");
mediaRecorder.setVideoSize(screenWidth, screenHeight);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setVideoFrameRate(16);
mediaRecorder.setVideoEncodingBitRate(3000000);
int rotation = getWindowManager().getDefaultDisplay().getRotation();
int orientation = ORIENTATIONS.get(rotation + 90);
mediaRecorder.setOrientationHint(orientation);
mediaRecorder.prepare();
}
单击按钮时会调用start方法。再次单击此按钮时,它会停止记录,并调用以下方法。这就是冻结一切的地方。
private void stopRecording() {
if (virtualDisplay == null) {
return;
}
virtualDisplay.release();
mediaRecorder.stop(); --> freeze
isRecording = false;
}
我还尝试在单独的线程中调用stopRecording()方法。然后它不会冻结,但视频不会保存。它似乎在stop()方法中做了很多东西,永远不会结束。有什么想法吗?