这是用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而没有运气。而对于照明变化,我根本不知道发生了什么。现在我一直在谷歌搜索到天堂的一半,但仍然没有找到任何东西,所以我希望这里的某个人对接下来的事情有任何建议?
答案 0 :(得分:1)
视频录制通常会尝试以稳定的帧速率运行,例如30fps。相机预览通常会降低到10-15fps以保持亮度,因此如果您处于较暗的位置,视频录制会更暗(因为它不能曝光超过1/30秒而不是相机预览的1/10秒能)。
您是否在调用setProfile之前或之后调用了setVideoSize? setProfile调用会更改许多参数,包括预览大小;大多数视频录制大小为16:9,默认的相机预览分辨率可能是4:3大小。因此,当您开始录制时,宽高比会切换。
大多数视频录制应用甚至在开始录制之前都使用16:9预览尺寸,以便它们保持一致。您还可以录制4:3视频,但这通常不是人们想要看到的。