我们如何构建 iOS 应用程序来拍摄 3D 视频(案例研究)
已发表: 2022-03-10我们的团队也被 3D 拍摄所吸引。 我们深入研究了人类视觉器官的特征和立体摄影的技术细节。 然后,我们决定开发一个 iOS 应用程序来拍摄 3D 视频并将视频上传到 YouTube。 该应用程序背后的想法是通过将两部 iPhone 安装到一个特殊的框架上来促进 3D 视频的拍摄——我们做到了! 这就是 Stereo Video Recorder 应用程序的出现方式。
我们决定与 Smashing Magazine 的读者分享我们对创建 3D 视频的调查。 我们还想谈谈创建应用程序的技术特性,并提供用于安装 iPhone 的框架的详细图纸。
这一切是如何开始的
在我们对 3D 视频功能的研究中,我们从虚拟现实的实验开始。 我们构建了一个硬纸板框架,并通过两部 3D 格式的 iPhone 向世界看去。 我们的研究细节可以在我们的博客上找到。 我们将在这里更进一步。

继续这项研究,我们决定创建另一个应用程序原型,它允许您录制立体 3D 视频并将其上传到 YouTube。
立体视觉是一种在平面图像中产生深度错觉的方法。 自 19 世纪以来,立体声录音就已为人所知。 在创建立体 3D 视频时,我们模拟双目视觉。 由于瞳孔之间的距离,人脑更容易分析周围空间的体积——与物体的距离。 双目立体镜在电影工业中被广泛使用。 您几乎不会遇到不使用立体声格式的好莱坞杰作。
我们应用原型的目的是用两个不同的 iPhone 摄像头同时拍摄视频,然后将生成的视频文件合并为一个,以便使用任何 3D 眼镜(例如 Google Cardboard、虚拟现实头盔或 3D 电视)观看。
立体图像和我们对 3D 图像的感知
让我详细说明立体图像和我们对 3D 图像的感知。 事实上,立体摄影就像我们的眼睛一样,随着时间的推移而演变。 因为我们的两只眼睛之间有距离,所以投射到左右眼视网膜上的图像会有些不同。 这种差异称为视差(当从两个不同的位置观看时,物体的位置似乎不同的效果)。 但是,观察者看不到两个单独的图像。 视觉装置形成对单个空间图像的感知,可以感知体积、距离等。重要的是要了解视觉装置检测、处理和投影位于空间中某些点的空间图像和对象。

了解人类视觉装置的工作原理有助于彻底研究需要如何准备和再现视觉材料,以便观众能够感受到完整的 3D 图像。
让我们按顺序查看所有内容。
与根据物理定律运行的任何设备一样,人类视觉设备也有其自身的特征和局限性。
首先,我们需要了解,就我们的视觉过程而言,我们只将目光集中在一个点上,称为视点(POV)。 事实上,POV 是眼睛聚焦的点,左右视线通过的点。 根据到 POV 的距离,左右眼视线之间的角度会有所不同。 眼睛的方向使线条在 POV 处会聚。 当人向远处看时,这些线是平行的,或者换句话说,看向无穷远。

由于眼睛的小位移,投影到视网膜上的图像略有不同。 这通常表现为人们正在观看的图像的位移——左眼向左,右眼向右。 已经提到的这种现象称为视差。
然而,视觉装置只能在某些视差值下感知音量。 根据到物体的距离,近处和远处物体的视差会有所不同。 可能是视差超过了限制值,人将看到的不是 3D 对象,而是分叉的图像。 一项涉及将一个人的视图从近到远物体转换的实验可以更好地理解这一点的细节。

从图中可以看出,如果您将视图固定在前景上,那么背景对象将开始分叉。 如果您将视图固定在背景上,则前景图像将分叉。 视觉装置的这一特性在 3D 拍摄和立体图像的再现中起着至关重要的作用。
在日常生活中,我们不会注意到这种影响,因为我们习惯于只关注一个物体,而当你改变视线时,你的视线很快就会适应新的条件。 然而,当我们尝试使用具有预定视差的两张图片人为地投射立体图像时,视觉设备不再像往常那样快速适应。 为了使视觉仪器工作在正常模式,必须将3D视频设备调整到观看者的眼睛,分析观察点的位置。 该设备还应创建具有所需视差的立体图像。
然而,实现这一点在技术上是非常困难的。 通常,使用具有固定几何和技术拍摄参数的简单方案。 对于近景和远景,这些参数会有所不同。 几何和技术参数是指摄像机的视野、摄像机距中心的水平位移、摄像机的旋转角度和摄像机的会聚点。
因此,如果您只有一套拍摄设备(两台相机和一个相框),您将无法拍摄同样近和远的物体。 更准确地说,你可以拍摄,但是对于一个人来说观看视频会非常不舒服,例如,设备调整为远景但拍摄近景,反之亦然,具有立体效果在背景中弱表达。

