Dodawanie dźwięku przestrzennego do aplikacji

Pakiet Jetpack XR SDK obsługuje odtwarzanie stereoskopowych filmów obok siebie na płaskich powierzchniach. W przypadku filmów stereoskopowych każdy kadr składa się z obrazu dla lewego i prawego oka, aby zapewnić widzom wrażenie głębi.

W aplikacjach na Androida XR możesz renderować niestereoskopowe filmy 2D za pomocą standardowych interfejsów medialnych API używanych do tworzenia aplikacji na Androida na inne formaty.

Odtwarzanie filmów obok siebie za pomocą pakietu Jetpack XR SDK

W przypadku filmu side-by-side każdy kadr stereoskopowy jest wyświetlany jako 2 obrazy ułożone obok siebie. Górne i dolne klatki filmu są ułożone obok siebie w pionie.

Filmy side-by-side nie są kodekami, ale sposobem organizacji stereoskopowych klatek, co oznacza, że można je zakodować za pomocą dowolnego z kodekōw obsługiwanych przez Androida.

Możesz wczytać filmy obok siebie za pomocą Media3 Exoplayer, a następnie renderować je za pomocą nowego StereoSurfaceEntity. Aby utworzyć StereoSurfaceEntity, wywołaj funkcję StereoSurfaceEntity.create, jak w tym przykładzie.

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

Odtwarzanie filmów 180° i 360° za pomocą pakietu Jetpack XR SDK

Alpha02 lub nowsze

Począwszy od wersji 1.0.0-alpha02 StereoSurfaceEntity obsługuje odtwarzanie filmów 180° na powierzchniach półkulistych i filmów 360° na powierzchniach sferycznych. Jeśli filmy są stereoskopowe, pliki powinny być w formacie side-by-side.

Poniższy kod pokazuje, jak skonfigurować StereoSurfaceEntity do odtwarzania na półkuli 180° i kuli 360°. Podczas korzystania z tych kształtów na płótnie umieść powierzchnię, korzystając z ustawienia głowy użytkownika, aby zapewnić realistyczne wrażenia.

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