【问题标题】:Android Camera Capture ResolutionAndroid 相机拍摄分辨率
【发布时间】:2018-05-11 11:57:44
【问题描述】:

我使用前置摄像头捕捉用户在使用应用程序时的动作。我会将视频保存到设备中。我将使用VideoView 播放视频。我看到相机预览的(FrameLayout) 分辨率是正确的(480 x 640)。但我在VideoView 上播放分辨率更改为(176 x 144)。现在我看到视频视图太小了。我已经设置了setPictureSize。但也行不通。

当我在设备中使用Camera 应用程序时,我使用前置摄像头拍摄了一些东西。它的分辨率是 480 x 640。我设置的东西有问题吗?请帮忙。谢谢

for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
Camera.CameraInfo newInfo = new Camera.CameraInfo();
Camera.getCameraInfo(i, newInfo);

if (newInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
    mCamera = Camera.open(i); // attempt to get a Camera instance
    Camera.Parameters parameters = mCamera.getParameters();
    parameters.set("orientation", "portrait");
    mCamera.setParameters(parameters);
    mCamera.setDisplayOrientation(90);
    if (cameraDelegate != null)
        cameraDelegate.OnCameramCreated();
    }
}


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

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

    // Step 2: Set sources
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

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

    mVideoPath = getOutputMediaFile(MEDIA_TYPE_VIDEO).toString();

    // Step 4: Set output file
    mMediaRecorder.setOutputFile(mVideoPath);

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

    // Step 6: Prepare configured MediaRecorder
    try {
        mMediaRecorder.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
        Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        e.printStackTrace();
        Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
        releaseMediaRecorder();
        return false;
    }

    return true;
}

【问题讨论】:

    标签: java android camera android-videoview


    【解决方案1】:

    Camera 的预览大小与MediaRecorder 的视频大小不同。您必须将视频大小指定为MediaRecorder

    mMediaRecorder.setVideoSize(960, 640);
    

    但要注意不是所有尺寸都支持,支持的尺寸由相机硬件决定,见Camera.Parameters#getSupportedVideoSizes()

    MediaRecord.setProfile() 是一种更好的配置视频输出格式的方法,有一些预定义的CamcorderProfiles 包含有关output formatframe ratevideo sizeencoding bitrate 等的设置。你应该给它试一试。

    【讨论】:

    • 感谢您的回复。我只是尝试设置视频大小。但我遇到了崩溃。 java.lang.RuntimeException: start failed. 我无法获得getSupportedVideoSizes()。它返回 null。
    • 如果 getSupportedVideoSizes() 返回 null,则使用 getSupportedPreviewSizes() 中的大小。我想您的尺寸不在列表中,请确认宽度和高度的使用顺序正确。
    • 我也用getSupportedPreviewSize来设置videoSize?
    • 是的,文档说:getSupportedVideoSizes() 如果相机有单独的预览和视频输出,则返回一个 Size 对象列表;否则,返回 null。这意味着如果Camera.getSupportedVideoSizes()返回null,那么相机支持的预览尺寸和视频尺寸是一样的。
    • 我想问另一个关于相机的问题。我只是设置大小宽度是640高度是480。视频大小已经改变。但是我不知道为什么当我在VideoView 上显示视频时,我看到视频旋转不正确。我更喜欢视频视图是Portrait。但我看到的观点是landscape
    猜你喜欢
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多