从想法到实践:如何安装 iPhone
让我们回到我们的想法。 我们决定开发一款可以录制立体 3D 视频的移动应用原型。 考虑到上述所有因素,我们需要评估以下内容:
- 使用两部 iPhone 拍摄立体图像的基本可能性;
- 考虑到使用相机的通常条件,确保高质量和舒适立体感知的有效距离范围。
当我们非常接近创建原型时,我们做的第一件事就是评估 iPhone 相机在我们任务中的潜力。 我们惊喜地发现 iPhone 提供了可接受的特写镜头视角。 如前所述,仅将两个摄像头并排放置并不足以获得良好的立体效果。 通常,计算拍摄的算法从设置平面参数开始——即到最近和最远物体的距离,以及框架平面内物体之间的距离。 然后根据这些数据选择安装参数。
可以根据以下公式对摄像机之间的距离进行简化计算:

-
Parallax<sub>fore</sub>
设置立体对帧相互重叠时前景图像的最大位移。 -
L<sub>fore</sub>
= 到前景对象的距离 f
= 镜头焦距L
= 到镜头焦点的距离M
= 帧缩放
在我们的例子中,我们不得不稍微改变算法,因为我们使用的是标准相机,因此,镜头的焦距是严格设置的。 我们的任务是获得舒适的立体效果以及与拍摄对象的可接受距离范围。 因此,我们需要进行几项实验——将两个相机相对放置——以便找到它们中心之间所需的距离(相机中心之间的距离)和会聚角。
为了简化原型制作过程中的任务,我们决定不旋转相机来实现在某个点的收敛,而是使用无穷远处的收敛。 事实证明,要获得最佳效果,需要准确调整相机的会聚角。 如果我们考虑到我们计划制作一个纸板框架来安装 iPhone,那么调整相机的会聚角度几乎是不可能的。 所以,经过多次实验,我们达成了一个折衷方案,在相机之间的距离之间取得了最佳平衡,以实现近区拍摄并获得良好的立体效果。


我们的目标是为 iPhone 开发最简单的框架,它易于制造、操作方便、提供必要的拍摄参数并具有所需的刚性。 因此,我们选择了可以通过铣削或 3D 打印由塑料或泡沫材料(在本例中为聚苯乙烯)制成的 3D 模型。 将来,我们当然会想要开发一种制造更简单的设备——例如,纸板设备。
目前唯一的硬件限制是您需要使用相同的设备和完全相同的相机。


以下是屏幕尺寸为 4.0、4.7 和 5.5 英寸的不同版本设备的框架详细图——适用于 iPhone 6+ 和 6S+,适用于 iPhone 6、6S 和 7,以及适用于 5 和 5S。



用于立体 3D 视频拍摄的应用程序
该应用程序在两台设备上同时运行,但仅从其中一台设备控制拍摄,因此无需通过某些特殊方式控制拍摄过程。
简而言之,应用程序的标准使用场景由以下操作序列组成:
- 将两部 iPhone 安装到框架上。
- 在两台设备上运行应用程序。
- 确定哪些设备将作为主设备,哪些设备作为从设备。 从主设备开始录制。 (不要在第二台设备上采取任何其他操作。)
- 录制完成后,等待录制的片段同步并渲染视频,以便上传到 YouTube。
- 同步后随时将视频上传到 YouTube,然后在 3D 电视或虚拟现实眼镜上观看。
值得注意的是,主要工作仅发生在其中一部 iPhone 上,即主设备。 我们在这台 iPhone 上开始拍摄。 视频也在主设备上处理并上传到 YouTube。 准备上传到 YouTube 的视频需要一些时间。 这将取决于所用设备的性能以及主设备和从设备之间的连接质量。
第二部 iPhone 作为从机,仅用作第二台相机。 在拍摄结束时,它将视频片段发送到主设备。

该应用程序主屏幕的屏幕截图显示了拍摄的视频库,如下所示。 视频既可以通过嵌入式播放器观看,也可以在 YouTube 上观看。 在这里,您还可以查看如何将更多的拍摄角色(主从)分配给设备。


