Media3

Các thư viện hỗ trợ cho trường hợp sử dụng nội dung nghe nhìn.
Bản cập nhật mới nhất Bản phát hành ổn định Bản phát hành dùng thử Bản phát hành beta Bản phát hành alpha
Ngày 16 tháng 2 năm 2023 - 1.0.0-rc01 - -

Khai báo phần phụ thuộc

Để thêm một phần phụ thuộc trên Media3, bạn phải thêm kho lưu trữ Google Maven vào dự án. Đọc nội dung Kho lưu trữ Maven của Googleđể biết thêm thông tin.

Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle cho ứng dụng hoặc mô-đun của mình:

Groovy

dependencies {
    def media3_version = "1.3.0"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For SmoothStreaming playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation "androidx.media3:media3-exoplayer-midi:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // For applying effects on video frames
    implementation "androidx.media3:media3-effect:$media3_version"

    // For muxing media files
    implementation "androidx.media3:media3-muxer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for reading and writing media containers
    implementation "androidx.media3:media3-container:$media3_version"
    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.3.0"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For SmoothStreaming playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation("androidx.media3:media3-exoplayer-midi:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // For applying effects on video frames
    implementation("androidx.media3:media3-effect:$media3_version")

    // For muxing media files
    implementation("androidx.media3:media3-muxer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for reading and writing media containers
    implementation("androidx.media3:media3-container:$media3_version")
    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
}

Để biết thêm thông tin về các phần phụ thuộc, hãy xem nội dung Thêm phần phụ thuộc cho bản dựng.

Ý kiến phản hồi

Phản hồi của bạn giúp cải thiện Jetpack. Bạn có thể sử dụng trình theo dõi vấn đề Media3 để tìm câu trả lời cho các thắc mắc, lỗi đã biết cũng như yêu cầu tính năng, đồng thời để báo cáo lỗi mới.

Phiên bản 1.0.0

Phiên bản 1.0.0-rc01

Ngày 16 tháng 2 năm 2023

Phát hành androidx.media3:media3-*:1.0.0-rc01. Phiên bản 1.0.0-rc01 bao gồm các thay đổi sau.

Bản phát hành này tương ứng với phiên bản ExoPlayer 2.18.3.

  • Thư viện Core:
    • Chỉnh sửa logic sắp xếp bộ giải mã của trình kết xuất để duy trì các lựa chọn ưu tiên của MediaCodecSelector, ngay cả khi bộ giải mã báo cáo có thể không phát được nội dung nghe nhìn một cách hiệu quả. Ví dụ: với bộ chọn mặc định, bộ giải mã phần cứng chỉ hỗ trợ chức năng sẽ được ưu tiên hơn bộ giải mã phần mềm hỗ trợ đầy đủ định dạng (#10604).
    • Thêm ExoPlayer.Builder.setPlaybackLooper để đặt một luồng phát lại có sẵn cho một thực thể ExoPlayer mới.
    • Cho phép xoá các trình trợ giúp trình quản lý tải xuống (#10776).
    • Thêm tham số vào BasePlayer.seekTo để cũng cho biết lệnh được dùng để tìm kiếm.
    • Sử dụng giao diện khi tải các đối tượng có thể vẽ trên API 21 trở lên (#220).
    • Thêm ConcatenatingMediaSource2 để cho phép kết hợp nhiều mục nội dung nghe nhìn vào một cửa sổ (#247).
  • Công cụ trích xuất:
    • Gửi ParserException thay vì NullPointerException nếu bảng mẫu (stbl) thiếu phần mô tả mẫu bắt buộc (stsd) khi phân tích cú pháp các nguyên tử trak.
    • Bỏ qua chính xác các mẫu khi tìm kiếm trực tiếp ở khung đồng bộ hoá trong fMP4 (#10941).
  • Âm thanh:
    • Sử dụng tốc độ bit định dạng âm thanh nén để tính dung lượng bộ nhớ đệm tối thiểu cho AudioTrack trong các lượt phát trực tiếp (truyền qua).
  • Văn bản:
    • Sửa TextRenderer chuyển chỉ mục (âm) không hợp lệ đến Subtitle.getEventTime nếu tệp phụ đề không chứa chú thích.
    • SubRip: Thêm hỗ trợ cho các tệp UTF-16 nếu các tệp đó bắt đầu bằng dấu thứ tự byte.
  • Siêu dữ liệu:
    • Phân tích cú pháp nhiều giá trị được phân tách bằng giá trị rỗng trên các khung ID3, như được ID3 phiên bản 2.4 cho phép.
    • Thêm MediaMetadata.mediaType để biểu thị loại nội dung hoặc loại thư mục được siêu dữ liệu mô tả.
    • Thêm MediaMetadata.isBrowsable để thay thế cho MediaMetadata.folderType. Loại thư mục sẽ không được dùng trong bản phát hành tiếp theo.
  • DASH (Truyền phát thích ứng động qua HTTP):
    • Thêm phân tích cú pháp đầy đủ cho các bộ điều chỉnh hình ảnh, bao gồm cả số lượng thẻ thông tin (#3752).
  • Giao diện người dùng:
    • Sửa PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) không dùng nữa để đảm bảo các thay đổi về chế độ hiển thị được truyền đến trình nghe đã đăng ký (#229).
    • Sửa thứ tự của các nút điều khiển trình phát ở giữa trong PlayerView khi dùng bố cục từ phải sang trái (RTL) (#227).
  • Phiên:
    • Thêm SimpleBasePlayer trừu tượng để giúp triển khai giao diện Player cho các trình phát tuỳ chỉnh.
    • Thêm phương thức hỗ trợ để chuyển đổi mã phiên của nền tảng thành Media3 SessionToken (#171).
    • Sử dụng onMediaMetadataChanged để kích hoạt bản cập nhật của phiên nội dung nghe nhìn trên nền tảng (#219).
    • Thêm phiên nội dung nghe nhìn làm đối số của getMediaButtons() trong DefaultMediaNotificationProvider và sử dụng danh sách không thể thay đổi để đảm bảo rõ ràng (#216).
    • Thêm trình nghe gọi lại onSetMediaItems để cung cấp phương thức sửa đổi/đặt danh sách MediaItem, bắt đầu chỉ mục và vị trí theo phiên trước khi đặt vào Trình phát (#156).
    • Tránh dùng tính năng phát hiện thao tác nhấn đúp cho các sự kiện của nút nội dung nghe nhìn không phải Bluetooth (#233).
    • Giúp QueueTimeline hoạt động mạnh mẽ hơn trong trường hợp trạng thái phiên cũ không rõ ràng (#241).
  • Siêu dữ liệu:
    • Phân tích cú pháp nhiều giá trị được phân tách bằng giá trị rỗng trên các khung ID3, như được ID3 phiên bản 2.4 cho phép.
    • Thêm MediaMetadata.mediaType để biểu thị loại nội dung hoặc loại thư mục được siêu dữ liệu mô tả.
    • Thêm MediaMetadata.isBrowsable để thay thế cho MediaMetadata.folderType. Loại thư mục sẽ không được dùng trong bản phát hành tiếp theo.
  • Tiện ích truyền:
    • Chuyển phiên bản Cast SDK lên phiên bản 21.2.0.
  • Tiện ích IMA:
    • Xoá trình nghe của trình phát thuộc ImaServerSideAdInsertionMediaSource trên luồng ứng dụng để tránh các vấn đề về luồng.
    • Thêm một thuộc tính focusSkipButtonWhenAvailable vào ImaServerSideAdInsertionMediaSource.AdsLoader.Builder để yêu cầu tập trung vào nút bỏ qua trên các thiết bị TV và đặt thuộc tính này là true theo mặc định.
    • Thêm một phương thức focusSkipButton() vào ImaServerSideAdInsertionMediaSource.AdsLoader để yêu cầu tập trung vào nút bỏ qua theo lập trình.
    • Chuyển SDK IMA lên phiên bản 3.29.0.
  • Ứng dụng minh hoạ:
    • Yêu cầu quyền gửi thông báo cho thông báo tải xuống trong thời gian chạy (#10884).

Phiên bản 1.0.0-beta03

Ngày 22 tháng 11 năm 2022

Phát hành androidx.media3:media3-*:1.0.0-beta03. Phiên bản 1.0.0-beta03 bao gồm các thay đổi sau.

Bản phát hành này tương ứng với phiên bản ExoPlayer 2.18.2.

  • Thư viện Core:
    • Thêm ExoPlayer.isTunnelingEnabled để kiểm tra xem tính năng tạo đường hầm có đang bật cho các bản nhạc hiện được chọn hay không (#2518).
    • Thêm WrappingMediaSource để đơn giản hoá việc gói một MediaSource duy nhất (#7279).
    • Loại bỏ vùng đệm phụ trước khi hành động phát bị treo do không đủ bộ nhớ.
    • Đóng khối Tracing "doSomeWork" khi bật chế độ giảm tải.
    • Dùng các lệnh tìm kiếm nhanh trong PlaybackStatsListener (#180) để khắc phục vấn đề khi theo dõi phiên.
    • Gửi lệnh gọi lại onMediaItemTransition bị thiếu khi gọi seekToNext hoặc seekToPrevious trong danh sách phát một mục duy nhất (#10667).
    • Thêm Player.getSurfaceSize trả về kích thước của nền tảng hiển thị video.
    • Sửa lỗi xoá trình nghe trong quá trình phát hành trình phát có thể gây ra IllegalStateException (#10758).
  • Tạo:
    • Thực thi compileSdkVersion tối thiểu để tránh lỗi biên dịch (#10684).
    • Tránh phát hành khối khi được đưa vào một bản dựng gradle khác.
  • Chọn bản nhạc:
    • Ưu tiên các bản nhạc khác thay vì Dolby Vision nếu màn hình không hỗ trợ Dolby Vision. (#8944).
  • Nội dung đã tải xuống:
    • Khắc phục vòng lặp vô hạn tiềm ẩn trong ProgressiveDownloader do việc tải xuống và phát đồng thời với cùng một PriorityTaskManager (#10570).
    • Thông báo tải xuống sẽ xuất hiện ngay lập tức (#183).
    • Giới hạn việc xoá các tệp tải xuống song song ở mức 1 để tránh tạo quá nhiều luồng (thread) (#10458).
  • Video:
    • Dùng thử bộ giải mã thay thế cho Dolby Vision nếu màn hình không hỗ trợ Dolby Vision. (#9794).
  • Âm thanh:
    • Dùng SingleThreadExecutor để phát hành thực thể AudioTrack nhằm tránh lỗi OutOfMemory khi phát hành nhiều trình phát cùng một lúc (#10057).
    • Thêm AudioOffloadListener.onExperimentalOffloadedPlayback cho trạng thái giảm tải AudioTrack. (#134).
    • Đặt AudioTrackBufferSizeProvider làm giao diện công khai.
    • Thêm ExoPlayer.setPreferredAudioDevice để thiết lập thiết bị đầu ra âm thanh ưu tiên (#135).
    • Đổi tên androidx.media3.exoplayer.audio.AudioProcessor thành androidx.media3.common.audio.AudioProcessor.
    • Liên kết âm thanh 8 kênh và 12 kênh với mặt nạ kênh 7.1 và 7.1.4 tương ứng trên mọi phiên bản Android (#10701).
  • Siêu dữ liệu:
    • Bạn hiện có thể định cấu hình MetadataRenderer để kết xuất siêu dữ liệu ngay khi có. Tạo một thực thể với MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) để chỉ định xem trình kết xuất sẽ xuất siêu dữ liệu sớm hay đồng bộ với vị trí trình phát.
  • DRM (Quản lý bản quyền nội dung số):
    • Tìm cách sửa lỗi trong quá trình triển khai Android 13 ClearKey có trả về một URL giấy phép không trống nhưng không hợp lệ.
    • Sửa lỗi setMediaDrmSession failed: session not opened khi chuyển đổi giữa các giao thức DRM trong một danh sách phát (ví dụ: Widevine sang ClearKey).
  • Văn bản:
    • CEA-608: Đảm bảo các lệnh chuyển đổi dịch vụ trên trường 2 được xử lý chính xác (#10666).
  • DASH (Truyền phát thích ứng động qua HTTP):
    • Phân tích cú pháp EventStream.presentationTimeOffset từ các tệp kê khai (#10460).
  • Giao diện người dùng:
    • Sử dụng cơ chế ghi đè hiện tại của trình phát làm giá trị đặt trước trong TrackSelectionDialogBuilder (#10429).
  • Phiên:
    • Đảm bảo các lệnh luôn được thực thi theo đúng thứ tự ngay cả khi một số lệnh yêu cầu độ phân giải không đồng bộ (#85).
    • Thêm DefaultMediaNotificationProvider.Builder để tạo các thực thể DefaultMediaNotificationProvider. Trình tạo có thể định cấu hình mã thông báo, mã kênh thông báo và tên kênh thông báo mà nhà cung cấp sử dụng. Ngoài ra, hãy thêm phương thức DefaultMediaNotificationProvider.setSmallIcon(int) để thiết lập biểu tượng thông báo nhỏ. (#104).
    • Đảm bảo các lệnh được gửi trước MediaController.release() không bị xoá (#99).
    • SimpleBitmapLoader có thể tải bitmap từ các URI file:// (#108).
    • Sửa câu nhận định ngăn MediaController tìm kiếm quảng cáo trong một khoảng thời gian (#122).
    • Khi quá trình phát kết thúc, MediaSessionService sẽ dừng trên nền trước và một thông báo sẽ hiển thị để bắt đầu phát lại mục nội dung nghe nhìn đã phát gần đây nhất (#112).
    • Không bắt đầu dịch vụ trên nền trước với ý định tạm dừng đang chờ xử lý (#167).
    • Ẩn "huy hiệu" theo cách thủ công được liên kết với thông báo do DefaultNotificationProvider tạo trên API 26 và API 27 (huy hiệu sẽ tự động ẩn trên API 28 trở lên) (#131).
    • Sửa lỗi kết nối liên kết thứ hai từ MediaSession cũ với Media3 MediaController gây ra IllegalStateExceptions (#49).
  • RTSP (Giao thức truyền tin thời gian thực):
    • Thêm hoạt động xử lý gói phân tách H263 (#119).
    • Thêm tính năng hỗ trợ cho MP4A-LATM (#162).
  • IMA:
    • Thêm thời gian chờ để tải thông tin quảng cáo nhằm xử lý các trường hợp SDK IMA bị treo khi tải quảng cáo (#10510).
    • Ngăn việc bỏ qua quảng cáo trong video khi chuyển đến cuối nội dung (#10685).
    • Tính toán chính xác thời lượng của các buổi phát trực tiếp có quảng cáo được chèn phía máy chủ, ví dụ: DAI (Chèn quảng cáo động) IMA (#10764).
  • Tiện ích FFmpeg:
    • Thêm các cờ mới bắt buộc để liên kết thư viện FFmpeg với NDK 23.1.7779620 trở lên (#9933).
  • Tiện ích AV1:
    • Cập nhật phiên bản CMake để tránh tình trạng không tương thích với các bản phát hành Android Studio mới nhất (#9933).
  • Tiện ích truyền (cast):
    • Triển khai getDeviceInfo() để có thể xác định CastPlayer khi kiểm soát hoạt động phát bằng MediaController (#142).
  • Bộ chuyển đổi:
    • Thêm bộ đếm giờ phòng vệ kết hợp để phát hiện thời điểm tạo mẫu đầu ra quá chậm.
  • Xoá các biểu tượng không dùng nữa:
    • Xoá Transformer.Builder.setOutputMimeType(String). Tính năng này đã bị xoá. Loại MIME sẽ luôn là MP4 khi sử dụng trình kết hợp mặc định.

Phiên bản 1.0.0-beta02

Ngày 21 tháng 7 năm 2022

Phát hành androidx.media3:media3-*:1.0.0-beta02. Phiên bản 1.0.0-beta02 bao gồm các thay đổi sau.

Bản phát hành này tương ứng với phiên bản ExoPlayer 2.18.1.

  • Thư viện Core:
    • Đảm bảo việc thay đổi ShuffleOrder với ExoPlayer.setShuffleOrder sẽ dẫn đến lệnh gọi đến Player.Listener#onTimelineChanged bằng reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889).
    • Đối với nội dung nghe nhìn liên tục, chỉ đưa các bản nhạc đã chọn vào vị trí vùng đệm (#10361).
    • Cho phép trình ghi nhật ký tuỳ chỉnh cho mọi đầu ra nhật ký ExoPlayer (#9752).
    • Khắc phục lỗi triển khai setDataSourceFactory trong DefaultMediaSourceFactory không hoạt động trong một số trường hợp (#116).
  • Công cụ trích xuất:
    • Khắc phục lỗi phân tích cú pháp các bộ ảnh tham chiếu ngắn hạn H265 (#10316).
    • Khắc phục lỗi phân tích cú pháp tốc độ bit từ các hộp esds (#10381).
  • DASH (Truyền phát thích ứng động qua HTTP):
    • Phân tích cú pháp URL giấy phép ClearKey từ các tệp kê khai (#10246).
  • Giao diện người dùng:
    • Đảm bảo TalkBack thông báo tuỳ chọn tốc độ hiện đang hoạt động trong trình đơn bộ điều khiển chế độ phát (#10298).
  • RTSP (Giao thức truyền tin thời gian thực):
    • Thêm xử lý gói phân tách VP8 (#110).
  • Tiện ích Leanback:
    • Theo dõi các thay đổi đối với playWhenReady trong LeanbackAdapter (10420).
  • Truyền:
    • Sử dụng MediaItem đã được truyền vào phương thức danh sách phát dưới dạng Window.mediaItem trong CastTimeline (#25, #8212).
    • Hỗ trợ Player.getMetadata()Listener.onMediaMetadataChanged() với CastPlayer (#25).

Phiên bản 1.0.0-beta01

Ngày 16 tháng 6 năm 2022

Phát hành androidx.media3:media3-*:1.0.0-beta01. Phiên bản 1.0.0-beta01 bao gồm các thay đổi sau.

Phiên bản này tương ứng với phiên bản ExoPlayer 2.18.0.

  • Thư viện Core:
    • Bật tính năng hỗ trợ cho việc chẩn đoán nền tảng Android thông qua MediaMetricsManager. ExoPlayer sẽ chuyển tiếp các sự kiện phát và dữ liệu về hiệu suất đến nền tảng, qua đó cung cấp hiệu suất của hệ thống và thông tin gỡ lỗi trên thiết bị. Google cũng có thể thu thập dữ liệu này nếu người dùng thiết bị đã bật chia sẻ dữ liệu sử dụng và chẩn đoán. Ứng dụng có thể chọn không tham gia chẩn đoán nền tảng cho ExoPlayer bằng ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • Sửa lỗi các bản nhạc được đặt lại quá thường xuyên khi sử dụng MergingMediaSource, chẳng hạn như khi tải các phụ đề bên cạnh và thay đổi phụ đề đã chọn khi phát lại (#10248).
    • Dừng phát hiện loại mạng 5G-NSA trên API 29 và 30. Các lượt phát này sẽ giả định mạng 4G.
    • Không cho phép truyền null vào MediaSource.Factory.setDrmSessionManagerProviderMediaSource.Factory.setLoadErrorHandlingPolicy. Nếu được yêu cầu, hệ thống có thể truyền các bản sao của DefaultDrmSessionManagerProviderDefaultLoadErrorHandlingPolicy một cách rõ ràng.
    • Thêm MediaItem.RequestMetadata để đại diện cho siêu dữ liệu cần thiết khi phát nội dung nghe nhìn mà không biết chính xác LocalConfiguration. Đồng thời xoá MediaMetadata.mediaUrl vì hiện có trong RequestMetadata.
    • Thêm Player.Command.COMMAND_SET_MEDIA_ITEM để cho phép người chơi thiết lập một mục duy nhất.
  • Chọn bản nhạc:
    • Làm phẳng lớp TrackSelectionOverrides thành TrackSelectionParameters, và quảng bá TrackSelectionOverride lên lớp cao cấp nhất.
    • Đổi tên TracksInfo thành TracksTracksInfo.TrackGroupInfo thành Tracks.Group. Player.getCurrentTracksInfoPlayer.Listener.onTracksInfoChanged cũng đã được đổi tên thành Player.getCurrentTracksPlayer.Listener.onTracksChanged. Cách này bao gồm cả việc "ngừng sử dụng" tên phương thức Player.Listener.onTracksChanged, nhưng sử dụng các loại tham số khác.
    • Thay đổi DefaultTrackSelector.buildUponParametersDefaultTrackSelector.Parameters.buildUpon để trả về DefaultTrackSelector.Parameters.Builder thay vì DefaultTrackSelector.ParametersBuilder không dùng nữa.
    • Thêm DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities được bật theo mặc định. Khi được bật, DefaultTrackSelector sẽ ưu tiên các bản âm thanh có số kênh không vượt quá khả năng đầu ra của thiết bị. Trên thiết bị cầm tay, DefaultTrackSelector sẽ ưu tiên định dạng âm thanh nổi/đơn âm thay vì định dạng âm thanh đa kênh, trừ trường hợp định dạng đa kênh có thể là Âm thanh không gian (Android 12L trở lên) hoặc là định dạng âm thanh vòm Dolby. Ngoài ra, trên các thiết bị hỗ trợ việc tạo không gian âm thanh, DefaultTrackSelector sẽ theo dõi những thay đổi trong Thuộc tính của âm thanh không gian và kích hoạt lựa chọn mới cho các bản nhạc. Các thiết bị có Chế độ giao diện người dùng television sẽ bị loại trừ khỏi những hạn chế này và định dạng có số kênh cao nhất sẽ được ưu tiên. Để bật tính năng này, bản sao DefaultTrackSelector phải được tạo bằng Context.
  • Video:
    • Đổi tên DummySurface thành PlaceholderSurface.
    • Thêm tuỳ chọn hỗ trợ AV1 vào MediaCodecVideoRenderer.getCodecMaxInputSize.
  • Âm thanh:
    • Sử dụng bộ giải mã âm thanh LG AC3 quảng cáo loại MIME không chuẩn.
    • Thay đổi loại trả về của AudioAttributes.getAudioAttributesV21() từ android.media.AudioAttributes thành lớp trình bao bọc AudioAttributesV21 mới để ngăn việc xác minh ART chậm trên API < 21.
    • Truy vấn nền tảng (API 29 trở lên) hoặc giả sử số kênh mã hoá âm thanh để truyền âm thanh khi số kênh âm thanh của định dạng không được thiết lập, việc này xảy ra với quá trình chuẩn bị phân đoạn HLS (10204).
    • Định cấu hình AudioTrack bằng mặt nạ kênh AudioFormat.CHANNEL_OUT_7POINT1POINT4 nếu bộ giải mã xuất ra âm thanh PCM 12 kênh (#10322).
  • DRM (Quản lý bản quyền nội dung số):
    • Đảm bảo phiên DRM luôn được cập nhật chính xác khi tìm kiếm ngay sau khi thay đổi định dạng (10274).
  • Văn bản:
    • Thay đổi Player.getCurrentCues() để trả về CueGroup thay vì List<Cue>.
    • SSA: Hỗ trợ chế độ cài đặt kiểu OutlineColour khi BorderStyle == 3 (tức là OutlineColour đặt nền của tín hiệu) (#8435).
    • CEA-708: Phân tích cú pháp dữ liệu thành nhiều khối dịch vụ và bỏ qua các khối không liên quan đến số dịch vụ hiện được chọn.
    • Xoá RawCcExtractor chỉ được dùng để xử lý định dạng phụ đề nội bộ của Google.
  • Công cụ trích xuất:
    • Thêm hỗ trợ cho AVI (#2092).
    • Matroska: Phân tích cú pháp DiscardPadding cho các bản nhạc Opus.
    • MP4: Tốc độ bit phân tích cú pháp từ các hộp esds.
    • Ogg: Cho phép mã Opus và tiêu đề nhận xét trùng lặp (#10038).
  • Giao diện người dùng:
    • Khắc phục việc phân phối sự kiện tới OnClickListener được đặt vào PlayerView trong trường hợp useController=false (#9605). Ngoài ra, hãy khắc phục việc phân phối sự kiện đến OnLongClickListener cho tất cả các cấu hình chế độ xem.
    • Sửa lỗi xử lý không chính xác một chuỗi các sự kiện chạm thoát ra khỏi giới hạn của PlayerView trước ACTION_UP dưới dạng một lượt nhấp (#9861).
    • Khắc phục vấn đề về khả năng tiếp cận PlayerView, trong đó thao tác nhấn có thể chuyển đổi chế độ phát thay vì ẩn các nút điều khiển (#8627).
    • Viết lại TrackSelectionViewTrackSelectionDialogBuilder để hoạt động được với giao diện Player thay vì ExoPlayer. Điều này cho phép chế độ xem được sử dụng cùng với các hoạt động triển khai Player khác, đồng thời loại bỏ phần phụ thuộc khỏi mô-đun giao diện người dùng sang mô-đun ExoPlayer. Đây là một thay đổi có thể gây lỗi.
    • Không hiển thị các đoạn văn bản bắt buộc trong bộ chọn bản nhạc PlayerView và giữ một đoạn văn bản bắt buộc phù hợp được chọn nếu bạn chọn "Không có" (#9432).
  • DASH (Truyền phát thích ứng động qua HTTP):
    • Phân tích cú pháp số kênh từ các phần tử DTS AudioChannelConfiguration. Thao tác này sẽ bật lại tính năng truyền âm thanh cho các luồng DTS (#10159).
    • Không cho phép truyền null đến DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Bạn có thể chuyển các thực thể của DefaultCompositeSequenceableLoaderFactory một cách rõ ràng nếu cần.
  • HLS (Phát trực tuyến dựa trên HTTP):
    • Dự phòng cho việc chuẩn bị theo từng đoạn nếu thuộc tính CODECS (bộ mã hoá và giải mã) của danh sách phát không chứa bộ mã hoá và giải mã âm thanh (#10065).
    • Không cho phép truyền null đến HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactoryHlsMediaSource.Factory.setPlaylistTrackerFactory. Hệ thống có thể chuyển các bản sao của DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory hoặc tệp tham chiếu đến DefaultHlsPlaylistTracker.FACTORY một cách rõ ràng nếu cần thiết.
  • Phát trực tuyến mượt mà:
    • Không cho phép truyền null đến SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Bạn có thể chuyển các thực thể của DefaultCompositeSequenceableLoaderFactory một cách rõ ràng nếu cần.
  • RTSP (Giao thức truyền tin thời gian thực):
    • Thêm trình đọc RTP cho H263 (#63).
    • Thêm trình đọc RTP cho MPEG4 (#35).
    • Thêm trình đọc RTP cho HEVC (#36).
    • Thêm trình đọc RTP cho AMR. Hiện tại, Google chỉ hỗ trợ luồng AMR đơn kênh, không xen kẽ. Không hỗ trợ tải trọng AMR RTP tổng hợp. (#46)
    • Thêm trình đọc RTP cho VP8 (#47).
    • Thêm trình đọc RTP cho WAV (#56).
    • Sửa tiêu đề uỷ quyền cơ bản RTSP. (#9544).
    • Dừng kiểm tra các trường SDP bắt buộc vì ExoPlayer không cần các trường này (#10049).
    • Gửi ngoại lệ đã đánh dấu khi phân tích cú pháp thời gian RTSP (#10165).
    • Thêm trình đọc RTP cho VP9 (#47).
    • Thêm trình đọc RTP cho OPUS (#53).
  • Nguồn dữ liệu:
    • Đổi tên DummyDataSource thành PlaceholderDataSource.
    • Giải quyết việc xử lý gián đoạn OkHttp.
  • Phiên:
    • Thay thế MediaSession.MediaItemFiller bằng MediaSession.Callback.onAddMediaItems để cho phép xử lý các yêu cầu không đồng bộ.
    • Hỗ trợ các phương thức setMediaItems(s) khi MediaController kết nối với một phiên nội dung nghe nhìn cũ.
    • Xóa MediaController.setMediaUriMediaSession.Callback.onSetMediaUri. Bạn có thể sử dụng cùng một chức năng bằng cách sử dụng MediaController.setMediaItemMediaSession.Callback.onAddMediaItems.
    • Chuyển tiếp cuộc gọi MediaController cũ để phát nội dung nghe nhìn đến MediaSession.Callback.onAddMediaItems thay vì onSetMediaUri.
    • Thêm MediaNotification.ProviderDefaultMediaNotificationProvider để tuỳ chỉnh thông báo.
    • Thêm BitmapLoaderSimpleBitmapLoader để tải hình ảnh nghệ thuật xuống.
    • Thêm MediaSession.setCustomLayout() để cung cấp khả năng tương thích ngược với phiên cũ.
    • Thêm MediaSession.setSessionExtras() để cung cấp tính năng tương đương với phiên cũ.
    • Đổi tên MediaSession.MediaSessionCallback thành MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback thành MediaLibrarySession.CallbackMediaSession.Builder.setSessionCallback thành setCallback.
    • Khắc phục NPE trong MediaControllerImplLegacy (#59).
    • Cập nhật thông tin vị trí của phiên trên tiến trình thay đổi(#51).
    • Khắc phục NPE trong MediaControllerImplBase sau khi phát hành bộ điều khiển (#74).
  • Phát quảng cáo / IMA:
    • Giảm tốc độ thăm dò quảng cáo từ 100 mili giây xuống còn 200 mili giây để phù hợp với đề xuất của Hội đồng đánh giá phương tiện (MRC).
  • Tiện ích FFmpeg:
    • Cập nhật phiên bản CMake lên 3.21.0+ để tránh lỗi CMake khiến quá trình đồng bộ hoá gradle của AndroidStudio không thành công (#9933).
  • Xoá các biểu tượng không dùng nữa:
    • Xoá Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Sử dụng Player.Listener.onTracksChanged(Tracks) thay thế.
    • Xoá Player.getCurrentTrackGroupsPlayer.getCurrentTrackSelections. Thay vào đó, hãy sử dụng Player.getCurrentTracks. Bạn cũng có thể tiếp tục sử dụng ExoPlayer.getCurrentTrackGroupsExoPlayer.getCurrentTrackSelections, mặc dù các phương thức này không còn được dùng nữa.
    • Xóa hằng số DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTDEFAULT_TRACK_SELECTOR_PARAMETERS. Ưu tiên sử dụng getDefaultTrackSelectorParameters(Context) khi có thể, nếu không hãy dùng DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.
    • Xóa hàm dựng DefaultTrackSelector(ExoTrackSelection.Factory). Thay vào đó, hãy sử dụng DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • Xoá Transformer.Builder.setContext. Context phải được truyền vào hàm dựng Transformer.Builder.

Phiên bản 1.0.0-alpha03

Ngày 14 tháng 3 năm 2022

Phát hành androidx.media3:media3-*:1.0.0-alpha03. Phiên bản 1.0.0-alpha03 bao gồm các thay đổi sau.

Phiên bản này tương ứng với phiên bản ExoPlayer 2.17.1.

  • Âm thanh:
    • Sửa lỗi kiểm tra chất lượng âm thanh của Dolby Atmos (E-AC3-JOC) trong HLS.
  • Công cụ trích xuất:
    • FMP4: Khắc phục vấn đề trong đó siêu dữ liệu mẫu emsg có thể được xuất theo thứ tự không chính xác đối với các luồng chứa cả nguyên tử emsg v0 và v1 (#9996).
  • Văn bản:
    • Sửa lỗi tương tác của SingleSampleMediaSource.Factory.setTrackIdMediaItem.SubtitleConfiguration.Builder.setId để ưu tiên trường SubtitleConfiguration và quay lại giá trị Factory nếu trường này không được thiết lập (#10016).
  • Phát quảng cáo:
    • Khắc phục sự cố âm thanh chạy ngầm giữa các khoảng thời gian quảng cáo trong luồng SSAI trực tiếp.

Phiên bản 1.0.0-alpha02

Ngày 2 tháng 3 năm 2022

Phát hành androidx.media3:media3-*:1.0.0-alpha02. Phiên bản 1.0.0-alpha02 bao gồm các thay đổi sau.

Phiên bản này tương ứng với phiên bản ExoPlayer 2.17.0.

  • Thư viện Core:
    • Thêm phương thức được bảo vệ DefaultRenderersFactory.getCodecAdapterFactory() để các lớp con của DefaultRenderersFactory ghi đè buildVideoRenderers() hoặc buildAudioRenderers() có thể truy cập vào nhà máy trình chuyển đổi mã hoá/giải mã (codec adapter factory) rồi truyền vào các thực thể MediaCodecRenderer được tạo.
    • Lần lượt phát hành các trường tiêu đề ICY name, genre cho MediaMetadata.stationMediaMetadata.genre để truy cập vào ứng dụng qua Player.Listener.onMediaMetadataChanged() (#9677).
    • Xoá các khoá rỗng khỏi DefaultHttpDataSource#getResponseHeaders.
    • Ngủ rồi thử lại khi không tạo được phiên bản MediaCodec. Cách này hoạt động đối với lỗi xảy ra trên một số thiết bị khi chuyển đổi nền tảng từ một bộ mã hoá và giải mã bảo mật sang một bộ mã hoá và giải mã khác (#8696).
    • Thêm MediaCodecAdapter.getMetrics() để cho phép người dùng lấy dữ liệu về chỉ số qua MediaCodec. (#9766).
    • Khắc phục độ phân giải phần phụ thuộc Maven (#8353).
    • Tắt tính năng tự động điều chỉnh tốc độ đối với lượt phát trực tiếp không có tính năng độ trễ thấp hay yêu cầu người dùng đặt tốc độ (#9329).
    • Đổi tên DecoderCounters#inputBufferCount thành queuedInputBufferCount.
    • Đặt SimpleExoPlayer.renderers ở chế độ riêng tư. Bạn có thể truy cập trình kết xuất thông qua ExoPlayer.getRenderer.
    • Cập nhật một số giá trị AnalyticsListener.EventFlags không đổi để khớp với các giá trị trong Player.EventFlags.
    • Phân tách AnalyticsCollector thành một giao diện và phương thức triển khai mặc định để cho phép R8 loại bỏ nếu ứng dụng không cần.
  • Chọn bản nội dung:
    • Hỗ trợ gắn cờ vai trò video ưu tiên trong việc lựa chọn nội dung đa phương tiện (#9402).
    • Cập nhật logic lựa chọn nội dung video để cân nhắc các loại MIME và cờ vai trò ưu tiên khi chọn nhiều video để điều chỉnh cho phù hợp (#9519).
    • Cập nhật logic lựa chọn bản video và âm thanh để chỉ chọn những định dạng cho các lựa chọn thích ứng có cùng bộ giải mã và hỗ trợ phần cứng (#9565).
    • Cập nhật logic lựa chọn nội dung video để ưu tiên các bộ mã hoá và giải mã hiệu quả hơn nếu nhiều bộ mã hoá và giải mã được bộ giải mã chính, tăng tốc nhờ phần cứng hỗ trợ (#4835).
    • Ưu tiên các tuỳ chọn nội dung âm thanh (ví dụ: bản âm thanh "mặc định" hoặc một bản nhạc khớp với ngôn ngữ bản địa của hệ thống) thay vì giới hạn lựa chọn bản nhạc kỹ thuật (ví dụ: loại MIME ưu tiên hoặc số lượng kênh tối đa).
    • Khắc phục lỗi chọn nội dung đa phương tiện mà việc ghi đè một nhóm bản nội dung không tắt các nhóm bản nội dung khác cùng loại (#9675).
    • Khắc phục lỗi chọn nội dung đa phương tiện mà việc kết hợp ghi đè nội dung rỗng và không rỗng được áp dụng không đúng cách (#9649).
    • Cấm sao chép TrackGroup trong TrackGroupArray. Luôn có thể phân biệt TrackGroup bằng cách đặt một id trong hàm khởi tạo TrackGroup. Việc này giúp khắc phục sự cố ngừng hoạt động khi tiếp tục phát sau khi chạy ngầm ứng dụng với cơ chế ghi đè bản nội dung đang được phát (#9718).
    • Sửa đổi logic trong AdaptiveTrackSelection để cho phép tăng chất lượng trong trường hợp không đủ băng thông mạng, ngay cả khi hoạt động phát đã rất gần thời điểm phát trực tiếp (live edge) (#9784).
  • Video:
    • Sửa logic bộ giải mã dự phòng cho Dolby Vision để sử dụng bộ giải mã H264/H265 tương thích nếu cần.
  • Âm thanh:
    • Sửa logic bộ giải mã dự phòng cho Dolby Atmos (E-AC3-JOC) để sử dụng bộ giải mã E-AC3 tương thích nếu cần.
    • Thay đổi các API AudioCapabilities để yêu cầu truyền AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES thay vì null.
    • Cho phép tuỳ chỉnh cách tính dung lượng bộ nhớ đệm AudioTrack bằng cách chèn AudioTrackBufferSizeProvider vào DefaultAudioSink. (#8891).
    • Thử tạo lại AudioTrack nếu dung lượng bộ nhớ đệm được yêu cầu lớn hơn 1 MB. (#9712).
  • Công cụ trích xuất:
    • WAV: Thêm tuỳ chọn hỗ trợ khi phát trực tiếp định dạng tệp RF64 (#9543).
    • Khắc phục vấn đề phân tích cú pháp không chính xác đối với các đơn vị H.265 SPS NAL (#9719).
    • Phân tích cú pháp bình luận Vorbis (bao gồm cả METADATA_BLOCK_PICTURE) trong các tệp Ogg Opus và Ogg Vorbis.
  • Văn bản:
    • Thêm trường MediaItem.SubtitleConfiguration.id mà sẽ được truyền vào trường Format.id có bản phụ đề tạo từ cấu hình (#9673).
    • Thêm tuỳ chọn hỗ trợ cơ bản cho phụ đề WebVTT trong vùng chứa Matroska (#9886).
    • Ngăn Cea708Decoder đọc nhiều hơn kích thước đã khai báo của một khối dịch vụ.
  • DRM (Quản lý bản quyền nội dung số):
    • Xoá playbackLooper khỏi DrmSessionManager.(pre)acquireSession. Khi một ứng dụng sử dụng DrmSessionManager trong một MediaSource tuỳ chỉnh, playbackLooper cần được truyền vào DrmSessionManager.setPlayer.
  • Phát quảng cáo / IMA:
    • Thêm tuỳ chọn hỗ trợ cho công nghệ Chèn quảng cáo động (DAI) IMA (#8213).
    • Thêm phương thức vào AdPlaybackState để cho phép đặt lại nhóm quảng cáo sao cho có thể phát lại (#9615).
    • Áp dụng tốc độ phát 1,0 trong khi phát quảng cáo (#9018).
    • Khắc phục lỗi một nhóm quảng cáo không tải được dẫn đến việc phát lại ngay lập tức (#9929).
  • Giao diện người dùng:
    • Chỉnh sửa màu của các số trongStyledPlayerView cho nút tua lại và tua nhanh khi sử dụng một số giao diện nhất định (#9765).
    • Dịch đúng các chuỗi tốc độ phát (#9811).
  • DASH (Truyền phát thích ứng động qua HTTP):
    • Thêm các thuộc tính thiết yếu và bổ sung được phân tích cú pháp vào Representation (#9579).
    • Hỗ trợ vai trò theo dõi forced-subtitle (#9727).
    • Ngừng diễn giải vai trò theo dõi của mainC.SELECTION_FLAG_DEFAULT.
    • Chỉnh sửa logic loại trừ URL cơ sở cho các tệp kê khai không khai báo vùng chứa tên DVB (#9856).
    • Hỗ trợ các URL MPD.Location tương đối (#9939).
  • HLS (Phát trực tuyến dựa trên HTTP):
    • Tự động điền chính xác Format.label khi chỉ phát âm thanh dựa trên giao thức HLS (#9608).
    • Mặc định sử dụng thông tin đa biến trong danh sách phát cho việc phát nội dung đa phương tiện (chunkless preparation) để cải thiện thời gian khởi động. Nếu việc truyền và nhận dữ liệu có chứa các bản phụ đề kết hợp (không được khai báo trong danh sách phát chính), thì bạn phải thêm các bản phụ đề đó vào danh sách phát chính để có thể phát, hoặc tắt chế độ chuẩn bị phát trực tiếp nội dung trong danh sách phát đa phương tiện (chunkless preparation) bằng HlsMediaSource.Factory.setAllowChunklessPreparation(false).
    • Hỗ trợ tua tới chính xác khung hình chính trong HLS (#2882).
  • RTSP (Giao thức truyền tin thời gian thực):
    • Cung cấp một API máy khách để ghi đè SocketFactory dùng cho mọi kết nối máy chủ (#9606).
    • Ưu tiên phương thức xác thực DIGEST hơn BASIC nếu có cả hai (#9800).
    • Xử lý khi không có thời gian của nội dung đa phương tiện phát qua giao thức RTSP (#9775).
    • Bỏ qua các giá trị tiêu đề RTP-Info không hợp lệ (#9619).
  • Bộ chuyển đổi:
    • Tăng phiên bản API tối thiểu bắt buộc lên 21.
    • TransformationException hiện được dùng để mô tả lỗi xảy ra trong quá trình chuyển đổi.
    • Thêm TransformationRequest để chỉ định các tuỳ chọn chuyển đổi.
    • Cho phép đăng ký nhiều trình nghe (event listener).
    • Sửa lỗi Bộ chuyển đổi bị kẹt khi đọc một phần đầu ra bộ mã hoá và giải mã.
    • Sửa lỗi NPE tiềm ẩn trong Transformer.getProgress khi phát hành các khai báo ngoại lệ cho chương trình kết hợp nội dung đa phương tiện.
    • Thêm ứng dụng minh hoạ áp dụng chuyển đổi.
  • Phần mở rộng MediaSession:
    • Theo mặc định, MediaSessionConnector hiện sẽ xoá danh sách phát đã dừng. Các ứng dụng muốn giữ lại danh sách phát có thể gọi setClearMediaItemsOnStop(false) trên trình kết nối.
  • Tiện ích truyền (cast):
    • Khắc phục lỗi ngăn CastPlayer gọi đúng onIsPlayingChanged (#9792).
    • Hỗ trợ siêu dữ liệu âm thanh bao gồm hình minh hoạ với DefaultMediaItemConverter (#9663).
  • Tiện ích FFmpeg:
    • Cho build_ffmpeg.sh phụ thuộc vào tập công cụ quản lý tệp nhị phân LLVM thay vì GNU (#9933).
  • Khả năng tương thích với Android 12:
    • Nâng cấp tiện ích Truyền để phụ thuộc vào com.google.android.gms:play-services-cast-framework:20.1.0. Các phiên bản trước đó của play-services-cast-framework không tương thích với các ứng dụng dành cho Android 12 và sẽ gặp sự cố với IllegalArgumentException khi tạo PendingIntent (#9528).
  • Xoá các biểu tượng không dùng nữa:
    • Xoá Player.EventListener. Sử dụng Player.Listener.
    • Xoá MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactoryMediaSourceFactory#setDrmUserAgent. Sử dụng MediaSourceFactory#setDrmSessionManagerProvider.
    • Xoá MediaSourceFactory#setStreamKeys. Sử dụng MediaItem.Builder#setStreamKeys.
    • Xoá MediaSourceFactory#createMediaSource(Uri). Sử dụng MediaSourceFactory#createMediaSource(MediaItem).
    • Xóa setTag khỏi DashMediaSource, HlsMediaSourceSsMediaSource. Sử dụng MediaItem.Builder#setTag.
    • Xoá DashMediaSource#setLivePresentationDelayMs(long, boolean). Sử dụng MediaItem.Builder#setLiveConfigurationMediaItem.LiveConfiguration.Builder#setTargetOffsetMs để ghi đè tệp kê khai hoặc DashMediaSource#setFallbackTargetLiveOffsetMs để cung cấp giá trị dự phòng.
    • Xoá (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Bắt buộc phải thực thi luồng này.
    • Xóa ActionFileActionFileUpgradeUtil. Dùng ExoPlayer 2.16.1 hoặc các phiên bản trước đó để sử dụng ActionFileUpgradeUtil nhằm hợp nhất các tệp thao tác cũ vào DefaultDownloadIndex.
    • Xoá ProgressiveMediaSource#setExtractorsFactory. Sử dụng hàm constructor ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • Xóa ProgressiveMediaSource.Factory#setTagProgressiveMediaSource.Factory#setCustomCacheKey. Sử dụng MediaItem.Builder#setTagMediaItem.Builder#setCustomCacheKey.
    • Xoá các hàm constructor DefaultRenderersFactory(Context, @ExtensionRendererMode int)DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Sử dụng hàm constructor DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererModeDefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • Xóa tất cả hàm constructor CronetDataSource công khai. Sử dụng CronetDataSource.Factory.
  • Chỉ thay đổi IntDefs sau thành @Target(TYPE_USE). Thay đổi này có thể làm gián đoạn quá trình biên dịch các trường hợp sử dụng trong Kotlin. Bạn có thể khắc phục lỗi này bằng cách di chuyển phần chú giải để chú thích loại (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (trong gói com.google.android.exoplayer2.ext.flac )
    • @FlacExtractor.Flags (trong gói com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

Phiên bản 1.0.0-alpha01

Ngày 27 tháng 10 năm 2021

Phát hành androidx.media3:media3-*:1.0.0-alpha01. Phiên bản 1.0.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

Media3 là nơi lưu trữ mới các thư viện hỗ trợ nội dung đa phương tiện, bao gồm ExoPlayer. Phiên bản alpha đầu tiên bao gồm những phương thức triển khai sớm và đầy đủ chức năng của các thư viện để triển khai các trường hợp sử dụng nội dung đa phương tiện, bao gồm:

  • ExoPlayer là trình phát nội dung nghe nhìn cấp ứng dụng dành cho Android, có thể dễ dàng tuỳ chỉnh và mở rộng.
  • Chức năng tương tác trình phát nội dung đa phương tiện (media session) để hiển thị và kiểm soát phát lại. Mô-đun mới của chức năng này sử dụng giao diện Player giống như ExoPlayer.
  • Các thành phần giao diện người dùng để xây dựng giao diện người dùng phát lại nội dung đa phương tiện.
  • Các mô-đun gói chức năng trong các thư viện khác để sử dụng với ExoPlayer, ví dụ: chèn quảng cáo thông qua SDK IMA.

Để biết thêm thông tin, hãy xem dự án GitHub Media3.

Trước đây, ExoPlayer đã được lưu trữ trong một dự án GitHub ExoPlayer riêng biệt. Trong Media3, tên gói là androidx.media3.exoplayer. Chúng tôi dự định tiếp tục duy trì và phát hành dự án GitHub ExoPlayer trong một thời gian để các ứng dụng có thời gian chuyển sang Media3. Media3 có các lựa chọn thay thế cho tất cả các mô-đun ExoPlayer, ngoại trừ các tiện ích media2 và mediasession cũ. Các tiện ích này được thay thế bằng mô-đun media3-session mới. Điều này giúp tích hợp trực tiếp giữa trình phát và các media session mà không cần phải sử dụng lớp chuyển đổi/trình kết nối.