我們如何構建 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 應用程序原型(免費贈品)
- 網頁設計中視頻的未來
- 應用程序、遊戲和移動網絡測試自動化的基礎知識