Добавьте пространственное видео в свое приложение

Jetpack XR SDK поддерживает воспроизведение стереоскопического параллельного видео на плоских поверхностях. В стереоскопическом видео каждый кадр состоит из изображения для левого и правого глаза, что дает зрителям ощущение глубины.

Вы можете визуализировать нестереоскопическое 2D-видео в приложениях Android XR с помощью стандартных мультимедийных API, используемых для разработки Android в других форм-факторах.

Воспроизведение параллельного видео с помощью Jetpack XR SDK

При параллельном видео каждый стереоскопический кадр представляется как два изображения, расположенных горизонтально рядом друг с другом. Верхние и нижние видеокадры располагаются вертикально рядом друг с другом.

Параллельное видео — это не кодек, а скорее способ организации стереоскопических кадров, что означает, что оно может быть закодировано любым из кодеков, поддерживаемых Android .

Вы можете загрузить параллельное видео с помощью Media3 Exoplayer , а затем визуализировать его с помощью нового StereoSurfaceEntity . Чтобы создать StereoSurfaceEntity , вызовите StereoSurfaceEntity.create , как показано в следующем примере.

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

Воспроизведение видео с обзором 180 и 360 градусов с помощью Jetpack XR SDK.

Альфа02 и выше

Начиная с версии 1.0.0-alpha02 , StereoSurfaceEntity поддерживает воспроизведение видео 180° на полусферических поверхностях и видео 360° на сферических поверхностях. Если видео стереоскопические, файлы должны быть расположены рядом.

В следующем коде показано, как настроить StereoSurfaceEntity для воспроизведения в полусфере на 180° и сфере на 360°. При использовании этих фигур холста позиционируйте поверхность, используя положение головы пользователя, чтобы обеспечить эффект погружения.

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