Jetpack XR SDK는 평평한 표면에 대한 입체 비디오 나란히 표시 재생을 지원합니다. 입체 동영상의 각 프레임은 왼쪽 눈 이미지와 오른쪽 눈 이미지로 구성되어 시청자에게 깊이감을 줍니다. 이를 입체시라고도 합니다.
다른 폼 팩터의 Android 개발에 사용되는 표준 미디어 API를 사용하여 Android XR 앱에서 비입체 2D 동영상을 렌더링할 수 있습니다.
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를 사용하여 MV-HEVC 동영상 재생
MV-HEVC 코덱 표준은 입체 동영상에 최적화되고 설계되어 앱에서 몰입도 높은 동영상을 우수한 품질로 효율적으로 재생할 수 있습니다. MV-HEVC 파일에는 기본 스트림(일반적으로 왼쪽 눈)과 다른 눈이 포함된 스테레오 스트림이 있습니다.
나란히 표시 동영상과 마찬가지로 Media3 Exoplayer를 사용하여 로드하고 SurfaceEntity
를 사용하여 렌더링할 수 있습니다. SurfaceEntity.create
를 호출할 때 stereoMode
매개변수에서 MV-HEVC 파일이 왼쪽 기본 파일인지 오른쪽 기본 파일인지 지정해야 합니다.
// 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를 사용하여 동영상을 재생하는 방법을 알아보려면 이미지 또는 동영상 콘텐츠의 노출 영역을 추가하는 방법을 알아보세요.