錄製與播放 API 可讓你錄製工作階段,並用於取代即時攝影機畫面。不過,這些錄製內容僅包含影片和感應器資料。您也可以將自訂資料新增至工作階段錄影功能,並在播放期間將資料傳回給您,就像是相機影像的一部分。
ARCore 不會自動在錄音內容中加入任何自訂資料。而是可讓您在錄製期間將自訂資料新增至 ARCore 影格中,並在播放期間從影格擷取相同資料。您可以自行編寫應用程式,確保使用者在播放工作階段時能取得預期的資料。
自訂資料的用途
在錄音內容中加入自訂資料,讓 AR 應用程式發揮更多可能性。以下是一些特定的用途。
隨時隨地使用 AR
過去,使用者只能在適當地點使用 AR 體驗。如果他們想將 AR 檯燈放到客廳,就必須實際站在現場,看看檯燈可能在該處的樣子。他們可以運用自訂軌道錄下客廳一次,然後隨時隨地在場景中加入虛擬家具。
共同打造 AR 體驗
如果沒有直播課程要求,使用者還能擁有更多 AR 編輯選項,方便他們隨時隨地建立和存取獨特的 AR 內容。舉例來說,他們可以錄製特定環境、加入擴增實境效果,並與好友分享。
必要條件
請務必先瞭解基本 AR 概念,以及如何設定 ARCore 工作階段,然後再繼續操作。
使用自訂資料記錄
使用自訂資料建立工作階段錄製內容。
初始化包含自訂資料的記錄
請按照下列步驟初始化使用自訂資料的記錄。如要開始、停止及查看錄製工作階段,請參閱「錄製及播放 AR 工作階段」。
- 取得
ArRecordingConfig
。 - 使用自訂 UUID 建立新的
ArTrack
。所有自訂資料都會儲存在這裡。 - 將
ArTrack
新增至您在工作階段設定期間建立的ArRecordingConfig
。
// 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. ArTrack* track = NULL; ArTrack_create(ar_session, &track); // String from UUID generator: de5ec7a4-09ec-4c48-b2c3-a98b66e71893 uint8_t uuid_byte_array[16] = {0xde, 0x5e, 0xc7, 0xa4, 0x09, 0xec, 0x4c, 0x48, 0xb2, 0xc3, 0xa9, 0x8b, 0x66, 0xe7, 0x18, 0x93}; ArTrack_setId(ar_session, track, uuid_byte_array); // Add the ArTrack to the recording_config. // recording_config must already be configured. ArRecordingConfig_addTrack(ar_session, recording_config, track); ArTrack_destroy(track);
系統會將所有新曲目視為個別的錄音,而每次錄製的曲目都會有專屬的 UUID。
選用:使用額外資料設定測試群組
為了方便日後辨識,您可以設定測試群組,加入用來說明工作階段記錄的其他資料。舉例來說,若要「標記」音軌,您可以新增附註來說明您錄製課程的地點和時間:「這場講座錄製在下午的購物中心內容。」
// Set additional data on this track. // For example, describe where you recorded the session. uint8_t metadata_size = 4; uint8_t metadata[5] = "HOME"; ArTrack_setMetadata(ar_session, track, metadata, metadata_size);
選用:使用 MIME 類型設定測試群組
如果您的應用程式必須與外部工具相容,您可以使用 MIME 類型設定測試群組,用於說明測試群組記錄的資料類型。如果不指定類型,系統會將資料歸類為 application/text
。ARCore 在讀取資料時會忽略 MIME 類型。
// Set a MIME type for compatibility with external tools. ArTrack_setMimeType(ar_session, track, "text/csv");
記錄自訂資料軌
所有自訂曲目資料都會記錄在 ArFrame
中。AR 工作階段會使用 ArSession_update()
擷取影格。您在影格中記錄資料的時間,與播放期間會傳回資料的時間相同。舉例來說,如果您在 00:07:02
呼叫 ArFrame_recordTrackData()
,並提供值「A」值,則在播放曲目時,系統會在 00:07:02
標記傳回「A」。
如要錄製自訂資料來源,請呼叫 ArFrame_recordTrackData()
。
// Place an AR lamp in a room. if (place_lamp_button_was_pressed) { uint8_t lamp_data[1] = {lamp_id}; ArFrame_recordTrackData(ar_session, frame, uuid_byte_array, lamp_data, /*payload_size=*/1); }
播放自訂資料軌
在播放期間從工作階段錄影中擷取自訂資料。
初始化播放
使用自訂資料初始化播放作業,與初始化一般工作階段錄影相同。
傳回自訂資料
呼叫 ArFrame_getUpdatedTrackData()
即可擷取 ArFrame
上記錄的自訂資料。您可以從同一個頁框擷取多個曲目資料,例如,如果你在錄製過程中於相同影格呼叫 ArFrame_recordTrackData()
兩次,即可在播放期間取回兩個 ArTrackData
的執行個體。
// Create the container to hold the track data retrieved from the frame. ArTrackDataList* fetched_track_data_list; ArTrackDataList_create(ar_session, &fetched_track_data_list); // Fetch the track data from the frame into the created container. ArFrame_getUpdatedTrackData(ar_session, frame, uuid_byte_array, fetched_track_data_list);
當 ArTrackData
進入容器物件後,請擷取自訂資料的位元組。
// Fetch the size of the track data list. int32_t fetched_track_data_list_size; ArTrackDataList_getSize(ar_session, fetched_track_data_list, &fetched_track_data_list_size); // Iterate through the list. for (int i = 0; i < fetched_track_data_list_size; i++) { ArTrackData* fetched_track_data; ArTrackDataList_acquireItem(ar_session, fetched_track_data_list, i, &fetched_track_data); // Process "fetched_track_data->sample" as desired ArTrackData_release(fetched_track_data); } ArTrackDataList_destroy(fetched_track_data_list);
後續步驟
- 如要瞭解如何使用錄製和播放功能建構自己的應用程式,請參閱錄製和播放程式碼研究室。