تتيح حزمة تطوير البرامج Jetpack XR SDK تشغيل فيديوهات الاستيريو بجانب بعضها على الأسطح المستوية. في الفيديوهات المجسمة، يتألّف كل إطار من صورة للعين اليسرى وصورة للعين اليمنى لإضفاء شعورٍ بالبعد لدى المشاهدين، وهو ما يُعرف أيضًا باسم الاستيريوبس.
يمكنك عرض فيديو ثنائي الأبعاد غير مجسم على تطبيقات Android XR باستخدام واجهات برمجة التطبيقات المعيارية للوسائط المستخدَمة لتطوير تطبيقات 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()
تشغيل فيديو MV-HEVC باستخدام Jetpack SceneCore
تم تحسين معيار برنامج ترميز MV-HEVC وتصميمه للفيديو المجسم، ما يتيح لتطبيقك تشغيل الفيديوهات الغامر بكفاءة وبجودة عالية. تحتوي ملفات MV-HEVC على بث أساسي، عادةً ما يكون للعين اليسرى، وبث استيريو مع العين الأخرى.
تمامًا مثل الفيديوهات المعروضة جنبًا إلى جنب، يمكنك تحميلها باستخدام Media3 Exoplayer و
عرضها باستخدام SurfaceEntity
. يجب تحديد
ما إذا كان ملف MV-HEVC هو الملف الأساسي الأيمن أو الأيسر في المَعلمة stereoMode
عند استدعاء SurfaceEntity.create
.
// 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()
تشغيل فيديو بنطاق 180 درجة و360 درجة باستخدام Jetpack SceneCore
يتيح تطبيق SurfaceEntity
تشغيل فيديوهات بنطاق 180 درجة على سطح هرمي وتشغيل فيديوهات بنطاق 360 درجة على سطح كروي. تشير المَعلمة radius
تلقائيًا إلى الحجم الشعاعي للأسطح المعنية بالمتر.
يوضّح الرمز البرمجي التالي كيفية إعداد SurfaceEntity
لتشغيله على سطح بيضاوي مدبّب قياسه
180 درجة وسطح بيضاوي مدبّب قياسه 360 درجة. عند استخدام أشكال اللوحة هذه، يمكنك وضع
السطح من خلال الاستفادة من وضع رأس المستخدم لتقديم تجربة غامرة.
// 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.
تشغيل فيديو مكاني باستخدام Jetpack Compose للواقع الممتد
إذا كنت مهتمًا بمعرفة كيفية تشغيل الفيديو باستخدام Jetpack Compose لتجربة الواقع المعزّز، تعرَّف على كيفية إضافة سطح لعرض محتوى الصور أو الفيديوهات.