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 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 StereoSurfaceEntity.create
, conforme mostrado no
exemplo abaixo.
stereoSurfaceEntity = StereoSurfaceEntity.create(
xrSession,
StereoSurfaceEntity.StereoMode.SIDE_BY_SIDE,
// 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)),
StereoSurfaceEntity.CanvasShape.Quad(1.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()
Reproduzir vídeos em 180 e 360 graus usando o SDK Jetpack XR
Alpha02 e mais recentes
A partir da versão 1.0.0-alpha02
,
o StereoSurfaceEntity
oferece suporte à reprodução de vídeos em 180 graus em
superfícies hemisféricas e em 360 graus em superfícies esféricas. Se os vídeos forem
estereoscópicos, os arquivos precisam estar em um formato lado a lado.
O código a seguir mostra como configurar StereoSurfaceEntity
para reprodução em um
hemisfério de 180° e uma esfera de 360°. Ao usar essas formas de tela, posicione a
superfície usando a pose da cabeça do usuário para proporcionar uma experiência imersiva.
// Set up the surface for playing a 180° video on a hemisphere.
hemisphereStereoSurfaceEntity =
StereoSurfaceEntity.create(
xrCoreSession,
StereoSurfaceEntity.StereoMode.SIDE_BY_SIDE,
xrCoreSession.spatialUser.head?.transformPoseTo(
Pose.Identity,
xrCoreSession.activitySpace
)!!,
StereoSurfaceEntity.CanvasShape.Vr180Hemisphere(1.0f),
)
// ... and use the surface for playing the media.
// Set up the surface for playing a 360° video on a sphere.
sphereStereoSurfaceEntity =
StereoSurfaceEntity.create(
xrCoreSession,
StereoSurfaceEntity.StereoMode.TOP_BOTTOM,
xrCoreSession.spatialUser.head?.transformPoseTo(
Pose.Identity,
xrCoreSession.activitySpace
)!!,
StereoSurfaceEntity.CanvasShape.Vr360Sphere(1.0f),
)
// ... and use the surface for playing the media.