הוספת סרטון מרחבי לאפליקציה

‏Jetpack XR SDK תומך בהפעלה של סרטונים סטראוסקופיים זה לצד זה על משטחים שטוחים. בסרטון סטריאופותי, כל פריים מורכב מתמונה של העין השמאלית ומתמונה של העין הימנית, כדי לתת לצופים תחושה של עומק.

אפשר ליצור עיבוד וידאו דו-מימדי לא סטריאופוני באפליקציות ל-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

Alpha02 ואילך

החל מגרסה 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.