使用mediaRecorder和曲面视图录制的Android视频虽然在纵向视图中录制,但在横向视图中无法播放

时间:2016-04-11 07:02:22

标签: android video android-camera android-mediarecorder

我正在制作一个应用程序,我必须录制一段视频,该视频应该专门用于Portrait View,并在Portrait View中播放。我正在使用mediaRecorder录制视频。

使用此网站作为参考:https://examples.javacodegeeks.com/android/core/android-video-capture-example/

并做了一些改变以符合我的要求:

以下是代码:

对于相机,我使用以下设置:

mCamera = Camera.open(findFrontFacingCamera());
            mCamera.setDisplayOrientation(90);
            Camera.Parameters params= mCamera.getParameters();
            params.set("rotation", 90);
            params.set("orientation", "portrait");
            mCamera.setParameters(params);
            mPreview.refreshCamera(mCamera);

我现在面临的问题是视频会在Portrait View中被录制(似乎是什么),但是当我使用任何播放器播放时,例如。 MX播放器我收到了以Landscape View录制/播放的视频。

以下是供参考的屏幕:

The recording Screen

播放的视频: enter image description here

我使用了setDisplayOrientation(90)参数,但它不起作用。 我如何实现我想要实现的目标?

1 个答案:

答案 0 :(得分:1)

与iOS相机不同,我们无法在Android上真正选择人像相机框架方向。

Camera.setDisplayOrientation()仅指摄像头实时视频预览的方向;实际的帧数据永远不会在Android上旋转。如果使用onPreviewFrame()回调,则可以看到它。 Camera.setRotation()仅影响onPictureTaken()回调,并且大多数设备仅设置EXIF旋转标记。

设置"旋转"和"方向"显式名称是危险的:某些设备可能会识别这些键,其他设备会默默地忽略它们,而其他ROM可能会在收到带有意外键或值的Camera.setParameters()参数时抛出RuntimeException。但无论如何,我从未见过Android设备在任何这些标志时改变录制的视频帧。

您拥有MediaRecorder.setOrientationHint() API,但它不会旋转录制视频的帧,只会在视频标头中放置一个标记。

所以,不幸的是你必须在接收方旋转视频。这取决于您呈现视频的方式,是的,您可以根据需要检查方向提示。