java - Media Recorder 在 Android 中启动失败,用于三星 Galaxy s3 的前置摄像头

标签 java android camera

我正在开发视频录制应用程序,我想在其中显示预览,当用户单击录制按钮时它开始录制,当用户单击停止按钮时它停止录制。

我得到了摄像头预览,并且后置摄像头的录制工作正常。

但是当我将摄像头翻转到前置摄像头并开始录制时,会出现如下错误:

FATAL EXCEPTION: main java.lang.RuntimeException: start failed. 
        at android.media.MediaRecorder.start(Native Method) at 
        com.opkix.app.fragments.CameraFragment.startRecording(
                                             CameraFragment.java:104)

这是我录制视频的代码:

private boolean prepareMediaRecorder() {
    // set the orientation here to enable portrait recording.

    mediaRecorder = new MediaRecorder();

    mCamera.unlock();

    mediaRecorder.setCamera(mCamera);

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));


    mediaRecorder.setOutputFile(StorageUtils.getOutputMediaFilePath());
    mediaRecorder.setMaxDuration(120000); // Set max duration 60 sec.
    mediaRecorder.setMaxFileSize(100000000); // Set max file size 50Mb

    mediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
    try {
        mediaRecorder.prepare();
    } catch (IllegalStateException e) {
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        releaseMediaRecorder();
        return false;
    }
    return true;

}

谁能提出解决方案?

最佳答案

现在,我也在开发视频录制应用程序。请有一次在其他设备上运行您的代码。我也与您分享我的代码。其中一些代码是我的应用程序相关代码。如果您不这样做,请将其删除'需要那个。

我的代码:

private boolean prepareVideoRecorder() {
    mRecorder = new MediaRecorder();

    // Both are required for Portrait Video
    mCamera.setDisplayOrientation(90);
    if (mCameraId == CAMERA_FACING_FRONT) {
        mRecorder.setOrientationHint(270);
    } else {
        mRecorder.setOrientationHint(90);
    }

    // Step 1: Unlock and set camera to MediaRecorder
    mCamera.unlock();
    mRecorder.setCamera(mCamera);

    // Step 2: Set sources
    mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    mRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);

    // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
    mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_480P));

    // Step 4: Set output file
    final File folder;
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        folder = new File(Environment.getExternalStorageDirectory() + "/CameraApp/Videos");
    } else {
        folder = new File(Environment.getExternalStorageDirectory() + "/CameraApp/Videos");
    }

    boolean success = true;
    File videoFile;
    if (!folder.exists()) {
        success = folder.mkdirs();
    }
    if (success) {
        videoFile = new File(folder.getAbsolutePath() + File.separator + getFileNameCustomFormat() + " " + ".mp4");

        SavedVideoPath = getFileNameCustomFormat() + " " + ".mp4";
        Log.e("Video Path - ", SavedVideoPath);
    } else {
        Toast.makeText(getBaseContext(), "Video Not saved", Toast.LENGTH_SHORT).show();
        return true;
    }
    mRecorder.setOutputFile(String.valueOf(videoFile));

    // mRecorder.setVideoSize(mPreviewWidth, mPreviewHeight);

    // Step 5: Set the preview output
    mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

    // Step 6: Prepare configured MediaRecorder
    try {
        mRecorder.prepare();
    } catch (IllegalStateException e) {
        Toast.makeText(getApplicationContext(), "prepareVideoRecorder() Exception: " + e.getMessage(), Toast.LENGTH_LONG).show();
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        Toast.makeText(getApplicationContext(), "prepareVideoRecorder() Exception: " + e.getMessage(), Toast.LENGTH_LONG).show();
        releaseMediaRecorder();
        return false;
    }
    return true;
}

让我知道发生了什么。?在尝试我的代码之后。 希望这会有所帮助:

关于java - Media Recorder 在 Android 中启动失败,用于三星 Galaxy s3 的前置摄像头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560697/

相关文章:

java - swt中如何显示15秒的进度条

java - 如何实现 Java 8 接口(interface)但在 Java 6 上运行?

android - 如何在 Android init.rc 中读取和运行条件语句

android - Android Cordova构建问题

opengl - 眼空间坐标到底是什么?

java - 当字符串不可变时,为什么 System.out.println(s.concat ("some string"));返回改变后的值

java - 尝试从 jcalendar 获取日期时出现 DateTimeParseException

java - fatal error - CursorIndexOutOf BoundsException :Index 0 requested ,,大小为 0

image-processing - 成像插值 - 创建中间图像?

ios - Objective C - 来自相机的图像设置在 UIButton 上