当我们使用MediaRecorder录制视频时,在安卓设备上视频会被正确地录制,设备上也会显示正在录制的画面。但是当我们将视频在桌面端用VLC或者其他播放器进行播放时,视频会被旋转而且无法正常显示。我可以通过设置MediaRecorder的setOrientationHint属性来使视频旋转90度。
为什么要改变视频的方向?这是什么问题呢?
为什么要改变视频的方向?这是什么问题呢?
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());
从MediaRecorder的setOrientationHint(int degrees)函数的Android文档中提取:
这个方法不会在视频录制期间触发源视频帧旋转,但是如果输出格式为OutputFormat.THREE_GPP或OutputFormat.MPEG_4,则会添加包含旋转角度的组合矩阵到输出视频中,以便视频播放器可以选择适当的方向进行播放。
总之,setOrientationHint只是向视频文件添加了某种头部信息,“告诉”视频播放器在播放时应该旋转视频。根据我的经验,VLC播放器会忽略此头部信息并按原样播放视频。
我能想到的唯一解决方法就是通过旋转视频来进行后处理,尽管这似乎在资源方面是一个相当糟糕的决定。