技术障碍
去同步
视频片段的所有操作都是在强大的框架 AVFoundation 的帮助下执行的,如果可能的话,使用硬件加速。
要上传到 YouTube,视频片段会逐帧并排粘贴。 显然,每个左帧都应该在时间上与右帧匹配。 在其中一个源的帧中稍有延迟,立体效果就会丢失或失真(尤其是在动态场景中),并且画面会出现翻倍。
为了解决这个问题,我们同时开始在设备上录制视频。 事实上,记录不是在按下开始按钮后立即开始,而是在某个算法激活的短暂延迟后开始——这与精确时间协议 (PTP) 测量时钟偏差的方式非常相似。 因此,我们能够以 30 到 50 毫秒的差异启动视频录制,在最坏的情况下,这对应于大约 1 个去同步帧。
iOS 多点连接中的错误
我们使用原生 iOS 库 Multipeer Connectivity 来建立两个设备之间的通信。 该库在同一 Wi-Fi 网络上的设备之间建立直接连接,也可以通过蓝牙或在 iPhone 上使用类似于 Wi-Fi Direct 的东西。 因此,即使在开阔的场地,您也可以拍摄和同步视频片段,无需无线或移动互联网网络。 但是需要互联网连接才能将视频从主设备发送到 YouTube。
我们决定使用这个库的主要原因是它在没有连接到同一个网络时在两个设备之间建立通信。 显然,在较差的立体3D拍摄条件下,最能期待的就是3G连接。 要拍摄 3D 视频,能够以最小的延迟传输数据包以进行同步至关重要。 此外,如果没有互联网连接,我们将无法拍摄。 因此,Multipeer Connectivity 库成为了生命线。 此外,它是苹果平台的原生解决方案。
然而,值得注意的是,并非一切都如我们所愿。 在与 Multipeer Connectivity 集成时,发现了许多错误,整个库的运行极不稳定。 大多数声明的功能仅在理论上存在。 当设备在同一网段内运行时,Multipeer Connectivity 运行更有效; 在可接受的时间段内建立连接; 实现了消息传递时间的允许分散。
但是,如果我们的立体 3D 拍摄条件相对较差,或者说在一个地方有很多移动设备,那么建立连接就像是抽奖一样。 人们会觉得 Apple 库还没有完全开发,而且还很原始。
链接设备
我们在原型的早期版本中实现了自动链接协议。 协议本身由一组规则组成,通过这些规则在初始时间点基于多数在对等设备中选择协调器。
接下来,协调器通过在从设备之间传递一个圆形的特殊标记,定期从每个设备收集遥测统计信息。 根据这些遥测数据,比较安装在框架上的成对设备。 识别出一对后,在该对中分配主从设备,并在它们之间建立直接连接。 在这个阶段,链接完成。
自动和独立搜索
必要时,对参与先前会话的设备执行自动和独立搜索(基于唯一标识符)以进行同步(在录制时数据未能加载到主设备的情况下获取录制的视频轨道)。 加速度计读数主要用于识别对应于该对的设备。 协调员计算了潜在对之间的相关性。 如果相关性超过某个阈值,则将设备视为潜在配对,随后测试次要特征。
由于我们无法完全克服 Multipeer Connectivity 的上述问题,我们决定暂时放弃自动链接,因为这会对普通用户产生非常负面的影响并破坏用户体验。
我们最终得到了什么
最后,我们实现了一个非常有趣和高质量的应用程序。 观看通过此应用程序录制的视频会给您带来与在影院观看 3D 电影相同的感觉。
当然,人眼的工作方式略有不同:它的线条会聚在空间中的某个点上,并取决于焦点。 在我们的例子中,眼睛总是平行的。 然而,即使有这个事实,立体效果也非常明显:在前景、中景和背景处感受到的空间体积与屏幕上大致相同。
您需要 VR 眼镜或 3D 电视才能正确观看此视频。
因此,我们可以使用 Stereo Video Recorder 应用程序自己拍摄 3D 立体视频,以满足您的业务需求或只是为了好玩!
处理错误和未来计划
我们的目标实现了:我们研究了创建 3D 视频的标准,并创建了一个应用程序,让任何用户都可以创建立体视频。 但这并不像听起来那么容易。 我们需要做一些事情。 Multipeer Connectivity 库有很多问题。 我们希望替换它或找到一种解决方法,以便该应用程序在有限的 Internet 访问下也能正常工作。
我们还需要:
- 在两台设备上实现同步对焦和测光,以及实现立体声音轨的录制;
- 为设备开发更实用的框架;
- 集成自动设备配对机制;
- 提供对不同设备选项的支持,并能够处理不同的视频分辨率(目前,我们只能使用相同的 iPhone 版本拍摄视频——例如,一部 iPhone 5S 只能与另一部 iPhone 5S 配对);
- 创建应用程序的 Android 版本。
我们的 Stereo Video Recorder 应用程序已经在 App Store 中。 您可以使用它来创建 3D 视频。 我们确信该技术将继续发展,最终会有更多用于创建立体视频的解决方案。 我们将努力与时俱进。
请留下您对使用此应用程序的意见和想法。 我们将不胜感激您的意见和反馈。
关于 SmashingMag 的进一步阅读:
- 构建移动应用程序的四种方法,第 1 部分:原生 iOS
- 使用 Sketch 制作 iOS 和 Android 应用程序原型(免费赠品)
- 网页设计中视频的未来
- 应用程序、游戏和移动网络测试自动化的基础知识