在記錄以 Android 為目標的 AR Foundation 時新增自訂資料

您可以使用 Recording & Playback API 錄製工作階段,並用於取代即時攝影機畫面。不過,這些錄影只包含影片和感應器資料。您也可以在工作階段錄製內容中新增自訂資料,並在播放期間傳回資料,就像是相機影像的一部分。

ARCore 不會自動在錄影內容中加入任何自訂資料。而是在錄製期間將自訂資料新增至 ARCore 影格,並在播放期間從影格擷取相同的資料。您可以自行編寫應用程式程式碼,讓使用者在播放工作階段時,能取得預期的資料。

自訂資料的用途

在錄製內容中加入自訂資料,可擴展 AR 應用程式的可能性。以下列舉幾項特定用途。

隨時隨地使用 AR

過去,使用者只能在適當地點和時間存取 AR 體驗。假設他們想在客廳擺放 AR 燈,就必須親自站在該位置,才能看到燈具的實際外觀。有了自訂軌跡,他們只需錄製一次客廳,之後就能隨時在場景中加入虛擬家具。

共同打造 AR 體驗

由於不需要進行實況工作階段,使用者就能有更多 AR 編輯選項,隨時隨地創作及存取獨特的 AR 內容。例如錄製特定環境、加入擴增實境效果,並與朋友分享。

必要條件

請務必先瞭解基本 AR 概念,並瞭解如何設定 ARCore 工作階段,再繼續操作。

使用自訂資料初始化錄製內容

請按照下列步驟,使用自訂資料初始化錄製內容。如要開始、停止及查看錄製工作階段,請參閱「錄製及播放 AR 工作階段」。

  1. 取得 ARCoreRecordingConfig
  2. 使用自訂 UUID建立新的 Track。所有自訂資料都會儲存在這裡。
  3. Track 新增至您在工作階段設定期間建立的 ARCoreRecordingConfig
// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
var track = new Track {
 Id = Guid.Parse("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
};

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
List<Track> tracks = new List<Track>();
tracks.Add(track);
recordingConfig.Tracks = tracks;

系統會將所有新曲目視為個別錄音,每個錄製的曲目都會佔用自己的 UUID。

使用其他資料設定群組

使用描述工作階段錄製內容的其他資料設定曲目。舉例來說,你可以新增筆記來標記音訊,說明錄製工作階段的地點和時間:「這段工作階段是在下午於購物中心錄製。」

// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] metadata = ...
track.Metadata = metadata;

使用 MIME 類型設定曲目

使用 MIME 類型設定曲目,說明曲目中記錄的資料類型,以便與外部工具相容。

如果您未指定類型,資料就會歸類為 application/text。ARCore 會在讀取資料時忽略 MIME 類型。

// Set a MIME type for compatibility with external tools.
track.MimeType = "text/csv";

錄製自訂資料軌道

所有自訂追蹤資料都會記錄到影格。您將資料記錄到影格上的時間,就是播放期間傳回資料的時間。舉例來說,如果您在 00:07:02 呼叫 RecordTrackData() 並傳回值「A」,則在播放音軌時,您會在 00:07:02 標記處收到「A」。

如要記錄自訂資料軌跡,請呼叫 RecordTrackData()

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  // Convert the lamp data into a byte array.
  var lampData = new byte[] { (byte) Lamp.FLOOR };  // a floor lamp
  recordingManager.RecordTrackData(trackGuid, lampData);
}

播放自訂資料軌

在播放期間從工作階段錄製內容中擷取自訂資料。

初始化播放

使用自訂資料初始化播放內容的做法,與初始化一般工作階段錄製內容的播放內容相同。

傳回自訂資料

呼叫 GetUpdatedTrackData() 即可擷取在影格上記錄的自訂資料。您可以從同一個影格擷取多個追蹤資料。舉例來說,如果您在錄製期間在同一個影格上兩次呼叫 RecordTrackData(),則在播放期間會取得兩個 TrackData 例項。

// Fetch the data recorded on a select frame and place it in a
// container object.
var trackDataList = recordingManager.GetUpdatedTrackData(trackGuid);

TrackData 位於容器物件中時,請擷取自訂資料的位元組。

// Extract the bytes of custom data from the list of track data.
foreach (TrackData trackData in trackDataList) {
  var data = trackData.Data;
  Lamp lamp = Lamp.fromByte(data[0]); // This is the lamp!
}

後續步驟