Ihrer App ein räumliches Video hinzufügen

Das Jetpack XR SDK unterstützt die Wiedergabe von stereoskopischen Parallel-Videos auf ebenen Oberflächen. Bei einem stereoskopischen Video besteht jeder Frame aus einem Bild für das linke und eins für das rechte Auge, um den Zuschauern einen Eindruck von der Tiefe zu vermitteln.

Sie können nicht-stereoskopische 2D-Videos in Android XR-Apps mit den Standardmedien-APIs rendern, die für die Android-Entwicklung auf anderen Formfaktoren verwendet werden.

Videos im Splitscreen-Modus mit dem Jetpack XR SDK abspielen

Bei einem Side-by-Side-Video wird jeder stereoskopische Frame als zwei Bilder dargestellt, die horizontal nebeneinander angeordnet sind. Die Videoframes oben und unten sind vertikal nebeneinander angeordnet.

Side-by-Side-Video ist kein Codec, sondern eine Möglichkeit, stereoskopische Frames zu organisieren. Es kann also in einem beliebigen der von Android unterstützten Codecs codiert werden.

Du kannst ein Splitscreen-Video mit dem Media3 Exoplayer laden und dann mit dem neuen StereoSurfaceEntity rendern. Rufen Sie StereoSurfaceEntity.create auf, um eine StereoSurfaceEntity zu erstellen, wie im folgenden Beispiel gezeigt.

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-Grad- und 360-Grad-Videos mit dem Jetpack XR SDK abspielen

Alpha02 und höher

Ab Version 1.0.0-alpha02, StereoSurfaceEntity wird die Wiedergabe von 180°-Videos auf halbkugelförmigen Oberflächen und 360°-Videos auf sphärischen Oberflächen unterstützt. Wenn die Videos stereoskopisch sind, sollten die Dateien im Side-by-Side-Format vorliegen.

Im folgenden Code wird gezeigt, wie StereoSurfaceEntity für die Wiedergabe auf einer 180°-Halbkugel und einer 360°-Kugel eingerichtet wird. Wenn Sie diese Canvas-Formen verwenden, positionieren Sie die Oberfläche anhand der Kopfhaltung des Nutzers, um ein immersives Erlebnis zu ermöglichen.

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