Я успешно могу отобразить видео на изображении при его обнаружении. Проблема в том, что когда я удаляю изображение из этого места, видео все еще продолжает показываться в этом месте, тогда как изображение больше не существует в этом месте. Ниже мой код, когда я использовал для создания ARScene
.
private fun createArScene() {
// Create an ExternalTexture for displaying the contents of the video.
externalTexture = ExternalTexture().also {
mediaPlayer.setSurface(it.surface)
}
// Create a renderable with a material that has a parameter of type 'samplerExternal' so that
// it can display an ExternalTexture.
ModelRenderable.builder()
.setSource(requireContext(), R.raw.augmented_video_model)
.build()
.thenAccept { renderable ->
videoRenderable = renderable
renderable.isShadowCaster = false
renderable.isShadowReceiver = false
renderable.material.setExternalTexture("videoTexture", externalTexture)
}
.exceptionally { throwable ->
Log.e(TAG, "Could not create ModelRenderable", throwable)
return@exceptionally null
}
videoAnchorNode = VideoAnchorNode().apply {
setParent(arSceneView.scene)
}
}
на слушателе обновлений
override fun onUpdate(frameTime: FrameTime) {
val frame = arSceneView.arFrame
if (frame == null || frame.camera.trackingState != TrackingState.TRACKING) {
return
}
val updatedAugmentedImages = frame.getUpdatedTrackables(AugmentedImage::class.java)
for (augmentedImage in updatedAugmentedImages) {
if (activeAugmentedImage != augmentedImage && augmentedImage.trackingState == TrackingState.TRACKING) {
try {
dismissArVideo()
playbackArVideo(augmentedImage)
break
} catch (e: Exception) {
Log.e(TAG, "Could not play video [${augmentedImage.name}]", e)
}
}
}
}
Так что я считаю, что мне нужно постоянно проверять объект externalTexture, нопроблема в том, как моя система узнает, что я больше не фокусируюсь на изображении. чтобы я мог его убить ?