无法为媒体记录器设置视频质量.视频会产生闪烁的视频

Jig*_*ain 5 android surfaceholder android-mediarecorder

mMediaRecorder = new MediaRecorder();
    // Step 1: Unlock and set camera to MediaRecorder
    mCamera.unlock();
    mMediaRecorder.setCamera(mCamera);
    // Step 2: Set sources
    // activate this for recording with sound\

    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

    mMediaRecorder.setVideoSize(getMaxSupportedVideoSize().width,getMaxSupportedVideoSize().height);

    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    // Step 4: Set output file
    mMediaRecorder.setOutputFile(getOutputMediaFile("movie"));

    // Step 4: Set output file
    mMediaRecorder.setOutputFile(getOutputMediaFile("movie"));


    // Step 5: Set the preview output
    mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());

    mMediaRecorder.setOrientationHint(90);
Run Code Online (Sandbox Code Playgroud)

以上代码工作正常但是,视频的质量与我在本机安卓摄像头拍摄的视频不一样,我使用媒体录像机录制的视频质量较差,与原生录像机相比,我怎样才能提高视频质量.

如果有人知道帮助我.谢谢

wis*_*lon 3

我不是 Java/Android 开发人员,我使用 Xamarin 和 C#,但我遇到了很多相同的问题,我的解决方案应该直接适用(即使语法几乎相同)。

我发现,如果您正在使用setCamera(并且在启动 mediaRecorder 之前预览相机看到的内容),那么它不会让您更改mediaRecorder.

然后,当您调用 时mediaRecorder.start(),它要么崩溃,要么冻结,要么显示垃圾。

基本上,只要相机正在预览,就不允许 MediaRecorder 以与相机已有质量不同的质量开始录制。你需要

  1. 停止相机预览,
  2. 拿走它的预览表面
  3. 将相机分配给 MediaRecorder(使用setCamera
  4. 根据您需要的质量设置 MediaRecorder
  5. 然后重新附加预览表面

然后当您开始录制时,一切都会按预期进行。

因此,就您的情况而言,在致电 之前mediaRecorder.setCamera(),请尝试以下操作:

mCamera.stopPreview(); mCamera.setPreviewDisplay(null);

然后再往下,做你的

mRecorder.setCamera()

这就是我的解决方案。我现在可以将视频质量设置为 720p(或 1080p),效果完美。

但是,当您停止录制时,预览也会停止。

您可能需要恢复您的

mCamera.setPreviewDisplay(mPreview.getHolder().getSurface())

恢复到之前的状态,然后重新启动实际预览。

我希望它也适合你:)