Das Jetpack XR SDK unterstützt die Wiedergabe von stereoskopischen Side-by-Side-Videos auf ebenen Oberflächen. Bei einem stereoskopischen Video besteht jeder Frame aus einem Bild für das linke und ein Bild für das rechte Auge, um den Zuschauern ein Gefühl für die 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 nebeneinander 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.
val 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)), StereoSurfaceEntity.CanvasShape.Quad(1.0f, 1.0f) ) val videoUri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .path("sbs_video.mp4") .build() val mediaItem = MediaItem.fromUri(videoUri) val 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
werden 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. val hemisphereStereoSurfaceEntity = StereoSurfaceEntity.create( xrSession, StereoSurfaceEntity.StereoMode.SIDE_BY_SIDE, xrSession.spatialUser.head?.transformPoseTo( Pose.Identity, xrSession.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. val sphereStereoSurfaceEntity = StereoSurfaceEntity.create( xrSession, StereoSurfaceEntity.StereoMode.TOP_BOTTOM, xrSession.spatialUser.head?.transformPoseTo( Pose.Identity, xrSession.activitySpace )!!, StereoSurfaceEntity.CanvasShape.Vr360Sphere(1.0f), ) // ... and use the surface for playing the media.