问题:某些 Android 设备(列在问题底部)在使用setOrientationHint(int degrees)
前置摄像头拍摄的视频功能时会出现意外行为。预期的行为是视频顺时针旋转,但这些设备逆时针旋转视频。
我的目标:在相机设置或硬件方向中识别一个变量,让我可以预见地知道何时会发生这种情况。具体来说,我想避免在我的代码中对这些手机进行特殊封装!
进一步说明:我正在使用标准MediaRecorder
对象录制视频,并且在准备录制时,我使用setOrientationHint()
. 在 的文档中setOrientationHint()
,为参数指定了以下内容degrees
:
度 ——以度为单位顺时针旋转的角度。支持的角度为 0、90、180 和 270。
该函数旨在添加包含旋转角度的合成矩阵,以便视频播放器可以按预期显示视频。所以,我所做的是使用该类获取相机硬件的方向,CameraInfo
并将其用作fn中的degrees
参数。setOrientationHint
(我已经尝试使用 AOSP 作为指南对这段代码进行变体,但我得到了完全相同的结果。)
一个真实的例子:三星 Galaxy S3 前置摄像头(实际上是大多数其他摄像头)的硬件方向为 270,所以我在录制时使用它,并且生成的视频可以正确显示。HTC Vivid 同样会为同一个相机返回 270 的硬件方向,但只有在我使用 90 作为fn中的degrees
参数时才能正确显示。setOrientationHint
如果我像其他手机一样使用硬件方向的270,视频会颠倒。
注意:该setOrientationHint()
功能包括警告:
请注意,某些视频播放器可能会选择在播放期间忽略视频中的合成矩阵。
但是,这不是正在发生的事情,因为如果我伪造它并输入 90 而不是 270,我可以轻松地在这些手机上解决这个问题。
我见过的手机特别出现此问题:运行 Android 4.0.3 的 HTC Vivid (PH39100)、运行 Android 4.0.3 的 HTC EVO 4G (PG86100)、运行 Android 2.3.4 的 HTC Thunderbolt (ADR6400L)。请注意,它们都是 HTC 手机。也许 HTC 的某个人将顺时针方向误认为逆时针方向。