Media3 1.11 đã ra mắt. Bản phát hành này hỗ trợ phần lớn các ứng dụng đa phương tiện hàng đầu trên Android, mang đến các tính năng mới, bản sửa lỗi và điểm cải tiến trên các thành phần phát, chỉnh sửa và giao diện người dùng. Chúng tôi đang mở rộng các mô-đun giao diện người dùng Jetpack Compose bằng các khe Player có thể tuỳ chỉnh và các giá trị mặc định dễ sử dụng, cử chỉ tương tác, trình theo dõi trạng thái và tính năng tải trước video ngắn bằng PlayerPool. Chúng tôi cũng đã hiện đại hoá chế độ tích hợp Media3 Cast bằng cách hỗ trợ Trình chuyển đổi đầu ra SystemUI, ra mắt tiện ích mạng ứng dụng HTTP Ktor mới và thêm các tiện ích kết hợp mới cho tệp Ogg và WAV.
Hãy đọc tiếp để biết những điểm nổi bật chính và xem ghi chú phát hành đầy đủ để biết danh sách toàn diện về các thay đổi.
Giao diện người dùng phát và Compose
Khi Android trở thành nền tảng ưu tiên Compose, chúng tôi sẽ tiếp tục mở rộng các mô-đun media3-ui-compose và media3-ui-compose-material3. Bản cập nhật này cung cấp khả năng kiểm soát chi tiết hơn đối với bố cục trình phát, các mẫu tương tác phong phú hơn và khả năng tích hợp sâu hơn với Material3.
Bố cục trình phát có thể tuỳ chỉnh
Giờ đây, thành phần kết hợp Trình phát Material 3 hỗ trợ các khe nội dung chuyên dụng cho topControls, centerControls, bottomControls và errorOverlay. Bạn có thể thả Thành phần kết hợp của riêng mình hoặc sử dụng các giá trị mặc định có sẵn được xuất bản trong PlayerDefaults:
Player( player = player, topControls = { PlayerDefaults.TopControls(player) }, centerControls = { PlayerDefaults.CenterControls(player) }, bottomControls = { PlayerDefaults.BottomControls(player) }, )
Thành phần kết hợp Player cũng tích hợp tính năng hỗ trợ FocusRequester, cho phép điều hướng liền mạch bằng D-pad và bàn phím trên Android TV, thiết bị có thể gập lại và môi trường máy tính.
Cử chỉ và nút điều khiển tốc độ phát
PlaybackSpeedState hiện cung cấp API tua đi/chậm. demo-compose app minh hoạ điều này bằng cử chỉ nhấn và giữ để tua nhanh và cử chỉ nhấn đúp để tìm kiếm. Kết hợp với ProgressSlider được giới thiệu trong phiên bản 1.10, giao diện người dùng trình phát Compose hiện cung cấp sẵn các tương tác phong phú bằng thao tác chạm và cử chỉ.
Tải trước video ngắn bằng PlayerPool
Đối với các ứng dụng có nguồn cấp dữ liệu đa phương tiện dạng cửa sổ trượt (ví dụ: video dạng ngắn dọc), việc quản lý hiệu quả nhiều phiên bản ExoPlayer là một thách thức thường gặp. Media3 1.11 giới thiệu PlayerPool (trong common-ktx) và rememberPooledPlayer (trong ui-compose) để tự động xử lý việc tái chế và tải trước trình phát.
ShortFormPlayerScreen mới trong demo-compose cho thấy điều này đang hoạt động, một nguồn cấp dữ liệu phân trang theo chiều dọc, trong đó các trình phát được gộp, tải trước và tái chế liền mạch khi người dùng cuộn.
MiniController
Một MiniController Composable mới trong media3-ui-compose-material3 cung cấp một thanh phát nhỏ gọn, hiển thị tiêu đề, nghệ sĩ, ảnh bìa và tiến trình của mục hiện tại cùng với các nút điều khiển phát/tạm dừng. Vì tất cả các thành phần kết hợp mặc định của chúng tôi trong media3-ui-compose-material3, MiniController hỗ trợ tích hợp Màu động Material3, cho phép thành phần này tự động điều chỉnh theo giao diện hình nền của người dùng.Điều này rất phù hợp với các thành phần có thể tương tác ở cuối màn hình hoặc trình phát thu nhỏ liên tục, chẳng hạn như khi người dùng duyệt xem nội dung hoặc trong các phiên truyền đang hoạt động.
Mở rộng phần tử giữ trạng thái cho siêu dữ liệu và lỗi
Chúng tôi đã thêm một số trình giữ trạng thái phản ứng mới vào media3-ui-compose:
rememberCurrentMediaItemState– quan sát siêu dữ liệu về mục đang phátrememberPlaylistState– quan sát toàn bộ danh sách phát và các chỉ mục đang hoạt độngrememberErrorState– theo dõi lỗi phát, với thành phần kết hợpErrorTexttương ứng vàErrorOverlaymặc định trong Material3
Chúng tôi sẽ tiếp tục bổ sung các tính năng mới và nhiều lựa chọn tuỳ chỉnh hơn trong các bản phát hành sắp tới. Vui lòng chia sẻ ý kiến của bạn về công cụ theo dõi vấn đề của dự án.
Tích hợp Cast hiện đại
Media3 1.11 cập nhật tiện ích Truyền bằng các lựa chọn cấu hình có lập trình và hỗ trợ định tuyến ở cấp hệ điều hành.
CastParams và Nút chuyển đầu ra SystemUI
Giờ đây, bạn có thể định cấu hình tiện ích Truyền bằng CastParams:
val castParams = CastParams.Builder() .setShowSystemOutputSwitcherOnCastButtonClick(true) .build() Cast.getSingletonInstance(context).initialize(castParams)
Chế độ cài đặt setShowSystemOutputSwitcherOnCastIconClick(true) định cấu hình MediaRouteButton để mở Trình chuyển đổi đầu ra SystemUI gốc của Android trên các phiên bản nền tảng được hỗ trợ, mang đến trải nghiệm thống nhất cho người dùng khi chọn đầu ra.
Trạng thái MediaRouteButton phản ứng trong Compose
Giờ đây, các ứng dụng dùng Jetpack Compose có thể dễ dàng thêm nút Tuyến nội dung nghe nhìn (còn gọi là nút Truyền), nút này sẽ tự động theo dõi trạng thái hộp thoại và cập nhật cho phù hợp. Không cần thêm logic nào khác khi dùng cùng với CastPlayer của Media3!
@Composable fun TopAppBarWithCast() { Row { Text(text = "App Title") MediaRouteButton() } }
Các điểm cải tiến chính về việc phát và phiên
Eclipsa Video – Siêu dữ liệu HDR động HAGC (API 37 trở lên)
Eclipsa Video hứa hẹn mang đến trải nghiệm HDR nhất quán hơn trên các thiết bị, với màu trắng HDR cơ bản nhất quán, khoảng không thích ứng tuỳ thuộc vào màn hình và môi trường xung quanh, đảm bảo ý định sáng tạo được giữ nguyên trên tất cả các thiết bị.
ExoPlayer hiện hỗ trợ phát siêu dữ liệu có dấu thời gian HAGC (ST 2094-50) cần thiết cho nội dung nghe nhìn tăng dần (MP4, Matroska). Trình phát sẽ tự động hợp nhất các bản siêu dữ liệu HAGC với bản video liên kết và phân phối siêu dữ liệu ngoài băng tần cho bộ giải mã trên các thiết bị có API 37 trở lên. Trên các thiết bị cũ, ExoPlayer sẽ chuyển sang cung cấp trải nghiệm phát lại HDR tiêu chuẩn mà không cần điều chỉnh.
Tiện ích ứng dụng HTTP Ktor mới
Một mô-đun tiện ích media3-datasource-ktor mới cung cấp KtorDataSource, được hỗ trợ bởi ngăn xếp HTTP Ktor. Đây là một giải pháp thay thế ưu tiên Kotlin và thân thiện với coroutine cho các mô-đun nguồn dữ liệu Cronet và OkHttp hiện có.
Kết nối MediaSession không đồng bộ
MediaSession.Callback hiện bao gồm onConnectAsync(), cho phép bạn xử lý các lần kết nối bộ điều khiển không đồng bộ – ví dụ: để xác minh quyền uỷ quyền trước khi chấp nhận một kết nối. Bạn có thể trả về một Future ngay lập tức bằng Futures.immediateFuture(ConnectionResult) cho cùng một hành vi như onConnect hiện có.
override fun onConnectAsync( session: MediaSession, controller: MediaSession.ControllerInfo ): ListenableFuture<MediaSession.ConnectionResult> { return authenticateControllerAsync(controller) }
Chế độ mặc định an toàn hơn cho MediaSession
Đối với những ứng dụng không ghi đè onConnect hoặc onConnectAsync trong MediaSession.Callback, thư viện hiện mặc định là một cấu hình an toàn hơn. Cụ thể, theo mặc định, dữ liệu phiên sẽ không được chia sẻ với các bộ điều khiển không đáng tin cậy nữa. Điều này có nghĩa là các ứng dụng bên thứ ba hoặc ứng dụng không phải hệ thống không có quyền truy cập vào thông báo sẽ bị hạn chế truy cập vào dữ liệu phiên, trừ phi bạn triển khai rõ ràng các phương thức gọi lại này để uỷ quyền kết nối.
Cách triển khai Muxer mới và phân tích cú pháp vùng chứa
OggMuxer và WavMuxer
Chúng tôi đã thêm 2 bộ trộn mới chuyên dụng: OggMuxer để trộn các luồng OPUS và VORBIS thành các tệp .ogg tiêu chuẩn, và WavMuxer để tạo các tệp âm thanh PCM .wav không nén và dấu phẩy động.
Phân tích cú pháp vùng chứa và theo dõi các tham chiếu
- MP4 Track References (
tref):Mp4Muxer.addTrackReferencecho phép liên kết siêu dữ liệu phụ thuộc hoặc các tệp phụ trợ với luồng video chính. - Trích xuất phân cảnh: Phân cảnh QuickTime và Nero trong tệp MP4 (
.m4a,.m4b) và phân cảnh Matroska hiện được trích xuất dưới dạng các mục siêu dữ liệuChapterđể điều hướng sách nói và podcast.
Vui lòng sử dụng công cụ theo dõi lỗi để báo cáo mọi lỗi hoặc nếu bạn có thắc mắc hoặc yêu cầu về tính năng. Chúng tôi rất mong nhận được ý kiến của bạn!
-
Hướng dẫnChào mừng bạn quay lại loạt bài đăng trên blog "Xây dựng ứng dụng Android thông minh", nơi chúng tôi sẽ lấy một ứng dụng Android cơ bản và biến đổi ứng dụng đó thành một trải nghiệm được cá nhân hoá, thông minh và có tính đại diện. Trong bài đăng trước, chúng tôi đã giới thiệu Jetpacker, ứng dụng minh hoạ mà chúng tôi sẽ sử dụng trong suốt loạt bài này.
Caren Chang • 6 phút đọc -
Hướng dẫnJetpacker là một ứng dụng trình diễn kỹ thuật do nhóm của chúng tôi xây dựng từ đầu cho Google I/O năm nay (được xây dựng bằng Antigravity). Về cơ bản, Jetpacker giúp người dùng lên kế hoạch, khám phá và tận hưởng chuyến phiêu lưu lớn tiếp theo của họ.
Jolanda Verhoef • 4 phút đọc -
Hướng dẫnChào mừng bạn quay lại loạt bài đăng trên blog "Xây dựng ứng dụng Android thông minh", nơi chúng tôi sẽ lấy một ứng dụng Android cơ bản và biến đổi ứng dụng đó thành một trải nghiệm được cá nhân hoá, thông minh và có tính đại diện. Trong bài đăng trước, chúng ta đã tìm hiểu cách tận dụng Firebase AI Logic để tạo các tính năng AI kết hợp và được lưu trữ trên đám mây.
Ben Weiss • 6 phút đọc
Nhận thông tin chi tiết mới nhất về hoạt động phát triển trên Android trong hộp thư đến của bạn mỗi tuần.