android自定义数据,在Android上录制时添加自定义数据

通过Recording&Playback API,您可以记录会话并使用它来代替实时摄像机供稿。但是,这些记录仅包含视频和传感器数据。您还可以将自定义数据添加到会话记录中,并在回放过程中将数据返回给您,就好像它是相机图像的一部分一样。

ARCore不会在录音中自动包括任何自定义数据。相反,它允许您在记录过程中将自定义数据添加到ARCore框架,并在回放过程中从框架中检索相同的数据。取决于您对应用程序进行编程的方式,以使用户可以在回放会话时取回期望的数据。

自定义数据的用例

在记录中添加自定义数据可扩展您的AR应用程序的可能性。以下是一些特定的用例。

随时随地使用AR

过去,用户只能在正确的位置和正确的时间访问AR体验。如果他们想在客厅里放一个AR灯,他们必须站在那里观察灯的外观。通过自定义轨道,他们可以记录自己的客厅一次,并在需要时将虚拟家具添加到场景中。

共同创造AR体验

在没有实时会话要求的情况下,用户可以使用更多选项进行AR编辑,从而允许他们在任何时间和地点创建和访问独特的AR内容。例如,他们可以记录给定的环境,添加增强现实效果并与朋友分享。

先决条件

在继续之前,请确保您了解基本的AR概念以及如何配置ARCore会话。

用自定义数据记录

创建包含自定义数据的会话记录。

使用自定义数据初始化记录

请按照以下步骤使用自定义数据初始化录制。要开始,停止和检查录制会话,请参阅“录制并播放AR会话” 。

爪哇// 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.

UUID trackUUID = UUID.fromString("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator

Track track = new Track(session).setId(trackUUID);

// Add the Track to the recordingConfig.

// recordingConfig must already be configured.

recordingConfig.addTrack(track);科特林// 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.

val trackUUID = UUID.fromString("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator

val track = Track(session).setId(trackUUID)

// Add the Track to the recordingConfig.

// recordingConfig must already be configured.

recordingConfig.addTrack(track)

所有新轨道均被视为单独的记录,每个记录的轨道都占用其自己的UUID。

可选:使用其他数据配置轨道

如果要在以后标识它,则可以使用描述会话记录的其他数据来配置轨道。例如,您可以通过添加一条注释来“标记”一条音轨,该注释描述了录制会话的位置和时间:“该会话是在下午在商场录制的。”

爪哇// Set additional data on this track.

// For example, describe where you recorded the session.

byte[] customTrackData = ...

track.setTrackMetadata(ByteBuffer.wrap(customTrackData));科特林// Set additional data on this track.

// For example, describe where you recorded the session.

val customTrackData: ByteArray = ...

track.setTrackMetadata(ByteBuffer.wrap(customTrackData))

可选:使用MIME类型配置轨道

如果您的应用程序需要与外部工具兼容,则可以使用MIME类型配置轨道,该MIME类型描述轨道中记录的数据类型。如果未指定类型,则数据将分类为application/text 。读取数据时,ARCore会忽略MIME类型。

爪哇// Set a MIME type for compatibility with external tools.

track.setMimeType("text/csv");科特林// Set a MIME type for compatibility with external tools.

track.setMimeType("text/csv")

记录自定义数据轨道

所有自定义轨道数据都记录在Frame 。 AR会话使用session.update()获取框架。将数据记录到帧上的时间与回放过程中返回数据的时间相同。例如,如果您在00:07:02调用值为“ A”的recordTrackData() ,则在00:07:02时会在00:07:02标记处获得“ A”。

爪哇// Place an AR lamp in a room.

if (placeLampButtonWasPressed) {

Lamp lampProduct = Lamp.FLOOR; // a floor lamp

// Convert the lamp data into a byte array.

ByteBuffer lampData = ByteBuffer.wrap(new byte[] { lampProduct.ordinal.toByte() });

frame.recordTrackData(trackUUID, lampData);

}科特林// Place an AR lamp in a room.

if (placeLampButtonWasPressed) {

val lampProduct = Lamp.FLOOR // a floor lamp

// Convert the lamp data into a byte array.

val lampData = ByteBuffer.wrap(byteArrayOf(lampProduct.ordinal.toByte()))

frame.recordTrackData(trackUUID, lampData)

}

播放自定义数据轨道

在回放过程中从会话记录中提取自定义数据。

初始化播放

使用自定义数据初始化播放与初始化常规会话记录的播放相同。

返回自定义数据

调用getUpdatedTrackData()以检索记录在框架上的自定义数据。可以从同一帧中检索多个轨道数据。例如,如果在录制过程中在同一帧上两次调用了recordTrackData() , TrackData在回放过程中将获得两个TrackData实例。

爪哇// Fetch the data recorded on a select frame and place it in a

// container object.

Collection trackDataList = frame.getUpdatedTrackData(trackUUID);科特林// Fetch the data recorded on a select frame and place it in a

// container object.

val trackDataList: Collection = frame.getUpdatedTrackData(trackUUID)

将TrackData放入容器对象后,提取自定义数据的字节。

爪哇// Extract the bytes of custom data from the list of track data.

for (TrackData trackData : trackDataList) {

ByteBuffer bytes = trackData.getData();

Lamp lamp = Lamp.values()[bytes.get()]; // this is the lamp!

}科特林// Extract the bytes of custom data from the list of track data.

for (trackData in trackDataList) {

val bytes = trackData.data

val lamp = Lamp.values()[bytes.get()] // this is the lamp!

}

下一步是什么通过“记录和播放”代码实验室,了解如何使用“记录和播放”构建自己的应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值