Adicionar vídeo espacial ao seu app

O SDK do Jetpack XR oferece suporte à reprodução de vídeo lado a lado estereoscópico em superfícies planas. Com o vídeo estereoscópico, cada frame consiste em uma imagem do olho esquerdo e uma do olho direito para dar aos espectadores uma sensação de profundidade.

É possível renderizar vídeos 2D não estereoscópicos em apps do Android XR com as APIs de mídia padrão usadas para desenvolvimento do Android em outros formatos.

Reproduzir vídeos lado a lado usando o SDK Jetpack XR

No vídeo lado a lado, cada frame estereoscópico é apresentado como duas imagens organizadas horizontalmente uma ao lado da outra. Os frames de vídeo de cima e de baixo são organizados verticalmente um ao lado do outro.

O vídeo lado a lado não é um codec, mas uma maneira de organizar frames estereoscópicos, o que significa que ele pode ser codificado em qualquer um dos codecs compatíveis com o Android.

É possível carregar vídeos lado a lado usando o Exoplayer da Media3 e renderizá-los usando o novo StereoSurfaceEntity. Para criar um StereoSurfaceEntity, chame createStereoSurfaceEntity() no Session, conforme mostrado no exemplo abaixo.

stereoSurfaceEntity = xrSession.createStereoSurfaceEntity(
            StereoSurfaceEntity.StereoMode.SIDE_BY_SIDE,
            Dimensions(2.0F, 2.0F, 0.0F),
            // Position 1.5 meters in front of user
            Pose(Vector3(0.0f, 0.0f, -1.5f), Quaternion(0.0f, 0.0f, 0.0f, 1.0f))
        )
        val videoUri = Uri.Builder()
            .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
            .path(R.raw.sbs_test_video.toString())
            .build()
        val mediaItem = MediaItem.fromUri(videoUri)

        exoPlayer = ExoPlayer.Builder(this).build()
        exoPlayer.setVideoSurface(stereoSurfaceEntity!!.getSurface())
        exoPlayer.setMediaItem(mediaItem)
        exoPlayer.prepare()
        exoPlayer.play()