iOS AVFoundation 视频捕获方向选项

标签 ios avfoundation video-capture

我有一个应用程序,我想只为前置摄像头拍摄视频。那没问题。但我希望视频捕捉始终是横向的,即使手机是纵向的。

我有一个基于 Apple 发布的 AVCamDemo 代码的有效实现。并借用 this tech note 中的信息,我可以指定方向。只有一个技巧:虽然视频帧的方向正确,但内容仍然显示为纵向拍摄:

landscape orientation with portrait contents

我想知道我是否只是被硬件的物理限制弄得筋疲力尽:图像传感器只是这样定位的吗?上面引用的技术说明作了如下说明:

Important: Setting the orientation on a still image output and movie file output doesn't physically rotate the buffers. For the movie file output, it applies a track transform (matrix) to the video track so that the movie is rotated on playback, and for the still image output it inserts exif metadata that image viewers use to rotate the image properly when viewing later.

但我对该视频的播放表明并非如此。任何见解或建议将不胜感激!

谢谢, 亚伦。

最佳答案

要回答您的问题,是的,图像传感器就是这样定位的。摄像机是一个大约 1 兆像素的“1080p”摄像机,具有固定的方向。 5MP(或 4S 的 8MP 等)静态相机也有固定的方向。镜头本身不旋转,其他任何相机位也不旋转,因此进给本身具有固定方向。

“但是等等!”,您说,“我用相机应用程序(或 API)拍摄的照片正确旋转了。这是为什么?”这是因为 iOS 在拍摄照片时会查看手机的方向,并将该信息与照片一起存储(作为 Exif 附件)。然而,视频并没有被如此标记——并且每个帧都必须被单独标记,然后当用户在视频播放期间旋转手机时会发生什么问题....

所以,不,您不能询问视频流或静止图像在拍摄视频时手机的方向。但是,您可以直接询问手机现在的方向:

UIDeviceOrientation currentOrientation = [UIDevice currentDevice].orientation;

如果您在视频捕获开始时这样做(或者当您从视频源中抓取静止图像时),您就可以使用该信息来进行自己的播放旋转。

关于iOS AVFoundation 视频捕获方向选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6969948/

相关文章:

ios - 当 CNContact 保存联系人时联系人图像不发送

ios - 如何在xcode7中找到libicucore.dylib?

swift - 在 SwiftUI 应用程序中放置音频播放代码的位置

ios - 如何在 Xcode 4.3 中成功使用 BOOL

java - 如何将图形内容捕获为图像

ios - 如何实时显示用户位置。比如 Uber IOS Swift

ios - EKEvent - 更改事件状态

swift - 尝试通过多点连接将音频从麦克风流式传输到另一部手机

python - 使用python从网络摄像头修剪(删除帧)实时视频

c++ - Opengl sws_scale 不工作(段错误)