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 mắt trái và một hình ảnh mắt phải để mang lại cho người xem cảm giác về chiều sâu.
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 SDK Jetpack XR
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 StereoSurfaceEntity
mới. Để tạo StereoSurfaceEntity
, hãy gọi StereoSurfaceEntity.create
như trong ví dụ sau.
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), Quaternion(0.0f, 0.0f, 0.0f, 1.0f)),
StereoSurfaceEntity.CanvasShape.Quad(1.0f, 1.0f)
)
val videoUri = Uri.Builder()
.scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
.path(R.raw.sbs_test_video.toString())
.build()
val mediaItem = MediaItem.fromUri(videoUri)
exoPlayer = ExoPlayer.Builder(this).build()
exoPlayer.setVideoSurface(stereoSurfaceEntity.getSurface())
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
exoPlayer.play()
Phát video 180 độ và 360 độ bằng SDK Jetpack XR
Alpha02 trở lên
Kể từ Phiên bản 1.0.0-alpha02
, StereoSurfaceEntity
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. Nếu video là 3D, thì các tệp phải ở định dạng cạnh nhau.
Mã sau đây cho biết cách thiết lập StereoSurfaceEntity
để phát trên một bán cầu 180° và một 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.
hemisphereStereoSurfaceEntity =
StereoSurfaceEntity.create(
xrCoreSession,
StereoSurfaceEntity.StereoMode.SIDE_BY_SIDE,
xrCoreSession.spatialUser.head?.transformPoseTo(
Pose.Identity,
xrCoreSession.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.
sphereStereoSurfaceEntity =
StereoSurfaceEntity.create(
xrCoreSession,
StereoSurfaceEntity.StereoMode.TOP_BOTTOM,
xrCoreSession.spatialUser.head?.transformPoseTo(
Pose.Identity,
xrCoreSession.activitySpace
)!!,
StereoSurfaceEntity.CanvasShape.Vr360Sphere(1.0f),
)
// ... and use the surface for playing the media.