अपने ऐप्लिकेशन में स्पेस ऑडियो वाला वीडियो जोड़ना

Jetpack XR SDK, सपाट सतहों पर स्टीरियोस्कोपिक साइड-बाय-साइड वीडियो चलाने की सुविधा देता है. स्टीरियोस्कोपिक वीडियो में, हर फ़्रेम में बाईं और दाईं आंख की इमेज होती है. इससे दर्शकों को गहराई का एहसास होता है. इसे स्टीरियोप्सिस भी कहा जाता है.

Android XR ऐप्लिकेशन पर, नॉन-स्टीरियोस्कोपिक 2D वीडियो को रेंडर किया जा सकता है. इसके लिए, दूसरे फ़ॉर्म फ़ैक्टर पर Android डेवलपमेंट के लिए इस्तेमाल किए जाने वाले स्टैंडर्ड मीडिया एपीआई का इस्तेमाल किया जा सकता है.

Jetpack SceneCore का इस्तेमाल करके, स्प्लिट स्क्रीन पर वीडियो चलाना

साथ-साथ चलने वाले वीडियो में, हर स्टीरियोस्कोपिक फ़्रेम को दो इमेज के तौर पर दिखाया जाता है. ये इमेज, एक-दूसरे के बगल में, हॉरिज़ॉन्टल तौर पर व्यवस्थित होती हैं. टॉप और बॉटम वीडियो फ़्रेम, एक-दूसरे के बगल में वर्टिकल तौर पर व्यवस्थित किए जाते हैं.

साइड-बाय-साइड वीडियो कोई कोडेक नहीं है, बल्कि यह स्टीरियोस्कोपिक फ़्रेम को व्यवस्थित करने का एक तरीका है. इसका मतलब है कि इसे Android के साथ काम करने वाले किसी भी कोडेक में एन्कोड किया जा सकता है.

Media3 Exoplayer का इस्तेमाल करके, एक साथ दो वीडियो लोड किए जा सकते हैं. इसके बाद, नए SurfaceEntity का इस्तेमाल करके, उन्हें रेंडर किया जा सकता है. SurfaceEntity बनाने के लिए, SurfaceEntity.create को कॉल करें, जैसा कि इस उदाहरण में दिखाया गया है.

val stereoSurfaceEntity = SurfaceEntity.create(
    xrSession,
    SurfaceEntity.StereoMode.SIDE_BY_SIDE,
    Pose(Vector3(0.0f, 0.0f, -1.5f)),
    SurfaceEntity.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()

Jetpack SceneCore का इस्तेमाल करके, एमवी-एचईवीसी वीडियो चलाना

एमवी-एचईवीसी कोडेक स्टैंडर्ड को ऑप्टिमाइज़ किया गया है और इसे स्टीरियोस्कोपिक वीडियो के लिए डिज़ाइन किया गया है. इससे आपके ऐप्लिकेशन में बेहतर क्वालिटी वाले इमर्सिव वीडियो आसानी से चलाए जा सकते हैं. एमवी-एचईवीसी फ़ाइलों में एक मुख्य स्ट्रीम होती है, जो आम तौर पर बाईं आंख होती है. साथ ही, दूसरी आंख के साथ एक स्टीरियो स्ट्रीम होती है.

साइड-बाय-साइड वीडियो की तरह ही, इसे Media3 Exoplayer का इस्तेमाल करके लोड किया जा सकता है और SurfaceEntity का इस्तेमाल करके रेंडर किया जा सकता है. SurfaceEntity.create को कॉल करते समय, आपको यह बताना होगा कि आपकी एमवी-एचईवीसी फ़ाइल, stereoMode पैरामीटर में बाईं या दाईं प्राइमरी है.

// Create the SurfaceEntity with the StereoMode corresponding to the MV-HEVC content
val stereoSurfaceEntity = SurfaceEntity.create(
    xrSession,
    SurfaceEntity.StereoMode.MULTIVIEW_LEFT_PRIMARY,
    Pose(Vector3(0.0f, 0.0f, -1.5f)),
    SurfaceEntity.CanvasShape.Quad(1.0f, 1.0f)
)
val videoUri = Uri.Builder()
    .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
    .path("mvhevc_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()

Jetpack SceneCore का इस्तेमाल करके, 180-डिग्री और 360-डिग्री वाले वीडियो चलाना

SurfaceEntity में, हेमिस्फ़ेरिकल प्लैटफ़ॉर्म पर 180° वीडियो और स्फ़ेरिकल प्लैटफ़ॉर्म पर 360° वीडियो चलाने की सुविधा मिलती है. radius पैरामीटर, डिफ़ॉल्ट रूप से मीटर में संबंधित सतहों के रेडियल साइज़ को दिखाता है.

यहां दिए गए कोड में, 180° हेमिस्फ़ीर और 360° स्फ़ीर पर वीडियो चलाने के लिए SurfaceEntity को सेट अप करने का तरीका बताया गया है. इन कैनवस आकारों का इस्तेमाल करते समय, उपयोगकर्ता के सिर के पोज़ का फ़ायदा उठाकर, स्क्रीन को सही जगह पर रखें, ताकि बेहतर अनुभव मिल सके.

// Set up the surface for playing a 180° video on a hemisphere.
val hemisphereStereoSurfaceEntity =
    SurfaceEntity.create(
        xrSession,
        SurfaceEntity.StereoMode.SIDE_BY_SIDE,
        xrSession.scene.spatialUser.head?.transformPoseTo(
            Pose.Identity,
            xrSession.scene.activitySpace
        )!!,
        SurfaceEntity.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 =
    SurfaceEntity.create(
        xrSession,
        SurfaceEntity.StereoMode.TOP_BOTTOM,
        xrSession.scene.spatialUser.head?.transformPoseTo(
            Pose.Identity,
            xrSession.scene.activitySpace
        )!!,
        SurfaceEntity.CanvasShape.Vr360Sphere(1.0f),
    )
// ... and use the surface for playing the media.

XR के लिए Jetpack Compose का इस्तेमाल करके, स्पेशल वीडियो चलाना

अगर आपको XR के लिए Jetpack Compose का इस्तेमाल करके वीडियो चलाने का तरीका जानना है, तो इमेज या वीडियो कॉन्टेंट के लिए प्लैटफ़ॉर्म जोड़ने का तरीका जानें.