问题:某些Android设备(问题底部列出)在使用前置摄像头拍摄的视频使用setOrientationHint(int degrees)
功能时会出现意外行为。预期的行为是视频顺时针旋转,但这些设备逆时针旋转视频。
我的目标:要识别相机设置或硬件方向内的变量,以便我可以预测知道何时会发生这种情况。具体来说,我想避免在我的代码中特别包装这些手机!
进一步说明:我正在使用标准MediaRecorder
对象录制视频,在准备录制时,我使用setOrientationHint()
设置了视频的方向。在setOrientationHint()
的文档中,为degrees
参数指定了以下内容:
度 - 以度为单位顺时针旋转的角度。支持的角度是 0,90,180和270。
该功能旨在添加一个包含旋转角度的合成矩阵,以便视频播放器可以按预期显示视频。所以,我所做的是I get the camera hardware's orientation using the CameraInfo
class并将其用作degrees
fn中的setOrientationHint
参数。 (我已尝试使用AOSP作为指南对此代码进行了修改,但结果完全相同。)
一个真实的例子:三星Galaxy S3前置摄像头(事实上大多数其他人)的硬件方向都是270,所以我在录制时使用它,结果视频是显示正确。 HTC Vivid同样会为同一台相机返回270的硬件方向,但只有在degrees
fn中使用90作为setOrientationHint
参数时才能正确显示。如果我像任何其他手机一样使用270硬件方向,则视频将颠倒过来。
NB: setOrientationHint()
功能包含警告:
请注意,某些视频播放器可能会选择忽略构图 播放期间视频中的矩阵。
然而,这是不正在发生的事情,因为我可以轻松地在这些手机上修复此问题,如果我伪造它并放入90而不是270.
我见过的手机专门展示了这个问题: HTC Vivid(PH39100)运行Android 4.0.3,HTC EVO 4G(PG86100)运行Android 4.0.3,HTC Thunderbolt(ADR6400L)运行Android 2.3.4。请注意,它们都是HTC手机。也许HTC的某个人顺时针错误地逆时针错误。
答案 0 :(得分:1)
是的,HTC手机朝向前置摄像头方向旋转方向错误。我没有尝试猜测,而是添加了一个设置屏幕,可以拍摄两张照片,第二张照片旋转90度。然后,当我循环通过不同的旋转方向和角度组合时,用户可以继续按下,直到两张图片的方向相同。