Android录制视频后如何改变视频方向

3
当我们使用MediaRecorder录制视频时,在安卓设备上视频会被正确地录制,设备上也会显示正在录制的画面。但是当我们将视频在桌面端用VLC或者其他播放器进行播放时,视频会被旋转而且无法正常显示。我可以通过设置MediaRecorder的setOrientationHint属性来使视频旋转90度。
为什么要改变视频的方向?这是什么问题呢?

请查看http://stackoverflow.com/a/39271585/1495839 您可以找到解决方案。 - Amit
2个回答

1
我们在录制视频时无法直接应用固定方向。我的意思是说,您在MediaRecorder setOrientationHint中使用了90度的固定方向。您需要设置setOrientationHint(动态度数)。
首先,您需要获取显示旋转并使用显示旋转获取角度。然后将该角度设置为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());

0

MediaRecorder的setOrientationHint(int degrees)函数的Android文档中提取:

这个方法不会在视频录制期间触发源视频帧旋转,但是如果输出格式为OutputFormat.THREE_GPP或OutputFormat.MPEG_4,则会添加包含旋转角度的组合矩阵到输出视频中,以便视频播放器可以选择适当的方向进行播放。

总之,setOrientationHint只是向视频文件添加了某种头部信息,“告诉”视频播放器在播放时应该旋转视频。根据我的经验,VLC播放器会忽略此头部信息并按原样播放视频。

我能想到的唯一解决方法就是通过旋转视频来进行后处理,尽管这似乎在资源方面是一个相当糟糕的决定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接