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.