Jetpack XR SDK поддерживает воспроизведение стереоскопического параллельного видео на плоских поверхностях. В стереоскопическом видео каждый кадр состоит из изображения для левого и правого глаза, что дает зрителям ощущение глубины.
Вы можете визуализировать нестереоскопическое 2D-видео в приложениях Android XR с помощью стандартных мультимедийных API, используемых для разработки Android в других форм-факторах.
Воспроизведение параллельного видео с помощью Jetpack XR SDK
При параллельном видео каждый стереоскопический кадр представляется как два изображения, расположенных горизонтально рядом друг с другом. Верхние и нижние видеокадры располагаются вертикально рядом друг с другом.
Параллельное видео — это не кодек, а скорее способ организации стереоскопических кадров, что означает, что оно может быть закодировано любым из кодеков, поддерживаемых Android .
Вы можете загрузить параллельное видео с помощью Media3 Exoplayer , а затем визуализировать его с помощью нового StereoSurfaceEntity
. Чтобы создать StereoSurfaceEntity
, вызовите StereoSurfaceEntity.create
, как показано в следующем примере.
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 и 360 градусов с помощью Jetpack XR SDK.
Альфа02 и выше
Начиная с версии 1.0.0-alpha02
, StereoSurfaceEntity
поддерживает воспроизведение видео 180° на полусферических поверхностях и видео 360° на сферических поверхностях. Если видео стереоскопические, файлы должны быть расположены рядом.
В следующем коде показано, как настроить StereoSurfaceEntity
для воспроизведения в полусфере на 180° и сфере на 360°. При использовании этих фигур холста позиционируйте поверхность, используя положение головы пользователя, чтобы обеспечить эффект погружения.
// 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.