Добавьте пространственное видео в свое приложение

Jetpack XR SDK поддерживает воспроизведение стереоскопического видео бок о бок на плоских поверхностях. В стереоскопическом видео каждый кадр состоит из изображения для левого и правого глаза, чтобы дать зрителям ощущение глубины — также известное как стереопсис .

Вы можете визуализировать нестереоскопическое 2D-видео в приложениях Android XR с помощью стандартных API-интерфейсов мультимедиа, используемых для разработки Android на других форм-факторах.

Воспроизведение параллельного видео с помощью Jetpack SceneCore

При видео бок о бок каждый стереокадр представлен в виде двух изображений, расположенных горизонтально рядом друг с другом. Верхние и нижние видеокадры расположены вертикально рядом друг с другом.

Видео Side-by-side — это не кодек, а скорее способ организации стереокадров, то есть его можно кодировать в любом из кодеков, поддерживаемых 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 для XR

Если вам интересно узнать, как воспроизводить видео с помощью Jetpack Compose для XR, узнайте, как добавить поверхность для изображения или видеоконтента .

,

Jetpack XR SDK поддерживает воспроизведение стереоскопического видео бок о бок на плоских поверхностях. В стереоскопическом видео каждый кадр состоит из изображения для левого и правого глаза, чтобы дать зрителям ощущение глубины — также известное как стереопсис .

Вы можете визуализировать нестереоскопическое 2D-видео в приложениях Android XR с помощью стандартных API-интерфейсов мультимедиа, используемых для разработки Android на других форм-факторах.

Воспроизведение параллельного видео с помощью Jetpack SceneCore

При видео бок о бок каждый стереокадр представлен в виде двух изображений, расположенных горизонтально рядом друг с другом. Верхние и нижние видеокадры расположены вертикально рядом друг с другом.

Видео Side-by-side — это не кодек, а скорее способ организации стереокадров, то есть его можно кодировать в любом из кодеков, поддерживаемых 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 для XR

Если вам интересно узнать, как воспроизводить видео с помощью Jetpack Compose для XR, узнайте, как добавить поверхность для изображения или видеоконтента .

,

Jetpack XR SDK поддерживает воспроизведение стереоскопического видео бок о бок на плоских поверхностях. В стереоскопическом видео каждый кадр состоит из изображения для левого и правого глаза, чтобы дать зрителям ощущение глубины — также известное как стереопсис .

Вы можете визуализировать нестереоскопическое 2D-видео в приложениях Android XR с помощью стандартных API-интерфейсов мультимедиа, используемых для разработки Android на других форм-факторах.

Воспроизведение параллельного видео с помощью Jetpack SceneCore

При видео бок о бок каждый стереокадр представлен в виде двух изображений, расположенных горизонтально рядом друг с другом. Верхние и нижние видеокадры расположены вертикально рядом друг с другом.

Видео Side-by-side — это не кодек, а скорее способ организации стереокадров, то есть его можно кодировать в любом из кодеков, поддерживаемых 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 для XR

Если вам интересно узнать, как воспроизводить видео с помощью Jetpack Compose для XR, узнайте, как добавить поверхность для изображения или видеоконтента .

,

Jetpack XR SDK поддерживает воспроизведение стереоскопического видео бок о бок на плоских поверхностях. В стереоскопическом видео каждый кадр состоит из изображения для левого и правого глаза, чтобы дать зрителям ощущение глубины — также известное как стереопсис .

Вы можете визуализировать нестереоскопическое 2D-видео в приложениях Android XR с помощью стандартных API-интерфейсов мультимедиа, используемых для разработки Android на других форм-факторах.

Воспроизведение параллельного видео с помощью Jetpack SceneCore

При видео бок о бок каждый стереокадр представлен в виде двух изображений, расположенных горизонтально рядом друг с другом. Верхние и нижние видеокадры расположены вертикально рядом друг с другом.

Видео Side-by-side — это не кодек, а скорее способ организации стереокадров, то есть его можно кодировать в любом из кодеков, поддерживаемых 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 для XR

Если вам интересно узнать, как воспроизводить видео с помощью Jetpack Compose для XR, узнайте, как добавить поверхность для изображения или видеоконтента .