使用MediaRecorder进行前置摄像头录制不能顺利进行

问题描述 投票:0回答:1

我有一台运行Android 7.0的华为P9 Plus智能手机。我正在使用MediaRecorder来记录前凸轮。这是一台800万像素的摄像头。我正在使用以下设置(我认为这是最重要的部分,我没有发布整个类,因为它是太多的代码行):

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可以用于800万像素的摄像头吗?

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

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),可能是因为开始视频录制没有成功。为什么?我犯了错误吗?

android android-camera2 android-7.0-nougat android-mediarecorder
1个回答
-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.