【问题标题】:Recording darkens preview and ratios录制会使预览和比率变暗
【发布时间】:2017-09-11 21:05:57
【问题描述】:

这是用 NativeScript 编码的,所以我会尽力使场景适应 Java。我创建了一个支持录制视频的应用内视频视图。

按如下方式完成:

首先我创建一个SurfaceView 来保存相机的预览:

this.mSurfaceView = new android.view.SurfaceView(this._context);
this.mHolder = this.mSurfaceView.getHolder(); 
this.mHolder.setType(android.view.SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

然后我创建一个Camera 的实例,并设置视频表面:

var mCamera = android.hardware.Camera;
var camera = mCamera.open(1);   
this.camera = camera;
this.camera.setDisplayOrientation(90);
var parameters = camera.getParameters();
parameters.setRecordingHint(true);
if( parameters.isVideoStabilizationSupported() ){
    parameters.setVideoStabilization(true);
}
camera.setParameters(parameters);
this.camera.setPreviewDisplay(_this.mHolder);
this.camera.startPreview();
this.camera.startFaceDetection();         

现在,一切都很好。我在我想要的视图中有相机预览。颜色很好,我认为图像的纵横比也很好。

但是,当我开始录制时,就像我使用以下代码一样:

this.mediarecorder = new android.media.MediaRecorder();        
// Step 1: Unlock and set camera to MediaRecorder
this.camera.unlock();
this.mediarecorder.setCamera(this.camera);

// Step 2: Set sources
this.mediarecorder.setAudioSource(android.media.MediaRecorder.AudioSource.CAMCORDER);
this.mediarecorder.setVideoSource(android.media.MediaRecorder.VideoSource.CAMERA);
//this.mediarecorder.setOutputFormat(android.media.MediaRecorder.OutputFormat.MPEG_4);

// Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
this.mediarecorder.setProfile(android.media.CamcorderProfile.get(android.media.CamcorderProfile.QUALITY_HIGH));
// platform.screen.mainScreen.widthDIPs
// platform.screen.mainScreen.heightDIPs

// Step 4: Set output file
var fileName = "videoCapture_" + new Date() + ".mp4";
var path = android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DCIM).getAbsolutePath() + "/Camera/" + fileName;
this.file = new java.io.File(path);
this.mediarecorder.setOutputFile(this.file.toString());

this.mediarecorder.setOrientationHint(270);

try {
    this.mediarecorder.prepare();
    this.mediarecorder.start();
} catch( ex ) {
    console.log(ex);
}

然后,图像突然变暗,而我的脸(我尝试它时的焦点)变宽了。所以纵横比会发生变化,光照也会以某种方式发生变化。

我尝试在相机参数上设置 setPictureSize,在 MediaRecorder 上设置视频大小,但没有成功。对于灯光变化,我根本不知道发生了什么。现在我一直在谷歌搜索自己到天堂的一半,但仍然一无所获,所以我希望这里有人对下一步追求什么有任何提示?

【问题讨论】:

    标签: android android-camera


    【解决方案1】:

    视频录制通常会尝试以稳定的帧速率运行,例如 30fps。相机预览通常会将自身减速到 10-15fps 以保持亮度,因此如果您处于较暗的位置,视频录制会更暗(因为它不能曝光超过 1/30 秒,而不是相机预览的 1/10 秒)可以)。

    您是在调用 setProfile 之前还是之后调用了 setVideoSize? setProfile 调用更改了许多参数,包括预览大小;大多数视频录制尺寸为 16:9,默认的相机预览分辨率可能为 4:3。因此,当您开始录制时,纵横比会切换。

    大多数视频录制应用甚至在开始录制之前就使用 16:9 的预览尺寸,以便它们保持一致。您也可以录制 4:3 视频,但这通常不是人们想要看到的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多