setOrientationHint 在某些手机的前置摄像头 (HTC) 上逆时针旋转视频
Posted
技术标签:
【中文标题】setOrientationHint 在某些手机的前置摄像头 (HTC) 上逆时针旋转视频【英文标题】:setOrientationHint rotates video counterclockwise on some phones' front facing cameras (HTC) 【发布时间】:2013-01-23 15:59:08 【问题描述】:问题:某些 android 设备(列于问题底部)在使用 setOrientationHint(int degrees)
功能拍摄使用前置摄像头拍摄的视频时会出现意外行为。预期的行为是视频顺时针旋转,但这些设备逆时针旋转视频。
我的目标:识别相机设置或硬件方向中的一个变量,让我可以预测地知道何时会发生这种情况。具体来说,我希望避免在我的代码中对这些手机进行特殊封装!
进一步说明:我正在使用标准MediaRecorder
对象录制视频,并且在准备录制时,我使用setOrientationHint()
设置了视频的方向。在setOrientationHint()
的文档中,为degrees
参数指定了以下内容:
degrees –– 以度为单位顺时针旋转的角度。支持的角度是 0、90、180 和 270。
该函数旨在添加包含旋转角度的合成矩阵,以便视频播放器可以按预期显示视频。所以,我所做的是I get the camera hardware's orientation using the CameraInfo
class 并将其用作setOrientationHint
fn 中的degrees
参数。 (我曾尝试使用 AOSP 作为指南对此代码进行变体,但结果完全相同。)
一个真实的例子:三星 Galaxy S3 前置摄像头(实际上是大多数其他摄像头)的硬件方向为 270,所以我在录制时使用它,生成的视频是正确显示。 HTC Vivid 同样会为同一个相机返回 270 的硬件方向,但只有在我使用 90 作为setOrientationHint
fn 中的degrees
参数时才能正确显示。如果我像其他手机一样使用硬件方向的270,视频会颠倒。
注意:setOrientationHint()
函数包含警告:
请注意,某些视频播放器可能会选择忽略合成 播放期间视频中的矩阵。
但是,这不是正在发生的事情,因为如果我伪造它并输入 90 而不是 270,我可以轻松地在这些手机上解决这个问题。
我见过的手机特别出现此问题: 运行 Android 4.0.3 的 HTC Vivid (PH39100)、运行 Android 4.0.3 的 HTC EVO 4G (PG86100)、运行 Android 的 HTC Thunderbolt (ADR6400L) 2.3.4。请注意,它们都是 HTC 手机。也许 HTC 有人把顺时针误认为是逆时针。
【问题讨论】:
Daniel,您找到解决方案了吗?我也有同样的问题。 请看***.com/a/39271585/1495839你可以找到解决办法 【参考方案1】:是的,HTC 手机的前置摄像头旋转方向错误。我最终没有尝试猜测,而是添加了一个设置屏幕,该屏幕将拍摄两张照片,第二张照片旋转 90 度。然后用户可以在我循环使用不同的旋转方向和角度组合时继续点击下一步,直到两张图片的方向相同。
【讨论】:
显然有办法通过允许用户设置自定义方向来解决这个问题,但我正在寻找一种特定的方法来知道手机会这样做。这不是所有 HTC 设备都存在的问题——只有一些。 这就是我选择设置解决方案的原因。有了所有的设备,您会遇到许多具有相机旋转问题的设备,因此不妨灵活一些。只是我的 2 美分... 我也使用了设置解决方案,但我对该解决方案感到非常不舒服,并且认为它不能令人满意地解决这个问题(尽管我确实觉得值得保留在这里作为“答案”要彻底——因此我没有-1)。在这种情况下,用户对相机应用程序的初次体验会很糟糕,许多人甚至不知道他们应该检查“设置”菜单来解决问题。这种糟糕的用户体验可能会影响成千上万用户的第一印象。 同意,不理想。在处理制造商的错误和不一致时,有时很难找到理想的解决方案。以上是关于setOrientationHint 在某些手机的前置摄像头 (HTC) 上逆时针旋转视频的主要内容,如果未能解决你的问题,请参考以下文章
Filetransfer.download 在某些手机中无法正常工作