在人像模式下录制视频时的方向问题android grafika

在人像模式下录制视频时的方向问题android grafika,android,orientation,android-mediacodec,grafika,Android,Orientation,Android Mediacodec,Grafika,我设置了设备方向横向模式,然后它完美地保存了视频。 如果我拍摄了一段双面的视频 但是我设置了设备的方向纵向模式,这工作很奇怪 例如: 下面是我录制视频时的屏幕截图: 但当我保存视频并在MXPlayer中查看时,它看起来是这样的: 我使用以下代码: Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); if (display.getRotation()

我设置了设备方向
横向
模式,然后它完美地保存了视频。 如果我拍摄了一段双面的视频

但是我设置了设备的方向
纵向
模式,这工作很奇怪

例如:

下面是我录制视频时的屏幕截图:

但当我保存视频并在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

,2天后我终于解决了我的问题

此解决方案适用于
Grafika
ContinuousCaptureActivity.java
drawFrame()
方法中,我将更改
纵向的一些代码

我在
drawFrame
方法中添加了以下两行:

Matrix.rotateM(mTmpMatrix, 0, 270, 0, 0, 1);
Matrix.translateM(mTmpMatrix, 0, -1, 0, 0); 
drawFrame
Method 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();

@法登:你知道为什么在<代码>肖像模式下这项工作很奇怪吗。