捕获视频后android视频方向改变

时间:2014-08-06 11:29:45

标签: android video mediarecorder android-mediarecorder

当我们尝试使用MediaRecorder录制视频时,视频会在Android和设备中正确录制,它会像录制一样显示,但是当我们可以在VLC或其他桌面播放器中播放视频时,它会旋转视频和它将无法正常显示。 我可以将MediaRecorder setOrientationHint设置为90度。

改变方向有什么问题?为什么?

2 个答案:

答案 0 :(得分:1)

我们无法在捕捉视频时直接应用修正方向。我的意思是说你在MediaRecorder setOrientationHint中使用了修正90度方向。你需要设置setOrientationHint(动态度);

首先,您需要使用显示旋转来获得显示旋转并获得角度。之后将That Degree设置为setOrientationHint方法。这对所有人都有用。这是代码。

Display display = getWindowManager().getDefaultDisplay();
int mDisplayRotation = display.getRotation();

public int getDisplayOrientationAngle() {
    Log.e("", "setDisplayOrientationAngle is call");
    int angle;

    // switch (MeasurementNativeActivity.DisplayRotation) {
    switch (mDisplayRotation) {
    case Surface.ROTATION_0: // This is display orientation
        angle = 90; // This is camera orientation
        break;
    case Surface.ROTATION_90:
        angle = 0;
        break;
    case Surface.ROTATION_180:
        angle = 270;
        break;
    case Surface.ROTATION_270:
        angle = 180;
        break;
    default:
        angle = 90;
        break;
    }
    Log.v("", "media recorder displayRotation: " + mDisplayRotation);
    Log.v("", "media recorder angle: " + angle);
    return angle;

}

mMediaRecorder.setOrientationHint(getDisplayOrientationAngle());

答案 1 :(得分:0)

Android Documentation for MediaRecorder's setOrientationHint(int degrees)函数中提取:

  

此方法在视频录制期间不会触发源视频帧旋转,但如果输出格式为在输出视频中添加包含旋转角度的合成矩阵是OutputFormat.THREE_GPP或OutputFormat.MPEG_4 ,以便视频播放器可以选择正确的播放方向

总而言之,setOrientationHint只是在视频文件中添加了某种标题,“告诉”视频播放器在播放视频时应该旋转视频。根据我的经验,VLC播放器会忽略此标题并播放录制的视频。

我能想到的唯一解决方法是通过将视频旋转到您的需要来对视频进行后期处理,尽管在资源方面这似乎是一个非常糟糕的决策。