使用 MediaRecorder 的前置摄像头录制工作不流畅

Front cam recording using MediaRecorder not working smoothly

我有一部华为 P9 Plus 智能手机 运行ning Android 7.0。我正在使用 MediaRecorder 来录制前置摄像头。这是一个 8 MP 相机。我正在使用以下设置(我认为这是最重要的部分,我没有发布整个 class 因为代码行太多):

mMediaRecorder = new MediaRecorder();
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mMediaRecorder.setOutputFile(videoFile.getAbsolutePath());
mMediaRecorder.setVideoEncodingBitRate(8000000);
mMediaRecorder.setVideoFrameRate(30)
mMediaRecorder.setVideoSize(1024 , 1920)
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaSurface = MediaCodec.createPersistentInputSurface();
mMediaRecorder.setInputSurface(mMediaSurface);
mMediaRecorder.prepare();

使用此设置它可以工作,但有时视频有点不稳定。奇怪的是,视频大小为 1024 x 1920 时它可以工作,但是当我设置 1080 x 1920 时它不再工作(没有错误,但视频完全损坏)。这是为什么?在我从前摄像头特性获得的支持分辨率中,列出了 1080 x 1920,但没有列出 1024 x 1920。

我的其他设置可以吗? setVideoEncodingBitRate 可以用于 8 MP 相机吗?

我也试过使用给定的配置文件如下:

mMediaRecorder = new MediaRecorder();
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFile(videoFile.getAbsolutePath());        
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_1080P));
mMediaRecorder.setVideoFrameRate(30)
mMediaSurface = MediaCodec.createPersistentInputSurface();
mMediaRecorder.setInputSurface(mMediaSurface);
mMediaRecorder.prepare();

当我 运行 以这种方式尝试停止 MediaRecorder 时出现错误(停止失败:-1007),可能是因为开始视频录制没有成功。为什么?我弄错了吗?

当我 运行 以这种方式尝试停止 MediaRecorder 时出现错误(停止失败:-1007),可能是因为开始视频录制没有成功。为什么?我是不是搞错了

你可能是对的。尝试检查或添加 属性(例如布尔值)以确定记录器是否已经启动。在这种情况下,如果尚未启动,您将无法调用停止。