9

问题:某些 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 的某个人将顺时针方向误认为逆时针方向。

4

1 回答 1

1

是的,HTC 手机的前置摄像头旋转方向错误。我最终没有尝试猜测,而是添加了一个设置屏幕,该屏幕将拍摄两张照片,第二张照片旋转 90 度。然后用户可以继续点击下一个,因为我循环通过不同的旋转方向和角度组合,直到两张图片出现相同的方向。

于 2013-03-05T04:57:13.437 回答