Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在视频录制预览中保持纵横比_Android_Mediarecorder - Fatal编程技术网

Android 在视频录制预览中保持纵横比

Android 在视频录制预览中保持纵横比,android,mediarecorder,Android,Mediarecorder,我正在录制我的android项目的视频。 我使用它来配置MediaRecorder private boolean prepareVideoRecorder(){ // BEGIN_INCLUDE (configure_preview) mCamera = CameraHelper.getDefaultCameraInstance(); // We need to make sure that our preview and recording video size a

我正在录制我的android项目的视频。 我使用它来配置MediaRecorder

private boolean prepareVideoRecorder(){

    // BEGIN_INCLUDE (configure_preview)
    mCamera = CameraHelper.getDefaultCameraInstance();
    // We need to make sure that our preview and recording video size are supported by the
    // camera. Query camera to find all the sizes and choose the optimal size given the
    // dimensions of our preview surface.
    Camera.Parameters parameters = mCamera.getParameters();
    List<Camera.Size> mSupportedPreviewSizes = parameters.getSupportedPreviewSizes();
    Camera.Size optimalSize = CameraHelper.getOptimalPreviewSize(mSupportedPreviewSizes,
            mSurfaceView.getWidth(), mSurfaceView.getHeight());

    // Use the same size for recording profile.
    CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
    profile.videoFrameWidth = optimalSize.width;
    profile.videoFrameHeight = optimalSize.height;

    // likewise for the camera object itself.
    parameters.setPreviewSize(profile.videoFrameWidth, profile.videoFrameHeight);
    mCamera.setParameters(parameters);
    try {
        // Requires API level 11+, For backward compatibility use {@link setPreviewDisplay}
        // with {@link SurfaceView}
        mCamera.setPreviewDisplay(mSurfaceView.getHolder());
        mCamera.setDisplayOrientation(90);

    } catch (IOException e) {
        Log.e(TAG, "Surface texture is unavailable or unsuitable" + e.getMessage());
        return false;
    }
    // END_INCLUDE (configure_preview)


    // BEGIN_INCLUDE (configure_media_recorder)
    mMediaRecorder = new MediaRecorder();

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

    // Step 2: Set sources
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC );
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

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

    // Step 4: Set output file
    String path  = getVideoFile(MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO).getAbsolutePath();
    currentFile = path;
    mMediaRecorder.setOutputFile(path);
    mMediaRecorder.setOrientationHint(270);

    // END_INCLUDE (configure_media_recorder)

    // Step 5: Prepare configured MediaRecorder
    try {
        mMediaRecorder.prepare();
    } catch (IllegalStateException e) {
        Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
        releaseMediaRecorder();
        return false;
    }
    return true;
}
private boolean prepareVideoRecorder(){
//开始包含(配置预览)
mCamera=CameraHelper.getDefaultCameraInstance();
//我们需要确保我们的预览和录制视频大小得到
//摄像头。查询摄像头以查找所有尺寸,并选择给定的最佳尺寸
//预览曲面的尺寸。
Camera.Parameters=mCamera.getParameters();
List mSupportedPreviewSizes=参数。getSupportedPreviewSizes();
Camera.Size optimizesize=CameraHelper.getoptimizepreviewsize(mSupportedPreviewSizes,
mSurfaceView.getWidth(),mSurfaceView.getHeight();
//使用相同的大小录制配置文件。
CamcorderProfile profile=CamcorderProfile.get(CamcorderProfile.QUALITY\u HIGH);
profile.videoFrameWidth=最佳尺寸.width;
profile.videoFrameHeight=最佳尺寸.height;
//对于摄影机对象本身也是如此。
parameters.setPreviewSize(profile.videoFrameWidth、profile.videoFrameHeight);
mCamera.setParameters(参数);
试一试{
//需要API级别11+,为了向后兼容,请使用{@link setPreviewDisplay}
//使用{@link SurfaceView}
setPreviewDisplay(mSurfaceView.getHolder());
mCamera.setDisplayOrientation(90);
}捕获(IOE异常){
Log.e(标记“表面纹理不可用或不合适”+e.getMessage());
返回false;
}
//结束包含(配置预览)
//开始包括(配置媒体记录器)
mMediaRecorder=新的MediaRecorder();
//步骤1:解锁摄像头并将其设置为MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
//步骤2:设置源
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//步骤3:设置摄像机配置文件(需要API级别8或更高)
mMediaRecorder.setProfile(配置文件);
//步骤4:设置输出文件
字符串路径=getVideoFile(MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO).getAbsolutePath();
currentFile=路径;
mMediaRecorder.setOutputFile(路径);
mMediaRecorder.setOrientationHint(270);
//结束\u包括(配置\u媒体\u记录器)
//步骤5:准备已配置的MediaRecorder
试一试{
mMediaRecorder.prepare();
}捕获(非法状态){
Log.d(标记“IllegalStateException准备MediaRecorder:”+e.getMessage());
释放MediaRecorder();
返回false;
}捕获(IOE异常){
Log.d(标记“IOException准备MediaRecorder:+e.getMessage());
释放MediaRecorder();
返回false;
}
返回true;
}
在我的xaml中,我有一个SurfaceView

... <RelativeLayout
    android:id="@+id/videoSurfaceParent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/carouselBar"
    android:background="@android:color/black"
    android:visibility="invisible">
    <SurfaceView
        android:id="@+id/videoSurface"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:visibility="invisible">
    </SurfaceView>
</RelativeLayout>...
。。。
...
我的问题是,当我录制视频时,预览被拉伸,人们看起来像是很胖

有没有办法保持纵横比?
我用的是前置摄像头