我设置了设备定位Landscape模式,然后它完美地保存了视频。如果我能拍到双方的视频。
但是我设置了设备方向Portrait模式--这个工作方式很奇怪。
例如:
下面是我录制视频时的截图:

但是当我保存视频并在MXPlayer中看到时,它是这样的:

我使用以下代码:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if (display.getRotation() == Surface.ROTATION_0) {
mCamera.setDisplayOrientation(90);
// layout.setAspectRatio((double) cameraPreviewSize.height / cameraPreviewSize.width);
} else if (display.getRotation() == Surface.ROTATION_270) {
// layout.setAspectRatio((double) cameraPreviewSize.height / cameraPreviewSize.width);
mCamera.setDisplayOrientation(180);
} else {
// Set the preview aspect ratio.
//layout.setAspectRatio((double) cameraPreviewSize.width / cameraPreviewSize.height);
}更新:
此外,我还尝试在启动MediaMuxer的地方添加setOrientationHint
发布于 2018-12-01 06:33:50
最后两天后,我解决了我的问题。
Grafika ContinuousCaptureActivity.java的这种解决方案
在drawFrame()方法中,我将更改portrait的一些代码。
我在drawFrame方法中添加了以下2行:
Matrix.rotateM(mTmpMatrix, 0, 270, 0, 0, 1);
Matrix.translateM(mTmpMatrix, 0, -1, 0, 0); 在drawFrame方法2中,输入设置glViewport
,所以我要换第二种选择,
请在下面找到完整的代码:
// Send it to the video encoder.
if (!mFileSaveInProgress) {
mEncoderSurface.makeCurrent();
if (!AppSetting.getValue(activity, Config.ORIENTATION, "").equalsIgnoreCase("Select")) {
if (AppSetting.getValue(activity, Config.ORIENTATION, "").equalsIgnoreCase("Portrait")) {
Matrix.rotateM(mTmpMatrix, 0, 270, 0, 0, 1);
Matrix.translateM(mTmpMatrix, 0, -1, 0, 0);
}
}
GLES20.glViewport(0, 0, VIDEO_WIDTH, VIDEO_HEIGHT);
mFullFrameBlit.drawFrame(mTextureId, mTmpMatrix);
//drawExtra(mFrameNum, VIDEO_WIDTH, VIDEO_HEIGHT);
mCircEncoder.frameAvailableSoon();
mEncoderSurface.setPresentationTime(mCameraTexture.getTimestamp());
mEncoderSurface.swapBuffers();https://stackoverflow.com/questions/53533890
复制相似问题