我正在尝试制作自定义视频应用程序。 Iwork仅使用清单2.2中的设置(API 8)。纵向模式下的MediaRecorder视频捕捉
一切顺利,但我不明白为什么肖像模式视频与lanscape没有什么不同。
为了使装置的检测范围内改变surfaceChanged取向我使用此代码()
if (mCamera != null) {
Camera.Parameters p = mCamera.getParameters();
try {
mCamera.stopPreview();
} catch (Exception e) {
// TODO: handle exception
}
int previewWidth = 0;
int previewHeight = 0;
if (mPreviewSize != null) {
Display display = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
switch (rotation) {
case Surface.ROTATION_0:
previewWidth = mPreviewSize.height;
previewHeight = mPreviewSize.width;
mCamera.setDisplayOrientation(90);
break;
case Surface.ROTATION_90:
previewWidth = mPreviewSize.width;
previewHeight = mPreviewSize.height;
mCamera.setDisplayOrientation(0);
break;
case Surface.ROTATION_180:
previewWidth = mPreviewSize.height;
previewHeight = mPreviewSize.width;
mCamera.setDisplayOrientation(270);
break;
case Surface.ROTATION_270:
previewWidth = mPreviewSize.width;
previewHeight = mPreviewSize.height;
mCamera.setDisplayOrientation(180);
break;
}
p.setPreviewSize(previewWidth, previewHeight);
mCamera.setParameters(p);
}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e) {
Log.d(TAG, "Cannot start preview.", e);
}
}
就像一个魅力。如果我旋转设备表面更改方向,请调用surfaceChanged,其中相机设置为适当的DisplayRotation。
问题是如何确定以后如果视频拍摄在景观模式或肖像之一。正如我所有的视频都是以横向拍摄的。它不依赖于仅影响预览过程的setDisplayOrientation。
还在探索我注意到,如果使用标准的相机应用程序写入特殊标签的视频文件(的MediaInfo看到的)问题:旋转:90为人像拍摄的视频。
但MediaRecorder类没有。
似乎是这个问题。有人需要解决这个问题吗?
setOrientationHint仅适用于API 9.我有同样的问题,但需要API 8 – AndroidDev 2013-01-30 20:23:55
的解决方案我花了数小时试图找出这个愚蠢的预览定位问题。非常感谢@Taiko!下面是对我有用的东西:在实现'SurfaceHolder.Callback'的类的'onCreate'方法中,我包含了这个代码:'mCamera = Camera.open(); mCamera.setDisplayOrientation(90); mCamera.unlock();'后面跟着'mediaRecorder = new MediaRecorder(); mediaRecorder.setCamera(mCamera);'。像魅力一样工作! – Cat 2014-05-10 20:16:36