我正在嘗試製作自定義視頻應用程序。 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