L'SDK Jetpack XR supporta la riproduzione di video affiancati stereoscopici su superfici piane. Con i video stereoscopici, ogni fotogramma è costituito da un'immagine per l'occhio sinistro e un'immagine per l'occhio destro per dare agli spettatori un senso di profondità, noto anche come stereopsi.
Puoi eseguire il rendering di video 2D non stereoscopici sulle app Android XR con le API media standard utilizzate per lo sviluppo di Android su altri fattori di forma.
Riprodurre video affiancati utilizzando Jetpack SceneCore
Con i video affiancati, ogni fotogramma stereoscopico viene presentato come due immagini disposte una accanto all'altra in orizzontale. 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 SurfaceEntity
. Per creare un
SurfaceEntity
, chiama SurfaceEntity.create
, come mostrato nell'
esempio seguente.
val stereoSurfaceEntity = SurfaceEntity.create( xrSession, SurfaceEntity.StereoMode.SIDE_BY_SIDE, Pose(Vector3(0.0f, 0.0f, -1.5f)), SurfaceEntity.CanvasShape.Quad(1.0f, 1.0f) ) val videoUri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .path("sbs_video.mp4") .build() val mediaItem = MediaItem.fromUri(videoUri) val exoPlayer = ExoPlayer.Builder(this).build() exoPlayer.setVideoSurface(stereoSurfaceEntity.getSurface()) exoPlayer.setMediaItem(mediaItem) exoPlayer.prepare() exoPlayer.play()
Riprodurre video MV-HEVC utilizzando Jetpack SceneCore
Lo standard del codec MV-HEVC è ottimizzato e progettato per i video stereoscopici, consentendo alla tua app di riprodurre in modo efficiente video immersivi di alta qualità. I file MV-HEVC hanno uno stream principale, in genere l'occhio sinistro, e uno stream stereo con l'altro occhio.
Come per i video affiancati, puoi caricarli utilizzando Media3 Exoplayer e visualizzarli tramite SurfaceEntity
. Quando chiami SurfaceEntity.create
, devi specificare se il file MV-HEVC è principale sinistro o destro nel parametro stereoMode
.
// Create the SurfaceEntity with the StereoMode corresponding to the MV-HEVC content val stereoSurfaceEntity = SurfaceEntity.create( xrSession, SurfaceEntity.StereoMode.MULTIVIEW_LEFT_PRIMARY, Pose(Vector3(0.0f, 0.0f, -1.5f)), SurfaceEntity.CanvasShape.Quad(1.0f, 1.0f) ) val videoUri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .path("mvhevc_video.mp4") .build() val mediaItem = MediaItem.fromUri(videoUri) val exoPlayer = ExoPlayer.Builder(this).build() exoPlayer.setVideoSurface(stereoSurfaceEntity.getSurface()) exoPlayer.setMediaItem(mediaItem) exoPlayer.prepare() exoPlayer.play()
Riprodurre video a 180 e 360 gradi utilizzando Jetpack SceneCore
SurfaceEntity
supporta la riproduzione di video a 180° su superfici emisferiche e di video a 360° su superfici sferiche. Per impostazione predefinita, il parametro radius
si riferisce alle dimensioni radiali delle rispettive superfici in metri.
Il codice seguente mostra come configurare SurfaceEntity
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. val hemisphereStereoSurfaceEntity = SurfaceEntity.create( xrSession, SurfaceEntity.StereoMode.SIDE_BY_SIDE, xrSession.scene.spatialUser.head?.transformPoseTo( Pose.Identity, xrSession.scene.activitySpace )!!, SurfaceEntity.CanvasShape.Vr180Hemisphere(1.0f), ) // ... and use the surface for playing the media.
// Set up the surface for playing a 360° video on a sphere. val sphereStereoSurfaceEntity = SurfaceEntity.create( xrSession, SurfaceEntity.StereoMode.TOP_BOTTOM, xrSession.scene.spatialUser.head?.transformPoseTo( Pose.Identity, xrSession.scene.activitySpace )!!, SurfaceEntity.CanvasShape.Vr360Sphere(1.0f), ) // ... and use the surface for playing the media.
Riprodurre video spaziali utilizzando Jetpack Compose per XR
Se vuoi scoprire come riprodurre video utilizzando Jetpack Compose per XR, scopri come aggiungere una superficie per contenuti di immagini o video.