Ajouter une vidéo spatiale à votre application

Le SDK Jetpack XR prend en charge la lecture de vidéos côte à côte stéréoscopiques sur des surfaces planes. Avec la vidéo stéréoscopique, chaque frame se compose d'une image pour l'œil gauche et d'une image pour l'œil droit afin de donner aux spectateurs une sensation de profondeur.

Vous pouvez afficher des vidéos 2D non stéréoscopiques dans les applications Android XR à l'aide des API multimédias standards utilisées pour le développement Android sur d'autres facteurs de forme.

Lire une vidéo côte à côte à l'aide du SDK Jetpack XR

Avec la vidéo côte à côte, chaque frame stéréoscopique est présenté sous la forme de deux images disposées horizontalement l'une à côté de l'autre. Les images vidéo du haut et du bas sont disposées verticalement l'une à côté de l'autre.

La vidéo côte à côte n'est pas un codec, mais plutôt un moyen d'organiser les images stéréoscopiques. Elle peut donc être encodée dans l'un des codecs compatibles avec Android.

Vous pouvez charger une vidéo côte à côte à l'aide de Media3 Exoplayer, puis l'afficher à l'aide de la nouvelle StereoSurfaceEntity. Pour créer un StereoSurfaceEntity, appelez StereoSurfaceEntity.create, comme illustré dans l'exemple suivant.

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()

Lire des vidéos à 180 et 360 degrés à l'aide du SDK Jetpack XR

Alpha02 et versions ultérieures

À partir de la version 1.0.0-alpha02, StereoSurfaceEntity prend en charge la lecture de vidéos à 180° sur des surfaces hémisphériques et de vidéos à 360° sur des surfaces sphériques. Si les vidéos sont stéréoscopiques, les fichiers doivent être au format côte à côte.

Le code suivant montre comment configurer StereoSurfaceEntity pour la lecture sur un hémisphère à 180 degrés et une sphère à 360 degrés. Lorsque vous utilisez ces formes de canevas, positionnez la surface en exploitant la position de la tête de l'utilisateur pour offrir une expérience immersive.

// 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.