Pakiet Jetpack XR SDK obsługuje odtwarzanie stereoskopowego wideo obok siebie na płaskich powierzchniach. W przypadku filmów stereoskopowych każdy kadr składa się z obrazu dla lewego i prawego oka, aby zapewnić widzom wrażenie głębi, zwane też stereopsją.
Niestereoskopowe filmy 2D możesz renderować w aplikacjach na Androida XR za pomocą standardowych interfejsów API multimediów używanych do tworzenia aplikacji na Androida na inne formaty.
Odtwarzanie filmów obok siebie za pomocą Jetpack SceneCore
W przypadku filmu side-by-side każdy kadr stereoskopowy jest wyświetlany jako 2 obrazy ułożone obok siebie. Górne i dolne klatki filmu są ułożone obok siebie w pionie.
Film w formacie side-by-side nie jest kodekiem, ale sposobem organizacji stereoskopowych klatek. Oznacza to, że można go zakodować za pomocą dowolnego z kodekōw obsługiwanych przez Androida.
Możesz wczytać filmy obok siebie za pomocą Media3 Exoplayer, a następnie renderować je za pomocą nowego SurfaceEntity
. Aby utworzyć SurfaceEntity
, wywołaj funkcję SurfaceEntity.create
, jak w tym przykładzie.
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()
Odtwarzanie filmów w formacie MV-HEVC za pomocą Jetpacka SceneCore
Standard kodeka MV-HEVC jest zoptymalizowany i zaprojektowany pod kątem wideo stereoskopowego, co pozwala aplikacji efektywnie odtwarzać wciągające filmy w wysokiej jakości. Pliki MV-HEVC mają strumień główny, zwykle lewe oko, oraz strumień stereo z drugim okiem.
Podobnie jak w przypadku filmów obok siebie, możesz go wczytać za pomocą Media3 Exoplayer i renderować za pomocą SurfaceEntity
. Podczas wywoływania funkcji SurfaceEntity.create
należy określić, czy plik MV-HEVC jest lewym czy prawym kanałem głównym w parametrze 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()
Odtwarzanie filmów 180° i 360° za pomocą Jetpack SceneCore
SurfaceEntity
obsługuje odtwarzanie filmów 180° na powierzchniach półkulistych i filmów 360° na powierzchniach sferycznych. Parametr radius
domyślnie odnosi się do rozmiaru promieniowego odpowiednich powierzchni w metrach.
Poniższy kod pokazuje, jak skonfigurować SurfaceEntity
do odtwarzania na półkuli 180° i kuli 360°. Podczas korzystania z tych kształtów na płótnie umieść powierzchnię, korzystając z ułożenia głowy użytkownika, aby zapewnić wciągające wrażenia.
// 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.
Odtwarzanie filmów przestrzennych za pomocą Jetpack Compose for XR
Jeśli chcesz dowiedzieć się, jak odtwarzać filmy za pomocą Jetpack Compose for XR, dowiedz się, jak dodać powierzchnię dla obrazu lub filmu.