我正在制作一个应用程序,我必须录制一段视频,该视频应该专门用于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
录制/播放的视频。
以下是供参考的屏幕:
我使用了setDisplayOrientation(90)
参数,但它不起作用。
我如何实现我想要实现的目标?
答案 0 :(得分:1)
与iOS相机不同,我们无法在Android上真正选择人像相机框架方向。
Camera.setDisplayOrientation()
仅指摄像头实时视频预览的方向;实际的帧数据永远不会在Android上旋转。如果使用onPreviewFrame()回调,则可以看到它。 Camera.setRotation()
仅影响onPictureTaken()
回调,并且大多数设备仅设置EXIF旋转标记。
设置"旋转"和"方向"显式名称是危险的:某些设备可能会识别这些键,其他设备会默默地忽略它们,而其他ROM可能会在收到带有意外键或值的Camera.setParameters()
参数时抛出RuntimeException。但无论如何,我从未见过Android设备在任何这些标志时改变录制的视频帧。
您拥有MediaRecorder.setOrientationHint()
API,但它不会旋转录制视频的帧,只会在视频标头中放置一个标记。
所以,不幸的是你必须在接收方旋转视频。这取决于您呈现视频的方式,是的,您可以根据需要检查方向提示。