SDK Jetpack XR hỗ trợ phát video cạnh nhau âm thanh nổi trên các bề mặt phẳng. Với video 3D, mỗi khung hình bao gồm một hình ảnh cho mắt trái và một hình ảnh cho mắt phải để mang đến cho người xem cảm giác về chiều sâu – còn gọi là stereopsis.
Bạn có thể kết xuất video 2D không lập thể trên các ứng dụng Android XR bằng API đa phương tiện tiêu chuẩn dùng để phát triển Android trên các hệ số hình dạng khác.
Phát video cạnh nhau bằng Jetpack SceneCore
Với video cạnh nhau, mỗi khung hình ba chiều được trình bày dưới dạng hai hình ảnh được sắp xếp cạnh nhau theo chiều ngang. Các khung hình video trên cùng và dưới cùng được sắp xếp theo chiều dọc cạnh nhau.
Video cạnh nhau không phải là một bộ mã hoá và giải mã mà là một cách sắp xếp các khung hình ba chiều, tức là video này có thể được mã hoá bằng bất kỳ bộ mã hoá và giải mã nào mà Android hỗ trợ.
Bạn có thể tải video cạnh nhau bằng Media3 Exoplayer, sau đó hiển thị video đó bằng SurfaceEntity
mới. Để tạo SurfaceEntity
, hãy gọi SurfaceEntity.create
như trong ví dụ sau.
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()
Phát video MV-HEVC bằng Jetpack SceneCore
Tiêu chuẩn bộ mã hoá và giải mã MV-HEVC được tối ưu hoá và thiết kế cho video âm thanh nổi, cho phép ứng dụng của bạn phát hiệu quả các video sống động ở chất lượng cao. Tệp MV-HEVC có một luồng chính, thường là mắt trái và một luồng âm thanh nổi với mắt còn lại.
Tương tự như video cạnh nhau, bạn có thể tải video đó bằng Media3 Exoplayer và hiển thị video đó bằng SurfaceEntity
. Bạn cần chỉ định liệu tệp MV-HEVC của mình là chính bên trái hay bên phải trong tham số stereoMode
khi gọi 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()
Phát video 180 độ và 360 độ bằng Jetpack SceneCore
SurfaceEntity
hỗ trợ phát video 180° trên bề mặt hình bán cầu và video 360° trên bề mặt hình cầu. Theo mặc định, tham số radius
đề cập đến kích thước bán kính của các bề mặt tương ứng tính bằng mét.
Mã sau đây cho biết cách thiết lập SurfaceEntity
để phát trên hình bán cầu 180° và hình cầu 360°. Khi sử dụng các hình dạng canvas này, hãy định vị bề mặt bằng cách tận dụng tư thế đầu của người dùng để mang lại trải nghiệm sống động.
// 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.
Phát video không gian bằng Jetpack Compose cho XR
Nếu bạn muốn tìm hiểu cách phát video bằng Jetpack Compose cho XR, hãy tìm hiểu cách thêm nền tảng cho nội dung hình ảnh hoặc video.