录制较暗的预览和比率

时间:2017-09-11 21:05:58

标签: android android-camera

这是用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上设置setVideoSize而没有运气。而对于照明变化,我根本不知道发生了什么。现在我一直在谷歌搜索到天堂的一半,但仍然没有找到任何东西,所以我希望这里的某个人对接下来的事情有任何建议?

1 个答案:

答案 0 :(得分:1)

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

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

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