L'SDK Jetpack XR supporta la riproduzione di video affiancati stereoscopici su superfici piane. Con i video stereoscopici, ogni fotogramma è composto da un'immagine per l'occhio sinistro e un'immagine per l'occhio destro per dare agli spettatori un senso di profondità.
Puoi eseguire il rendering di video 2D non stereoscopici nelle app per Android XR con le API media standard utilizzate per lo sviluppo di Android su altri fattori di forma.
Riprodurre video affiancati utilizzando l'SDK Jetpack XR
Con i video affiancati, ogni fotogramma stereoscopico viene presentato come due immagini disposte orizzontalmente una accanto all'altra. I frame video superiore e inferiore sono disposti verticalmente uno accanto all'altro.
Il video affiancato non è un codec, ma un modo per organizzare i frame stereoscopici, il che significa che può essere codificato in uno dei codec supportati da Android.
Puoi caricare i video affiancati utilizzando Media3 Exoplayer e poi visualizzarli con il nuovo StereoSurfaceEntity
. Per creare un
StereoSurfaceEntity
, chiama StereoSurfaceEntity.create
, come mostrato nell'
esempio seguente.
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()
Riprodurre video a 180° e a 360° utilizzando l'SDK Jetpack XR
Alpha02 e versioni successive
A partire dalla versione 1.0.0-alpha02
,
StereoSurfaceEntity
supporta la riproduzione di video a 180° su
superfici emisferiche e di video a 360° su superfici sferiche. Se i video sono stereoscopici, i file devono essere in formato affiancato.
Il seguente codice mostra come configurare StereoSurfaceEntity
per la riproduzione su un emisfero a 180° e una sfera a 360°. Quando utilizzi queste forme della tela, posiziona la superficie sfruttando la posizione della testa dell'utente per offrire un'esperienza immersiva.
// 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.