使用MediaRecorder的前摄像头录制无法正常工作

时间:2019-02-14 23:17:52

标签: android android-camera2 android-7.0-nougat android-mediarecorder

我有一台运行Android 7.0的Huawei P9 Plus智能手机。我正在使用MediaRecorder来记录前凸轮。这是一个8 MP相机。我正在使用以下设置(我认为这是最重要的部分,因为代码太多,所以我不会发布整个类):

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 x1920。

我的其他设置还可以吗? 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)时出现错误,可能是因为开始视频录制失败。为什么?我做错了吗?

1 个答案:

答案 0 :(得分:-1)

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

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