【问题标题】:MediaRecorder showing Camera Preview for Audio RecordingMediaRecorder 显示用于录音的相机预览
【发布时间】:2018-05-03 09:18:58
【问题描述】:

我正在准备一个小型 android 应用程序,用于捕获用户的照片和录音。像用户会用他的相机拍照,然后在查看该照片时添加音频评论。

为了捕捉音频,我使用 MediaRecorder [因为 android 默认录音机将不允许应用在录音完成时显示自定义图像]。当应用程序没有 CAMERA 权限时,MediaRecorder 正在按我的预期工作。用户可以查看自定义屏幕并录制音频。但是,当授予应用程序 MediaRecorder 的 CAMERA 权限时,它会打开本机相机预览,即使我没有为 MediaRecorder 设置视频源。当应用有 CAMERA 权限时,就好像没有摄像头预览就无法录制音频一样。

import static android.Manifest.permission.RECORD_AUDIO;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.Manifest.permission.CAMERA;

mediaRecorder=new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
mediaRecorder.setOutputFile(AudioSavePathInDevice);

我继续尝试使用自定义 Surface 创建 1 像素 * 1 像素的相机预览

mCamera = getCameraInstance();
mPreview = new CameraPreview(getApplicationContext(), mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
mediaRecorder.setCamera(mCamera);
mediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface()); 

但我的 MI 手机忽略并继续进行完整的相机预览。那么有没有一种简单的方法可以在存在相机权限的情况下使用 MediaRecorder 录制音频而无需启动本机相机?

【问题讨论】:

    标签: android audio camera mediarecorder


    【解决方案1】:

    根据我的经验,1x1 像素预览并不可靠,许多设备无法正常使用。在某些设备上,您可以通过巧妙的布局(例如,巨大的左边距)将 SurfaceView 推离屏幕,但在其他设备上则不行。可以在视图层次结构的其他元素下隐藏 SurfaceView,但这并不总是顺利进行,因为框架有时创建 Surface 太晚了(我相信这是某些设备上的错误,不是有意的)。

    使用 TextureView 更安全,如 MediaRecorder official sample。您可以将 TextureView 的可见性设置为 hidden,或者将其隐藏在其他视图后面,并且可以将其设置得非常小。在这里您可以找到更多详细信息:https://stackoverflow.com/a/21447945/192373

    【讨论】:

      猜你喜欢
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多