Media3
| 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 26 tháng 10 năm 2026 | 1.11.1 | - | - | 1.12.0-alpha02 |
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.11.1" // 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 using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views 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 inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$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" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.11.1" // 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 using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$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 inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$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") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$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 sự cố 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 về tính năng, đồng thời để báo cáo lỗi mới.
Phiên bản 1.12.0
Phiên bản 1.12.0-alpha02
Ngày 26 tháng 10 năm 2026
Phiên bản 1.12.0-alpha02 bao gồm các thay đổi sau.
- Dịch vụ Play Effect:
- Ra mắt mô-đun
media3-effect-play-servicesmới cung cấp hiệu ứng đa phương tiện của Dịch vụ Google Play, bao gồmEnhancementSessionDecoratorđể cải thiện video vàStudioSoundAudioProcessorđể tách nguồn âm thanh.
- Ra mắt mô-đun
Phiên bản 1.12.0-alpha01
Ngày 21 tháng 10 năm 2026
Phiên bản 1.12.0-alpha01 bao gồm các thay đổi sau.
- Thư viện Common:
- Thêm
C.COLOR_SPACE_DISPLAY_P3và hỗ trợ không gian màu Display P3 trong mối liên kết màu ISOMediaFormatUtilvàColorInfo. - Thêm một sổ đăng ký
Flagstrung tâm để quản lý các cờ tính năng thử nghiệm và phát hành theo giai đoạn (Flags.setCanaryModeEnabled). Di chuyển nhiều phương thức@ExperimentalApihiện có để sử dụng API cờ mới. - Thêm
MediaMetadata.playlistId,MediaMetadata.Builder.setPlaylistId(String),MediaMetadata.categoriesvàMediaMetadata.Builder.setCategories(List<String>). - Thay thế
androidx.media3.common.util.NonNullApibằng JSpecifyorg.jspecify.annotations.NullMarked.
- Thêm
- ExoPlayer:
- Khắc phục lỗi khiến quá trình phát nhiều giai đoạn DASH bị kẹt khi đoạn đầu tiên của giai đoạn tiếp theo không tải được (#3396).
- Báo cáo
wasCanceled = truetrongAnalyticsListener.onLoadErrorvàMediaSourceEventListener.onLoadErrorkhi đã hết số lần thử tải lại. - Hỗ trợ đăng ký nhiều thực thể
VideoFrameMetadataListenerbằngExoPlayer.addVideoFrameMetadataListenervàExoPlayer.removeVideoFrameMetadataListener, ngừng sử dụngExoPlayer.setVideoFrameMetadataListenervàExoPlayer.clearVideoFrameMetadataListener. - Thêm tính năng hỗ trợ quảng cáo trong nội dung nhiều giai đoạn (ví dụ: DASH) bằng cách phân tách và bù trừ
AdPlaybackStatecho mỗi giai đoạn. - Khắc phục tình huống tương tranh trong
PreCacheHelper, trong đó việc huỷ yêu cầu chuẩn bị đang diễn ra vẫn có thể bắt đầu tải xuống trong nền. - Giới hạn
setLoadOnlySelectedTracks(true)trênProgressiveMediaSourcevàDefaultMediaSourceFactoryđể chỉ lọc ra các bản video và hình ảnh chưa được chọn. Các bản âm thanh và văn bản luôn được tải để cho phép chuyển đổi bản âm thanh liền mạch mà không cần lưu vào vùng đệm lại. - Bật
setLoadOnlySelectedTracks(true)theo mặc định trênProgressiveMediaSourcevàDefaultMediaSourceFactory. Việc này giúp tiết kiệm bộ nhớ và cho phép tính toán mức phân bổ vùng đệmDefaultLoadControlhoạt động chính xác hơn khi không phải tất cả các bản nhạc đều được chọn. Xin lưu ý rằng việc này có thể gây ra tình trạng tải vào vùng đệm bổ sung nếu các bản video hoặc hình ảnh chưa được chọn mới được bật giữa quá trình phát. - Khắc phục vấn đề trong đó
Player.getCurrentPosition()có thể trả về các giá trị cũ (chỉ cập nhật vài lần mỗi giây) khi bật tính năng lập lịch động (#3286). - Khắc phục vấn đề vị trí đầu phát
AudioTrackgiảm hoặc đặt lại ngoài dự kiến có thể bị coi nhầm là tràn số nguyên, khiến quá trình phát bị dừng trong khi lưu vào vùng đệm (#3407). - Xoá
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean)thử nghiệm. - Tránh bật lại trình kết xuất không cần thiết và các lỗi khi quay lại từ quảng cáo xen kẽ hoặc quảng cáo vào nội dung bị cắt ở cuối (#3371).
- Khắc phục lỗi trong đó lỗi trình kết xuất trên một mục sắp phát trong danh sách phát có thể
làm gián đoạn sớm quá trình phát hiện tại khi
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONđược bật. - Khắc phục lỗi
NullPointerExceptioncó thể xảy ra nếuExoPlayerchuyển trình kết xuất sang một khoảng thời gian phát nội dung nghe nhìn chưa chuẩn bị khi bậtFlags.FLAG_PER_STREAM_MEDIA_PROGRESSION. - Khắc phục vấn đề khung hình video có thể bị bỏ qua hoặc bị rớt ngoài dự kiến trong quá trình lập lịch biểu động khi bật
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESS. - Sửa lỗi
ArrayIndexOutOfBoundsExceptiontrong trình nghe số liệu phân tích khi dừng phát trong một quảng cáo trên sự kiện phát trực tiếp (#3423). - Khắc phục vấn đề
PreloadMediaSourcecó thể bất ngờ đăng sự kiện tải trước khipreload()không bao giờ được gọi (#3408). - Khắc phục lỗi bỏ qua
Format.subsampleOffsetUsđối với các bản nhạc siêu dữ liệu, dẫn đến dấu thời gian phát không chính xác trong các lệnh nối SCTE-35 đã giải mã (#3413). - Khắc phục lỗi rò rỉ bộ nhớ trong
PreloadMediaSourcevàDefaultPreloadManagerkhipreload()được gọi nhiều lần trên cùng một nguồn (#3445). - Khắc phục
NullPointerExceptionkhi phát hànhAdsMediaSourcetrong khi đang chờ làm mới dòng thời gian nội dung (#3442). - Khắc phục vấn đề khi phát nội dung nghe nhìn tăng dần có thể chuyển đến vị trí không chính xác khi tải sau khi tua (hoặc khi bắt đầu phát ở vị trí khác 0) không thành công và được thử lại (#3440).
- Thêm giải pháp cho bộ giải mã H.264 của Xiaomi TV Stick 4K (MiTV-AYFR0) bị treo khi thay đổi độ phân giải liền mạch (#3457).
- Khắc phục
NullPointerExceptiontrongSteeringManifestTrackerkhi trình theo dõi bị dừng trước khi lệnh gọi lại hoàn tất tải hoặc lỗi được đăng được thực thi (#3443). - Hỗ trợ phát siêu dữ liệu theo thời gian HAGC (ST 2094-50) từ các bản nhạc siêu dữ liệu được đóng hộp
mebxtrong tệp MP4. - Khắc phục vấn đề có thể bỏ qua các giai đoạn chuẩn bị nội dung nghe nhìn chậm trong danh sách phát.
- CompositionPlayer:
- Hỗ trợ định cấu hình tốc độ khung hình của tính năng tổng hợp khung hình video bằng
Composition.Builder.setVideoFrameAggregationParameterscho quy trình phát. - Khắc phục tình trạng rớt khung hình trong các thành phần nhiều trình tự do lượng tử hoá dấu thời gian hoặc không khớp làm tròn, bằng cách chọn khung hình có dấu thời gian gần nhất trong quá trình tổng hợp khung hình. Tính năng này chỉ được bật từ API 29, vì nó yêu cầu giữ thêm một khung hình đang hoạt động cho mỗi chuỗi video.
- Hỗ trợ định cấu hình tốc độ khung hình của tính năng tổng hợp khung hình video bằng
- Bộ chuyển đổi:
- Hỗ trợ định cấu hình tốc độ khung hình của tính năng tổng hợp khung hình video bằng cách sử dụng
Composition.Builder.setVideoFrameAggregationParameterscho quy trình xuất. - Khắc phục tình trạng rớt khung hình trong các thành phần nhiều trình tự do lượng tử hoá dấu thời gian hoặc không khớp làm tròn, bằng cách chọn khung hình có dấu thời gian gần nhất trong quá trình tổng hợp khung hình. Tính năng này chỉ được bật từ API 29, vì nó yêu cầu giữ thêm một khung hình đang hoạt động cho mỗi chuỗi video.
- Tuân thủ
Transformer#setAudioMimeType(AUDIO_RAW)khi sử dụngAudioProcessors. Trước khi có bản sửa lỗi này, việc yêu cầuMimeTypes.AUDIO_RAWvà áp dụngAudioProcessorsẽ dẫn đến kết quả nén.
- Hỗ trợ định cấu hình tốc độ khung hình của tính năng tổng hợp khung hình video bằng cách sử dụng
- Chọn bản nhạc:
- Khắc phục vấn đề trong đó một bản nhạc SDR được ưu tiên không chính xác so với một bản nhạc Dolby Vision được hỗ trợ trên một số thiết bị (#3135).
- Công cụ trích xuất:
- Mp4Extractor: Sửa lỗi phân tích cú pháp hộp
dOpscho Opus trong MP4, trong đóPreSkip,InputSampleRatevàOutputGainkhông được chuyển đổi từ big-endian sang little-endian, khiến ~299 mili giây đầu tiên của âm thanh bị loại bỏ khi không có danh sách chỉnh sửa (#3431). - Xoá
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESvàFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265vì tính năng phân tích cú pháp phần phụ thuộc mẫu trong GOP cho H.264 và H.265 được bật theo mặc định. - Mp4Extractor: Khắc phục lỗi phân tích cú pháp siêu dữ liệu vị trí từ các hộp
xyzchứa toạ độ độ cao để điền sẵnMp4LocationData. - Thêm
ExtractorUtil.getFramesPerEncodedSampleđể tính số khung âm thanh trên mỗi mẫu cho các định dạng âm thanh được mã hoá (#3367). - Thêm
FLAG_READ_XMP_METADATAvàoMp4Extractorđể trích xuất siêu dữ liệu XMP từ các hộp UUID cấp cao nhất. - Sửa lỗi âm thanh AC-3, DTS và LPCM bị hỏng khi phát nội dung MPEG-PS kiểu DVD bằng cách loại bỏ tiêu đề luồng phụ
private_stream_1khỏi mỗi gói PES trongPsExtractortrước khi tải trọng được chuyển đến trình đọc âm thanh (#3327). - Khắc phục lỗi trong
FragmentedMp4Extractorkhi hộptfdtphiên bản 1 mã hoábaseMediaDecodeTimeâm (#3412). - MPEG-TS: Hỗ trợ phân tích cú pháp thông báo SEI về cách sắp xếp đóng gói khung hình H.264 và H.265 để điền sẵn
Format.stereoMode(#3419). - Phân tích cú pháp dữ liệu cấu hình Dolby Vision Profile 20 và từ chối các cấu hình Dolby Vision không được hỗ trợ thay vì phát lại dưới dạng HEVC tiêu chuẩn với màu sắc không chính xác (#3427).
- MP3: Huỷ bỏ việc điều chỉnh siêu dữ liệu khoảng đệm và độ trễ của bộ mã hoá LAME/Xing vì không tương thích với nhiều bộ giải mã MP3
MediaCodec(#3425). - Matroska: Khắc phục lỗi
NullPointerExceptionkhi phân tích cú pháp các phần tửChapterAtomlồng nhau (#3438). - Ogg: Sửa lỗi trong đó một gói có kích thước là bội số của 255 byte và kết thúc ở ranh giới trang được hợp nhất với gói sau.
- MP4: Phân tích cú pháp các bản nhạc siêu dữ liệu theo thời gian được đóng hộp
mebxtrongMp4ExtractorvàFragmentedMp4Extractor. Các bản nhạc có khoáit35được hiển thị dưới dạngMimeTypes.APPLICATION_ITUT_T35(cho phép phát HAGC). Các bản nhạcmebxkhác sẽ bị bỏ qua trừ phi bạn đặtFLAG_EMIT_RAW_MEBX_DATA, trong trường hợp đó, tất cả bản nhạcmebxsẽ được phát dưới dạngMimeTypes.APPLICATION_MEBXthô. - Ogg: Hỗ trợ trích xuất khoảng đệm cuối Opus để phát không gián đoạn (#2576) và sửa dấu thời gian mẫu sau khi tua đến một trang bắt đầu bằng một gói tiếp theo.
- Ogg: Sửa lỗi giải mã và lỗi nhảy dấu thời gian ~1 giây trong các luồng Ogg Opus theo chuỗi bằng cách bỏ qua các gói tiêu đề nhận xét và mã Opus giữa luồng.
- Mp4Extractor: Sửa lỗi phân tích cú pháp hộp
- Trình kiểm tra:
- Hỗ trợ truy xuất siêu dữ liệu XMP từ tệp MP4 bằng
MetadataRetriever. - Hỗ trợ trích xuất các bản nhạc siêu dữ liệu theo thời gian được đóng hộp
mebxtrongMediaExtractorCompatdưới dạngMimeTypes.APPLICATION_MEBX.
- Hỗ trợ truy xuất siêu dữ liệu XMP từ tệp MP4 bằng
- Khung trình kiểm tra:
- Khắc phục lỗi cắt bớt màu BT.2020 có gam màu rộng trong hình ảnh cơ sở SDR khi
trích xuất khung hình Ultra HDR bằng
FrameExtractor. Màu sắc ngoài gam màu hiện được nén nhẹ vào gam màu sRGB thay vì bị kẹp.
- Khắc phục lỗi cắt bớt màu BT.2020 có gam màu rộng trong hình ảnh cơ sở SDR khi
trích xuất khung hình Ultra HDR bằng
- Âm thanh:
- Thêm giải pháp cho các thiết bị gọi
android.media.AudioDeviceCallbacktrên luồng không chính xác (#3386). - Khắc phục tình trạng có thể bị kẹt khi phát sau khi chuyển đổi bản nhạc bằng tính năng giảm tải nén.
- Khắc phục vấn đề trên Amazon Fire TV Stick, trong đó âm thanh AC-3 có thể bị treo trong quá trình chuyển đổi khoảng thời gian (#3448).
- Hỗ trợ cắt khoảng đệm của bộ mã hoá ở cuối luồng để phát liền mạch Opus Ogg và WebM/Matroska (#2576).
- Khắc phục độ trễ không có khoảng trống khi giảm tải động và cập nhật khoảng đệm trong quá trình chuyển đổi bản nhạc để các bản nhạc này áp dụng cho bản nhạc sắp phát thay vì bản nhạc đang phát.
- Cắt khoảng đệm cuối của bộ mã hoá trên các luồng đơn và luồng cuối cùng trong danh sách phát, ngoài các chuyển đổi liền mạch giữa danh sách phát (#2576).
- Tránh sao chép vùng đệm âm thanh không cần thiết trong
TrimmingAudioProcessorsau khi hoàn tất việc cắt bớt độ trễ của bộ mã hoá khi bắt đầu luồng và không cần cắt bớt khoảng đệm ở cuối luồng.
- Thêm giải pháp cho các thiết bị gọi
- Video:
- Khắc phục lỗi báo cáo khung hình video bị trễ có dấu thời gian phát hành giống hệt nhau để các khung hình đó được báo cáo là bị bỏ thay vì bị bỏ qua.
- Văn bản:
- Thêm
MediaItem.SubtitleConfiguration.timeOffsetUsđể dịch chuyển dấu thời gian của phụ đề được tải không qua cửa hàng ứng dụng so với nội dung nghe nhìn. Bạn có thể thay đổi độ lệch trong khi phát bằngPlayer.replaceMediaItem(int, MediaItem)mà không làm gián đoạn quá trình phát (#1976). - SubRip: Thêm tính năng hỗ trợ chèn
CharsetDetectorvàoDefaultSubtitleParserFactoryđể phát hiện phương thức mã hoá ký tự của phụ đề SubRip độc lập mà không có dấu thứ tự byte (#2247).
- Thêm
- Hiệu ứng:
- Triển khai
SoundSeparationAudioProcessorđể tách nguồn âm thanh bằng mô-đun StudioSound GMSCore.
- Triển khai
- Bộ ghép kênh:
- Khắc phục lỗi ghi hộp
dOpscho Opus trongMp4MuxervàFragmentedMp4Muxer, trong đóPreSkip,InputSampleRatevàOutputGainđược ghi theo thứ tự byte cuối thay vì thứ tự byte đầu (#3431). - Hỗ trợ ghi độ cao GPS trong
Mp4LocationDatabằngMp4Muxer. - Thêm
Muxer.Factory.create(ParcelFileDescriptor)để cho phép ghép kênh trực tiếp vàoParcelFileDescriptor. - Ghi hộp
tfdt(Thời gian giải mã nội dung nghe nhìn cơ sở của mảnh bản nhạc) theo mặc định trong các hộptrafcủa tệp MP4 bị phân mảnh để cung cấp dấu thời gian giải mã nội dung nghe nhìn. - Hỗ trợ ghi các hộp vùng chứa
dec3E-AC-3 và E-AC-3 JOC (Dolby Atmos) trongMp4Muxer. - Thêm tính năng hỗ trợ định dạng WebM vào
MediaMuxerCompat. - Ghi hộp
mfra(Movie Fragment Random Access) ở cuối tệp MP4 bị phân mảnh để cho phép tìm kiếm trongFragmentedMp4ExtractorbằngFLAG_READ_MFRA_FOR_SEEK_MAP. - Khắc phục sự cố trong
Mp4WritervàFragmentedMp4Writerkhi ghi mẫu EOS trước khi ghi bất kỳ mẫu nào khác. - Khắc phục lỗi tuân thủ vùng chứa khi ghép nội dung Dolby vào tệp MP4 hoặc tệp MP4 phân mảnh bằng cách quảng cáo thương hiệu tương thích
dby1trong tiêu đề vùng chứa (#3369). - Hỗ trợ các bản âm thanh PCM dấu phẩy động 32 bit trong
Mp4MuxervàFragmentedMp4Muxer(#3389). - Từ chối các cấu hình Dolby Vision không được hỗ trợ trong
Mp4MuxervàFragmentedMp4Muxerkhi thêm bản nhạc. - Hỗ trợ các bản âm thanh PCM số nguyên 24 bit và 32 bit trong
Mp4MuxervàFragmentedMp4Muxer.
- Khắc phục lỗi ghi hộp
- Tiện ích IMA:
- Chuyển tiếp sự kiện tạm dừng và tiếp tục của trình phát đến IMA SDK trong
ImaServerSideAdInsertionMediaSource.
- Chuyển tiếp sự kiện tạm dừng và tiếp tục của trình phát đến IMA SDK trong
- Phiên:
- Thêm
MediaConstants.EXTRAS_KEY_PLAYLIST_ID,MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URIvàMediaConstants.EXTRAS_KEY_CATEGORIESđể điền siêu dữ liệu của danh sách phát và mục từ siêu dữ liệu và nội dung mô tả cũ, đồng thời thêmMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEvàMediaConstants.EXTRAS_KEY_TTL_SECONDScho đề xuấtLibraryParams.extras. - Khắc phục sự cố
SecurityExceptionkhi tạo hoặc phát hànhMediaSessiontrên các thiết bị thực thi giới hạnPendingIntentnghiêm ngặt. - Khắc phục vấn đề
MediaSession.getControllerForCurrentRequest()trả vềnulltrong các yêu cầu phát trên Android 12 (API 31 và 32) khiMediaSessionServicechưa ở nền trước. - Khắc phục sự cố
IllegalArgumentExceptionkhiMediaControllerkết nối với một phiên cũ báo cáo âm lượng tối đa âm. - Khắc phục lỗi khiến việc gọi
MediaController.setMediaItemhoặcsetMediaItems, sau đó làplay()trênMediaSessionCompatcũ bị tạm dừng có thể gửi lệnh gọi lạionPrepareFrom*không được hỗ trợ thay vìonPlayFrom*, hoặc gửionPlay()mà không khởi chạy lại mục nội dung nghe nhìn được yêu cầu. - Khắc phục
NullPointerExceptiontrongMediaBrowsercũ khi nhận được phản hồi lệnh tuỳ chỉnh (#3432). - Khắc phục sự cố
IllegalArgumentExceptionkhi nhận siêu dữ liệu cũ có các khoá trùng lặp trongBundlecơ bản. - Kết hợp các lệnh gọi
MediaControllerCompat.TransportControlsđi được thực hiện trong cùng một lần lặp lạiLooperkhi kiểm soátMediaSessionCompatcũ (ví dụ: việc gọisetMediaItem,preparevàplaycùng nhau hiện sẽ gửi một lệnh gọi lạionPlayFrom*duy nhất).
- Thêm
- Giao diện người dùng:
- Khắc phục vị trí dấu câu của phụ đề từ phải sang trái (RTL) và duy trì phạm vi span khi bật tính năng xuống dòng tự động cho văn bản hai chiều (#3454, #3455).
- Thêm các lớp
TrackSelectionStatevàTrackSelectionParametersStatecũng như các hàm ghi nhớ trạng thái composable tương ứng vào mô-đunmedia3-ui-compose. - Giới thiệu
PresentationState.videoAspectRatiovà đặtModifier.resizeWithContentScalelấyaspectRatio: Float?thay vìsourceSizeDp: Size?. - Thêm lớp
CuesStatevà ComposablerememberCuesStatevào mô-đunmedia3-ui-composeđể lắng nghe các chỉ dấu hiện tại của trình phát. - Thêm tính năng hỗ trợ chế độ tua nhanh vào
ProgressSlidernếu chế độ này dựa trênExoPlayerhoặcCompositionPlayer. - Thêm tính năng hỗ trợ
showArtworkvàoPresentationStatevà dùng tính năng này để tính thời gian kết xuất của thành phần kết hợpartworkkhông bắt buộc được cung cấp trongContentFramevàPlayer. Thêm thành phần kết hợpArtworkđể dùng làm giá trị mặc định cho vùngartwork. - Thêm các trường mới vào
PlayPauseButtonState(showBuffering,showRetry,showReplay) và sử dụng các trường đó trongPlayPauseButtonđể hiển thị thêm biểu tượng và chỉ báo lưu vào vùng đệm. - Thêm lớp
PlaybackStateđể cho phép quan sát trạng thái phát tuỳ chỉnh và giới thiệuBufferingIndicatordưới dạng một thành phần độc lập với nút. - Khắc phục vấn đề trong đó
PlayerViewvàPlayerControlViewhiển thị điểm đánh dấu quảng cáo tại ranh giới khoảng thời gian cho phần giữ chỗ quảng cáo sau video trực tiếp trong sự kiện phát trực tiếp nhiều khoảng thời gian. - Các vùng chứa thành phần kết hợp của
Player,ContentFrame,PlayerDefaultsvàMiniControllerkhông còn nhận trình phát hoặc chế độ hiển thị của các thành phần điều khiển dưới dạng tham số. Thay vào đó, hãy thu thập các giá trị này từ phạm vi gọi (ví dụ:topControlshiện là@Composable BoxScope.() -> Unit). Đây là một thay đổi có thể gây lỗi đối với một API không ổn định. - Thêm tham số
alignmentvàoContentFrame,PlayervàModifier.resizeWithContentScaleđể định vị nội dung được điều chỉnh theo tỷ lệ trong vùng chứa, đồng thời cắt nội dung củaContentFrametheo ranh giới của vùng chứa để video được điều chỉnh theo tỷ lệ bằngContentScale.Cropkhông còn vẽ bên ngoài vùng chứa nữa. - Thêm tính năng hỗ trợ giao diện người dùng của sự kiện phát trực tiếp vào
ProgressSlider,ProgressStateWithTickCountvàProgressStateWithTickIntervalbằng cách hiển thịisLivevàliveOffsetMs. ThêmLiveButtoncomposable vàomedia3-ui-compose-material3(#2213).
- Tiện ích Ktor:
- Khắc phục vấn đề trong đó
KtorDataSourcecó thể coi lỗi kết nối giữa luồng là kết thúc đầu vào thay vì gửiHttpDataSourceException(#3460).
- Khắc phục vấn đề trong đó
- Tiện ích HLS:
- Phân tích cú pháp
VIDEO-RANGE(PQvàHLG) trênEXT-X-STREAM-INFvàEXT-X-I-FRAME-STREAM-INFthànhFormat.colorInfo(#3441). - Khắc phục lỗi
NullPointerExceptionkhi phân tích cú pháp các phân đoạn khởi chạy MPEG-TSEXT-X-MAPcó chứa mẫu nội dung nghe nhìn PES (#3456). - Khắc phục lỗi hồi quy trong đó
Format.idvàFormat.metadatalànullcho các bản nhạc HLS được hiển thị (#3402). - Cắt quảng cáo trong danh sách thành phần thành
X-PLAYOUT-LIMITvà bỏ qua những quảng cáo hoàn toàn vượt quá giới hạn, đồng thời đặt độ lệch tiếp tục nội dung mặc định thành 0 khi quảng cáo xen kẽ bỏ quaX-RESUME-OFFSETvà thời lượng của quảng cáo đó không xác định ngay cả khiX-PLAYOUT-LIMITđược đặt. - Khắc phục vấn đề trong đó việc phân giải quảng cáo xen kẽ
X-ASSET-LISTđã ghi đè các đóng góp về độ lệch tiếp tục nội dung của các quảng cáo xen kẽ khác trong cùng một nhóm quảng cáo.
- Phân tích cú pháp
- Tiện ích DASH:
- Hỗ trợ phân tích cú pháp các sự kiện Chèn MPD thay thế (
urn:mpeg:dash:event:alternativeMPD:insert:2025) và Thay thế (urn:mpeg:dash:event:alternativeMPD:replace:2025) trongDashManifestParservà hiển thị các sự kiện đó dưới dạng thực thểAlternativeMpdEventtrongPeriod.alternativeMpdEvents. Đây là thay đổi có thể gây lỗi cho các ứng dụng tạo lớp conDashManifestParser:DashManifestParser.buildPeriodhiện sử dụng thêm một tham sốList<AlternativeMpdEvent>và hàm quá tải trước đó đã bị xoá. Các ứng dụng ghi đèDashManifestParser.parseEventStream(XmlPullParser)phải ghi đèDashManifestParser.parseEventStream(XmlPullParser, String), vì phương thức trước đã ngừng hoạt động và sẽ được đặt ở chế độ riêng tư trong bản phát hành sau này. - Phân tích cú pháp thông tin màu CICP (
ColourPrimaries,TransferCharacteristics,MatrixCoefficientsvàVideoFullRangeFlag) từ các chỉ số mô tảEssentialPropertyvàSupplementalPropertythànhFormat.colorInfo(#3426). - Hỗ trợ danh sách các giá trị
@idđược phân tách bằng dấu cách trong thuộc tính@valuecủa phần mô tả chế độ tua nhanh (http://dashif.org/guidelines/trickmode) (#3315). - Hỗ trợ phân tích cú pháp
<ProducerReferenceTime>trongDashManifestParser, hiển thị trongAdaptationSet.producerReferenceTimesvà sử dụng để điềnTimeline.Window.presentationStartTimeMsvàTimeline.Window.windowStartTimeMscho luồng VOD. - Thêm tính năng hỗ trợ cho Điều hướng nội dung DASH (#1689).
- Khắc phục lỗi
NullPointerExceptioncó thể xảy ra khi phân tích cú pháp tệp kê khai DASH bị thiếu thuộc tính trong phần tử<UTCTiming>(#3436).
- Hỗ trợ phân tích cú pháp các sự kiện Chèn MPD thay thế (
- Tiện ích RTSP:
- Khắc phục sự cố
IllegalStateExceptionxảy ra khi xử lý phản hồi mạng bị trì hoãn sau khi ứng dụng RTSP bị đóng. - Khắc phục vấn đề trong đó thao tác tua nhanh có thể kích hoạt nhầm cơ chế dự phòng của giao thức TCP.
- Khắc phục sự cố
IllegalStateExceptioncó thể xảy ra khi xử lý các phản hồi mạng bị trì hoãn sau khi ứng dụng RTSP đặt lại trạng thái trong quá trình chọn lại bản nhạc, huỷ phiên hoặc chuyển hướng URI. - Khắc phục vấn đề trong đó việc tua lại trước khi khởi động lại quá trình phát có thể gây ra sự cố
IllegalStateException. - Khắc phục vấn đề trong đó việc tua lùi trong khi một thao tác tua đang chờ xử lý có thể gây ra tình trạng mất âm thanh và treo video.
- Khắc phục vấn đề các đơn vị truy cập khung hình chính H.264 và H.265 kết thúc bằng một gói tổng hợp hoặc gói không phải IDR không được gắn cờ là khung hình chính, khiến quá trình phát bị kẹt trong trạng thái lưu vào vùng đệm (#3434).
- Khắc phục sự cố
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, v.v.):
- Tiện ích Opus: Khắc phục sự cố JNI khi giải mã dữ liệu Opus không hợp lệ.
- Tiện ích Opus: Khắc phục lỗi bỏ qua khoảng đệm bị loại bỏ khi khoảng đệm bỏ qua trước và khoảng đệm bị loại bỏ nằm trên cùng một gói (#2576).
- Tiện ích truyền (cast):
- Giới thiệu
SessionAvailabilityListener.SessionUnavailableReasonđể thể hiện lý do không có phiên và cung cấp một phương thức nạp chồng choSessionAvailabilityListener.onCastSessionUnavailableđể hiển thị lý do đó. - Khắc phục sự cố trong đó quá trình phát sẽ tiếp tục trên thiết bị một cách đột ngột sau khi dừng phiên Truyền.
- Ghi lại lỗi khi các thao tác
RemoteMediaClient(chẳng hạn như phát, tạm dừng, thay đổi tốc độ, chế độ lặp lại, âm lượng, tắt tiếng hoặc lựa chọn bản nhạc) không thành công trongRemoteCastPlayer(#3373). - Khắc phục lỗi
ArrayIndexOutOfBoundsExceptiontrongRemoteCastPlayerkhi hàng đợi của trình thu Cast thay đổi hoặc thu hẹp trong khi thao tác tua đang chờ xử lý (#3372). - Khắc phục lỗi với trình thu Cast mặc định, trong đó dòng thời gian chỉ điền các mục nội dung nghe nhìn ngay xung quanh mục đang hoạt động thay vì toàn bộ danh sách phát (#3129).
- Cập nhật ngay dòng thời gian và vị trí phát khi sửa đổi danh sách phát (
setMediaItems,addMediaItems,moveMediaItems,removeMediaItems) hoặc tua trongRemoteCastPlayer, đồng thời đưa các thao tác liên tiếp trong danh sách phát vào hàng đợi để các thao tác đó thực thi một cách đáng tin cậy theo thứ tự (#2639, #3272). - Khắc phục lỗi khi gọi
addMediaItemstrên một hàng đợi trống trongRemoteCastPlayerkhông tải được các mục nội dung nghe nhìn trên trình thu Cast (#2402). - Khắc phục vấn đề trong
RemoteCastPlayerkhi đến cuối hàng đợi của trình nhận Cast, dòng thời gian sẽ bị xoá thay vì giữ lại danh sách phát. - Khắc phục sự cố trong đó
playWhenReady,repeatModevàplaybackParameterskhông được chuyển hoặc áp dụng khi đặt trênRemoteCastPlayertrước khi tải các mục nội dung nghe nhìn (ví dụ: trong quá trình chuyển từ phát cục bộ sang phát từ xa trongCastPlayer) (#889).
- Giới thiệu
- Ứng dụng minh hoạ:
- Thêm tính năng hỗ trợ cho các mục nội dung nghe nhìn được bảo vệ bằng DRM và một luồng mẫu HLS bổ sung vào danh mục ứng dụng minh hoạ của phiên.
- Định cấu hình
RemoteCastPlayerbằngCastTrackSelectortrong ứng dụng minh hoạ phiên để bật tính năng chọn phụ đề và bản âm thanh trong khi truyền.
- Xoá các biểu tượng không dùng nữa:
- Xóa
DashUtil.buildDataSpec(Representation, RangedUri, int)vàDashUtil.buildDataSpec(Representation, String, RangedUri, int). Thay vào đó, hãy sử dụngDashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>).
- Xóa
- Tạo:
- Tăng Gradle
minSdklên 24.
- Tăng Gradle
Phiên bản 1.11.0
1.11.1
Ngày 10 tháng 9 năm 2026
- ExoPlayer:
- Di chuyển cờ để bật/tắt siêu dữ liệu HAGC cho nội dung nghe nhìn tăng dần từ
MediaSource.FactorysangExtractorsFactory. Phương thứcsetExperimentalEnableHagcPlaybacktrước đó đã bị xoá và thay thế bằngExtractorsFactory.setParseHagcMetadata. Việc này cũng giải quyết vấn đề khi không thể tắt vùng chứa Matroska/WebM. - Khắc phục lỗi tạm dừng phát do khởi động trước một trình kết xuất phụ không chuyển đổi.
- Khắc phục vấn đề về việc khởi động trước, trong đó
Surfacephải được trả về trình kết xuất chính khi thao tác tua đặt lại và tắt cả hai trình kết xuất. - Sửa
ArrayIndexOutOfBoundsExceptionkhi quá trình làm mới dòng thời gian trực tiếp di chuyển vị trí mặc định qua một quảng cáo được chèn phía máy chủ hiện đang phát (#3348). - Khắc phục vấn đề về chế độ tua nhanh, trong đó các khung hình video cũ có thể xuất hiện trong thời gian ngắn khi tua trong lúc bật
ScrubbingModeParameters.allowSkippingMediaCodecFlush.
- Di chuyển cờ để bật/tắt siêu dữ liệu HAGC cho nội dung nghe nhìn tăng dần từ
- Công cụ trích xuất:
- Matroska: Khắc phục lỗi các Bản nhạc được đặt sau cụm không dẫn đến dòng thời gian có thể tua (#3377).
- Âm thanh:
- Khắc phục cách tính dung lượng bộ nhớ đệm trong
SilenceSkippingAudioProcessorđể thời lượng khoảng lặng tối thiểu không bị giảm nhầm theo kích thước khung hình (#3271). - Sửa lỗi xử lý PCM 8 bit trong
PcmAudioUtilđể xử lý các mẫu dưới dạng không dấu như Android xác định (#3271). - Khắc phục vấn đề giảm tải, trong đó quá trình phát có thể bị đình trệ trong quá trình chuyển đổi trước khi phát hoặc chuyển đổi liền mạch do dung lượng bộ nhớ đệm phần cứng bị giới hạn.
- Khắc phục lỗi trong
DefaultAudioSink, trong đó số lượng bản phát hành không giảm khi luồng phát không còn hoạt động (#3338).
- Khắc phục cách tính dung lượng bộ nhớ đệm trong
- Phiên:
- Khắc phục lỗi
NullPointerExceptionkhi mộtMediaControllertrong quy trình được giải phóng khỏi lệnh gọi lạiPlayer.Listener(#3375). - Khắc phục lỗi tắc nghẽn trên luồng chính khi
MediaBrowsercũ kết nối với một dịch vụ trả về kết quả không đồng bộ từonGetLibraryRoot()hoặconConnectAsync()(#3393).
- Khắc phục lỗi
- Tiện ích HLS:
- Tiện ích DASH:
- Khắc phục lỗi tính toán dấu thời gian mẫu không chính xác cho các bản nhạc hình ảnh có
presentationTimeOffset(#3334).
- Khắc phục lỗi tính toán dấu thời gian mẫu không chính xác cho các bản nhạc hình ảnh có
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, v.v.):
- Opus: Khắc phục lỗi hỏng bộ nhớ khi nhiều thực thể
OpusDecoderđược khởi chạy đồng thời. - MPEG-H: Khắc phục lỗi rò rỉ bộ nhớ, cắt bớt ký tự không phải ASCII và khả năng xảy ra trục trặc mã gốc trong điều kiện bộ nhớ thấp khi gửi lệnh đến
MpeghUiManager(#3365).
- Opus: Khắc phục lỗi hỏng bộ nhớ khi nhiều thực thể
Phiên bản 1.11.0
Ngày 5 tháng 8 năm 2026
- Thư viện chung:
- Thêm
Format.channelMaskđể thể hiện rõ ràng mặt nạ kênh âm thanh và một phương thức nạp chồngUtil.getAudioTrackChannelConfig(Format)mới để phân giải một cách an toàn. - Nâng cấp Kotlin từ 2.0.20 lên 2.2.0.
- Thêm
- ExoPlayer:
- Khắc phục lỗi đồng thời phụ thuộc vào thời gian có thể gây ra
IllegalStateExceptionhoặcIndexOutOfBoundsExceptiontrong ExoPlayer. - Nới lỏng các bước kiểm tra số lượng nhóm quảng cáo trong
AdsMediaSourceđể cho phép số lượng nhóm quảng cáo giảm khi một nhóm quảng cáo được xử lý đầy đủ (hasUnplayedAds()làfalse), phù hợp với việc đổi kích thước nhóm quảng cáo động trong quy trình đặt lại. - Thêm
getFlags()vàFLAG_STRICT_DURATIONvàoSampleStreamđể cho phép các luồng báo cáo cờ và cập nhật trình kết xuất để kiểm tra các cờ này một cách linh động. - Sử dụng trình ước tính tốc độ khung hình trong
MediaCodecVideoRenderervà định dạng đầu ra của bộ mã hoá và giải mã trongMediaCodecAudioRendererđể tính tốc độ hoạt động của bộ mã hoá và giải mã khi định dạng luồng không cung cấp giá trị hợp lệ, đồng thời tránh việc đặt lại bộ mã hoá và giải mã không cần thiết. - Xoá tính năng cắt nội dung cho quảng cáo được chèn phía máy khách trong trình phát chính. Thay vào đó,
AdsMediaSourcesẽ đảm nhận logic cắt. Bạn cần cập nhật các nguồn quảng cáo được chèn phía máy khách tuỳ chỉnh để triển khai tính năng cắt nội dung trong nội bộ. - Đánh dấu các bản nhạc có cấu hình hoặc cấp độ bộ mã hoá và giải mã đúng định dạng nhưng không được nhận dạng là
supported=NO_EXCEEDS_CAPABILITIESthay vìsupported=YES(đây là cách đánh dấu các bản nhạc có thông tin cấu hình hoặc cấp độ bị thiếu hoặc không đúng định dạng). Điều này đảm bảo các bản âm thanh này (không được thiết bị hỗ trợ) sẽ không được chọn khi có các lựa chọn thay thế được hỗ trợ tốt hơn. - Thêm
DefaultPreloadManager.SimpleRankingDataComparator, đây là mộtRankingDataComparatorso sánh thứ hạng của các mục nội dung nghe nhìn dựa trên khoảng cách của các mục đó đến chỉ mục của mục nội dung nghe nhìn đang phát. Ứng dụng có thể ghi đè phương thứccompare(Integer, Integer)nếu cần logic so sánh tinh chỉnh hơn. Bạn có thể chènSimpleRankingDataComparatortuỳ chỉnh thông qua một hàm khởi tạo mới củaDefaultPreloadManager.Builder. - Giảm nguy cơ OOM của
DefaultLoadControl.prioritizeTimeOverSizeThresholdsbằng cách quay lại giới hạn kích thước byte của vùng đệm nếu bộ nhớ khối xếp có vẻ bị hạn chế. - Điều chỉnh cách xử lý hình ảnh tĩnh khi không đặt
MediaItem.imageDurationUs: Hình ảnh tĩnh JPEG và HEIC hiện "phát" với thời lượng mặc định rất ngắn (giống như cách PNG và các hình ảnh khác hoạt động trước đây). - Thêm
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)để kết nốiBandwidthMetervớiMediaSource. Tuy nhiên, phương thức không dùng nữa có cách triển khai tuỳ chỉnh vẫn sẽ được gọi theo mặc định. Bạn nên triển khai phương thức mới và sử dụngBandwidthMeter.getTransferListener()để có được tính tương đương với phương thức cũ. - Trong
DefaultBandwidthMeter, hãy thêm tính năng hỗ trợ cho mộtInitialBitrateSuppliertuỳ chỉnh. Điều này cho phép các ứng dụng cung cấp logic riêng để xác định thông tin ước tính tốc độ bit ban đầu. Thông tin này sẽ được dùng khi tạoDefaultBandwidthMetervà khi thay đổi loại mạng. Bạn có thể đặt nhà cung cấp thông quaDefaultBandwidthMeter.Builder.setInitialBitrateSupplier(). - Bật tính năng lập lịch động theo mặc định. Vòng lặp công việc phát
ExoPlayersẽ chạy linh động thay vì theo một khoảng thời gian tĩnh. - Xoá một lượt đặt lại không cần thiết có thể xảy ra khi kết hợp các bản nhạc có mẫu quảng cáo trước video với chế độ phát đang hoạt động.
- Trong
DefaultBandwidthMeter, hãy tối ưu hoágetInitialBitrateCountryGroupAssignmentđể trả về các chỉ định nhóm quốc gia được đóng gói thành số nguyên 32 bit thay vì mảng, giúp giảm kích thước mã và tránh việc phân bổ. - Khắc phục lỗi khởi chạy
AudioTracktrên một số thiết bị bằng cách đảm bảo logic thử lại luôn cố gắng sử dụng dung lượng bộ nhớ đệm tối thiểu là 1 giây nếu các lần thử lại khác (bằng cách giảm một nửa dung lượng bộ nhớ đệm) không thành công (#3207). - Khắc phục vấn đề về bộ mã hoá và giải mã trên một số thiết bị, trong đó bộ mã hoá và giải mã đã nuốt tất cả mẫu nếu trước đó đã được xoá trước khi nhận vùng đệm đầu vào.
- Thêm
ExoPlayer.Builder.enablePerStreamMediaProgression()thử nghiệm để cho phép xử lý nội dung nghe nhìn nâng cao trên cơ sở từng luồng. Điều này giúp giảm độ trễ khởi động giữa các mục trong danh sách phát và tránh việc phát bị "kẹt" với nội dung rất ngắn (#3122). - Khắc phục tình huống tương tranh liên quan đến việc sử dụng mã phiên âm thanh, trong đó mã phiên âm thanh ban đầu do
ExoPlayertạo tự động sẽ được dùng thay vì giá trị dosetAudioSessionIdđặt (#3241). - Thêm tính năng hỗ trợ thử nghiệm cho việc phát siêu dữ liệu theo thời gian HAGC (ST 2094-50) cho nội dung nghe nhìn tăng dần (ví dụ: MP4, Matroska). Trình phát tự động hợp nhất
các bản nhạc siêu dữ liệu HAGC với bản video liên quan 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ị API 37 trở lên. Bạn có thể tắt hành vi này thông qua
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false). - Thêm
Format.selectionPrioritythể hiện lựa chọn ưu tiên tương đối củaFormattrong lựa chọn bản nhạc (#3236). - Khắc phục vấn đề tiềm ẩn về chế độ tua nhanh, trong đó việc tua nhanh có thể bị đình trệ khi tìm đến "cuối luồng".
- Khắc phục lỗi đồng thời phụ thuộc vào thời gian có thể gây ra
- CompositionPlayer:
- Khắc phục vấn đề không phát hành được các thực thể
TrackSelector.
- Khắc phục vấn đề không phát hành được các thực thể
- Bộ chuyển đổi:
- Khắc phục vấn đề trong đó
ExportResult.fileSizeBytescó thể bị báo cáo quá mức.
- Khắc phục vấn đề trong đó
- Chọn bản nội dung:
- Hiển thị
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORvà thêmAdaptiveTrackSelection.Factory.setTrackFormatComparatorđể cho phép sắp xếp định dạng tuỳ chỉnh và ưu tiên lựa chọn ABR ngoài việc sắp xếp chỉ theo tốc độ bit. - Khắc phục vấn đề đồng thời phụ thuộc vào thời gian, trong đó các bản cập nhật tuần tự nhanh cho tham số lựa chọn bản nhạc có thể khiến một số bản cập nhật bị mất hoặc bị ghi đè.
- Hiển thị
- Công cụ trích xuất:
- MP4, MP3 và FLAC: Thêm
FLAG_DISABLE_ARTWORK_METADATAđể cho phép loại bỏ hình ảnh đính kèm và siêu dữ liệu ảnh bìa trong quá trình phân tích cú pháp vùng chứa nhằm giảm mức tiêu thụ bộ nhớ trong thời gian chạy (#2077). Bạn cũng có thể bật tính năng này trên toàn hệ thống thông quaDefaultExtractorsFactory.setDisableArtworkMetadata. - MP4: Thêm tính năng hỗ trợ trích xuất các bản nhạc siêu dữ liệu theo thời gian ITU-T T.35 (
it35). - MP4: Thêm tính năng hỗ trợ trích xuất siêu dữ liệu chương (cả định dạng Nero và QuickTime). Chương QuickTime được ưu tiên nếu có cả hai. Thông tin chương được trích xuất sẽ hiển thị dưới dạng các mục
ChaptertrongMetadatacủa bản nhạc, cho phép điều hướng chương gốc trong các tệp MP4, M4A và M4B (chẳng hạn như sách nói và podcast) (#2803). - WAV, Matroska và MP4: Thêm tính năng hỗ trợ âm thanh PCM dấu phẩy động 64 bit (#3090).
- Matroska: Sử dụng siêu dữ liệu dòng bit của bộ mã hoá và giải mã để điền
ColorInfochính xác. - MP4: Thêm tính năng hỗ trợ tua trong các tệp MP4 phân mảnh bằng hộp
mfrakhi không có hộpsidx. Để bật tính năng này, hãy cung cấpFLAG_READ_MFRA_FOR_SEEK_MAPchoFragmentedMp4Extractor. Việc này hiện được thực hiện theo mặc định trongDefaultExtractorsFactory(#3088). - Bỏ qua dữ liệu
av1Ccó phiên bản không được hỗ trợ. - MP4: Thêm tính năng hỗ trợ PCM dấu phẩy động big-endian trong các hộp
fpcm. - Matroska: Phân tích cú pháp thông tin chương thành các mục
ChaptertrongMetadatacủa một bản nhạc. - MPEG-TS: Cải thiện khả năng trích xuất luồng DTS-HD và DTS Express bằng cách kết hợp Luồng phụ cốt lõi và Luồng phụ mở rộng thành một mẫu duy nhất, khắc phục các vấn đề về việc phát lại khi hai luồng này trước đây được xuất dưới dạng các mẫu riêng biệt (#3147).
- MP4: Ngăn chặn vòng lặp vô hạn và các lượt đọc ngoài giới hạn khi phân tích cú pháp các mục thẻ siêu dữ liệu
ilsttrống (#3191). - MPEG-TS: Đảm bảo khung hình cuối cùng được kết xuất cho các luồng mà gói PES cuối cùng có độ dài đã biết (#3206).
- MP3: Sửa lỗi báo cáo tốc độ bit cho các tệp có tiêu đề Xing và VBRI.
- Matroska: Xử lý các bản nhạc được xác định trong cụm cuối cùng (#3250).
- Matroska: Thêm tính năng hỗ trợ cho ALAC (#3268).
- MP4: Cho phép các hộp
sgpdcó độ dài biến đổi trong các tệp MP4 phân mảnh (#3243). - AVI: Khắc phục vấn đề khi phát tệp không có cờ khung hình chính trên bản âm thanh
gây mất âm thanh và
OutOfMemoryError. - MP3: Sử dụng thời lượng nhận biết không có khoảng trống từ tiêu đề Xing/Thông tin (#3183).
- MP3: Điều chỉnh độ trễ của bộ mã hoá LAME/Xing và siêu dữ liệu khoảng đệm để khớp với việc cắt bớt PCM đã giải mã (#3200).
- MP4, MP3 và FLAC: Thêm
- Âm thanh:
- Thêm thời gian ân hạn 100 mili giây trong trình kết xuất âm thanh của ExoPlayer khi chuyển từ trạng thái sẵn sàng sang trạng thái chưa sẵn sàng, để loại bỏ tình trạng thiếu hụt tạm thời và tránh các trạng thái lưu vào vùng đệm không mong muốn trong quá trình phát đang hoạt động (#3210).
- Thay đổi logic dung lượng bộ nhớ đệm PCM mặc định trong
DefaultAudioTrackBufferSizeProviderđể sử dụng bộ đệm 500 mili giây cố định nhằm giảm bớt sự phụ thuộc vào thiết bị. - Cập nhật
MediaCodecAudioRendererđể trích xuất channelMask không gian từ bộ giải mã nền tảng, cho phépDefaultAudioSinksử dụng mặt nạ rõ ràng này thay vì suy luận từ số lượng kênh. - Chuyển đổi các tham số của
AudioSink.configurethành lớp dữ liệu. Bạn cần di chuyển các cơ chế ghi đè tuỳ chỉnh củaForwardingAudioSink.configuresang chữ ký phương thức mới. - Thêm tính năng hỗ trợ duy trì cao độ khi kéo dài thời gian của luồng âm thanh
bằng
EditedMediaItem.Builder#setSpeed(SpeedParameters). - Cải thiện
ToFloatPcmAudioProcessorđể hỗ trợ chuyển đổi PCM 8 bit, PCM big-endian 16 bit và PCM dấu phẩy động 64 bit sang PCM dấu phẩy động 32 bit (#3090). - Thay đổi giá trị trả về của
DecoderAudioRenderer.getChannelMappingthànhImmutableIntArray. - Khắc phục lỗi khiến quá trình phát bị kẹt khi phát danh sách phát âm thanh không có khoảng trống ở chế độ giảm tải nén.
- Chuyển tiếp
Timelinevà UID của khoảng thời gian đếnAudioSink.configurevàAudioProcessor.StreamMetadatađể cung cấp bối cảnh danh sách phát cho bộ xử lý âm thanh (#418). - Đặt
AudioProcessor.StreamMetadata.positionOffsetUschính xác để cho phép xử lý âm thanh dựa trên thời gian (#418). - Thêm tính năng hỗ trợ cho PCM dấu phẩy động 32 bit và 64 bit big endian.
- Xoá đường dẫn dự phòng của EAC3-JOC sang EAC3 để phát trên các thiết bị Google Pixel vì bộ giải mã EAC3 tiêu chuẩn của các thiết bị này không thể giải mã luồng EAC3-JOC (#3257).
- Video:
- Sửa logic nối video để tính các vùng đệm bị rớt trong quá trình nối là bị bỏ qua thay vì bị rớt.
- Khắc phục quyết định kết xuất ngay lập tức khi đặt nền tảng mới để tránh sụt khung hình trên các thiết bị không hỗ trợ nền tảng phần giữ chỗ.
- Sửa lỗi ước tính tốc độ khung hình trong
MediaCodecVideoRendererđể chính xác hơn bằng cách tính đến các khung hình bị bỏ qua hoặc bị bỏ qua. - Cho phép định cấu hình ngưỡng dùng để lên lịch sớm cho khung hình. Giá trị mặc định là 50 mili giây nhưng bạn có thể tuỳ chỉnh giá trị này thông qua
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold(). - Khắc phục lỗi trong
VideoFrameReleaseHelper, trong đó các thay đổi về màn hình có thể kích hoạt các lệnh gọi lạiChoreographerdư thừa và đánh thức CPU quá mức trên luồng chính.
- Văn bản:
- Siêu dữ liệu:
- Thêm trường
MediaMetadata.discSubtitlevà phân tích cú pháp trường này từ dữ liệu ID3v2.4TSSTvà VorbisDISCSUBTITLE. - Phân tích cú pháp số đĩa và số lượng từ khung ID3
TPOS.
- Thêm trường
- Hiệu ứng:
- Xoá trạng thái vẽ lại trong
FinalShaderProgramWrapperkhi xả để ngăn trình phát bị treo khi tua.
- Xoá trạng thái vẽ lại trong
- Bộ ghép kênh:
- Thêm tính năng hỗ trợ cho tệp đối chiếu của bản nhạc (hộp
tref) trongMp4Muxerthông qua một APIaddTrackReferencemới. Điều này cho phép thiết lập mối quan hệ giữa các bản nhạc, chẳng hạn như liên kết một bản nhạc siêu dữ liệu với bản video mà bản nhạc đó mô tả. - Thêm
OggMuxerđể cho phép ghép kênh các luồng nội dung nghe nhìnOPUShoặcVORBISvào định dạng tệpogg. - Thêm
WavMuxerđể tạo tệp WAV (hỗ trợ PCM số nguyên và dấu phẩy động). - Thêm
setAttemptStreamableOutputEnabledvàoInAppMp4Muxer.Factoryđể cho phép ghi các tệp nhỏ hơn không thể truyền trực tuyến mà không có dung lượng dành riêng. - Thêm tính năng hỗ trợ âm thanh IAMF trong
Mp4MuxervàFragmentedMp4Muxer.
- Thêm tính năng hỗ trợ cho tệp đối chiếu của bản nhạc (hộp
- Tiện ích IMA:
- Thêm
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotđể cho phép cung cấp một vị trí quảng cáo dùng cho quảng cáo trong lúc tạm dừng. - Khắc phục lỗi quảng cáo VAST có thể bỏ qua liên tiếp hiển thị nút bỏ qua ngay lập tức trên quảng cáo thứ hai (#3165).
- Thêm
- Phiên:
- Khắc phục các lỗi tắc nghẽn tiềm ẩn và sự cố
IllegalStateExceptionbên trongMediaNotificationManagerkhi sử dụng một phiên có trình lặp trình phát luồng nền. - Thực thi các yêu cầu nghiêm ngặt hơn về luồng cho các phương thức
MediaSession. Các phương thức void hiện tự động đăng quá trình thực thi lên luồng lặp của ứng dụng và các phương thức truy cập trạng thái (phương thức getter) sẽ gửi mộtIllegalStateExceptionmột cách rõ ràng nếu được gọi từ một luồng không phải là luồng lặp của ứng dụng. - Khắc phục sự cố hợp nhất dòng thời gian ngoài giới hạn (
IllegalStateExceptiontrongMediaUtils.mergePlayerInfo) bằng cách theo dõi tính nhất quán của trạng thái theo từng bộ điều khiển ở phía phiên. - Thêm
androidx.media3.session.MediaSessionManagerđể hỗ trợ truy vấn các phiên phát nội dung nghe nhìn đang hoạt động và trả về các thực thểSessionTokencủa Media3. - Thay đổi hành vi mặc định của
MediaSession.Callback.onConnectnếu phương thức này không bị ghi đè để chỉ cung cấp quyền đọc cho các bộ điều khiển không đáng tin cậy. - Thêm tính năng hỗ trợ ghi đè tên gói trong khi tạo
MediaSessionthông qua một API mớiMediaSession.Builder#setPackageNameOverride. Phương thức gọi phải có quyềnandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERđể ghi đè tên gói của phiên. - Thêm
MediaSession.Callback.onConnectAsync(). Phương thức mới cho phép xử lý không đồng bộ nỗ lực kết nối của tay điều khiển. Ứng dụng có thể trả về ngayFuturebằngFutures.immediateFuture(ConnectionResult)để đạt được hành vi trước đó. Bạn nên chuyển sang phương thức mới vìCallback.onConnectlà một phương thức có thể không được dùng nữa. - Khắc phục vấn đề trong đó tính năng duyệt qua AVRCP Bluetooth không nhận dạng được
MediaLibraryServicetrên API 36 và 37. - Khắc phục lỗi giảm tỷ lệ gấp đôi của hình minh hoạ trong
MediaSessionkhi kích thước hình ảnh gần đạt đến giới hạn của nền tảng, giải quyết tình trạng mờ trong thông báo (#3134). - Khắc phục sự cố
ForegroundServiceStartNotAllowedExceptiontrongMediaNotificationManagerkhi lệnh gọi lại tải bitmap ảnh minh hoạ không đồng bộ cố gắng khởi động dịch vụ nền trước trong khi ứng dụng đang chạy ở chế độ nền (#3270). - Khắc phục vấn đề trong đó các đối tượng
PositionInfomàMediaControllernhận được bị thiếu UIDTimelineban đầu. Giờ đây, phiên này sẽ dịch và truyền các UID này một cách đáng tin cậy trong quá trình cập nhật trạng thái. - Khắc phục sự cố bằng cách phát hiện
ForegroundServiceStartNotAllowedExceptiontrongMediaSessionService.stopSelfSafely()(#3310). - Khắc phục lệnh gọi lại
onMediaItemTransition()không mong muốn trênMediaControllerkhi tua trong cùng một mục nội dung nghe nhìn (#3248).
- Khắc phục các lỗi tắc nghẽn tiềm ẩn và sự cố
- Giao diện người dùng:
- Sửa lỗi kết xuất khung hình đầu tiên ở kích thước không chính xác khi
ContentFrameđược kết hợp lại giữa quá trình phát (#3238). - Thêm lớp
CurrentMediaItemStatevà thành phần kết hợprememberCurrentMediaItemStatetương ứng vào mô-đunmedia3-ui-compose. Phần tử giữ trạng thái này được dùng trongdemo-composeđể hiển thị nhiều thông tin siêu dữ liệu vềMediaItemđang phát. - Thêm lớp
PlaylistStatevà thành phần kết hợprememberPlaylistStatetương ứng vào mô-đunmedia3-ui-compose. Phần tử giữ trạng thái này được dùng trongdemo-composeđể hiển thị nhiều thông tin siêu dữ liệu vềMediaItemsđược đặt trên Trình phát. - Thêm API tua đi/chuyển động chậm vào
PlaybackSpeedState. Sử dụng chức năng này trongdemo-composeđể giới thiệu tính năng tua đi nhanh bằng cách nhấn và giữ. - Thêm composable
MiniControllervào mô-đunmedia3-ui-compose-material3. Thành phần này cung cấp một chức năng nhỏ gọn để điều khiểnPlayertrong khi hiển thị tiêu đề, nghệ sĩ, hình minh hoạ và tiến trình của mục nội dung nghe nhìn hiện tại. - Thêm lớp
ErrorStatevà thành phần kết hợprememberErrorStatetương ứng vào mô-đunmedia3-ui-compose. ThêmErrorTextComposable vàomedia3-ui-compose-material3và đặt thành phần này làm lớp phủ mặc định trênPlayer. - Xuất bản đối tượng
PlayerDefaultsbằng các thành phần kết hợp choTopControls,CenterControls,BottomControlsvàErrorOverlay. - Thêm
FocusRequestervào thành phần kết hợpPlayervà các vùng nội dung của thành phần này. - Phát hành
PlayerPool(common-ktx) vàrememberPooledPlayer(ui-compose) để hỗ trợ tải trướcMediaItemstrong môi trường giao diện người dùng cửa sổ trượt. Giới thiệu chức năng này trongdemo-composebằng mộtShortFormPlayerScreenmới. - Khắc phục lỗi chặn màn trập trong
PlayerViewvà ComposePresentationStategây ra sự cố trên các dòng thời gian không hỗ trợ tính năng tra cứu UID theo khoảng thời gian (#3264).
- Sửa lỗi kết xuất khung hình đầu tiên ở kích thước không chính xác khi
- Nội dung đã tải xuống:
- Phân giải các biến HLS trong danh sách phát nội dung nghe nhìn khi được tìm nạp để tải xuống (#3258).
- Tiện ích Ktor:
- Tiện ích HLS:
- Thêm tính năng hỗ trợ cho Hướng nội dung HLS và Sao chép đường dẫn (#1689).
- Thêm
setWithAssetListResetvàoHlsInterstitialsAdsLoaderđể cho phép các ứng dụng đặt lại quảng cáo xen kẽ trong danh sách thành phần đã xử lý đầy đủ về trạng thái không có sẵn để phân giải lại theo yêu cầu. - Phân tích cú pháp thuộc tính
SCOREcủaEXT-X-STREAM-INFvàEXT-X-I-FRAME-STREAM-INF, rồi điền thuộc tính đó vàoFormat.selectionPriority(#3236). - Khắc phục lỗi trong đó các lần làm mới danh sách phát HLS theo lịch vẫn tiếp tục ngay cả khi danh sách phát không còn là danh sách phát chính hoặc không còn hoạt động (#3254).
- Khắc phục cách tính độ lệch tiếp tục nội dung khi phân giải danh sách tài sản quảng cáo xen kẽ (#3322).
- Khắc phục sự cố gián đoạn dấu thời gian không mong muốn của bản âm thanh khi tiếp tục phát trực tiếp có độ trễ thấp sau khi yêu cầu danh sách phát không thành công (#3311).
- Sửa lỗi trong
HlsMediaPeriod.getStreamKeys(), trong đó bản nhạc ID3 trong bản trình diễn âm thanh được coi là phụ đề (#3333).
- Tiện ích DASH:
- Tách phụ đề CEA thành các
TrackGroupkhác nhau dựa trên ngôn ngữ (#3113). - Thêm tính năng hỗ trợ phân tích cú pháp nhiều phần tử
Locationtừ tệp kê khai (MPD) và thực hiện dự phòng vị trí trongDashMediaSourcekhi không tải được tệp kê khai. - Khắc phục sự cố (
IndexOutOfBoundsException) khi mở tệp kê khai có phần tử<SegmentTimeline/>trống (#3326).
- Tách phụ đề CEA thành các
- Tiện ích RTSP:
- Khắc phục lỗi tạm thời khiến quá trình phát bị dừng hoặc không phát được trong quá trình chuẩn bị phát RTSP do lỗi liên kết cổng UDP.
- Tiện ích truyền (cast):
- Thêm lớp
CastParamsmới để cho phép định cấu hình Cast bằng cách gọiCast.initialize(CastParams). - Thêm tuỳ chọn
CastParams.getShowSystemOutputSwitcherOnCastIconClick()mới, kích hoạt việc sử dụng Trình chuyển đổi đầu ra SystemUI thay vì bộ chọn thiết bị Truyền trong ứng dụng khi có sẵn. - Thêm
MediaRouteButtonStatevàrememberMediaRouteButtonStateđể hỗ trợ việc quan sát trạng thái hiển thị của bộ chọn tuyến nội dung nghe nhìn, đồng thời thêm tham sốstatevàoMediaRouteButton(#3172). - Khắc phục lỗi khiến
RemoteCastPlayercó thể bị kẹt vĩnh viễn ở trạng thái che dấu bản nhạc sau khi chọn bản nhạc, khiến bản nhạc bỏ qua các bản cập nhật bản nhạc tiếp theo từ Bộ thu truyền (#3237). - Khắc phục lỗi
DefaultMediaItemConvertergửi mộtNullPointerExceptionkhi cố gắng tham gia một phiên truyền bắt đầu từ một người gửi không phải Media3. - Ngăn
CastPlayerchuyểnMediaItemskhông phát được khi thay đổi trình phát đang hoạt động (#3199). - Khắc phục lỗi các sự kiện phát trực tiếp chưa được định cấu hình (
liveConfiguration == UNSET) được đưa vào hàng đợi dưới dạngSTREAM_TYPE_BUFFERED(#3318).
- Thêm lớp
- Tiện ích kiểm thử:
- Mở rộng
DataSourceContractTestđể hỗ trợ các yêu cầuPOSTcó tiêu đề và nội dung, thêm một số tài nguyênPOSTvàoHttpDataSourceTestEnv, đồng thời thêm câu nhận định cho phương thức, tiêu đề và nội dung HTTP dự kiến trongWebServerDispatcher. - Thắt chặt các câu nhận định trong
DataSourceContractTestcho độ dài được trả về từDataSource.open(). Các tài nguyên có thể dẫn đếnC.LENGTH_UNSETphải cho biết điều này bằng cách sử dụngTestResource.Builder.setMayResolveToUnknownLength(boolean). - Thêm
setPlaybackLoopervàoTestExoPlayerBuilder.
- Mở rộng
- Xoá các biểu tượng không dùng nữa:
- Xoá
androidx.media3.exoplayer.MetadataRetriever. Sử dụngandroidx.media3.inspector.MetadataRetriever. - Xoá
androidx.media3.exoplayer.MediaExtractorCompat. Sử dụngandroidx.media3.inspector.MediaExtractorCompat. - Xoá
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. Hãy sử dụngHeifExtractorđể trích xuất siêu dữ liệu ảnh chuyển động từ tệp HEIC. - Xoá
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. Sử dụngandroidx.media3.extractor.metadata.MotionPhotoMetadata. - Xoá
androidx.media3.extractor.DummyTrackOutput. Sử dụngandroidx.media3.extractor.DiscardingTrackOutput. - Xoá
androidx.media3.extractor.DummyExtractorOutput. Sử dụngandroidx.media3.extractor.NoOpExtractorOutput. - Xoá
androidx.media3.common.C.generateAudioSessionIdV21. Sử dụngandroidx.media3.common.util.Util.generateAudioSessionId.
- Xoá
- Bản dựng
- Cập nhật hướng dẫn
README.mdđể phụ thuộc vào Media3 cục bộ nhằm sử dụng Bản dựng kết hợp Gradle (includeBuild). Tập lệnhcore_settings.gradleđã bị xoá và các thuộc tínhandroidxMediaModulePrefixvàandroidxMediaEnableMidiModulekhông còn được sử dụng nữa.
- Cập nhật hướng dẫn
1.11.0-rc01
Sử dụng phiên bản ổn định 1.11.0.
1.11.0-beta01
Ngày 7 tháng 7 năm 2026
Sử dụng phiên bản ổn định 1.11.0.
1.11.0-alpha01
Ngày 24 tháng 6 năm 2026
Sử dụng phiên bản ổn định 1.11.0.
Phiên bản 1.10.0
1.10.1
Ngày 12 tháng 5 năm 2026
- Thư viện chung:
- Khắc phục cách xử lý
onAudioSessionIdChangedtrongSimpleBasePlayervàForwardingSimpleBasePlayer.
- Khắc phục cách xử lý
- ExoPlayer:
- Khắc phục tình huống tương tranh liên quan đến việc tạo mã phiên âm thanh có thể dẫn đến
IllegalStateExceptionở chế độ đường hầm. (#3099). - Khắc phục sự cố có thể xảy ra với ứng dụng khi khôi phục sau lỗi bộ giải mã bằng tính năng làm nóng trước trình kết xuất.
- Khắc phục vấn đề trong đó cấu phần phần mềm video là do cung cấp dữ liệu khởi chạy khi sử dụng bộ mã hoá và giải mã Dolby Vision dựa trên AV1 (#3153).
- Khắc phục tình huống tương tranh liên quan đến việc tạo mã phiên âm thanh có thể dẫn đến
- Chọn bản nội dung:
- Điều chỉnh logic lựa chọn bản nhạc trong
VideoTrackInfođể phân giải các loại MIME dự phòng và chuyển các lựa chọn ưu tiên về điểm số HDR và bộ mã hoá và giải mã sang các lựa chọn ưu tiên về chất lượng (#3135).
- Điều chỉnh logic lựa chọn bản nhạc trong
- Công cụ trích xuất:
- MP3: Bỏ qua độ dài dữ liệu Xing nếu độ dài này dài hơn độ dài luồng đã biết (#3117).
- Khắc phục
ArrayIndexOutOfBoundsExceptiontrongMp4ExtractorkhiFLAG_OMIT_TRACK_SAMPLE_TABLEđược đặt và bản nhạc thiếu hộp mẫu đồng bộ hoá (stss).
- Âm thanh:
- Khắc phục lỗi khiến các sự kiện âm thanh có thể bị định tuyến sai nếu nhiều trình kết xuất âm thanh được thêm vào trình phát.
- Video:
- Điều chỉnh logic để sử dụng lại bộ mã hoá và giải mã khi tốc độ khung hình thay đổi trên API dưới 30 nhằm tránh đặt lại bộ mã hoá và giải mã khi không cần thiết (#3120).
- Tắt giải pháp đồng bộ hoá bắt buộc trong
queueSecureInputBuffercho API 31 trở lên. Giải pháp này là một điểm tắc nghẽn nhân tạo buộc quá trình giải mã phải chạy tuần tự, giúp ngăn chặn video bị hỏng do vấn đề về khung tồn tại trước API 31.
- Hình ảnh:
- Khắc phục vấn đề trong chế độ tua nhanh, trong đó nội dung cập nhật hình ảnh chỉ có hiệu lực khi người dùng "dừng tua nhanh" (#2815).
- Phiên:
- Khắc phục lỗi
ForegroundServiceStartNotAllowedExceptionkhông được truyền qua ranh giới luồng trong trường hợp luồng ứng dụng không phải là luồng chính (#2499). - Khắc phục lỗi không có
COMMAND_SEEK_TO_MEDIA_ITEMtrongMediaControllerkhi kết nối với một phiên chỉ dành cho nền tảng hỗ trợ tua đến các mục khác nhưng không sửa đổi danh sách phát. - Khắc phục vấn đề
MediaControllerkhông thể đặt mục nội dung nghe nhìn trên các phiên phát nội dung nghe nhìn của nền tảng không cho phép hành độngPREPARE_FROM. - Khắc phục lỗi không đánh dấu quy trình riêng bằng
Controller.isTrusted()trên API 27 trở xuống khi kết nối qua bộ điều khiển nền tảng.
- Khắc phục lỗi
- Tiện ích HLS:
- Khắc phục lỗi gửi
ArrayIndexOutOfBoundsExceptiontrong quá trình dự phòng luồng nếu lựa chọn bản nhạc là một tập hợp con của các bản nhạc có sẵn (#3161). - Khắc phục lỗi phân đoạn khởi chạy không được chuyển sang các bản cập nhật danh sách phát nội dung nghe nhìn nếu thẻ
#EXT-X-MAPkhông được lặp lại trong các bản cập nhật tiếp theo (#3105).
- Khắc phục lỗi gửi
- Tiện ích DASH:
- Khắc phục sự cố trong
SampleQueuekhi tua đến một đoạn hiện đang bị huỷ.
- Khắc phục sự cố trong
1.10.0
Ngày 26 tháng 3 năm 2026
- Thư viện chung:
- Chuyển
Player.mute()vàPlayer.unmute()từUnstableApilên bản ổn định. - Chuyển
Format.pcmEncodingvàC.PcmEncodingtừUnstableApilên bản ổn định. - Thêm
Format.primaryTrackGroupIdđể xác định nhóm chính của các thực thểFormatđược nhúng (#294).
- Chuyển
- ExoPlayer:
- Thêm chức năng cắt vào
AdsMediaSource. - Thêm tính năng hỗ trợ lập lịch biểu động trong
MediaCodecVideoRendererđể điều chỉnh công việc lập lịch biểu và chu kỳ đánh thức CPU cho phù hợp hơn với thời điểm có thể xử lý khung hình video. Bạn có thể bật tính năng này bằng cách sử dụngexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()trongDefaultRenderersFactory. - Cho phép đặt
DataSource.Factorytuỳ chỉnh trongDefaultPreloadManager.Builder. - Cho phép mô phỏng
ExoPlayermà không cần Robolectric bằng cách di chuyển một số hằng số mặc định sangExoPlayer.Builder. Nhìn chung, bạn không nên mô phỏng giao diện phức tạp này, trừ phi việc sử dụng là tối thiểu/đơn giản/ngẫu nhiên (#2985).- Việc này yêu cầu di chuyển
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MStừExoPlayersangExoPlayer.Builder(không ngừng sử dụng).
- Việc này yêu cầu di chuyển
- Khắc phục lỗi
ProgressiveMediaSourcetruyền thông tin dòng thời gian đã lỗi thời đến trình phát và các khoảng thời gian trong hàng đợi bị xoá ngoài dự kiến (#3016). - Khắc phục vấn đề ExoPlayer không yêu cầu quyền phát âm thanh bị trì hoãn khi yêu cầu phát trong cuộc gọi điện thoại.
- Khắc phục lỗi chuyển đổi từ nội dung theo yêu cầu sang nội dung trực tiếp có thể gây ra tình trạng lưu vào vùng đệm lại ở cuối nội dung theo yêu cầu (#3052).
- Thêm tính năng hỗ trợ cho Dolby Vision Profile 10 (#2830).
- Sửa lỗi quảng cáo trước video chưa khởi chạy tạo ra
ArrayIndexOutOfBoundsException(#3125).
- Thêm chức năng cắt vào
- CompositionPlayer:
- Thêm tính năng hỗ trợ cho
EditedMediaItem.removeVideo.
- Thêm tính năng hỗ trợ cho
- Bộ chuyển đổi:
EditedMediaItem.Builder.setFrameRate()hiện có thể đặt tốc độ khung hình đầu ra tối đa cho video, điều này đặc biệt hữu ích khi tăng tốc độ nội dung nghe nhìn bằngsetSpeed().
- Chọn bản nội dung:
- Thay đổi chữ ký của
DefaultTrackSelector.selectAllTracksđể thêm mảng đầu ra làm tham số, được điền sẵn các chế độ ghi đè bản nhạc. - Khắc phục lỗi chọn các bản nhạc siêu dữ liệu được nhúng bất kể bản nhạc chính tương ứng có được chọn hay không (#294).
- Ổn định các lựa chọn
TrackSelectionParameterschopreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelsvàselectTextByDefault.
- Thay đổi chữ ký của
- Công cụ trích xuất:
- MP4: Hỗ trợ các tệp có hộp
uuidlớn trước các hộp khác nhưmoov(#3046). - MP4: Thêm tính năng hỗ trợ cho các bản nhạc Mã hoá video đa năng (VVC) trong vùng chứa MP4.
- MP4: Hỗ trợ các tệp có hộp
- Trình kiểm tra:
- Thay đổi có thể gây lỗi: xoá
FrameExtractor. Giờ đây, người dùng nên phụ thuộc vào mô-đun:media3-inspector-framemới và cập nhật các lệnh nhập vàoandroidx.media3.inspector.frame.FrameExtractor. - Giới thiệu một mô-đun mới để trích xuất và xử lý các khung hình video đã giải mã.
- Thay đổi có thể gây lỗi: xoá
- Âm thanh:
- Thay đổi thư viện giải mã cơ bản cho tiện ích bộ giải mã IAMF từ
libiamfthànhiamf_tools. - Tính năng giải mã IAMF hỗ trợ đầu ra hai tai thông qua bộ giải mã (khi sử dụng tiện ích bộ giải mã IAMF) hoặc thông qua Android Spatializer.
- Xoá đúng cách tính năng hỗ trợ cho
AC4Profile22và các hồ sơ cũ khác khi đánh giá khả năng hỗ trợ bộ giải mã AC-4 trong các trường hợp Ô tô (#2609). - Cải thiện logic thử lại của quá trình khởi chạy
AudioOutputtrongDefaultAudioSink(#2905). - Cố gắng khớp bố cục đầu ra của loa (hoặc Spatializer nếu có) khi giải mã IAMF, cả với tiện ích IAMF và bộ giải mã bộ mã hoá và giải mã nội dung nghe nhìn, được hỗ trợ bởi các trường và logic mới trong AudioCapabilities và AudioCapabilitiesReceiver.
- Khắc phục lỗi khiến quá trình phát bị kẹt khi phát danh sách phát âm thanh không có khoảng trống ở chế độ giảm tải nén.
- Thay đổi thư viện giải mã cơ bản cho tiện ích bộ giải mã IAMF từ
- Văn bản:
- VobSub: Sử dụng các lệnh điều khiển SPU
STARTvàSTOPđể lấy thời lượng gợi ý thay vì luôn đặt mặc định là 5 giây (#2935).
- VobSub: Sử dụng các lệnh điều khiển SPU
- Siêu dữ liệu:
- Tăng số lượng trình kết xuất siêu dữ liệu mặc định lên 4 để bao gồm tất cả các bản nhạc siêu dữ liệu tiềm năng do các biến thể và bản trình diễn HLS xuất bản (#3043).
- Hiệu ứng:
- Di chuyển
LottieOverlaysang mô-đun:media3-effect-lottiemới (đồng thời đổi tên từandroidx.media3.effect.LottieOverlaythànhandroidx.media3.effect.lottie.LottieOverlay).
- Di chuyển
- Hiệu ứng Lottie:
- Giới thiệu một mô-đun
:media3-effect-lottiemới cung cấp chức năng áp dụng hiệu ứng lottie cho khung hình video.
- Giới thiệu một mô-đun
- Tiện ích IMA:
- Cập nhật SDK IMA lên phiên bản 3.39.0 để có quyền truy cập vào API thông tin nội dung nghe nhìn quảng cáo mới nhất.
- Khắc phục lỗi loại MIME của quảng cáo không khớp với loại MIME được cung cấp trong sự kiện IMA LOADED. Bản sửa lỗi hiện liên kết loại MIME của quảng cáo bằng thông tin nội dung nghe nhìn của quảng cáo do IMA cung cấp.
- Thêm
setEnableCustomTabsvàoImaAdsLoadervàImaServerSideAdInsertionMediaSource, cho phép người dùng kiểm soát việc URL của trang đích sau khi nhấp vào quảng cáo có được chạy bằng Thẻ tuỳ chỉnh hay không. - Thêm
ImaAdTagUriBuilder, một lớp cung cấp cách khác để tạoadTagUri. Thư viện này chứa APIsetPreferredLinearOrientation. Đây là một API đang trong giai đoạn thử nghiệm alpha, cho phép bạn đặt hướng ưu tiên cho quảng cáo tuyến tính. Nếu bạn muốn tham gia nhóm thử nghiệm alpha, vui lòng liên hệ với đối tác quản lý tài khoản của bạn.
- Phiên:
- Khắc phục lỗi khi các mảng lớn trong
MediaMetadata.artworkDatacó thể làm hỏng ứng dụng. - Sử dụng loại int cho đối số
@Player.Commandtrong giao diệnActionFactory(#2933). - Đặt
MediaSessionServicevàMediaLibraryServicethànhLifecycleService, cho phép đính kèm các thao tác nhận biết vòng đời vào vòng đời của dịch vụ (#187). - Ngừng hỗ trợ các lệnh thay đổi âm lượng thiết bị từ
MediaControllervàMediaBrowsercho các lượt phát trên thiết bị. Ứng dụng không được thay đổi âm lượng của thiết bị cục bộ và nếu cần, có thể sử dụng APIAudioManagercho mục đích này. - Phát hiện các thực thể
Intentcũ đã bắt đầu dịch vụ dưới dạng dịch vụ trên nền trước. Điều này giúp ngăn hệ thống gửiForegroundServiceDidNotStartInTimeException. Đây là một thay đổi có thể gây lỗi trên một API không ổn định đối với các ứng dụng triển khaiMediaNotification.Providertuỳ chỉnh vì có một phương thức mới bắt buộc. - Thêm trình tạo cho các thực thể
PendingIntentđể dùng với các tiện ích trên màn hình chính (#2933). - Thêm các phương thức tĩnh để tạo thực thể
Intentcho các tiện ích màn hình chính dựa trên Compose (#2933). - Khắc phục lỗi không báo cáo quá trình chuyển đổi mục nội dung nghe nhìn cho bộ điều khiển khi quá trình phát chuyển từ một chỉ mục mục nội dung nghe nhìn nhất định sang một chỉ mục khác có cùng mục nội dung nghe nhìn vì lý do gián đoạn "AUTO" (TỰ ĐỘNG) và "SEEK" (TÌM KIẾM) (#2997).
- Khắc phục vấn đề trong đó giải pháp thay thế cho vị trí nút trên giao diện người dùng hệ thống ảnh hưởng tiêu cực đến các nền tảng giao diện người dùng khác như Android Auto hoặc các nhà sản xuất không cần giải pháp thay thế (#3041).
- Khắc phục vấn đề không đồng bộ hoá quyền truy cập vào gói thuê bao (#3056).
- Khắc phục lỗi SysUI trên API 29, trong đó hình minh hoạ phiên phát nội dung nghe nhìn có kích thước cụ thể có thể làm hỏng SysUI và buộc thiết bị phải khởi động lại (#3118).
- Khắc phục tỷ lệ biểu tượng hình minh hoạ thông báo trên Android Q (#3084).
- Khắc phục lỗi khi các mảng lớn trong
- Giao diện người dùng:
- Thêm thành phần kết hợp
PlaybackSpeedControlvàomedia3-ui-composeđể hiển thị và sửa đổi tốc độ phát. - Thêm thành phần kết hợp
PlaybackSpeedToggleButtonvàomedia3-ui-compose-material3để điều khiển tốc độ phát. - Thêm thành phần kết hợp
ProgressSlidervàomedia3-ui-compose-material3để hiển thị tiến trình của trình phát và thực hiện thao tác tua bằng cách kéo và nhấn (#2288). - Tránh vùng đệm ngoài màn hình lớn khi tạo ảnh động cho PlayerControlView.
- Thêm thành phần kết hợp
Playervàomedia3-ui-compose-material3, kết hợpContentFramevới các chế độ điều khiển có thể tuỳ chỉnh được căn chỉnh theo trên cùng, giữa và dưới cùng. - Ẩn vị trí phát khỏi dịch vụ hỗ trợ tiếp cận để ngăn chặn việc cập nhật thông báo liên tục khi
PlayerControlViewhiển thị.
- Thêm thành phần kết hợp
- Tiện ích HLS:
- Hỗ trợ X-PLAYOUT-LIMIT với quảng cáo xen kẽ HLS (#2484).
- Hỗ trợ thuộc tính
QUERYPARAMbằng#EXT-X-DEFINE(#1854). - Tối ưu hoá việc phân tích cú pháp danh sách phát HLS bằng cách lưu trình so khớp biểu thức chính quy vào bộ nhớ đệm (#3008).
- Hiển thị bản nhạc siêu dữ liệu ID3 (EMSG) trong các bản trình diễn âm thanh (#3043).
- Cho phép dự phòng vị trí khi gặp lỗi tải, nếu có các luồng dự phòng từ nhiều vị trí (#1988).
- Khắc phục hành vi X-SNAP cho quảng cáo xen kẽ HLS để tính toán chính xác vị trí bắt đầu và tiếp tục (#3013).
- Tiện ích DASH:
- Tiện ích RTSP:
- Khắc phục lỗi hồi quy trong quá trình truyền trực tuyến H.264 và H.265, trong đó phân tích cú pháp không chính xác các mẫu của cùng một đơn vị truy cập trải dài trên nhiều gói RTP. Điều này dẫn đến các cấu phần phần mềm hình ảnh và lỗi trong video (#3121).
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, v.v.):
- Thêm tính năng hỗ trợ trình quản lý giao diện người dùng MPEG-H vào tiện ích bộ giải mã MPEG-H (#3066).
- Tiện ích truyền (cast):
- Thêm phương thức
RemoteCastPlayer.Builder#setTrackSelectorcho phép triển khai lựa chọn bản nhạc cho các lượt phát Cast.
- Thêm phương thức
- Xoá các biểu tượng không dùng nữa:
- Xoá
ExperimentalFrameExtractor. Sử dụngandroidx.media3.inspector.frame.FrameExtractor. - Xoá
ChannelMixingMatrix.create(). Sử dụngChannelMixingMatrix.createForConstantGain(). - Xoá
androidx.media3.extractor.metadata.flac.VorbisComment. Sử dụngandroidx.media3.extractor.metadata.vorbis.VorbisComment. - Xoá
MediaSource.prepareSource(MediaSourceCaller, TransferListener). Thay vào đó, hãy sử dụngMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId).
- Xoá
1.10.0-rc03
Ngày 25 tháng 3 năm 2026
Sử dụng phiên bản ổn định 1.10.0.
1.10.0-rc02
Ngày 16 tháng 3 năm 2026
Sử dụng phiên bản ổn định 1.10.0.
1.10.0-rc01
Ngày 10 tháng 3 năm 2026
Sử dụng phiên bản ổn định 1.10.0.
1.10.0-beta01
Ngày 25 tháng 2 năm 2026
Sử dụng phiên bản ổn định 1.10.0.
1.10.0-alpha01
Ngày 6 tháng 2 năm 2026
Sử dụng phiên bản ổn định 1.10.0.
Phiên bản 1.9.0
1.9.4
Ngày 16 tháng 5 năm 2026
Phiên bản 1.9.4 bao gồm các thay đổi sau.
- Hiệu ứng:
- Đặt rõ ràng
GL_DRAW_BUFFERvàGL_READ_BUFFERkhi chuyển đổi từ ngữ cảnh không có nền tảng.
- Đặt rõ ràng
1.9.3
Ngày 16 tháng 3 năm 2026
Phiên bản 1.9.3 bao gồm các thay đổi sau.
- Âm thanh:
- Khắc phục lỗi khiến quá trình phát bị kẹt khi phát danh sách phát âm thanh không có khoảng trống ở chế độ giảm tải nén.
1.9.2
Ngày 6 tháng 2 năm 2026
Phiên bản 1.9.2 bao gồm các thay đổi sau đây.
- ExoPlayer:
- Khắc phục lỗi
ProgressiveMediaSourcetruyền thông tin dòng thời gian đã lỗi thời đến trình phát và các khoảng thời gian trong hàng đợi bị xoá ngoài dự kiến (#3016).
- Khắc phục lỗi
- Phiên:
- Khắc phục vấn đề trong đó giải pháp thay thế cho vị trí nút trên giao diện người dùng hệ thống ảnh hưởng tiêu cực đến các nền tảng giao diện người dùng khác như Android Auto hoặc các nhà sản xuất không cần giải pháp thay thế (#3041).
- Tiện ích truyền (cast):
- Khắc phục lỗi khiến việc chuyển từ Cast sang chế độ phát trên thiết bị không hoạt động.
1.9.1
Ngày 26 tháng 1 năm 2026
Phiên bản 1.9.1 bao gồm các thay đổi sau.
- Thư viện Common:
- Hỗ trợ chuỗi ngày giờ chỉ có giờ trong độ lệch múi giờ (#2929).
- ExoPlayer:
- Cho phép lập lịch biểu động để làm chậm khoảng thời gian
doSomeWorkchỉ sau khi âm thanh bắt đầu hỗ trợ đồng bộ hoá âm thanh/video mượt mà hơn khi bắt đầu phát. - Khắc phục lỗi trong
DefaultLoadErrorHandlingPolicy, trong đóFileNotFoundExceptionvà các loại ngoại lệ tương tự được thử lại nhiều lần. - Khắc phục lỗi liên quan đến tính năng lập lịch động, trong đó thời gian được tính cho
doSomeWorktiếp theo bị giảm nhầm theo thời gian đã trôi qua của lần lặp lại hiện tại củadoSomeWork. Việc giải quyết vấn đề này hy vọng sẽ kéo dài thời gian rảnh của CPU và tiết kiệm điện năng. - Khắc phục vấn đề một số lượt phát tệp Dolby Vision không thành công khi cố gắng sử dụng bộ mã hoá và giải mã AVC hoặc HEVC dự phòng.
- Khắc phục lỗi tiếp tục tải sau khi quá trình phát kết thúc khi xoá mục đang phát khỏi danh sách phát (#2873).
- Tránh rò rỉ các thực thể
MediaItemkhi liên tục sử dụngExoPlayer.replaceMediaItemtrên cùng một mục (#2993). - Ngăn chặn lỗi ANR tiềm ẩn do việc giải phóng khoá chế độ thức khẩn cấp (#2979).
- Cho phép lập lịch biểu động để làm chậm khoảng thời gian
- Công cụ trích xuất:
- MP3: Phân tích cú pháp dữ liệu LAME ReplayGain (#2840).
- Âm thanh:
- Xoá đúng cách tính năng hỗ trợ cho
AC4Profile22và các hồ sơ cũ khác khi đánh giá khả năng hỗ trợ bộ giải mã AC-4 trong các trường hợp Ô tô (#2609).
- Xoá đúng cách tính năng hỗ trợ cho
- Video:
- Loại bỏ bộ mã hoá và giải mã video trên các thiết bị dưới API 30 khi tốc độ khung hình của nội dung thay đổi để tránh tình trạng giật hình khi phát (#2941).
- Văn bản:
- VobSub: Sửa một số phụ đề bị thiếu bằng cách xử lý chính xác các SPU chỉ chứa một trình tự điều khiển hoặc có thông tin quan trọng được phân tách trên nhiều trình tự điều khiển (#2935).
- Tiện ích IMA:
- Bản sửa lỗi: Sửa lỗi loại MIME của quảng cáo không khớp với loại MIME được cung cấp trong sự kiện IMA LOADED. Bản sửa lỗi hiện liên kết loại MIME của quảng cáo bằng cách sử dụng chỉ mục nhóm quảng cáo và vị trí quảng cáo.
- Thêm một quy trình kiểm tra giá trị rỗng trước khi truy cập vào kết quả của
getAdsManager()vàAdEvent.getAd().
- Phiên:
- Khắc phục lỗi khi dừng một
MediaControllerđược kết nối với một phiên nền tảng khiến ứng dụng gặp sự cố nếu việc dừng xảy ra trong khi phát quảng cáo (#2948). - Thêm các quy trình xác minh bổ sung trên các thực thể
extrasBundletrong nhiều lớp để bảo vệ khỏi các thực thểBundlekhông đúng định dạng được gửi từ các quy trình khác. - Khắc phục vấn đề thiếu lệnh cho
COMMAND_SEEK_NEXThoặcCOMMAND_SEEK_BACKcó thể gây ra khoảng trống trong thông báo của hệ thống về nội dung nghe nhìn (#2976). - Di chuyển tỷ lệ bitmap cho biểu tượng thông báo ra khỏi luồng chính (#2829).
- Sửa lỗi tác giả, người viết và nhà soạn nhạc không được dùng làm phương án dự phòng khi chuyển đổi từ
MediaMetadataCompatvàMediaDescriptionCompatcũ (#3018).
- Khắc phục lỗi khi dừng một
- Nội dung đã tải xuống:
- Khắc phục các vòng lặp vô hạn tiềm ẩn khi
PriorityTooLowExceptionđược xử lý bằngSegmentDownloader(đối với DASH, HLS và SmoothStreaming). Các cơ chế ghi đè tuỳ chỉnh củaSegmentDownloaderbằng phương thứcexecuteđược bảo vệ cần cung cấp tác vụ được gói trongSupplierđể có thể tạo lại (#2931).
- Khắc phục các vòng lặp vô hạn tiềm ẩn khi
- Tiện ích HLS:
- Truyền tài liệu JSON chứa danh sách tài sản thô đến lệnh gọi lại
Listener.onAssetListLoadCompleted. Đây là một thay đổi có thể gây lỗi trong một API không ổn định, yêu cầu các ứng dụng triển khai lệnh gọi lại này phải thêm một đối số bổ sung thuộc loạiJSONObject(#2950).
- Truyền tài liệu JSON chứa danh sách tài sản thô đến lệnh gọi lại
- Tiện ích RTSP:
- Xử lý đúng cách các Gói RTP có dấu thời gian bao bọc (#2930).
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, v.v.):
- Khắc phục lỗi
NullPointerExceptiontiềm ẩn có thể xảy ra khi tua trước khi xử lý khung hình video đầu tiên (#2965).
- Khắc phục lỗi
- Tiện ích truyền (cast):
- Khắc phục lỗi ngăn dòng thời gian
RemoteCastPlayercập nhật chính xác khi thay thế danh sách phát.
- Khắc phục lỗi ngăn dòng thời gian
1.9.0
Ngày 17 tháng 12 năm 2025
- Thư viện Common:
- Cập nhật
minSdklên23cho phù hợp với các thư viện AndroidX khác. - Thêm
PlayerTransferStateđể hỗ trợ chuyển trạng thái phát giữa các thực thểPlayer. - Thêm các phương thức
void mute()vàvoid unmute()vào Player để duy trì và sau đó khôi phục âm lượng của Player trước và sau khi đặt âm lượng về 0. - Phát hành các lớp tiện ích
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagervàStuckPlayerDetectormàExoPlayertừng sử dụng nội bộ để cho phép sử dụng lại cho các trình phát khác (#1893). - Khắc phục lỗi xử lý trình nghe
ForwardingPlayerkhi trình phát uỷ quyền cơ bản sử dụng tính bằng nhau của tham chiếu để so sánh các thực thể trình nghe (#2675). - Thêm một hàm mở rộng tạm ngưng
Player.listenTotrong thư việnmedia3-common-ktxđể chỉ địnhPlayer.Eventscụ thể cần được xử lý. - Khắc phục sự cố trong
BasePlayer.getBufferedPercentagedo tràn số nguyên khi vị trí được lưu vào vùng đệm được báo cáo lớn hơn nhiều so với thời lượng được báo cáo (#2750). - Khắc phục tính năng tự động phát hiện loại bản nhạc
TrackGroupbằng cách không bỏ qua loại MIME mẫu tuỳ chỉnh và quay lại sử dụng loại bản nhạc có thể không chính xác từ loại MIME vùng chứa (#2860).
- Cập nhật
- ExoPlayer:
- Thêm tính năng phát hiện trình phát bị kẹt để kích hoạt lỗi trình phát
StuckPlayerExceptionnếu trình phát có vẻ bị kẹt. Điều này xảy ra trong các trường hợp sau, trong đó mỗi thời gian chờ mặc định có thể được định cấu hình trongExoPlayer.Buildernếu cần:- Sau 10 phút
STATE_BUFFERINGtrong khi cố gắng phát và không có tiến trình lưu vào vùng đệm. - Sau 10 giây
STATE_READYtrong khi cố gắng phát và không có tiến trình phát. - Sau 1 phút
STATE_READYvượt quá thời lượng đã khai báo mà không đến cuối mục. - Sau 10 phút có lý do chặn phát trong khi cố gắng phát.
- Sau 10 phút
- Bật tính năng xử lý khoá chế độ thức theo mặc định để khắc phục các vấn đề về việc lưu vào vùng đệm trong khi phát trong nền. Điều này tương đương với việc thiết lập
ExoPlayer.Builder.setWakeModethànhC.WAKE_MODE_LOCAL. - Thêm logic nghe để tự động cập nhật mã thiết bị ảo khi có thay đổi được báo cáo cho
Contextban đầu được truyền đếnExoPlayer.Builder. - Thêm
ExoPlayer.setVirtualDeviceIdđể cập nhật mã thiết bị ảo theo cách thủ công, mã này được lấy từContextđược truyền đếnExoPlayer.Builder. - Đảm bảo trình kết xuất không sử dụng dữ liệu từ mục danh sách phát tiếp theo quá 10 giây trước khi kết thúc mục hiện tại.
- Thêm
setSeekBackIncrementMs,setSeekForwardIncrementMsvàsetMaxSeekToPreviousPositionMsvàoExoPlayerđể cập nhật các chế độ cài đặt này sau khi tạo (#2736). - Thêm chức năng lưu trước vào bộ nhớ đệm trong
DefaultPreloadManager. Giờ đây, các ứng dụng có thể trả vềDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)hoặcDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)thông quaTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)để cho biết rằng một mục nội dung nghe nhìn cần được lưu trước vào bộ nhớ đệm. - Sử dụng chức năng lưu trước vào bộ nhớ đệm của
DefaultPreloadManagertrong ứng dụng minh hoạ dạng ngắn. - Thêm phương thức setter
DefaultLoadControl.Builderđể phát và điều chỉnh cục bộ các giá trị mặc định củaDefaultLoadControlđể hoạt động tốt với nhiều tệp cục bộ. - Khắc phục lỗi khi đặt danh sách phát trống có thể khiến trình phát ở trạng thái
STATE_READYhoặcSTATE_BUFFERING. - Cải thiện các API của trình quản lý tải trước:
- Thêm
addMediaItems(List<MediaItem>, List<T>)vàaddMediaSources(List<MediaSource>, List<T>)để thêm các mục nội dung nghe nhìn hoặc nguồn nội dung nghe nhìn theo lô, sau đó tự động gọiinvalidate(). - Thêm
removeMediaItems((List<MediaItem>)vàremoveMediaSources(List<MediaSource>)để xoá các mục nội dung nghe nhìn hoặc nguồn nội dung nghe nhìn theo lô, đồng thời đảm bảo rằng trình quản lý tải trước không bắt đầu tải trước hoặc tiếp tục tải trước bất kỳ mục nào trong số đó sau khi xoá. - Cho phép
DefaultPreloadManager.setCurrentPlayingIndex(int)tự động vô hiệu hoá. Ứng dụng không cần gọiinvalidate()một cách rõ ràng nữa sau khi cập nhật chỉ mục đang phát hiện tại.
- Thêm
- Thêm khả năng bỏ qua việc đặt lại khung hình chính cho các thao tác tua đi trong cùng một nhóm ảnh khi ở chế độ tua nhanh.
- Thêm
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)để các ứng dụng đặt giá trị byte vùng đệm mục tiêu cho một trình phát cóplayerNameđược chỉ định. Giờ đây,DefaultLoadControlcó thể đưa ra quyết định cho từng trình phát riêng biệt dựa trên số byte được phân bổ và số byte vùng đệm mục tiêu của riêng trình phát đó. - Thêm
SkipInfovàoAdPlaybackState.AdGroupđể mang thông tin bỏ qua cho mỗi quảng cáo trong nhóm quảng cáo. - Khắc phục lỗi khi gọi
removeMediaItems(List)trong khi phát quảng cáo chèn sau gây ra sự cố (#2746). - Khắc phục một số lỗi giật hình khi phát danh sách phát, trong đó các khung hình luôn được đặt nhầm làm mẫu cuối cùng và được kết xuất.
- Bật đường dẫn thử lại nếu trình phát không tạo được mã phiên âm thanh (#2382, #2678).
- Thêm tính năng hỗ trợ để kiểm soát tổng số byte vùng đệm cho các nguồn trong
DefaultPreloadManagernhằm tránh việc tổng số byte vùng đệm cho quá trình tải trước tăng lên tuỳ ý. Để sử dụng logic điều khiển mặc định, các ứng dụng có thể đặt byte vùng đệm mục tiêu để tải trước thông quaDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)choplayerNamecủaPlayerId.Preload.name("tải trước") và chènDefaultLoadControlđã tạo thông quaDefaultPreloadManager.Builder.setLoadControl(LoadControl). - Thêm
cloneAndSet(int, int)vàoShuffleOrderbằng cách triển khai mặc định (#2834). - Thêm độ lệch tiếp tục nội dung khi bỏ qua việc phát quảng cáo sau khi điều chỉnh tua hoặc chuyển đổi tự động (#2484).
- Thêm API để đặt và quan sát các tham số bộ mã hoá và giải mã cho bản âm thanh và video.
Tính năng này được triển khai cho trình kết xuất dựa trên
MediaCodecvà yêu cầu API 29 trở lên.- Sử dụng
ExoPlayer.setAudioCodecParameters()vàExoPlayer.setVideoCodecParameters()để áp dụng các tham số. - Sử dụng
ExoPlayer.addAudioCodecParametersChangeListener()vàExoPlayer.addVideoCodecParametersChangeListener()để theo dõi các thay đổi. Để quan sát các khoá dành riêng cho nhà cung cấp, bạn cần có API 31 trở lên.
- Sử dụng
- Khắc phục lỗi
IllegalStateExceptiondo đặt nguồn nội dung nghe nhìn trống sau khi tua đến một vị trí khác 0 rồi chuẩn bị trình phát bằng một nguồn nội dung nghe nhìn không trống. - Khắc phục lỗi tua đến các mục nội dung nghe nhìn khác khi ở chế độ tua nhanh có thể gây ra
IllegalStateException. - Khắc phục
NullPointerExceptiontiềm ẩn trongDefaultPlaybackSessionManager(#2885). - Bật tính năng cải thiện hiệu suất tua cho những video đủ điều kiện.
- Bật lại tính năng giải mã không đồng bộ trong MediaCodec trên API 36 trở lên, trong đó các vấn đề về thời gian chờ với API nền tảng này đã được khắc phục (#1641).
- Thay đổi giá trị mặc định của
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsthành 15 mili giây và cho phép loại bỏ khung hình video hiệu quả hơn trước khi giải mã cho các video đủ điều kiện. - Thêm giới hạn bộ nhớ tối đa vào tính năng tính toán bộ nhớ tự động trong
DefaultLoadControl. Việc này chỉ có hiệu lực nếu bạn chọn quá nhiều bản nhạc (#2860). - Khắc phục lỗi trong đó nếu phát trong danh sách phát hoặc chế độ lặp lại, thì việc tua ở chế độ tua nhanh gần cuối có thể khiến video tua đến mục nội dung nghe nhìn tiếp theo.
- Thêm tính năng phát hiện trình phát bị kẹt để kích hoạt lỗi trình phát
- CompositionPlayer:
- Xuất bản
CompositionPlayertrong một chú thích@ExperimentalApimới để cho biết rằng thư viện này có thể dùng để thử nghiệm nhưng vẫn đang trong quá trình phát triển. Một số API có thể thay đổi đáng kể trong các bản phát hành sau này, đồng thời có một số vấn đề và hạn chế đã biết đối với một số trường hợp sử dụng (một số trường hợp không được ghi lại). - Thêm tính năng hỗ trợ cho
COMMAND_SET_AUDIO_ATTRIBUTESvà xử lý tiêu điểm âm thanh trongCompositionPlayer. - Thêm tính năng hỗ trợ thay đổi tốc độ trong các trình tự phụ trong
CompositionPlayer. - Thêm tính năng hỗ trợ cho
EditedMediaItem.removeVideo.
- Xuất bản
- Bộ chuyển đổi:
- Sử dụng
InAppMp4Muxerlàm bộ ghép kênh mặc định. - Thêm
EditedMediaItem.Builder#setSpeed()và ngừng sử dụngEffects#createExperimentalSpeedChangingEffects(). - Thay thế
forceAudioTrackvàforceVideoTrackbằngtrackTypestrongEditedMediaItemSequence.
- Sử dụng
- Chọn bản nhạc:
- Thêm
TrackSelectionParameters.selectTextByDefaultđể ưu tiên lựa chọn bất kỳ bản âm thanh nào mà không cần chỉ định các lựa chọn ưu tiên cụ thể khác. - Thêm
preferredVideoLabels,preferredAudioLabelsvàpreferredTextLabelstrongTrackSelectionParametersđể chỉ định lựa chọn ưu tiên cho các bản nhạc có nhãn cụ thể, ví dụ: những bản nhạc được đọc từ thẻ HLS NAME (#1666).
- Thêm
- Công cụ trích xuất:
- FLAC: Thắt chặt việc phát hiện tiêu đề để giảm khả năng tìm thấy tiêu đề giả mạo trong dữ liệu FLAC được mã hoá, dẫn đến lỗi giải mã (#558).
- MP3: Cho phép khoảng trống giữa (và trước) các thẻ ID3 ở đầu tệp MP3 (#811, #5718).
- MP3: Tăng giới hạn dò tìm lên 128 kB để khớp với giới hạn tìm kiếm hiện có cho một byte đồng bộ hoá (#2713).
- MP3: Thay đổi
FLAG_ENABLE_INDEX_SEEKINGđể ưu tiên tìm thông tin từ tiêu đề siêu dữ liệu (như Xing và VBRI) khi có, quay lại tìm kiếm dựa trên chỉ mục nếu không có thông tin tìm kiếm nào khác. Điều này giúp cải thiện hiệu suất cho các tệp có siêu dữ liệu tua (#2839). - MP3: Thay đổi
Mp3Extractorthành mặc định cho giả định tốc độ bit không đổi (CBR) khi không tìm thấy siêu dữ liệu tìm kiếm (ví dụ: Xing, VBRI), ngay cả khi bạn đã đặtFLAG_ENABLE_INDEX_SEEKING. Điều này dựa trên lịch sử thông số kỹ thuật của MP3, trong đó CBR là tiêu chuẩn và VBR yêu cầu tiêu đề rõ ràng. Điều này giúp cải thiện khả năng tua ngay lập tức cho các tệp không có siêu dữ liệu, nhưng có thể làm giảm độ chính xác cho các tệp VBR thiếu tiêu đề. Tính năng tìm kiếm chỉ mục hiện được dùng làm phương án dự phòng nếu giả định CBR không thể tìm kiếm được (ví dụ: đối với các luồng có độ dài không xác định) (#2848). - MP4: Phân biệt giữa các loại MIME
audio/mpeg(MP3),audio/mpeg-L1vàaudio/mpeg-L2bằng cách xem giá trị lớp của mẫu đầu tiên trước khi phát định dạng bản nhạc từ trình trích xuất (#2683). - MP4: Cải thiện hiệu quả phát hiện của các tệp rất lớn bằng cách giả định rằng hộp
stbllớn hơn 1 MB ngụ ý rằng tệp phải không bị phân mảnh (#2650). - MP4: Thêm tính năng hỗ trợ cho siêu dữ liệu
©mvn(tên chuyển động) và©mvi(chỉ mục chuyển động), các siêu dữ liệu này hiện được phát ra dưới dạng đối tượngTextInformationFrametrongFormat.metadatavới mã nhận dạng lần lượt làMVNMvàMVIN(#2754). - MP4: Bỏ qua các bản nhạc thiếu hộp
stsd(thay vì không phân tích cú pháp được toàn bộ tệp). - Matroska: Thêm tính năng hỗ trợ phát hiện DTS-HD (#6225).
- Khắc phục vấn đề trong
MatroskaExtractor, trong đó việc tua có thể không chính xác đối với các tệp có nhiều bản nhạc. Điểm tín hiệu hiện được liên kết chính xác với các bản nhạc tương ứng, giúp việc tua chính xác hơn. - MPEG-TS: Khắc phục lỗi
IllegalArgumentExceptiontừReorderingBufferQueuedo các gói PES không có dấu thời gian gây ra (#2764). - Thêm tính năng hỗ trợ trích xuất Ảnh chuyển động HEIC.
HeifExtractorhiện có thể phân tích cú pháp các tệp HEIC chứa bản âm thanh và video được nhúng.
- Trình kiểm tra:
- Ra mắt mô-đun
:media3-inspectormới để làm nơi lưu trữ chuyên dụng cho các tiện ích kiểm tra nội dung nghe nhìn. Mô-đun này hiện có mộtandroidx.media3.inspector.MetadataRetrievermới, cung cấp một API hợp nhất cho cả siêu dữ liệu và trích xuất khung hình.androidx.media3.exoplayer.MetadataRetrieverhiện có hiện không còn được dùng nữa và được thay thế bằng phiên bản mới này. - Ra mắt
androidx.media3.inspector.FrameExtractor, một API công khai mới để trích xuất khung hình. LớpAutoCloseablenày cung cấp một cách để trích xuất khung hình có hỗ trợ video HDR, hiệu ứng video và lựa chọn bộ giải mã tuỳ chỉnh. Bạn nên tạo lớp này thông quaBuildercho mộtMediaItemcụ thể. - FrameExtractor: Thêm
getThumbnail()để trích xuất khung hình thu nhỏ đại diện từ tệp nội dung nghe nhìn mà không cần dấu thời gian cụ thể. - Thêm
androidx.media3.inspector.MediaExtractorCompat, một thành phần thay thế choandroid.media.MediaExtractorcủa nền tảng, cung cấp cách trích xuất các mẫu nội dung nghe nhìn thô, được mã hoá từ một tệp nội dung nghe nhìn.androidx.media3.exoplayer.MediaExtractorCompathiện có hiện không còn được dùng nữa, thay vào đó là lớp mới này.
- Ra mắt mô-đun
- Âm thanh:
- Giúp các thực thể
AudioProcessornhận biết được thao tác tua. - Cho phép chèn giao diện
AudioOutputProvidermới vàoDefaultAudioSink.Builderđể hỗ trợ đường dẫn đầu ra âm thanh tuỳ chỉnh. Giá trị mặc định làAudioTrackAudioOutputProvider. - Xử lý các thao tác tua trong
GainProcessor. - Sử dụng các chức năng cấp và hồ sơ của bộ giải mã AC-4 trong quy trình đánh giá khả năng hỗ trợ định dạng bản nhạc (#2580).
- Tránh tình trạng có thể bị trễ do xử lý lệnh gọi lại thay đổi định tuyến khi bắt đầu phát (#2646).
- Cho phép sử dụng lại bộ mã hoá và giải mã cho các định dạng EAC3, EAC3-JOC và AC-4 (#1346).
- Thêm tính năng hỗ trợ cho các mẫu PCM dấu phẩy động trong
Sonic. - Thêm tính năng hỗ trợ cho các mẫu PCM 16 bit trong
ToFloatPcmAudioProcessor.
- Giúp các thực thể
- Video:
- Tắt tính năng sử dụng lại bộ mã hoá và giải mã cho nội dung Dolby-Vision có nhiều hồ sơ.
- Bật lại giải pháp cho các điểm hiệu suất được báo cáo sai đối với bộ mã hoá và giải mã bảo mật (#2856).
- Văn bản:
- Khắc phục lỗi phân tích cú pháp phụ đề CEA-6/708 trong nội dung Dolby Vision (#2775).
- Hình ảnh:
- Khắc phục vấn đề về ScrubbingMode, trong đó trình phát bị kẹt khi tua nhanh một bản nhạc thu nhỏ DASH (#2815).
- DRM (Quản lý bản quyền nội dung số):
- Thay đổi kiểu dữ liệu trả về của các phương thức
MediaDrmCallbacktừbyte[]thành một kiểuMediaDrmCallback.Responsemới, để cho phép trả về thông tin không bắt buộc bổ sung. Đây là một thay đổi có thể gây lỗi cho nguồn, nhưng có thể dễ dàng giải quyết lỗi bằng cách gói giá trị trả vềbyte[]trước đó bằngnew Responsetrước khi trả về. - Thêm thông tin yêu cầu khoá như URL và độ trễ vào
AnalyticsListener.onDrmKeysLoaded(#1001). - Di chuyển dữ liệu yêu cầu cấp phép từ tham số URL sang phần nội dung POST.
- Thay đổi kiểu dữ liệu trả về của các phương thức
- Hiệu ứng:
- Thêm
Presentation.copyWithUnsetSideRoundedTođể làm tròn cạnh đầu ra chưa đặt khiPresentationđược tạo bằng một chiều dài cạnh duy nhất.
- Thêm
- Bộ ghép kênh:
- Thêm
MediaMuxerCompat, một thành phần thay thế cho khungMediaMuxer. - Thêm
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()để cho phép tạo Ảnh chuyển động. - Thêm
WebmMuxerđể cho phép ghép kênh các luồng nội dung nghe nhìnOPUS,VORBIS,VP8vàVP9thành định dạng tệpwebm.
- Thêm
- Tiện ích IMA:
- Xoá các quy tắc proguard tuỳ chỉnh để ứng dụng có thể sử dụng các quy tắc được phát hành trong tệp lưu trữ IMA Android.
- Thêm
ImaServerSideAdInsertionUriBuilder.setNetworkCode, một API mới để đặt mã mạng Google Ad Manager cho IMA SDK nhằm xử lý giá trị nhận dạng quảng cáo như đã chỉ định trong phần cài đặt Google Ad Manager. Mã mạng là không bắt buộc nhưng bạn nên dùng cho các yêu cầu luồng Dịch vụ đầy đủ. Để tìm mã mạng, hãy xem bài viết này. - Nâng phần phụ thuộc IMA lên phiên bản 3.37.0, yêu cầu bật tính năng đơn giản hoá thư viện cốt lõi. Các ứng dụng phụ thuộc cũng phải bật tính năng này. Xem ghi chú cấu hình của IMA. * Hỗ trợ các tuỳ chọn giao diện người dùng tuỳ chỉnh của IMA DAI trong trình tạo URI SSAI. Các lựa chọn giao diện người dùng tuỳ chỉnh cho tính năng chèn quảng cáo phía máy chủ bao gồm cả tính năng hỗ trợ hiển thị "Có thể bỏ qua" và "Thông tin về quảng cáo này". Tính năng này hiện chỉ dành cho một số nhà xuất bản trong danh sách cho phép. Thay đổi này cũng nâng cấp phiên bản IMA SDK lên 3.38.0 (ghi chú phát hành) để truy cập vào API tuỳ chọn giao diện người dùng tuỳ chỉnh.
- Khắc phục lỗi chuẩn bị nội dung cho nội dung sau khi quảng cáo bị báo cáo nhầm là lỗi phát quảng cáo (#2656).
- Phiên:
- Thêm tham số mới vào
MediaSession.Callback.onPlaybackResumptionđể cho biết liệu lệnh gọi có xảy ra để chỉ thu thập thông tin hay để bắt đầu phát (#1764). - Cập nhật
MediaSession.ControllerInfo.isTrustedđể khai báo các bộ điều khiển từ ứng dụng của chính bạn là đáng tin cậy (#2542). - Thêm
MediaSessionService.triggerNotificationUpdateđể kích hoạt bản cập nhật thông báo theo cách thủ công (#1833). - Thêm
ProgressListenervào các phương thức lệnh tuỳ chỉnh. - Thay đổi giá trị mặc định cho
MediaLibrarySession.Builder.setLibraryErrorReplicationModethành không nghiêm trọng. - Thêm tham số
ContextvàoMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - Đọc mã điều khiển âm lượng từ nền tảng
PlaybackInfothay vì tìm nạp mã đó qua trình liên kết. Điều này đảm bảo rằng loại chế độ phát và mã nhận dạng điều khiển âm lượng được đọc một cách riêng biệt và khớp với nhau. - Khắc phục lỗi lọc bỏ các sự kiện chính
ACTION_UPtrước khi chuyển các sự kiện đó đến lệnh gọi lại để xử lý tuỳ chỉnh. Điều này mang lại sự tương đồng với những gì media1 đã làm và nền tảng thực hiện (#2637). - Khắc phục lỗi trong đó
getCurrentTimeline()đượcPlayerWrappergọi ngay cả khi lệnh không có sẵn (#2665). - Khắc phục lỗi một thông báo bị bỏ lại trong hàng đợi thông báo của trình lặp chính, gây ra rò rỉ bộ nhớ sau khi dịch vụ chấm dứt (#2692).
- Khi kết nối với một ứng dụng phiên cũ bằng
MediaBrowser, các lệnh tuỳ chỉnh chỉ được gửi đến phiên nếu thao tác tuỳ chỉnh được quảng cáo dưới dạng thao tác tuỳ chỉnh trongPlaybackStateCompatcủa phiên cũ. Tất cả các thao tác tuỳ chỉnh khác đều được gửi đến dịch vụ. - Triển khai
onAudioSessionIdChangedđể thông báo cho bộ điều khiển nội dung nghe nhìn khi phiên đặt mã nhận dạng phiên âm thanh (#244). - Khắc phục lỗi
KEYCODE_HEADSETHOOKkhông khởi động trình phát khi sự kiện phím nội dung nghe nhìnIntentđếnonStartCommand(). Vấn đề này được khắc phục bằng cách xử lý "KEYCODE_HEADSETHOOK" giống nhưKEYCODE_MEDIA_PLAY_PAUSE(#2816). - Khắc phục lỗi không truyền được kích thước Surface giữa phiên và bộ điều khiển, dẫn đến việc không áp dụng được hiệu ứng video trong phiên minh hoạ. Nếu bạn đang sử dụng bộ điều khiển, thì đây có thể là một thay đổi có thể gây lỗi nếu trình phát của bạn không thể xử lý lệnh gọi
setVideoSurfaceHolder. - Khắc phục việc truyền các giá trị siêu dữ liệu
CharSequencekhông phảiStringnhư chuỗi kiểu span (#2853). - Thêm
CommandButton.executeActionđể bộ điều khiển có thể dễ dàng kích hoạt hành động dự kiến hơn. Ngoài ra, hãy cho phép chỉ định các tham số cho một số lệnh của trình phát và phiên để xác định hành động cần kích hoạt. - Thêm khả năng tương thích ngược cho các thực thể
CommandButtonbằng cách sử dụngPlayer.CommandhoặcSessionCommandkhông tuỳ chỉnh để xác định hành động của chúng. Các trạng thái này hiện được thể hiện chính xác trong phiên phát nội dung nghe nhìn của nền tảng, ví dụ: đối với Giao diện người dùng hệ thống hoặc Android Auto. - Khắc phục vấn đề trong đó cùng một
Bitmapbị nén nhiều lần khi kết nốiMediaControllervới phiên phát nội dung nghe nhìn trên nền tảng.
- Thêm tham số mới vào
- Giao diện người dùng:
- Thêm lớp
ProgressStateWithTickIntervalvà thành phần kết hợprememberProgressStateWithTickIntervaltương ứng vào mô-đunmedia3-ui-compose. Phần tử giữ trạng thái này được dùng trongdemo-composeđể hiển thị vị trí và thời lượng hiện tại ở dạng văn bản. - Thêm
MuteButtonStatevàoui-composeđể xử lý việc tắt tiếng của âm lượngPlayer. Phần tử giữ trạng thái này được dùng trongdemo-composeđể hiển thị nút bật/tắt tiếng. - Thêm các lớp
ProgressStateWithTickCountvà thành phần kết hợprememberProgressStateWithTickCounttương ứng vào mô-đunmedia3-ui-compose. Phần tử giữ trạng thái này được dùng trongdemo-composeđể hiển thị tiến trình dưới dạng thanh tiến trình chỉ đọc theo chiều ngang. - Thêm thành phần kết hợp
ContentFramevàomedia3-ui-composeđể kết hợp việc quản lýPlayerSurfacevới việc đổi kích thước tỷ lệ khung hình và che bằng màn trập. - Khắc phục lỗi đã biết trên nền tảng API 34 khiến video bị kéo giãn/cắt bớt khi sử dụng
SurfaceViewbên trongAndroidViewcủa Compose, từ đó ảnh hưởng đến các thành phần kết hợpContentFramevàPlayerSurfacecóSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - Tạo một mô-đun
media3-ui-compose-material3mới và thêm các thành phần kết hợp theo chủ đề Material3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton) vào mô-đun đó. - Thêm composable
TimeTextvàomedia3-ui-compose-material3để hiển thị tiến trình của người chơi dưới dạng văn bản. Bạn có thể định cấu hình thành phần này để hiển thị vị trí hiện tại, thời lượng hoặc thời gian còn lại. - Thêm tính năng hỗ trợ đặt nút tuyến nội dung nghe nhìn trong
PlayerView. - Sử dụng
BidiFormatterđể hiển thị chính xác dấu câu trong phụ đề văn bản từ phải sang trái (RTL) (#11214).
- Thêm lớp
- Tiện ích HLS:
- Phân tích cú pháp các thuộc tính bỏ qua quảng cáo xen kẽ HLS.
- Liên kết các thuộc tính điều khiển bỏ qua từ danh sách phát HLS và tài liệu danh sách thành phần vào
AdPlaybackStateđể truy cập công khai. - Khắc phục lỗi thời gian bắt đầu của danh sách phát bị loại bỏ khi thẻ EXT-X-PROGRAM-START-DATE xác định ngày bắt đầu bị xoá khỏi danh sách phát (#2760).
- Sử dụng tính năng tìm kiếm nhị phân để tìm chỉ mục phân đoạn của một vị trí nhất định trong danh sách phát (#2826).
- Thêm
HlsInterstitialsAdsLoader.skipCurrentAd()vàskipCurrentAdGroup()cũng như các phương thức tương ứng để bỏ qua quảng cáo và nhóm quảng cáo theo chỉ mục. - Thêm
HlsInterstitialsAdsLoader.Listener.onAdStartedđể báo cáo thời điểm bắt đầu của một khoảng thời gian quảng cáo (#2859). - Chấp nhận dấu cách làm dấu phân tách ngày/giờ trong chuỗi ngày giờ ISO 8601.
- Xử lý đúng cách việc tìm nạp đoạn tiếp theo cho
HlsMediaPlaylistkhông có phân đoạn (#2821). - Sử dụng vị trí bắt đầu mặc định cho quảng cáo trước video trong sự kiện phát trực tiếp.
- Tiện ích DASH:
- Khắc phục lỗi
UnsupportedOperationExceptionkhi phát luồng DASH bằng tệp kê khai URIdata:không phân cấp (#2688). - Đặt lại
LiveConfigurationvề giá trị doMediaItemcủaDashMediaSourcecung cấp khi phát hành và khi người dùng cập nhật mục nội dung nghe nhìn (#2606). - Tránh sự cố do các bản cập nhật tệp kê khai không hợp lệ không được báo cáo là lỗi trình phát (#2805).
- Khắc phục lỗi
- Tiện ích RTSP:
- Xử lý lỗi thiếu gói RTP khi xử lý các đơn vị NAL bị phân mảnh cho H264 và H265 (#2613).
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, v.v.):
- Tiện ích AV1: Bộ giải mã phần mềm AV1 hiện sử dụng thư viện
dav1dhiệu suất cao, thay thế cho việc triển khailibgav1trước đó để cải thiện tốc độ giải mã. - Tiện ích FFmpeg: Khắc phục vấn đề khiến một số tệp FLAC không phát được bằng cách đảm bảo khối
STREAMINFOđược phân tích cú pháp chính xác và chuyển đến bộ giải mã (#2887).
- Tiện ích AV1: Bộ giải mã phần mềm AV1 hiện sử dụng thư viện
- Tiện ích truyền (cast):
- Thêm
CastPlayer.Builderđể cho phépCastPlayerphát cả trên thiết bị cục bộ và qua Cast. Để giữ lại hành viCastPlayercũ chỉ hỗ trợ phát qua Cast, bạn có thể sử dụngRemoteCastPlayer. Các hàm khởi tạoCastPlayercó sẵn vẫn giữ nguyên hành vi cũ, nhưng không còn được dùng nữa để chuyển sang sử dụng trình tạoCastPlayerhoặcRemoteCastPlayer. - Ngừng thực thi loại MIME không rỗng trong
DefaultMediaItemConverter. - Sử dụng
MediaItem.mediaMetadata.mediaTypeđể suy luận MEDIA_TYPE của Cast để sử dụng trongDefaultCastOptionsProvider#toMediaQueueItem, nếu có. - Bật tính năng chuyển từ xa sang cục bộ trong
DefaultCastOptionsProvider. - Thêm tính năng hỗ trợ Cast trong bản minh hoạ Phiên.
- Thêm tính năng hỗ trợ hiển thị nút tuyến nội dung nghe nhìn trên Giao diện người dùng Composable.
- Thêm tính năng hỗ trợ hiển thị nút tuyến nội dung nghe nhìn trên trình đơn thanh thao tác.
- Thêm tính năng hỗ trợ hiển thị nút tuyến nội dung nghe nhìn dưới dạng giao diện người dùng Chế độ xem.
- Thêm
- Tiện ích kiểm thử:
- Thêm chênh lệch thời gian tối đa cho hành vi tự động chuyển của
FakeClock. Giá trị mặc định là 1 giây, nhưng có thể định cấu hình thông quaFakeClock.Builder. - Thêm chênh lệch thời gian tối đa giữa các thông báo cho
RobolectricUtil.runMainLooperUntil(vàrunLooperUntil). Giá trị mặc định là 1 giây, nhưng có thể định cấu hình thông qua các phương thức nạp chồng mới của các phương thức này. - Chuyển
CapturingRenderersFactorytừtest-utilssangtest-utils-robolectric.
- Thêm chênh lệch thời gian tối đa cho hành vi tự động chuyển của
- Xoá các biểu tượng không dùng nữa:
- Xoá hàm khởi tạo
DefaultPreloadManagerkhông dùng nữa. Sử dụngDefaultPreloadManager.Builder. - Đã xóa các hàm khởi tạo
EditedMediaItemSequencekhông dùng nữa. Sử dụngEditedMediaItemSequence.Builder. - Xoá
BitmapFactoryImageDecoder.BitmapDecoder. Sử dụngExternallyLoadedImageDecoder. - Xoá
ShadowMediaCodecConfig.forAllSupportedMimeTypes()không dùng nữa. Thay vào đó, hãy sử dụngShadowMediaCodecConfig.withAllDefaultSupportedCodecs(). - Xoá
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()không dùng nữa. Sử dụngShadowMediaCodecConfig.withNoDefaultSupportedCodecs().
- Xoá hàm khởi tạo
1.9.0-rc01
Ngày 1 tháng 12 năm 2025
Sử dụng phiên bản ổn định 1.9.0.
1.9.0-beta01
Ngày 20 tháng 11 năm 2025
Sử dụng phiên bản ổn định 1.9.0.
1.9.0-alpha01
Ngày 22 tháng 10 năm 2025
Sử dụng phiên bản ổn định 1.9.0.
Phiên bản 1.8.0
1.8.1
Ngày 21 tháng 5 năm 2026
Phiên bản 1.8.1 bao gồm các thay đổi sau.
- Hiệu ứng:
- Đặt rõ ràng
GL_DRAW_BUFFERvàGL_READ_BUFFERkhi chuyển đổi từ ngữ cảnh không có nền tảng.
- Đặt rõ ràng
Phiên bản 1.8.0
Ngày 30 tháng 7 năm 2025
Phiên bản 1.8.0 bao gồm các thay đổi sau.
- Thư viện Common:
- Thêm tính năng hỗ trợ thay thế trình phát trong
ForwardingSimpleBasePlayer.
- Thêm tính năng hỗ trợ thay thế trình phát trong
- ExoPlayer:
- Thêm phương thức getter cho chế độ phát ngẫu nhiên vào giao diện
ExoPlayer(#2522). - Đưa ra ngoại lệ rõ ràng hơn nếu
DefaultAudioSinkđược truy cập từ nhiều luồng. Nếu điều này xảy ra do lệnh gọi đếnRendererCapabilities.getFormatSupportbên ngoài trình phát, hãy nhớ gọi phương thức này trên cùng một luồng với luồng phát của ExoPlayer hoặc sử dụng một thực thể khác với thực thể dùng để phát (#1191). - Khắc phục lỗi trong đó các định dạng âm thanh không phải âm thanh nổi trên TV có thể bị
DefaultTrackSelectorđánh dấu là không được hỗ trợ. - Đảm bảo khung hình cuối cùng được kết xuất chính xác khi sử dụng cờ
DECODE_ONLYcủa MediaCodec (được bật theo mặc định ở chế độ tua). - Thêm tính năng hỗ trợ sử dụng mã thiết bị ảo từ
Contextđược truyền đếnExoPlayer.Builder. - Bật tính năng lập lịch biểu động theo mặc định ở chế độ tua.
- Tránh tải lại nguồn không cần thiết khi tua đến cuối một mục.
- Sử dụng
MediaCodec.BUFFER_FLAG_DECODE_ONLYtheo mặc định ở chế độ tua. - Gửi
IllegalStateExceptionkhiPreloadMediaSourceđược phát bằng mộtExoPlayercó luồng phát khác với luồng tải trước (#2495). - Thêm
cloneAndMovevàoShuffleModebằng cách triển khai mặc định (#2226). - Thay đổi hành vi mặc định của
Renderer.getMinDurationToProgressUsđể trả về giá trị lớn hơn nếu không cần gọirender. - Sửa lỗi trong đó việc lập lịch biểu nội bộ làm chậm khung hình cuối cùng khi tua đến cuối trong khi tạm dừng. Hiện tại, bản sửa lỗi chỉ có hiệu lực nếu bạn bật
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled. - Thêm phương thức
ExoPlayer.setScrubbingModeEnabled(boolean). Điều này giúp tối ưu hoá trình phát cho nhiều lượt tua thường xuyên (ví dụ: khi người dùng kéo thanh tua). Bạn có thể tuỳ chỉnh hành vi của chế độ tua nhanh bằngsetScrubbingModeParameters(..)trênExoPlayervàExoPlayer.Builder. - Cho phép tuỳ chỉnh dung sai tua phân số ở chế độ tua nhanh.
- Tăng tốc độ hoạt động của bộ mã hoá và giải mã ở chế độ tua.
- Khắc phục lỗi khiến lỗi chuẩn bị trong nội dung của
AdsMediaSourcecó thể không bao giờ được báo cáo (#2337). - Khắc phục sự cố rò rỉ bộ nhớ trong
MergingMediaSource, ví dụ: được dùng khi tải phụ đề không qua cửa hàng ứng dụng (#2338). - Cho phép
CmcdConfiguration.Factorytrả vềnullđể tắt tính năng ghi nhật ký CMCD cho các mục nội dung nghe nhìn cụ thể (#2386). - Tăng dung lượng bộ nhớ đệm hình ảnh mặc định từ 128 kB (lỗi sao chép và dán từ các bản âm thanh văn bản) lên 26 MB, đủ lớn cho hình ảnh Ultra HDR 50 MP (#2417).
- Thêm
PreCacheHelpercho phép ứng dụng lưu trước một nội dung nghe nhìn vào bộ nhớ đệm với vị trí bắt đầu và thời lượng được chỉ định. - Thêm tính năng hỗ trợ tải trước từ vị trí được chỉ định trong
DefaultPreloadManager.
- Thêm phương thức getter cho chế độ phát ngẫu nhiên vào giao diện
- Bộ chuyển đổi:
- Thêm
CodecDbLitecho phép tối ưu hoá chế độ cài đặt mã hoá video theo từng chipset. - Thêm cờ
setEnableCodecDbLitevàoDefaultEncoderFactoryđể bật tính năng tối ưu hoá chế độ cài đặt CodecDB Lite. Theo mặc định, cờ này được đặt thành false. - Giờ đây, việc lấp đầy khoảng trống ban đầu (được thêm qua
addGap()) bằng âm thanh không có tiếng yêu cầu bạn phải đặt rõ ràngexperimentalSetForceAudioTrack(true)trongEditedMediaItemSequence.Builder. Nếu khoảng trống nằm ở giữa trình tự, thì bạn không cần phải có cờ này. - Di chuyển giao diện
Muxertừmedia3-transformersangmedia3-muxer. - Đặt chế độ cài đặt
MediaItem.Builder().setImageDuration(long)thành bắt buộc để nhập một mục nội dung nghe nhìn dưới dạng hình ảnh. - Thêm
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean), trong đó có danh sách chỉnh sửa MP4 khi cắt để hướng dẫn người chơi bỏ qua các mẫu giữa khung hình chính trước điểm bắt đầu cắt và điểm bắt đầu cắt. - Cập nhật ứng dụng Composition Demo để sử dụng Kotlin và Jetpack Compose, đồng thời thêm một
VideoCompositorSettingstuỳ chỉnh để sắp xếp các trình tự thành bố cục 2x2 hoặc PiP.
- Thêm
- Công cụ trích xuất:
- Phân tích cú pháp siêu dữ liệu từ các tệp MP4 phân mảnh (#2084).
- JPEG: Hỗ trợ ảnh chuyển động không có phân đoạn Exif ở đầu (#2552).
- Thêm tính năng hỗ trợ tua trong MP4 phân mảnh có nhiều nguyên tử
sidx. Bạn có thể bật hành vi này bằng cách sử dụng cờFLAG_MERGE_FRAGMENTED_SIDXtrênFragmentedMp4Extractor(#9373). - Bỏ qua các bảng tìm kiếm trống trong tệp FLAC (bao gồm cả những bảng chỉ chứa điểm tìm kiếm phần giữ chỗ) và quay lại tìm kiếm nhị phân nếu biết thời lượng của tệp (#2327).
- Khắc phục lỗi phân tích cú pháp các đơn vị H.265 SEI để bỏ qua hoàn toàn các loại SEI không nhận dạng được (#2456).
- Cập nhật
WavExtractorđể sử dụng dữ liệu SubFormat của phần mở rộng tiêu đề cho định dạng âm thanh khi phân tích cú pháp tệp loạiWAVE_FORMAT_EXTENSIBLE. - MP4: Thêm tính năng hỗ trợ cho các hộp
ipcmvàfpcmxác định bản âm thanh PCM thô (không hỗ trợ PCM dấu phẩy động 64 bit). - MP4: Xử lý phần xoay của ma trận biến đổi
tkhdvừa xoay vừa phản chiếu video. Điều này đảm bảo rằng video phản chiếu được quay bằng camera trước của iPhone sẽ hiển thị đúng hướng, nhưng bị phản chiếu không chính xác theo trục y (#2012). - MP3: Sử dụng thời lượng và kích thước dữ liệu từ Xing, VBRI không thể tua và siêu dữ liệu tốc độ bit biến đổi tương tự khi quay lại tua tốc độ bit không đổi do
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- Âm thanh:
- Khắc phục lỗi không gọi được
AnalyticsListener.onAudioPositionAdvancingkhi quá trình phát âm thanh bắt đầu rất gần với thời điểm kết thúc nội dung nghe nhìn. - Thêm tính năng hỗ trợ cho tất cả định dạng mẫu PCM tuyến tính trong
ChannelMappingAudioProcessorvàTrimmingAudioProcessor. - Thêm tính năng hỗ trợ cho khoảng trống âm thanh trong
CompositionPlayer. - Xoá lệnh gọi giả mạo đến
BaseAudioProcessor#flush()khỏiBaseAudioProcessor#reset(). - Cho phép trộn âm thanh lên/xuống với công suất không đổi trong DefaultAudioMixer.
- Đặt
ChannelMappingAudioProcessor,TrimmingAudioProcessorvàToFloatPcmAudioProcessorở chế độ công khai (#2339). - Sử dụng
AudioTrack#getUnderrunCount()trongAudioTrackPositionTrackerđể phát hiện tình trạng thiếu hụt trongDefaultAudioSinkthay vì ước tính theo nỗ lực tối đa. - Cải thiện khả năng làm mượt dấu thời gian âm thanh cho độ lệch vị trí ngoài dự kiến từ thiết bị đầu ra âm thanh.
- Khắc phục lỗi khiến tính năng đồng bộ hoá âm thanh/video bị hỏng trong 10 giây đầu tiên sau khi tiếp tục từ trạng thái tạm dừng khi kết nối với thiết bị Bluetooth.
- Sửa lỗi
AnalyticsListener.onAudioPositionAdvancingkhông báo cáo thời gian khi âm thanh bắt đầu phát mà báo cáo thời gian của lần đo lường đầu tiên. - Khắc phục lỗi khôi phục âm thanh đa kênh sau khi quay lại âm thanh nổi trên một số thiết bị (#2258).
- Khắc phục lỗi không gọi được
- Video:
- Mở rộng giải pháp cho nền tảng tách rời sang các thiết bị "lenovo" và "motorola" (#2059).
- Cải thiện khả năng phát hành khung hình video mượt mà khi khởi động khi các mẫu âm thanh không bắt đầu chính xác ở vị trí được yêu cầu.
- Mở rộng giải pháp cho nền tảng tách rời sang các thiết bị "realme" (#2059).
- Thêm API
ExoPlayerthử nghiệm để thêm cờMediaCodec.BUFFER_FLAG_DECODE_ONLYkhi đưa vùng đệm đầu vào chỉ giải mã vào hàng đợi. Cờ này sẽ báo hiệu cho bộ giải mã bỏ qua các vùng đệm chỉ giải mã, nhờ đó giúp tua nhanh hơn. Bật tính năng này bằngDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * Cải thiện quy trình kiểm tra hiệu suất của bộ mã hoá và giải mã video phần mềm. Điều này có thể khiến một số bản nhạc khác bị đánh dấu làEXCEEDS_CAPABILITIES. - Khắc phục lỗi phát VP9 Widevine trên một số thiết bị (#2408).
- Văn bản:
- Thêm tính năng hỗ trợ cho các bản nhạc VobSub trong tệp MP4 (#2510).
- Khắc phục lỗi tạm dừng phát khi một phân đoạn phụ đề ban đầu không tải được và sau đó tải thành công, theo sau là một số phân đoạn phụ đề trống (#2517).
- Sửa SSA và SubRip để hiển thị tín hiệu đang diễn ra khi bật phụ đề (#2309).
- Khắc phục lỗi phát bị kẹt khi chuyển từ một luồng có lỗi phụ đề sang một sự kiện phát trực tiếp có bản phụ đề trống (#2328).
- Khắc phục lỗi phụ đề CEA-608 bị hỏng khi phát luồng H.262 chứa khung hình B (#2372).
- Thêm tính năng hỗ trợ phụ đề SSA bằng
CodecId = S_TEXT/SSAtrong tệp Matroska. Trước đây,MatroskaExtractorchỉ hỗ trợCodecId = S_TEXT/ASS, tức là biến thể "nâng cao" (phiên bản 4 trở lên) của phụ đề SubStation Alpha (nhưng logic phân tích cú pháp của ExoPlayer là giống nhau cho cả hai biến thể) (#2384). - Thêm tính năng hỗ trợ cho thuộc tính
layertrong tệp phụ đề SubStation Alpha (SSA) dùng để xác định thứ tự z của các tín hiệu khi có nhiều tín hiệu xuất hiện trên màn hình cùng một lúc (#2124).
- Siêu dữ liệu:
- Thêm tính năng hỗ trợ truy xuất thời lượng nội dung nghe nhìn và
TimelinevàoMetadataRetriever, đồng thời di chuyển nội dung đó sang APIAutoCloseabledựa trên thực thể. Sử dụngBuildermới để tạo một thực thể choMediaItem, sau đó gọiretrieveTrackGroups(),retrieveTimeline()vàretrieveDurationUs()để lấyListenableFuturecho siêu dữ liệu. Các phương thức tĩnh trước đây hiện không còn được dùng nữa (#2462).
- Thêm tính năng hỗ trợ truy xuất thời lượng nội dung nghe nhìn và
- Hình ảnh:
- Giới hạn bitmap đã giải mã ở kích thước hiển thị trong
BitmapFactoryImageDecoderđể tránh ứng dụng gặp sự cố vớiCanvas: trying to draw too large bitmap.từPlayerViewkhi cố gắng hiển thị hình ảnh rất lớn (ví dụ: 50 MP). - Thay đổi chữ ký của
DefaultRenderersFactory.getImageDecoderFactory()để lấy tham sốContext. - Điều chỉnh kích thước đầu ra bitmap tối đa được dùng trong
CompositionPlayercho phù hợp với kích thước đã dùng trongTransformer(nghĩa làCompositionPlayerkhông xem xét kích thước hiển thị khi giải mã bitmap, không giống nhưExoPlayer).
- Giới hạn bitmap đã giải mã ở kích thước hiển thị trong
- DRM (Quản lý bản quyền nội dung số):
- Thêm phương thức nạp chồng mới của
OfflineLicenseHelper.newWidevineInstancechấp nhậnMediaItem.DrmConfigurationđể có thể áp dụng chính xác tiêu đề của yêu cầu HTTP (#2169).
- Thêm phương thức nạp chồng mới của
- Hiệu ứng:
- Thêm
Presentation.createForShortSide(int)để tạoPresentation, đảm bảo cạnh ngắn nhất luôn khớp với giá trị đã cho, bất kể hướng đầu vào.
- Thêm
- Bộ ghép kênh:
- Khắc phục lỗi không đặt đúng cờ mẫu cho các mẫu âm thanh trong MP4 phân mảnh.
- API
writeSampleData()hiện sử dụng lớpBufferInfodành riêng cho bộ ghép kênh thay vìMediaCodec.BufferInfo. - Thêm
Muxer.Factory#supportsWritingNegativeTimestampsInEditList, mặc định là false.
- Tiện ích IMA:
- Khắc phục lỗi trong đó lỗi tải trong một quảng cáo có thể vô tình làm mất hiệu lực của một nhóm quảng cáo khác.
- Khắc phục lỗi khiến các nhóm quảng cáo sau khi kết thúc cửa sổ VOD bị tạm dừng phát.
Các nhóm quảng cáo có thời gian bắt đầu sau khoảng thời gian này sẽ không còn được đưa vào hàng đợi trong
MediaPeriodQueuenữa (#2215).
- Phiên:
- Khắc phục lỗi bỏ qua các kết nối từ bộ điều khiển Media3 không có đặc quyền của bên thứ ba.
- Xoá bước kiểm tra các lệnh có sẵn khi gửi lệnh tuỳ chỉnh đến một
MediaBrowserServiceCompatcũ. Điều này tương đương với hành vi của các trình điều khiển/trình duyệt cũ khi kết nối với một ứng dụng cũ. - Khắc phục lỗi khiến lỗi phát đầu tiên của trình phát bị coi là ngoại lệ tuỳ chỉnh liên tục một cách không chính xác. Điều này khiến ứng dụng không thể khôi phục.
- Khắc phục lỗi trong đó một số thay đổi về bộ điều khiển không được phiên xử lý có thể gây ra
IllegalStateExceptions. - Khắc phục lỗi khiến các thao tác của tay điều khiển không được phiên xử lý có thể khiến tay điều khiển ở trạng thái không hợp lệ.
- Khắc phục cảnh báo vi phạm về việc khởi chạy không an toàn của StrictMode (#2330).
- Khắc phục lỗi khi gọi
setSessionExtrastừ luồng chính khi chạy trình phát từ một luồng ứng dụng khác, sau đó luồng chính gây raIllegalStateException(#2265). - Không tự động hiện thông báo nếu người chơi được thiết lập bằng các mục nội dung nghe nhìn mà không chuẩn bị hoặc phát các mục đó (#2423https://github.com/androidx/media/issues/2423). Bạn có thể định cấu hình hành vi này thông qua
MediaSessionService.setShowNotificationForIdlePlayer. - Thêm
PlaybackExceptiontuỳ chỉnh cho tất cả hoặc một số bộ điều khiển. - Khắc phục lỗi tua trong sự kiện phát trực tiếp trên
MediaControllercó thể gây raIllegalArgumentException. - Đối với sự kiện phát trực tiếp, hãy ngừng xuất bản vị trí phát và khả năng tua trong mục hiện tại cho bộ điều khiển nội dung nghe nhìn của nền tảng, để tránh các cấu phần phần mềm vị trí trong giao diện người dùng Android Auto (và các bộ điều khiển khác sử dụng thông tin này từ phiên phát nội dung nghe nhìn của nền tảng) (#1758).
- Khắc phục lỗi khi truyền giá trị rỗng vào
getLibraryRootcủaMediaBrowserđược kết nối vớiMediaBrowserServiceCompatcũ tạo raNullPointerException. - Khắc phục lỗi khiến việc gửi thao tác tuỳ chỉnh, kết quả tìm kiếm hoặc yêu cầu getItem làm hỏng ứng dụng phiên cũ bằng
ClassNotFoundException. - Khắc phục lỗi
MediaItem.LocalConfiguration.uriđược chia sẻ vớiMediaMetadatacủa phiên nền tảng. Để chủ ý chia sẻ một URI nhằm cho phép bộ điều khiển yêu cầu lại nội dung nghe nhìn, hãy đặtMediaItem.RequestMetadata.mediaUri.
- Giao diện người dùng:
- Khắc phục lỗi
PlayerSurfacebên trong các thành phần có thể sử dụng lại nhưLazyColumnkhông hoạt động đúng cách (#2493). - Khắc phục lỗi Compose dẫn đến khoảng cách giữa việc đặt trạng thái nút ban đầu và quan sát thay đổi về trạng thái (ví dụ: hình dạng biểu tượng hoặc trạng thái bật). Mọi thay đổi đối với Trình phát bên ngoài khoảng thời gian quan sát hiện đã được ghi nhận (#2313).
- Thêm phần tử giữ trạng thái và thành phần kết hợp vào mô-đun
media3-ui-composechoSeekBackButtonStatevàSeekForwardButtonState. - Thêm tính năng hỗ trợ cho chế độ tua của ExoPlayer vào
PlayerControlView. Khi được bật, chế độ này sẽ đưa trình phát vào chế độ tua khi người dùng bắt đầu kéo thanh tua, đưa ra lệnh gọiplayer.seekTocho mỗi chuyển động, sau đó thoát khỏi chế độ tua khi người dùng nhấc tay khỏi màn hình. Bạn có thể bật tính năng tích hợp này bằngtime_bar_scrubbing_enabled = truetrong XML hoặc phương thứcsetTimeBarScrubbingEnabled(boolean)trong Java/Kotlin. - Đặt
PlayerSurfacechấp nhận đối sốPlayerrỗng.
- Khắc phục lỗi
- Nội dung đã tải xuống:
- Thêm tính năng hỗ trợ tải xuống một phần cho các luồng tăng dần. Ứng dụng có thể chuẩn bị một
luồng tăng dần bằng
DownloadHelpervà yêu cầuDownloadRequesttừ trình trợ giúp bằng cách chỉ định vị trí bắt đầu và kết thúc của nội dung nghe nhìn dựa trên thời gian mà quá trình tải xuống cần bao gồm.DownloadRequestđược trả về mang dải byte đã phân giải, nhờ đó, bạn có thể tạoProgressiveDownloadervà tải nội dung tương ứng xuống. - Thêm
DownloadHelper.Factoryđể thay thế các phương thứcDownloadHelper.forMediaItem()tĩnh. - Thêm
Factorycho các cách triển khaiSegmentDownloader. - Thêm tính năng hỗ trợ tải một phần xuống cho các luồng thích ứng. Ứng dụng có thể chuẩn bị một
luồng thích ứng bằng
DownloadHelpervà yêu cầuDownloadRequesttừ trình trợ giúp bằng cách chỉ định vị trí bắt đầu và kết thúc của nội dung nghe nhìn dựa trên thời gian mà quá trình tải xuống cần bao gồm.DownloadRequestđược trả về mang phạm vi thời gian đã phân giải, nhờ đó, bạn có thể tạoSegmentDownloadercụ thể và tải nội dung tương ứng xuống.
- Thêm tính năng hỗ trợ tải xuống một phần cho các luồng tăng dần. Ứng dụng có thể chuẩn bị một
luồng tăng dần bằng
- Tiện ích Cronet:
- Thêm tính năng xử lý cookie tự động (#5975).
- Tiện ích HLS:
- Khắc phục lỗi khi
HlsSampleStreamWrappercố gắng tìm kiếm bên trong vùng đệm khi không có đoạn nào trong vùng đệm #2598. - Khắc phục lỗi thay đổi lựa chọn bản nhạc sau khi tải các phần có độ trễ thấp và gợi ý tải trước có thể khiến quá trình phát bị kẹt hoặc bị treo (#2299).
- Ngăn chặn việc tải lại quá mức bằng cách chờ một nửa thời lượng mục tiêu khi máy chủ không tuân thủ
CAN-BLOCK-RELOAD=YES(#2317). - Sửa lỗi khiến quá trình phát bị đình trệ khi bắt đầu một luồng quảng cáo xen kẽ trước khi quảng cáo trong video và độ phân giải danh sách thành phần được thử cho quảng cáo không chính xác (#2558).
- Sửa lỗi phân tích cú pháp danh sách phát để chấp nhận
\f(ngắt trang) trong các giá trị thuộc tính chuỗi được trích dẫn (#2420). - Hỗ trợ cập nhật quảng cáo xen kẽ có cùng mã nhận dạng (#2427).
- Khắc phục lỗi đôi khi lỗi tải danh sách phát không được truyền đi sau khi một sự kiện phát trực tiếp hết phân đoạn để tải (#2401https://github.com/androidx/media/issues/2401).
- Nhóm các bản phụ đề theo thẻ NAME, tương tự như cách nhóm các bản âm thanh (#1666).
- Hỗ trợ X-ASSET-LIST và sự kiện phát trực tiếp bằng
HlsInterstitialsAdsLoader.
- Khắc phục lỗi khi
- Tiện ích DASH:
- Khắc phục lỗi trong đó bộ điều chỉnh phát nhanh được hợp nhất với bộ điều chỉnh chính để tạo thành một
TrackGroupkhông hợp lệ (#2148). - Khắc phục lỗi trong đó việc rút ngắn thời lượng của một khoảng thời gian DASH có thể gửi một ngoại lệ khi các mẫu vượt quá thời lượng mới đã được quy trình kết xuất đọc (#2440).
- Khắc phục lỗi không tuân theo lệnh chuyển hướng khi sử dụng tham số truy vấn CMCD (#2475).
- Khắc phục lỗi trong đó bộ điều chỉnh phát nhanh được hợp nhất với bộ điều chỉnh chính để tạo thành một
- Tiện ích RTSP:
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, v.v.):
- Sửa lỗi
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangekhông có hiệu lực đối với các tiện ích của bộ giải mã âm thanh (#2258).
- Sửa lỗi
- Tiện ích truyền (cast):
- Tiện ích kiểm thử:
- Thêm
advance(player).untilPositionAtLeastvàuntilMediaItemIndexvàoTestPlayerRunHelperđể chuyển tiếp trình phát cho đến khi đạt đến một vị trí được chỉ định. Trong hầu hết các trường hợp, những phương thức này đáng tin cậy hơn các phương thứcuntilPositionvàuntilStartOfMediaItemhiện có. - Di chuyển
FakeDownloadersang mô-đuntest-utils-robolectricđể sử dụng lại trong các kiểm thử khác. - Đã xóa
transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)vàtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). Thay vào đó, hãy sử dụngShadowMediaCodecConfigđể định cấu hình bộ mã hoá và bộ giải mã bóng. - Thay thế tiền tố "exotest" bằng "media3" trong tên bộ mã hoá và giải mã do
ShadowMediaCodecConfigbáo cáo.
- Thêm
- Xoá các biểu tượng không dùng nữa:
- Đã xóa hàm khởi tạo
SegmentDownloaderkhông dùng nữaSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)và các hàm khởi tạo tương ứng trong các lớp con của hàm nàyDashDownloader,HlsDownloadervàSsDownloader. - Đã xóa
Player.hasNext(),Player.hasNextWindow()không dùng nữa. Thay vào đó, hãy sử dụngPlayer.hasNextMediaItem(). - Đã xóa
Player.next()không còn được dùng nữa. Thay vào đó, hãy sử dụngPlayer.seekToNextMediaItem(). - Đã xóa
Player.seekToPreviousWindow()không còn được dùng nữa. Sử dụngPlayer.seekToPreviousMediaItem(). - Đã xóa
Player.seekToNextWindow()không còn được dùng nữa. Sử dụngPlayer.seekToNextMediaItem(). - Xoá
BaseAudioProcessorkhông dùng nữa trong mô-đunexoplayer. Sử dụngBaseAudioProcessortrong mô-đuncommon. - Xoá hàm khởi tạo
MediaCodecVideoRendererkhông dùng nữaMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- Đã xóa hàm khởi tạo
Phiên bản 1.8.0-rc02
Ngày 24 tháng 7 năm 2025
Sử dụng phiên bản ổn định 1.8.0.
Phiên bản 1.8.0-rc01
Ngày 16 tháng 7 năm 2025
Sử dụng phiên bản ổn định 1.8.0.
Phiên bản 1.8.0-beta01
Ngày 2 tháng 7 năm 2025
Sử dụng phiên bản ổn định 1.8.0.
Phiên bản 1.8.0-alpha01
Ngày 19 tháng 5 năm 2025
Sử dụng phiên bản ổn định 1.8.0.
Phiên bản 1.7.0
Phiên bản 1.7.1
Ngày 16 tháng 5 năm 2025
Bản phát hành này có cùng mã với phiên bản 1.6.1 và được phát hành để đảm bảo phiên bản này xuất hiện dưới dạng bản phát hành "mới hơn" so với phiên bản 1.7.0 (vốn là bản phát hành alpha vô tình được gắn thẻ là ổn định, xem bên dưới).
Phiên bản 1.7.0
Ngày 16 tháng 5 năm 2025
Bản phát hành này đáng lẽ phải là 1.7.0-alpha01, nhưng đã vô tình được gắn thẻ 1.7.0 (tức là ổn định) trên maven.google.com. Vui lòng không sử dụng bản phát hành này. Tiếp tục sử dụng phiên bản 1.6.1 hoặc nâng cấp lên phiên bản 1.7.1 (có cùng mã với phiên bản 1.6.1).
Phiên bản 1.6.0
1.6.1
Ngày 14 tháng 4 năm 2025
Phát hành androidx.media3:media3-*:1.6.1. Phiên bản 1.6.1 bao gồm các thay đổi sau.
- Thư viện Common:
- Thêm phương thức
PlaybackParameters.withPitch(float)để dễ dàng sao chépPlaybackParameterscó giá trịpitchmới (#2257).
- Thêm phương thức
- ExoPlayer:
- Khắc phục lỗi chuyển đổi mục nội dung nghe nhìn không thành công do lỗi trình kết xuất có thể khôi phục trong quá trình khởi chạy mục nội dung nghe nhìn tiếp theo (#2229).
- Khắc phục vấn đề
ProgressiveMediaPeriodgửi mộtIllegalStateExceptionkhiPreloadMediaSourcecố gắng gọigetBufferedDurationUs()trước khi được chuẩn bị (#2315). - Khắc phục lỗi gửi
CmcdDatatrong các yêu cầu tệp kê khai cho DASH, HLS và SmoothStreaming (#2253). - Đảm bảo bạn có thể sử dụng
AdPlaybackState.withAdDurationsUs(long[][])sau khi xoá nhóm quảng cáo. Người dùng vẫn cần truyền một mảng thời lượng cho các nhóm quảng cáo đã bị xoá. Mảng này có thể trống hoặc rỗng (#2267).
- Công cụ trích xuất:
- MP4: Phân tích cú pháp
alternate_grouptừ hộptkhdvà hiển thị dưới dạng mục nhậpMp4AlternateGroupDatatrongFormat.metadatacủa mỗi bản nhạc (#2242).
- MP4: Phân tích cú pháp
- Âm thanh:
- Khắc phục vấn đề giảm tải, trong đó vị trí có thể bị kẹt khi phát danh sách phát có nội dung ngắn (#1920).
- Phiên:
- Giảm thời gian chờ tổng hợp cho lệnh gọi lại
MediaSessioncủa nền tảng từ 500 xuống 100 mili giây và thêm phương thức setter thử nghiệm để cho phép ứng dụng định cấu hình giá trị này. - Khắc phục vấn đề thông báo xuất hiện lại sau khi người dùng đóng (#2302).
- Khắc phục lỗi phiên trả về dòng thời gian có một mục khi trình phát được gói thực sự trống. Điều này xảy ra khi trình phát được gói không có sẵn
COMMAND_GET_TIMELINEtrong khiCOMMAND_GET_CURRENT_MEDIA_ITEMcó sẵn và trình phát được gói trống (#2320). - Khắc phục lỗi bỏ qua lệnh gọi
MediaSessionService.setMediaNotificationProvidermà không thông báo sau khi có các hoạt động tương tác khác với dịch vụ nhưsetForegroundServiceTimeoutMs(#2305).
- Giảm thời gian chờ tổng hợp cho lệnh gọi lại
- Giao diện người dùng:
- Bật
PlayerSurfaceđể hoạt động vớiExoPlayer.setVideoEffectsvàCompositionPlayer. - Sửa lỗi không thể kết hợp lại
PlayerSurfacevớiPlayermới.
- Bật
- Tiện ích HLS:
- Khắc phục lỗi thời lượng phân đoạn không được đặt trong
CmcdDatacho nội dung nghe nhìn HLS, gây ra lỗi xác nhận khi xử lý các phân đoạn nội dung nghe nhìn đã mã hoá (#2312).
- Khắc phục lỗi thời lượng phân đoạn không được đặt trong
- Tiện ích RTSP:
- Thêm tính năng hỗ trợ cho URI có lược đồ RTSPT để định cấu hình phiên RTSP sử dụng TCP (#1484).
- Tiện ích truyền (cast):
- Thêm tính năng hỗ trợ cho siêu dữ liệu danh sách phát (#2235).
1.6.0
Ngày 26 tháng 3 năm 2025
Phát hành androidx.media3:media3-*:1.6.0. Phiên bản 1.6.0 bao gồm các thay đổi sau.
- Thư viện Common:
- Thêm
AudioManagerCompatvàAudioFocusRequestCompatđể thay thế các lớp tương đương trongandroidx.media. - Nâng cấp Kotlin từ 1.9.20 lên 2.0.20 và sử dụng trình bổ trợ Compose Compiler cho Gradle. Nâng cấp thư viện KotlinX Coroutines từ phiên bản 1.8.1 lên 1.9.0.
- Xoá phương thức
Format.toBundle(boolean excludeMetadata), hãy dùngFormat.toBundle(). - Khắc phục lỗi trong
SimpleBasePlayer, trong đó việc đặtcurrentMediaItemIndexmới trongStatesausetPlaylistbằngnullMediaMetadatakhông đánh giá lại siêu dữ liệu (#1940). - Thay đổi quyền truy cập
SimpleBasePlayer.Statetừ được bảo vệ thành công khai để dễ dàng xử lý các bản cập nhật trong các lớp khác (#2128).
- Thêm
- ExoPlayer:
- Thêm
MediaExtractorCompat, một lớp mới cung cấp các tính năng tương đương với nền tảngMediaExtractor. - Thêm tính năng hỗ trợ khởi động trước thử nghiệm cho "ExoPlayer" để phát bằng
MediaCodecVideoRenderer. Bạn có thể định cấu hìnhDefaultRenderersFactorythông quaexperimentalSetEnableMediaCodecVideoRendererPrewarmingđể cung cấpMediaCodecVideoRendererphụ choExoPlayer. Nếu bật,ExoPlayersẽ xử lý trước video của các mục nội dung nghe nhìn liên tiếp trong khi phát để giảm độ trễ khi chuyển đổi mục nội dung nghe nhìn. - Giảm giá trị mặc định cho
bufferForPlaybackMsvàbufferForPlaybackAfterRebufferMstrongDefaultLoadControlxuống lần lượt là 1000 và 2000 mili giây. - Khởi chạy
DeviceInfovà âm lượng thiết bị không đồng bộ (nếu được bật bằngsetDeviceVolumeControlEnabled). Các giá trị này không có sẵn ngay sauExoPlayer.Builder.build()vàPlayer.Listenersẽ thông báo các thay đổi thông quaonDeviceInfoChangedvàonDeviceVolumeChanged. - Mã phiên âm thanh ban đầu không còn được cung cấp ngay sau khi tạo trình phát. Bạn có thể sử dụng
AnalyticsListener.onAudioSessionIdChangedđể theo dõi bản cập nhật ban đầu nếu cần. - Cân nhắc ngôn ngữ khi chọn bản video. Theo mặc định, hãy chọn một bản video "chính" khớp với ngôn ngữ của bản âm thanh đã chọn (nếu có). Bạn có thể thể hiện rõ ràng lựa chọn ưu tiên về ngôn ngữ video bằng
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Thêm tham số
selectedAudioLanguagevào phương thứcDefaultTrackSelector.selectVideoTrack(). - Thêm tham số
retryCountvàoMediaSourceEventListener.onLoadStartedvà các phương thứcMediaSourceEventListener.EventDispatchertương ứng. - Khắc phục lỗi trong đó các mục trong danh sách phát hoặc khoảng thời gian trong luồng DASH nhiều khoảng thời gian có thời lượng không khớp với nội dung thực tế có thể khiến khung hình bị treo ở cuối mục (#1698).
- Chuyển
BasePreloadManager.Listenerlên cấp cao nhấtPreloadManagerListener. - Bạn có thể triển khai
RenderersFactory.createSecondaryRendererđể cung cấp trình kết xuất phụ cho quá trình khởi động trước. Tính năng khởi động trước giúp chuyển đổi mục nội dung nghe nhìn nhanh hơn trong khi phát. - Bật tính năng gửi
CmcdDatacho các yêu cầu tệp kê khai ở định dạng truyền trực tuyến thích ứng DASH, HLS và SmoothStreaming (#1951). - Cung cấp
MediaCodecInfocủa bộ mã hoá và giải mã sẽ được khởi chạy trongMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Thay đổi
AdsMediaSourceđể cho phépAdPlaybackStatesphát triển bằng cách thêm nhóm quảng cáo. Các nội dung sửa đổi không hợp lệ sẽ được phát hiện và gửi một ngoại lệ. - Khắc phục vấn đề các khung hình chỉ giải mã bổ sung có thể hiển thị liên tiếp nhanh chóng khi chuyển sang nội dung nghe nhìn sau quảng cáo chèn giữa.
- Yêu cầu
DefaultRenderersFactorythêm hai thực thểMetadataRendererđể cho phép các ứng dụng nhận hai lược đồ siêu dữ liệu khác nhau theo mặc định. - Đánh giá lại xem có nên huỷ quá trình tải một đoạn đang diễn ra khi tạm dừng phát hay không (#1785).
- Thêm tuỳ chọn vào
ClippingMediaSourceđể cho phép cắt trong nội dung nghe nhìn không tua được. - Khắc phục lỗi trong đó việc tua bằng tính năng làm nóng trước có thể chặn quá trình chuyển đổi mục nội dung nghe nhìn tiếp theo.
- Khắc phục lỗi
ExoPlayer.isLoading()vẫn làtruetrong khi đã chuyển sangSTATE_IDLEhoặcSTATE_ENDED(#2133). - Thêm
lastRebufferRealtimeMsvàoLoadControl.Parameter(#2113).
- Thêm
- Bộ chuyển đổi:
- Thêm tính năng hỗ trợ chuyển đổi sang các định dạng tương thích ngược thay thế.
- Thêm tính năng hỗ trợ chuyển mã và chuyển đổi định dạng Dolby Vision (hồ sơ 8).
- Cập nhật các tham số của
VideoFrameProcessor.registerInputStreamvàVideoFrameProcessor.Listener.onInputStreamRegisteredđể sử dụngFormat. - Tạo siêu dữ liệu tĩnh HDR khi sử dụng
DefaultEncoderFactory. - Bật tính năng hỗ trợ cho việc chẩn đoán nền tảng Android bằng
MediaMetricsManager. Transformer sẽ chuyển tiếp các sự kiện chỉnh sửa và dữ liệu 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 Transformer bằngTransformer.Builder.setUsePlatformDiagnostics(false). - Tách
InAppMuxerthànhInAppMp4MuxervàInAppFragmentedMp4Muxer. Bạn sử dụngInAppMp4Muxerđể tạo tệp MP4 không phân mảnh, cònInAppFragmentedMp4Muxerlà để tạo tệp MP4 phân mảnh. - Di chuyển giao diện
Muxertừmedia3-muxersangmedia3-transformer. - Thêm
MediaProjectionAssetLoader(cung cấp nội dung nghe nhìn từMediaProjectionđể ghi màn hình) và thêm tính năng hỗ trợ ghi màn hình vào ứng dụng minh hoạ Transformer. - Thêm
#getInputFormat()vào giao diệnCodec. - Chuyển trách nhiệm phát hành
GlObjectsProvidercho phương thức gọi trongDefaultVideoFrameProcessorvàDefaultVideoCompositorkhi có thể.
- Công cụ trích xuất:
- AVI: Sửa lỗi xử lý tệp có âm thanh nén tốc độ bit không đổi, trong đó tiêu đề luồng lưu trữ số byte thay vì số đoạn.
- Khắc phục cách xử lý các đơn vị NAL có độ dài được biểu thị bằng 1 hoặc 2 byte (thay vì 4).
- Khắc phục lỗi
ArrayIndexOutOfBoundsExceptiontrong danh sách chỉnh sửa MP4 khi danh sách chỉnh sửa bắt đầu ở một khung không đồng bộ và không có khung đồng bộ nào trước đó (#2062). - Khắc phục vấn đề luồng TS có thể bị kẹt trên một số thiết bị (#2069).
- FLAC: Thêm hỗ trợ cho các tệp FLAC 32 bit. Trước đây, các luồng này sẽ không phát được bằng
IllegalStateException: Playback stuck buffering and not loading(#2197).
- Âm thanh:
- Sửa lỗi
onAudioPositionAdvancingđược gọi khi tiếp tục phát (trước đây, lệnh này được gọi khi tạm dừng phát). - Đừng bỏ qua
SonicAudioProcessorkhiSpeedChangingAudioProcessorđược định cấu hình bằng các tham số mặc định. - Khắc phục lỗi tràn dưới trong
Sonic#getOutputSize()có thể khiếnDefaultAudioSinkbị đình trệ. - Sửa
MediaCodecAudioRenderer.getDurationToProgressUs()vàDecoderAudioRenderer.getDurationToProgressUs()để các thao tác tua đặt lại chính xác thời lượng đã cung cấp. - Đặt
androidx.media3.common.audio.SonicAudioProcessorlàm phiên bản cuối cùng. - Thêm tính năng hỗ trợ cho PCM dấu phẩy động vào
ChannelMappingAudioProcessorvàTrimmingAudioProcessor.
- Sửa lỗi
- Video:
- Thay đổi
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacethành được bảo vệ để các ứng dụng có thể ghi đè nhằm chặn việc sử dụng các nền tảng giữ chỗ (#1905). - Thêm tính năng phân tích cú pháp phần phụ thuộc mẫu AV1
ExoPlayerthử nghiệm để tăng tốc độ tua. Hãy bật tính năng này bằng APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesmới. - Thêm API thử nghiệm
ExoPlayerđể loại bỏ các vùng đệm đầu vào của bộ giải mãMediaCodecVideoRendererbị trễ mà không phụ thuộc vào. Bật tính năng này bằngDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. * Khắc phục vấn đề trong đó trình phát không có nền tảng đã sẵn sàng ngay lập tức và giải mã rất chậm mọi khung hình đang chờ xử lý (#1973). - Loại trừ các thiết bị Xiaomi và OPPO khỏi chế độ nền tảng tách rời để tránh hiện tượng nhấp nháy màn hình (#2059).
- Thay đổi
- Văn bản:
- Thêm tính năng hỗ trợ phụ đề VobSub (#8260).
- Ngừng tải nhanh tất cả tệp phụ đề được định cấu hình bằng
MediaItem.Builder.setSubtitleConfigurations, thay vào đó chỉ tải một tệp nếu tệp đó được chọn bằng lựa chọn bản nhạc (#1721). - TTML: Thêm tuỳ chọn hỗ trợ tham chiếu
tts:originvàtts:extentbằng cách sử dụngstyle(#2953). - Giới hạn dấu thời gian WebVTT và SubRip ở đúng 3 chữ số thập phân. Trước đây, chúng tôi đã phân tích cú pháp không chính xác bất kỳ số chữ số thập phân nào nhưng luôn giả định giá trị tính bằng mili giây, dẫn đến dấu thời gian không chính xác (#1997).
- Khắc phục sự cố treo khi phát nếu danh sách phát chứa các mục bị cắt có phụ đề CEA-608 hoặc CEA-708.
- Sửa lỗi
IllegalStateExceptionkhi tệp SSA chứa một tín hiệu có thời lượng bằng 0 (thời gian bắt đầu và kết thúc bằng nhau) (#2052). - Loại bỏ (và ghi nhật ký) lỗi phân tích cú pháp phụ đề khi phụ đề được ghép vào cùng một vùng chứa với âm thanh và video (#2052).
- Khắc phục việc xử lý các ký tự UTF-8 nhiều byte trong tệp WebVTT bằng cách sử dụng dấu kết thúc dòng CR (#2167).
- DRM (Quản lý bản quyền nội dung số):
- Sửa lỗi
MediaCodec$CryptoException: Operation not supported in this configurationkhi phát nội dung ClearKey trên các thiết bị có API < 27 (#1732).
- Sửa lỗi
- Hiệu ứng:
- Chuyển chức năng của
OverlaySettingssangStaticOverlaySettings. Bạn có thể phân lớp conOverlaySettingsđể cho phép cài đặt lớp phủ động.
- Chuyển chức năng của
- Bộ ghép kênh:
- Di chuyển
MuxerExceptionra khỏi giao diệnMuxerđể tránh tên đủ điều kiện quá dài. - Đổi tên phương thức
setSampleCopyEnabled()thànhsetSampleCopyingEnabled()trong cảMp4Muxer.BuildervàFragmentedMp4Muxer.Builder. Mp4Muxer.addTrack()vàFragmentedMp4Muxer.addTrack()hiện trả về mã theo dõiintthay vìTrackToken.Mp4MuxervàFragmentedMp4Muxerkhông còn triển khai giao diệnMuxer.- Tắt tính năng sao chép và tạo lô mẫu
Mp4Muxertheo mặc định. - Khắc phục lỗi trong
FragmentedMp4Muxertạo ra nhiều mảnh khi chỉ có bản âm thanh được ghi.
- Di chuyển
- Phiên:
- Giữ trạng thái dịch vụ nền trước thêm 10 phút khi quá trình phát tạm dừng, dừng hoặc không thành công. Nhờ đó, người dùng có thể tiếp tục phát trong khoảng thời gian chờ này mà không phải lo ngại về các hạn chế về dịch vụ tiền cảnh trên nhiều thiết bị. Xin lưu ý rằng bạn không thể chỉ gọi
player.pause()để dừng dịch vụ nền trước trướcstopSelf()khi ghi đèonTaskRemoved, hãy sử dụngMediaSessionService.pauseAllPlayersAndStopSelf(). - Giữ thông báo hiển thị khi quá trình phát chuyển sang trạng thái lỗi hoặc dừng. Thông báo chỉ bị xoá nếu danh sách phát bị xoá hoặc trình phát được giải phóng.
- Cải thiện cách xử lý các thao tác ACTION_PLAY và ACTION_PAUSE của MediaSession trên nền tảng Android để chỉ đặt một trong hai thao tác theo các lệnh có sẵn, đồng thời chấp nhận nếu chỉ đặt một trong hai thao tác.
- Thêm
Contextlàm tham số choMediaButtonReceiver.shouldStartForegroundService(#1887). - Khắc phục lỗi khi gọi phương thức
PlayertrênMediaControllerđược kết nối với một phiên cũ đã loại bỏ các thay đổi từ một bản cập nhật đang chờ xử lý. - Đặt
MediaSession.setSessionActivity(PendingIntent)chấp nhận giá trị rỗng (#2109). - Khắc phục lỗi thông báo cũ vẫn hiển thị khi danh sách phát bị xoá (#2211).
- Giữ trạng thái dịch vụ nền trước thêm 10 phút khi quá trình phát tạm dừng, dừng hoặc không thành công. Nhờ đó, người dùng có thể tiếp tục phát trong khoảng thời gian chờ này mà không phải lo ngại về các hạn chế về dịch vụ tiền cảnh trên nhiều thiết bị. Xin lưu ý rằng bạn không thể chỉ gọi
- Giao diện người dùng:
- Thêm phần tử giữ trạng thái và thành phần kết hợp vào mô-đun
media3-ui-composechoPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStatevàPlaybackSpeedState.
- Thêm phần tử giữ trạng thái và thành phần kết hợp vào mô-đun
- Nội dung đã tải xuống:
- Khắc phục lỗi trong
CacheWriterkhiến nguồn dữ liệu luôn mở và các vùng bộ nhớ đệm bị khoá trong trường hợp nguồn dữ liệu gửi mộtExceptionkhác vớiIOException(#9760).
- Khắc phục lỗi trong
- Tiện ích HLS:
- Thêm phiên bản đầu tiên của
HlsInterstitialsAdsLoader. Trình tải quảng cáo đọc quảng cáo xen kẽ HLS của danh sách phát nội dung nghe nhìn HLS và liên kết các quảng cáo đó vớiAdPlaybackStateđược truyền đếnAdsMediaSource. Phiên bản ban đầu này chỉ hỗ trợ các luồng HLS VOD có thuộc tínhX-ASSET-URI. - Thêm
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Ứng dụng có thể dùng lớp này để tạo các thực thểAdsMediaSourcesử dụngHlsInterstitialsAdsLoadermột cách thuận tiện và an toàn. - Phân tích cú pháp thẻ
SUPPLEMENTAL-CODECStừ danh sách phát HLS để phát hiện các định dạng Dolby Vision (#1785). - Nới lỏng điều kiện tua để đồng bộ hoá vị trí trong sự kiện phát trực tiếp HLS (#2209).
- Thêm phiên bản đầu tiên của
- Tiện ích DASH:
- Thêm tính năng hỗ trợ định dạng AC-4 Cấp 4 cho DASH (#1898).
- Khắc phục vấn đề khi tính toán khoảng thời gian cập nhật để chèn quảng cáo trong các sự kiện phát trực tiếp nhiều giai đoạn (#1698).
- Phân tích cú pháp thuộc tính
scte214:supplementalCodecstừ tệp kê khai DASH để phát hiện các định dạng Dolby Vision (#1785). - Cải thiện cách xử lý quá trình chuyển đổi khoảng thời gian trong sự kiện phát trực tiếp, trong đó khoảng thời gian chứa các mẫu nội dung nghe nhìn vượt quá thời lượng đã khai báo (#1698).
- Khắc phục vấn đề trong đó các nhóm thích ứng được đánh dấu bằng
adaptation-set-switchingnhưng các ngôn ngữ hoặc cờ vai trò khác nhau được hợp nhất với nhau (#2222).
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, v.v.):
- Thêm mô-đun bộ giải mã MPEG-H sử dụng bộ giải mã MPEG-H tích hợp để giải mã âm thanh MPEG-H (#1826).
- Tiện ích MIDI:
- Đưa các thực thể
AudioSinkvàAudioRendererEventListenertuỳ chỉnh vàoMidiRenderer.
- Đưa các thực thể
- Tiện ích truyền (cast):
- Nâng phần phụ thuộc
play-services-cast-frameworklên phiên bản 21.5.0 để khắc phục sự cốFLAG_MUTABLEtrong các ứng dụng nhắm đến API 34 trở lên trên các thiết bị đã cài đặt nhưng tắt Dịch vụ Google Play (#2178).
- Nâng phần phụ thuộc
- Ứng dụng minh hoạ:
- Mở rộng
demo-composebằng các nút bổ sung và tăng cường tích hợpPlayerSurfacevới tính năng hỗ trợ điều chỉnh tỷ lệ và màn trập.
- Mở rộng
- Xoá các biểu tượng không dùng nữa:
- Xoá phương thức
AudioMixer.create()không dùng nữa. Sử dụngDefaultAudioMixer.Factory().create(). - Xoá các phương thức
Transformer.Builderkhông dùng nữa sau đây:setTransformationRequest(), hãy sử dụngsetAudioMimeType(),setVideoMimeType()vàsetHdrMode().setAudioProcessors(), hãy đặt bộ xử lý âm thanh trong mộtEditedMediaItem.Builder.setEffects(), rồi chuyển bộ xử lý đó đếnTransformer.start().setVideoEffects(), hãy đặt hiệu ứng video trongEditedMediaItem.Builder.setEffects()rồi truyền hiệu ứng đó đếnTransformer.start().setRemoveAudio(), hãy sử dụngEditedMediaItem.Builder.setRemoveAudio()để xoá âm thanh khỏiEditedMediaItemđược truyền đếnTransformer.start().setRemoveVideo(), hãy dùngEditedMediaItem.Builder.setRemoveVideo()để xoá video khỏiEditedMediaItemđược truyền đếnTransformer.start().setFlattenForSlowMotion(), hãy sử dụngEditedMediaItem.Builder.setFlattenForSlowMotion()để làm phẳngEditedMediaItemđược truyền đếnTransformer.start().setListener(), hãy sử dụngaddListener(),removeListener()hoặcremoveAllListeners().
- Xoá các phương thức
Transformer.Listenerkhông dùng nữa sau đây:onTransformationCompleted(MediaItem), hãy sử dụngonCompleted(Composition, ExportResult).onTransformationCompleted(MediaItem, TransformationResult), hãy sử dụngonCompleted(Composition, ExportResult).onTransformationError(MediaItem, Exception), hãy sử dụngonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationException), hãy sử dụngonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationResult, TransformationException), hãy sử dụngonError(Composition, ExportResult, ExportException).onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), hãy sử dụngonFallbackApplied(Composition, TransformationRequest, TransformationRequest).
- Xoá lớp
TransformationResultkhông dùng nữa. Thay vào đó, hãy sử dụngExportResult. - Xoá lớp
TransformationExceptionkhông dùng nữa. Thay vào đó, hãy sử dụngExportException. - Xoá
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONkhông dùng nữa. Sử dụngTransformer.PROGRESS_STATE_NOT_STARTED. - Xoá
Transformer.setListener()không dùng nữa. Thay vào đó, hãy sử dụngTransformer.addListener(),Transformer.removeListener()hoặcTransformer.removeAllListeners(). - Xoá
Transformer.startTransformation()không dùng nữa. Sử dụngTransformer.start(MediaItem, String). - Xoá
SingleFrameGlShaderProgramkhông dùng nữa. Sử dụngBaseGlShaderProgram. - Xoá
Transformer.flattenForSlowMotion. Sử dụngEditedMediaItem.flattenForSlowMotion. - Đã xoá
ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponentvàExoPlayer.DeviceComponent. - Đã xoá
androidx.media3.exoplayer.audio.SonicAudioProcessor. - Đã xóa các phương thức
DownloadHelperkhông dùng nữa sau đây:- Hàm khởi tạo
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), hãy sử dụngDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList). getRendererCapabilities(RenderersFactory), bạn có thể đạt được chức năng tương đương bằng cách tạoDefaultRendererCapabilitiesListbằngRenderersFactoryvà gọiDefaultRendererCapabilitiesList.getRendererCapabilities().- Đã xóa phương thức
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat). Thay vào đó, hãy sử dụngPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)và truyền vào(MediaSession.Token) compatToken.getToken().
- Hàm khởi tạo
- Xoá phương thức
1.6.0-rc02
Ngày 19 tháng 3 năm 2025
Sử dụng phiên bản ổn định 1.6.0.
1.6.0-rc01
Ngày 12 tháng 3 năm 2025
Sử dụng phiên bản ổn định 1.6.0.
1.6.0-beta01
Ngày 26 tháng 2 năm 2025
Sử dụng phiên bản ổn định 1.6.0.
Phiên bản 1.6.0-alpha03
Ngày 6 tháng 2 năm 2025
Sử dụng phiên bản ổn định 1.6.0.
Phiên bản 1.6.0-alpha02
Ngày 30 tháng 1 năm 2025
Sử dụng phiên bản ổn định 1.6.0.
Phiên bản 1.6.0-alpha01
Ngày 20 tháng 12 năm 2024
Sử dụng phiên bản ổn định 1.6.0.
Phiên bản 1.5
Phiên bản 1.5.1
Ngày 19 tháng 12 năm 2024
Phát hành androidx.media3:media3-*:1.5.1. Phiên bản 1.5.1 bao gồm các thay đổi sau.
- ExoPlayer:
- Tắt tính năng giải mã không đồng bộ trong MediaCodec để tránh các vấn đề về thời gian chờ của bộ mã hoá và giải mã được báo cáo với API nền tảng này (#1641).
- Công cụ trích xuất:
- MP3: Không dừng phát sớm khi mục lục của khung
VBRIkhông bao gồm tất cả dữ liệu MP3 trong một tệp (#1904).
- MP3: Không dừng phát sớm khi mục lục của khung
- Video:
- Huỷ bỏ việc sử dụng các giá trị tỷ lệ khung hình pixel do
MediaCodecAdaptercung cấp khi được cung cấp trong khi xử lýonOutputFormatChanged(#1371).
- Huỷ bỏ việc sử dụng các giá trị tỷ lệ khung hình pixel do
- Văn bản:
- Khắc phục lỗi trong
ReplacingCuesResolver.discardCuesBeforeTimeUs, trong đó gợi ý đang hoạt động tạitimeUs(đã bắt đầu nhưng chưa kết thúc) bị loại bỏ không chính xác (#1939).
- Khắc phục lỗi trong
- Siêu dữ liệu:
- Trích xuất số đĩa/bản nhạc và thể loại từ bình luận Vorbis vào
MediaMetadata(#1958).
- Trích xuất số đĩa/bản nhạc và thể loại từ bình luận Vorbis vào
Phiên bản 1.5.0
Ngày 27 tháng 11 năm 2024
Phát hành androidx.media3:media3-*:1.5.0. Phiên bản 1.5.0 bao gồm các thay đổi sau.
- Thư viện Common:
- Thêm
ForwardingSimpleBasePlayerđể cho phép chuyển tiếp đến một trình phát khác với các điều chỉnh nhỏ, đồng thời đảm bảo tính nhất quán hoàn toàn và xử lý trình nghe (#1183). - Thay thế phương thức
SimpleBasePlayer.State.playlistbằnggetPlaylist(). - Thêm cơ chế ghi đè cho
SimpleBasePlayer.State.Builder.setPlaylist()để trực tiếp chỉ địnhTimelinecũng nhưTracksvàMetadatahiện tại thay vì tạo cấu trúc danh sách phát. - Tăng
minSdklên 21 (Android Lollipop). Điều này phù hợp với tất cả các thư viện AndroidX khác. - Thêm cấu phần phần mềm
androidx.media3:media3-common-ktxcung cấp chức năng dành riêng cho Kotlin được xây dựng dựa trên thư viện Common - Thêm hàm mở rộng tạm ngưng
Player.listenđể khởi động một coroutine nhằm nghePlayer.Eventsvào thư việnmedia3-common-ktx. - Xoá chú thích
@DoNotInlinekhỏi các lớp bên trong được tách riêng theo cách thủ công, được thiết kế để tránh lỗi xác minh lớp thời gian chạy. Các phiên bản gần đây của R8 hiện tự động loại bỏ các lệnh gọi như thế này để tránh lỗi thời gian chạy (vì vậy, bạn không cần phải loại bỏ theo cách thủ công nữa). Tất cả người dùng Gradle của thư viện đều phải sử dụng một phiên bản của Trình bổ trợ Android cho Gradle có dùng một phiên bản R8 thực hiện việc này, docompileSdk = 35. Người dùng thư viện có hệ thống xây dựng không phải Gradle sẽ cần đảm bảo bước thu nhỏ/làm rối mã nguồn tương đương với R8 thực hiện quy trình tự động tách dòng tương tự để tránh lỗi xác minh lớp thời gian chạy. Thay đổi này đã được thực hiện trong các thư viện AndroidX khác.
- Thêm
- ExoPlayer:
- Giờ đây, bạn có thể gọi
MediaCodecRenderer.onProcessedStreamChange()cho mọi mục nội dung nghe nhìn. Trước đó, hàm này không được gọi cho mục đầu tiên. Hãy sử dụngMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()để bật tính năng này. - Thêm
PreloadMediaSource.PreloadControl.onPreloadErrorđể cho phép các phương thức triển khaiPreloadMediaSource.PreloadControlthực hiện hành động khi xảy ra lỗi. - Thêm
BasePreloadManager.Listenerđể truyền sự kiện tải trước đến ứng dụng. - Cho phép thay đổi thời gian chờ của ứng dụng SNTP và thử lại các địa chỉ thay thế khi hết thời gian chờ (#1540).
- Xoá
MediaCodecAdapter.Configuration.flagsvì trường này luôn bằng 0. - Cho phép người dùng chọn loa tích hợp để phát trên Wear OS API 35 trở lên (nơi thiết bị quảng cáo hỗ trợ tính năng này).
- Trì hoãn lệnh gọi chặn đến
Context.getSystemService(Context.AUDIO_SERVICE)cho đến khi bật tính năng xử lý tiêu điểm âm thanh. Điều này đảm bảo lệnh gọi chặn sẽ không được thực hiện nếu tính năng xử lý quyền phát âm thanh không được bật (#1616). - Cho phép phát bất kể thời lượng được lưu vào vùng đệm khi không tải được (#1571).
- Thêm
AnalyticsListener.onRendererReadyChanged()để báo hiệu khi từng trình kết xuất cho phép phát. - Khắc phục lỗi
MediaCodec.CryptoExceptionđôi khi được báo cáo là "lỗi thời gian chạy không mong muốn" khiMediaCodecđược vận hành ở chế độ không đồng bộ (hành vi mặc định trên API 31 trở lên). - Truyền
bufferedDurationUsthay vìbufferedPositionUsbằngPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Ngoài ra, thay đổiDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSthànhDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, sau đó các ứng dụng cần truyền một giá trị đại diện cho một khoảng thời gian cụ thể từ vị trí bắt đầu mặc định mà nguồn nội dung nghe nhìn tương ứng phải được tải trước bằng IntDef này, thay vì một vị trí. - Thêm phương thức triển khai
ForwardingRendererđể chuyển tiếp tất cả lệnh gọi phương thức đến một trình kết xuất khác (1703). - Thêm tính năng tải trước danh sách phát cho mục tiếp theo trong danh sách phát. Ứng dụng có thể
bật tính năng tải trước bằng cách gọi
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)tương ứng. Theo mặc định, tính năng tải trước sẽ bị tắt. Khi bạn chọn sử dụng và để không can thiệp vào quá trình phát,DefaultLoadControlsẽ hạn chế việc tải trước để chỉ bắt đầu và tiếp tục khi trình phát không tải để phát. Ứng dụng có thể thay đổi hành vi này bằng cách triển khaiLoadControl.shouldContinuePreloading()tương ứng (chẳng hạn như khi ghi đè phương thức này trongDefaultLoadControl). Phương thức triển khai mặc định củaLoadControlsẽ tắt tính năng tải trước trong trường hợp ứng dụng đang sử dụng phương thức triển khai tuỳ chỉnh củaLoadControl. - Thêm phương thức
MediaSourceEventListener.EventDispatcher.dispatchEvent()để cho phép gọi các sự kiện của trình nghe lớp con (1736). - Thêm
DefaultPreloadManager.Builderđể tạo các thực thểDefaultPreloadManagervàExoPlayercó cấu hình dùng chung nhất quán. - Xoá tham số
Renderer[]khỏiLoadControl.onTracksSelected()vì quá trình triển khaiDefaultLoadControlcó thể truy xuất các loại luồng từExoTrackSelection[]. - Ngừng sử dụng
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])và đánh dấu phương thức là cuối cùng để ngăn việc ghi đè. Bạn nên chuyển sang dùngDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])mới. - Báo cáo sự kiện
MediaSourceEventListenertừ các nguồn phụ trongMergingMediaSource. Điều này sẽ dẫn đến việc các sự kiện bắt đầu/lỗi/đã huỷ/đã hoàn tất tải được báo cáo cho phụ đề được tải không qua cửa hàng ứng dụng (những phụ đề được thêm bằngMediaItem.LocalConfiguration.subtitleConfigurations), có thể xuất hiện dưới dạng các sự kiện tải trùng lặp được phát ra từAnalyticsListener. - Ngăn lỗi phụ đề và siêu dữ liệu làm dừng hoàn toàn quá trình phát.
Thay vào đó, bản nhạc có vấn đề sẽ bị tắt và các bản nhạc còn lại sẽ tiếp tục phát (#1722).
- Trong quá trình xử lý phụ đề mới (trong quá trình trích xuất), các lỗi phân tích cú pháp (ví dụ: dữ liệu phụ đề không hợp lệ) và lỗi tải (ví dụ: HTTP 404) liên quan sẽ được phát ra thông qua lệnh gọi lại
onLoadError. - Trong quá trình xử lý phụ đề cũ (trong khi kết xuất), chỉ các lỗi tải liên quan mới được phát ra thông qua lệnh gọi lại
onLoadError, còn lỗi phân tích cú pháp sẽ bị bỏ qua mà không có thông báo (đây là hành vi có sẵn).
- Trong quá trình xử lý phụ đề mới (trong quá trình trích xuất), các lỗi phân tích cú pháp (ví dụ: dữ liệu phụ đề không hợp lệ) và lỗi tải (ví dụ: HTTP 404) liên quan sẽ được phát ra thông qua lệnh gọi lại
- Khắc phục lỗi trong đó các mục trong danh sách phát hoặc khoảng thời gian trong luồng DASH nhiều khoảng thời gian có thời lượng không khớp với nội dung thực tế có thể khiến khung hình bị treo ở cuối mục (#1698).
- Thêm phương thức setter vào
SntpClientđể đặt thời gian tối đa đã trôi qua kể từ lần cập nhật gần nhất mà sau đó ứng dụng được khởi chạy lại (#1794).
- Giờ đây, bạn có thể gọi
- Bộ chuyển đổi:
- Thêm
SurfaceAssetLoader, hỗ trợ đưa dữ liệu video vào hàng đợi cho Transformer thông quaSurface. ImageAssetLoaderbáo cáo dữ liệu đầu vào không được hỗ trợ thông quaAssetLoader.onErrorthay vì gửiIllegalStateException.- Đặt thời lượng hình ảnh bằng cách sử dụng
MediaItem.Builder.setImageDurationMsbắt buộc để xuất hình ảnh. - Thêm tính năng hỗ trợ xuất cho các khoảng trống trong chuỗi EditedMediaItems âm thanh.
- Thêm
- Chọn bản nhạc:
DefaultTrackSelector: Ưu tiên âm thanh dựa trên đối tượng hơn âm thanh dựa trên kênh khi các yếu tố khác là như nhau.
- Công cụ trích xuất:
- Cho phép
Mp4ExtractorvàFragmentedMp4Extractorxác định các mẫu H264 không được dùng làm tệp đối chiếu cho các mẫu tiếp theo. - Thêm tuỳ chọn để bật tính năng tua dựa trên chỉ mục trong
AmrExtractor. - Xử lý các tệp MP3 có hơn 128 kB giữa các khung hợp lệ dưới dạng bị cắt bớt (thay vì không hợp lệ). Điều này có nghĩa là các tệp có dữ liệu không phải MP3 ở cuối, không có siêu dữ liệu nào khác để cho biết độ dài của byte MP3, hiện sẽ dừng phát ở cuối dữ liệu MP3 thay vì không phát được với
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - Khắc phục lỗi xử lý mẫu trước khi phát cho các vị trí bắt đầu nội dung nghe nhìn không phải khung hình chính khi xử lý danh sách chỉnh sửa trong tệp MP4 (#1659).
- Cải thiện cách tính tốc độ khung hình bằng cách sử dụng thời lượng nội dung nghe nhìn từ hộp
mdhdtrongMp4ExtractorvàFragmentedMp4Extractor(#1531). - Khắc phục lỗi điều chỉnh tỷ lệ không chính xác của
media_timetrong danh sách chỉnh sửa MP4. Mặc dùsegment_durationđã được điều chỉnh tỷ lệ chính xác bằng cách sử dụng thang thời gian của phim, nhưngmedia_timehiện được điều chỉnh tỷ lệ đúng cách bằng cách sử dụng thang thời gian của bản nhạc, theo quy định của tiêu chuẩn định dạng MP4 (#1792). - Xử lý các khung hình không theo thứ tự trong phép tính
endIndicescho MP4 bằng danh sách chỉnh sửa (#1797). - Khắc phục lỗi phân tích cú pháp thời lượng nội dung nghe nhìn trong hộp
mdhdcủa tệp MP4 để xử lý các giá trị-1(#1819). - Thêm tính năng hỗ trợ xác định hộp
h263trong tệp MP4 cho video H.263 (#1821). - Thêm tính năng hỗ trợ định dạng tệp nội dung nghe nhìn cơ sở ISO AC-4 Cấp 4 (#1265).
- Cho phép
- DataSource:
- Cập nhật
HttpEngineDataSourceđể cho phép sử dụng kể từ phiên bản S tiện ích 7 thay vì cấp độ API 34 (#1262). DataSourceContractTest: Xác nhận rằngDataSource.getUri()trả về URI đã phân giải (như được ghi lại). Nếu URI này khác với URI được yêu cầu, thì các chương trình kiểm thử có thể cho biết điều này bằng phương thứcDataSourceContractTest.TestResource.Builder.setResolvedUri()mới.DataSourceContractTest: Xác nhận rằngDataSource.getUri()vàgetResponseHeaders()trả về giá trị "mở" sau khi lệnh gọi đếnopen()không thành công (do tài nguyên "không tìm thấy") và trước lệnh gọiclose()tiếp theo.- Việc ghi đè
DataSourceContractTest.getNotFoundResources()cho phép các lớp con kiểm thử cung cấp nhiều tài nguyên "không tìm thấy" và cung cấp mọi tiêu đề dự kiến. Điều này giúp phân biệt giữa lỗi HTTP 404 (có tiêu đề) và lỗi "không tìm thấy máy chủ" (không có tiêu đề).
- Việc ghi đè
- Cập nhật
- Âm thanh:
- Tự động định cấu hình siêu dữ liệu về độ lớn CTA-2075 trên bộ mã hoá và giải mã nếu có trong nội dung nghe nhìn.
- Đảm bảo âm lượng giảm dần một cách mượt mà khi tua.
- Khắc phục âm thanh bốp có thể xảy ra trong quá trình tua.
- Khắc phục lỗi tích luỹ cắt bớt cho thuật toán kéo dài thời gian/chuyển đổi cao độ của Sonic.
- Khắc phục lỗi trong
SpeedChangingAudioProcessorkhiến khung hình đầu ra bị rớt.
- Video:
MediaCodecVideoRenderertránh giải mã các mẫu không được kết xuất cũng như không được các mẫu khác sử dụng làm tham chiếu.- Trên API 35 trở lên,
MediaCodecAdapterhiện có thể nhậnnullSurfacetrongconfigurevà gọi đến một phương thức mớidetachOutputSurfaceđể xoáSurfaceđã đặt trước đó nếu bộ mã hoá và giải mã hỗ trợ tính năng này (MediaCodecInfo.detachedSurfaceSupported). - Sử dụng các giá trị tỷ lệ khung hình pixel do
MediaCodecAdaptercung cấp (nếu có) khi xử lýonOutputFormatChanged(#1371). - Thêm giải pháp cho vấn đề về thiết bị trên Galaxy Tab S7 FE khiến các luồng H264 bảo mật 60 khung hình/giây bị đánh dấu là không được hỗ trợ (#1619).
- Thêm giải pháp cho các bộ mã hoá và giải mã bị kẹt sau mẫu cuối cùng mà không trả về tín hiệu kết thúc luồng.
- Văn bản:
- Thêm
VoiceSpantuỳ chỉnh và điền sẵn cho khoảng giọng nói WebVTT (#1632). - Đảm bảo WebVTT trong HLS có dấu thời gian phụ đề rất lớn (tràn
long64 bit khi được biểu thị dưới dạng micrô giây và nhân với cơ sở thời gian MPEG90,000) được hiển thị (#1763). - Hỗ trợ phụ đề CEA-608 trong nội dung Dolby Vision (#1820).
- Khắc phục lỗi treo khi phát các luồng phát nhiều giai đoạn DASH khi bật phụ đề CEA-608 (#1863).
- Thêm
- Siêu dữ liệu:
- Chỉ định loại
C.TRACK_TYPE_METADATAcho các bản nhạc chứa nội dung icy hoặc vnd.dvb.ait.
- Chỉ định loại
- Hình ảnh:
- Thêm
ExternallyLoadedImageDecoderđể đơn giản hoá việc tích hợp với các thư viện tải hình ảnh bên ngoài như Glide hoặc Coil.
- Thêm
- DataSource:
- Thêm
FileDescriptorDataSource, mộtDataSourcemới có thể dùng để đọc từFileDescriptor(#3757).
- Thêm
- Hiệu ứng:
- Thêm giải pháp tạm thời
DefaultVideoFrameProcessorcho việc điều chỉnh tỷ lệSurfaceTexturenhỏ.SurfaceTexturecó thể bao gồm một tỷ lệ nhỏ cắt bỏ đường viền 1 texel xung quanh cạnh của vùng đệm đã cắt. Vấn đề này hiện đã được xử lý để kết quả gần với dự kiến hơn. - Tăng tốc
DefaultVideoFrameProcessor.queueInputBitmap(). Nhờ đó, quá trình xuất hình ảnh sang video bằngTransformersẽ nhanh hơn.
- Thêm giải pháp tạm thời
- Tiện ích IMA:
- Khắc phục lỗi khi xoá danh sách phát có thể gây ra
ArrayIndexOutOfBoundsExceptiontrongImaServerSideAdInsertionMediaSource. - Khắc phục lỗi trong đó các luồng DAI được chèn phía máy chủ mà không có quảng cáo trước video có thể dẫn đến
ArrayIndexOutOfBoundsExceptionkhi phát qua quảng cáo trong video cuối cùng (#1741).
- Khắc phục lỗi khi xoá danh sách phát có thể gây ra
- Phiên:
- Thêm
MediaButtonReceiver.shouldStartForegroundService(Intent)để cho phép các ứng dụng chặn lệnh phát đến để tiếp tục phát bằng cách ghi đè phương thức này. Theo mặc định, dịch vụ luôn được bắt đầu và không thể chặn quá trình phát nếu hệ thống không làm dịch vụ gặp sự cố vớiForegroundServiceDidNotStartInTimeException(#1528). - Khắc phục lỗi khiến các lệnh tuỳ chỉnh được gửi từ
MediaBrowserđược gửi đếnMediaSessionCompat.Callbackthay vì biến thểMediaBrowserServiceCompatcủa phương thức khi kết nối với một dịch vụ cũ. Điều này ngănMediaBrowsernhận giá trị trả về thực tế do dịch vụ cũ gửi lại (#1474). - Xử lý
IllegalArgumentExceptiondo thiết bị của một số nhà sản xuất nhất định gửi khi thiết lập bộ nhận tín hiệu truyền tin cho ý định của nút nội dung nghe nhìn (#1730). - Thêm nút lệnh cho các mục nội dung nghe nhìn. Thao tác này sẽ thêm API Media3 cho nội dung trước đây được gọi là
Custom browse actionsbằng thư viện cũ cóMediaBrowserCompat. Xin lưu ý rằng với Media3, các nút lệnh cho mục nội dung nghe nhìn có sẵn cho cảMediaBrowservàMediaController. Xem phần Triển khai các thao tác duyệt xem tuỳ chỉnh. * Sửa lỗi đôi khi trình điều khiển Media3 không thể cho phép ứng dụng phiên bắt đầu một dịch vụ nền trước sau khi yêu cầuplay(). - Hạn chế
CommandButton.Builder.setIconUriđể chỉ chấp nhận URI nội dung. - Truyền gợi ý kết nối của trình duyệt Media3 đến
MediaBrowserCompatban đầu khi kết nối vớiMediaBrowserCompatcũ. Dịch vụ có thể nhận các gợi ý kết nối được truyền dưới dạng gợi ý gốc bằng lệnh gọi đầu tiên đếnonGetRoot(). - Khắc phục lỗi trong đó
MediaBrowserkết nối với dịch vụ trình duyệt cũ không nhận được lỗi do dịch vụ gửi sau khi trình duyệt đăng kýparentid. - Cải thiện hành vi tương tác để trình duyệt Media3 được kết nối với
MediaBrowserServicecũ không yêu cầu thành phần con củaparentIdhai lần khi đăng ký thành phần mẹ.
- Thêm
- Giao diện người dùng:
- Đặt giải pháp khắc phục cho video bị kéo giãn/cắt bớt trong
PlayerView-in-Compose-AndroidViewthành tùy chọn tham gia, do các vấn đề về hiệu ứng chuyển đổi dùng chung dựa trên XML. Các ứng dụng sử dụngPlayerViewbên trongAndroidViewcần gọiPlayerView.setEnableComposeSurfaceSyncWorkaroundđể chọn sử dụng (#1237, #1594). - Thêm
setFullscreenButtonStatevàoPlayerViewđể cho phép cập nhật biểu tượng của nút toàn màn hình theo yêu cầu, tức là ngoài băng tần và không phản ứng với một lượt nhấp (#1590, #184). - Khắc phục lỗi lựa chọn "Không có" trong phần lựa chọn văn bản không hoạt động nếu có lựa chọn ưu tiên về lựa chọn bản nhạc văn bản do ứng dụng xác định.
- Đặt giải pháp khắc phục cho video bị kéo giãn/cắt bớt trong
- Tiện ích DASH:
- Thêm tính năng hỗ trợ cho các khoảng thời gian bắt đầu ở giữa một phân đoạn (#1440).
- Tiện ích Smooth Streaming:
- Khắc phục lỗi
Bad magic number for Bundlekhi phát các luồng SmoothStreaming có bản nhạc văn bản (#1779).
- Khắc phục lỗi
- Tiện ích RTSP:
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, v.v.):
- Thêm mô-đun bộ giải mã IAMF, hỗ trợ phát các tệp MP4 chứa bản âm thanh IAMF bằng thư viện gốc libiamf để tổng hợp âm thanh.
- Tính năng phát được bật với bố cục âm thanh nổi cũng như 5.1 với không gian hoá cùng với tính năng theo dõi đầu tuỳ chọn được bật, nhưng tính năng hỗ trợ phát hai tai hiện không có sẵn.
- Thêm tính năng hỗ trợ trang 16 KB cho các tiện ích của bộ giải mã trên Android 15 (#1685).
- Thêm mô-đun bộ giải mã IAMF, hỗ trợ phát các tệp MP4 chứa bản âm thanh IAMF bằng thư viện gốc libiamf để tổng hợp âm thanh.
- Tiện ích truyền (cast):
- Dừng dọn dẹp dòng thời gian sau khi CastSession ngắt kết nối, cho phép ứng dụng của người gửi tiếp tục phát trên thiết bị sau khi ngắt kết nối.
- Điền
DeviceInfocủa CastPlayer khiContextđược cung cấp. Việc này cho phép liên kếtMediaSessionvớiRoutingSession, điều này là cần thiết để tích hợp Trình chuyển đổi đầu ra (#1056).
- Tiện ích kiểm thử:
DataSourceContractTesthiện bao gồm các thử nghiệm để xác minh:- Đã cập nhật luồng dữ liệu đầu vào
read position. - Bộ đệm đầu ra
offsetđược áp dụng chính xác.
- Đã cập nhật luồng dữ liệu đầu vào
- Ứng dụng minh hoạ
- Giải quyết vấn đề rò rỉ bộ nhớ trong ứng dụng minh hoạ dạng ngắn (#1839).
- Xoá các biểu tượng không dùng nữa:
- Xoá
Player.hasPrevious,Player.hasPreviousWindow()không dùng nữa. Thay vào đó, hãy sử dụngPlayer.hasPreviousMediaItem(). - Xoá phương thức
Player.previous()không dùng nữa. Sử dụngPlayer.seekToPreviousMediaItem(). - Xoá phương thức
DrmSessionEventListener.onDrmSessionAcquiredkhông dùng nữa. - Xoá các hàm khởi tạo
DefaultEncoderFactorykhông dùng nữa. Sử dụngDefaultEncoderFactory.Builder.
- Xoá
Phiên bản 1.5.0-rc02
Ngày 19 tháng 11 năm 2024
Sử dụng phiên bản ổn định 1.5.0.
Phiên bản 1.5.0-rc01
Ngày 13 tháng 11 năm 2024
Sử dụng phiên bản ổn định 1.5.0.
Phiên bản 1.5.0-beta01
Ngày 30 tháng 10 năm 2024
Sử dụng phiên bản ổn định 1.5.0.
Phiên bản 1.5.0-alpha01
Ngày 10 tháng 9 năm 2024
Sử dụng phiên bản ổn định 1.5.0.
Phiên bản 1.4.0
Phiên bản 1.4.1
Ngày 27 tháng 8 năm 2024
Phát hành androidx.media3:media3-*:1.4.1. Phiên bản 1.4.1 bao gồm các thay đổi sau.
- ExoPlayer:
- Công cụ trích xuất:
- MP3: Sửa lỗi
Searched too many bytesbằng cách bỏ qua chính xác dữ liệu không phải MP3 ở cuối dựa trên trường độ dài trong khungInfo(#1480).
- MP3: Sửa lỗi
- Văn bản:
- TTML: Khắc phục cách xử lý các giá trị
tts:fontSizetheo tỷ lệ phần trăm để đảm bảo các giá trị này được kế thừa chính xác từ các nút mẹ có giá trịtts:fontSizetheo tỷ lệ phần trăm. - Khắc phục lỗi
IndexOutOfBoundsExceptiontrongLegacySubtitleUtildo xử lý không chính xác trường hợp thời gian bắt đầu đầu ra được yêu cầu lớn hơn hoặc bằng thời gian sự kiện cuối cùng trongSubtitle(#1516).
- TTML: Khắc phục cách xử lý các giá trị
- DRM (Quản lý bản quyền nội dung số):
- Sửa lỗi
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEtrên các thiết bị API 31 trở lên phát nội dung L1 Widevine. Lỗi này là do việc triển khai phương thức khungMediaDrm.requiresSecureDecoderchưa hoàn tất (#1603).
- Sửa lỗi
- Hiệu ứng:
- Thêm phương thức
release()vàoGlObjectsProvider.
- Thêm phương thức
- Phiên:
- Chuyển thao tác nhấn đúp vào
KEYCODE_HEADSETHOOKthành hành động "tua đến phần tiếp theo", như được ghi lại (#1493). - Xử lý
KEYCODE_HEADSETHOOKdưới dạng lệnh "phát" trongMediaButtonReceiverkhi quyết định có bỏ qua lệnh này hay không để tránhForegroundServiceDidNotStartInTimeException(#1581).
- Chuyển thao tác nhấn đúp vào
- Tiện ích RTSP:
- Bỏ qua nội dung mô tả không hợp lệ về nội dung nghe nhìn trong quá trình phân tích cú pháp SDP (#1087).
Phiên bản 1.4.0
Ngày 25 tháng 7 năm 2024
Phát hành androidx.media3:media3-*:1.4.0. Phiên bản 1.4.0 bao gồm các thay đổi sau.
- Thư viện Common:
- Chuyển tiếp các lệnh gọi tua được cho là không hoạt động đến các phương thức
BasePlayer.seekTo()vàSimpleBasePlayer.handleSeek()được bảo vệ thay vì bỏ qua các lệnh gọi đó. Nếu đang triển khai các phương thức này trong một trình phát tuỳ chỉnh, bạn có thể cần xử lý các lệnh gọi bổ sung này bằngmediaItemIndex == C.INDEX_UNSET. - Xoá phần phụ thuộc biên dịch đối với tính năng đơn giản hoá Java 8 nâng cao (#1312).
- Đảm bảo thời lượng được truyền đến
MediaItem.Builder.setImageDurationMs()bị bỏ qua đối vớiMediaItemkhông phải hình ảnh (như đã ghi lại). - Thêm
Format.customDatađể lưu trữ thông tin tuỳ chỉnh do ứng dụng cung cấp về các thực thểFormat.
- Chuyển tiếp các lệnh gọi tua được cho là không hoạt động đến các phương thức
- ExoPlayer:
- Thêm
BasePreloadManagerđể điều phối việc tải trước cho nhiều nguồn dựa trên mức độ ưu tiên được xác định bằngrankingDatacủa các nguồn đó. Bạn có thể tuỳ chỉnh bằng cách mở rộng lớp này. ThêmDefaultPreloadManagersử dụngPreloadMediaSourceđể tải trước các mẫu nội dung nghe nhìn của nguồn vào bộ nhớ và sử dụng số nguyênrankingDatacho biết chỉ mục của một mục trên giao diện người dùng. - Thêm
PlayerIdvào hầu hết các phương thức củaLoadControlđể cho phép các phương thức triển khaiLoadControlhỗ trợ nhiều người chơi. - Xóa
Buffer.isDecodeOnly()vàC.BUFFER_FLAG_DECODE_ONLY. Không cần đặt cờ này vì trình kết xuất và trình giải mã sẽ quyết định bỏ qua vùng đệm dựa trên dấu thời gian. Các phương thức triển khaiRenderertuỳ chỉnh phải kiểm tra xem thời gian đệm giữa các khung giờ có ít nhất làBaseRenderer.getLastResetPositionUs()hay không để quyết định xem có nên hiển thị mẫu hay không. Các phương thức triển khaiSimpleDecodertuỳ chỉnh có thể kiểm traisAtLeastOutputStartTimeUs()nếu cần hoặc đánh dấu các vùng đệm khác bằngDecoderOutputBuffer.shouldBeSkippedđể bỏ qua. - Cho phép
TargetPreloadStatusControl.getTargetPreloadStatus(T)trả về giá trị rỗng để cho biết không tải trướcMediaSourcebằngrankingDatađã cho. - Thêm
remove(MediaSource)vàoBasePreloadManager. - Thêm
reset()vàoBasePreloadManagerđể giải phóng tất cả các nguồn đang giữ trong khi vẫn giữ lại thực thể trình quản lý tải trước. - Thêm
ExoPlayer.setPriority()(vàBuilder.setPriority()) để xác định giá trị ưu tiên được dùng trongPriorityTaskManagervà cho mức độ quan trọng của MediaCodec từ API 35. - Khắc phục vấn đề khi cập nhật thời gian lưu vào vùng đệm gần đây nhất, dẫn đến khoá
bs(thiếu vùng đệm) không chính xác trong CMCD (#1124). - Thêm
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)để cho biết rằng nguồn đã tải đến cuối. Điều này cho phép các phương thức triển khaiDefaultPreloadManagervàPreloadMediaSource.PreloadControltuỳ chỉnh tải trước nguồn tiếp theo hoặc thực hiện các hành động khác. - Khắc phục lỗi trong đó việc bỏ qua khoảng lặng ở cuối mục có thể kích hoạt một ngoại lệ phát.
- Thêm
clearvàoPreloadMediaSourceđể loại bỏ khoảng thời gian tải trước. - Thêm mã lỗi mới
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDđược dùng khi tài nguyên bộ mã hoá và giải mã được thu hồi cho các tác vụ có mức độ ưu tiên cao hơn. - Cho phép
AdsMediaSourcetải quảng cáo trước video trước khi hoàn tất quá trình chuẩn bị nội dung nghe nhìn ban đầu (#1358). - Khắc phục lỗi khi quá trình phát chuyển sang
STATE_ENDEDkhi chuẩn bị lại một luồng phát trực tiếp DASH nhiều giai đoạn sau khi giai đoạn ban đầu đã bị xoá khỏi tệp kê khai. - Đổi tên
onTimelineRefreshed()thànhonSourcePrepared()vàonPrepared()thànhonTracksSelected()trongPreloadMediaSource.PreloadControl. Đồng thời, đổi tên IntDef trongDefaultPreloadManager.Stagecho phù hợp. - Thêm tính năng hỗ trợ thử nghiệm cho việc lập lịch biểu động để điều chỉnh công việc phù hợp hơn với chu kỳ đánh thức CPU và trì hoãn việc đánh thức cho đến khi trình kết xuất có thể tiến hành.
Bạn có thể bật tính năng này bằng cách sử dụng
experimentalSetDynamicSchedulingEnabled()khi thiết lập thực thể ExoPlayer. - Thêm
Renderer.getDurationToProgressUs().Renderercó thể triển khai phương thức này để trả về cho ExoPlayer thời lượng mà quá trình phát phải tiến lên để trình kết xuất tiến trình. NếuExoPlayerđược đặt bằngexperimentalSetDynamicSchedulingEnabled(), thìExoPlayersẽ gọi phương thức này khi tính toán thời gian lên lịch cho tác vụ công việc. - Thêm
MediaCodecAdapter#OnBufferAvailableListenerđể cảnh báo khiMediaCodecRenderercó thể sử dụng vùng đệm đầu vào và đầu ra.MediaCodecRenderersẽ báo hiệuExoPlayerkhi nhận được các lệnh gọi lại này và nếuExoPlayerđược đặt bằngexperimentalSetDynamicSchedulingEnabled(), thìExoPlayersẽ lên lịch cho vòng lặp công việc của mình khi trình kết xuất có thể tiến hành. - Sử dụng lớp dữ liệu cho các phương thức
LoadControlthay vì các tham số riêng lẻ. - Thêm
ExoPlayer.isReleased()để kiểm tra xemExoplayer.release()đã được gọi hay chưa. - Thêm
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()để định cấu hình vị trí tối đa màseekToPrevious()tìm đến mục trước đó (#1425). - Khắc phục một số điểm không nhất quán về quyền phát âm thanh, ví dụ: không báo cáo việc mất quyền phát âm thanh tạm thời hoặc hoàn toàn trong khi trình phát bị tạm dừng (#1436).
- Khắc phục lỗi
IndexOutOfBoundsExceptiontiềm ẩn do trình trích xuất báo cáo các bản nhạc bổ sung sau bước chuẩn bị ban đầu (#1476). EffectstrongExoPlayer.setVideoEffect()sẽ nhận được dấu thời gian sau khi xoá độ lệch của trình kết xuất (#1098).- Khắc phục lỗi
IllegalArgumentExceptiontiềm ẩn khi xử lý lỗi trình phát xảy ra trong khi đọc trước một mục khác trong danh sách phát (#1483).
- Thêm
- Bộ chuyển đổi:
- Thêm
audioConversionProcessvàvideoConversionProcessvàoExportResultđể cho biết cách tạo bản nhạc tương ứng trong tệp đầu ra. - Nới lỏng các bước kiểm tra cấp độ H.264 khi tối ưu hoá việc cắt bớt.
- Thêm tính năng hỗ trợ thay đổi giữa nội dung nghe nhìn đầu vào SDR và HDR trong một trình tự.
- Thêm tính năng hỗ trợ hiệu ứng âm thanh ở cấp độ bản sáng tác.
- Thêm tính năng hỗ trợ chuyển mã hình ảnh Ultra HDR thành video HDR.
- Khắc phục vấn đề trong đó
DefaultAudioMixerkhông xuất ra đúng số byte sau khi được đặt lại và sử dụng lại. - Khắc phục lỗi bộ giải mã khiến số lượng kênh âm thanh bị giới hạn ở âm thanh nổi khi xử lý đầu vào PCM.
- Khi chọn bản âm thanh trong
ExoPlayerAssetLoader, hãy bỏ qua các quy tắc ràng buộc về số lượng kênh âm thanh vì các quy tắc này chỉ áp dụng cho việc phát. - Thay thế giao diện
androidx.media3.transformer.Muxerbằngandroidx.media3.muxer.Muxervà xoáandroidx.media3.transformer.Muxer. - Khắc phục lỗi tải hình ảnh HEIC từ lược đồ URI nội dung. (#1373).
- Điều chỉnh thời lượng bản âm thanh trong
AudioGraphInputđể cải thiện khả năng đồng bộ hoá âm thanh và hình ảnh. - Xoá trường
ExportResult.processedInputs. Nếu bạn sử dụng trường này để cung cấp thông tin chi tiết về bộ mã hoá và giải mã, hãy sử dụngDefaultDecoderFactory.listener. Trong trường hợp có ngoại lệ về bộ mã hoá và giải mã, thông tin chi tiết về bộ mã hoá và giải mã sẽ có trongExportException.codecInfo.
- Thêm
- Công cụ trích xuất:
- MPEG-TS: Triển khai thay đổi để đảm bảo khung hình cuối cùng được kết xuất bằng cách chuyển đơn vị truy cập cuối cùng của một luồng đến hàng đợi mẫu (#7909). Kết hợp các bản sửa lỗi để giải quyết những vấn đề phát sinh trong luồng HLS chỉ có khung hình I(#1150) và luồng HLS H.262 (#1126).
- MP3: Ưu tiên kích thước dữ liệu từ khung
Infohơn kích thước do luồng cơ bản báo cáo (ví dụ: kích thước tệp hoặc tiêu đề HTTPContent-Length). Việc này giúp loại trừ dữ liệu đoạn giới thiệu không thể phát (ví dụ: ảnh bìa đĩa nhạc) khỏi các phép tính tìm kiếm tốc độ bit không đổi, giúp việc tìm kiếm chính xác hơn (#1376). - MP3: Sử dụng số lượng khung hình và dữ liệu khác trong khung hình
Info(nếu có) để tính tốc độ bit trung bình cho việc tua tốc độ bit không đổi, thay vì ngoại suy từ tốc độ bit của khung hình sau khung hìnhInfo(có thể nhỏ một cách giả tạo, ví dụ: khung hìnhPCUT(#1376). - Khắc phục lỗi trích xuất định dạng âm thanh PCM trong vùng chứa AVI.
- Âm thanh:
- Sửa các thuộc tính mã hoá DTS:X Profile 2 để phát qua tính năng truyền âm thanh (#1299).
- Đối với chế độ phát giảm tải, hãy đặt lại trường theo dõi để hoàn tất luồng trong
DefaultAudioSinktrước khi gọiAudioTrack.stop()đểAudioTrack.StreamEventCallback#onPresentationEndedxác định chính xác thời điểm tất cả dữ liệu đang chờ xử lý đã được phát. - Sửa lỗi trong
SilenceSkippingAudioProcessor, trong đó quá trình chuyển đổi giữa các định dạng âm thanh (ví dụ: âm thanh nổi sang đơn âm) có thể khiến bộ xử lý gửi một ngoại lệ (#1352). - Triển khai
MediaCodecAudioRenderer.getDurationToProgressUs()để ExoPlayer tự động lên lịch cho vòng lặp công việc chính khi MediaCodecAudioRenderer có thể tiến hành.
- Video:
- Khắc phục vấn đề
Listener.onRenderedFirstFrame()đến quá sớm khi chuyển đổi nền tảng giữa quá trình phát. - Sửa logic bộ giải mã dự phòng cho Dolby Vision để sử dụng bộ giải mã AV1 tương thích nếu cần (#1389).
- Khắc phục ngoại lệ về bộ mã hoá và giải mã có thể do việc bật trình kết xuất video trong khi phát.
- Khắc phục vấn đề
- Văn bản:
- Khắc phục vấn đề phụ đề bắt đầu trước vị trí tua bị bỏ qua. Vấn đề này chỉ xuất hiện trong Media3 1.4.0-alpha01.
- Thay đổi hành vi phân tích cú pháp phụ đề mặc định để hành vi này diễn ra trong quá trình trích xuất thay vì trong quá trình kết xuất (xem sơ đồ cấu trúc của ExoPlayer để biết sự khác biệt giữa quá trình trích xuất và kết xuất).
- Bạn có thể ghi đè thay đổi này bằng cách gọi cả
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)vàTextRenderer.experimentalSetLegacyDecodingEnabled(true). Hãy xem tài liệu về tuỳ chỉnh để biết cách đưa các thành phần này vào một thực thểExoPlayer. Các phương thức này (và tất cả tính năng hỗ trợ giải mã phụ đề cũ) sẽ bị xoá trong bản phát hành sau này. - Các ứng dụng có cách triển khai
SubtitleDecodertuỳ chỉnh cần cập nhật để triển khaiSubtitleParser(vàSubtitleParser.Factorythay vìSubtitleDecoderFactory).
- Bạn có thể ghi đè thay đổi này bằng cách gọi cả
- PGS: Sửa lỗi giải mã độ dài chạy để phân giải
0dưới dạng chỉ mục màu, thay vì giá trị màu cố định (#1367). - CEA-708: Bỏ qua giá trị
rowLock. Thông số kỹ thuật CEA-708-E S-2023 nêu rõ rằngrowLockvàcolumnLockđều được giả định là đúng, bất kể các giá trị có trong luồng (columnLockkhông được hỗ trợ, vì vậy, giá trị này được giả định là luôn sai).- Nội dung này ban đầu có trong ghi chú phát hành
1.3.0-alpha01, nhưng thay đổi này đã vô tình bị huỷ bỏ trước khi phát hành1.3.0-rc01. Vấn đề này hiện đã được khắc phục, nên thay đổi này lại xuất hiện.
- Nội dung này ban đầu có trong ghi chú phát hành
- CEA-708: Tránh thêm dòng mới trùng lặp bằng cách xử lý đơn giản của ExoPlayer đối với lệnh "set pen location" (#1315).
- Khắc phục lỗi
IllegalArgumentExceptiontừLegacySubtitleUtilkhi mẫu phụ đề WebVTT không chứa chú thích, ví dụ: dưới dạng một phần của luồng DASH (#1516).
- Siêu dữ liệu:
- Khắc phục việc liên kết MP4 với thẻ sắp xếp ID3. Trước đây, các thẻ MP4 "sắp xếp đĩa nhạc" (
soal), "sắp xếp nghệ sĩ" (soar) và "sắp xếp nghệ sĩ của đĩa nhạc" (soaa) được liên kết không chính xác với các thẻ ID3TSO2,TSOAvàTSOP(#1302). - Khắc phục lỗi đọc thẻ số
gnre(thể loại) vàtmpo(nhịp độ) của MP4 (/iTunes) khi giá trị dài hơn một byte. - Truyền khung ID3
TCONđếnMediaMetadata.genre(#1305).
- Khắc phục việc liên kết MP4 với thẻ sắp xếp ID3. Trước đây, các thẻ MP4 "sắp xếp đĩa nhạc" (
- Hình ảnh:
- Thêm tính năng hỗ trợ cho lưới hình thu nhỏ DASH không phải hình vuông (#1300).
- Thêm tính năng hỗ trợ AVIF cho API 34 trở lên.
- Cho phép
nulllàm tham số choExoPlayer.setImageOutput()để xoáImageOutputđã đặt trước đó.
- DataSource:
- Triển khai tính năng hỗ trợ cho URI tài nguyên thô
android.resource://package/id, trong đópackagekhác với gói của ứng dụng hiện tại. Trước đây, cách này chưa được ghi nhận là có hiệu quả, nhưng đây là cách hiệu quả hơn để truy cập vào tài nguyên trong một gói khác so với việc truy cập theo tên. - Kiểm tra ngay để đảm bảo
urlkhông rỗng trong hàm khởi tạoDataSpec. Tham số này đã được chú thích là không rỗng. - Cho phép
ByteArrayDataSourcephân giải URI thành mảng byte trongopen(), thay vì được cố định giá trị trong mã khi tạo (#1405).
- Triển khai tính năng hỗ trợ cho URI tài nguyên thô
- DRM (Quản lý bản quyền nội dung số):
- Cho phép đặt
LoadErrorHandlingPolicytrênDefaultDrmSessionManagerProvider(#1271).
- Cho phép đặt
- Hiệu ứng:
- Hỗ trợ nhiều thay đổi về tốc độ trong cùng một
EditedMediaItemhoặcCompositiontrongSpeedChangeEffect. - Hỗ trợ đầu ra HLG và PQ từ đầu vào bitmap Ultra HDR.
- Thêm tính năng hỗ trợ cho EGL_GL_COLORSPACE_BT2020_HLG_EXT, giúp cải thiện đầu ra của nền tảng HLG trong ExoPlayer.setVideoEffect và SurfaceView gỡ lỗi của Transformer.
- Cập nhật cách triển khai ma trận Lớp phủ để đảm bảo nhất quán với tài liệu bằng cách lật các giá trị x và y được áp dụng trong
setOverlayFrameAnchor(). Nếu sử dụngOverlaySettings.Builder.setOverlayFrameAnchor(), hãy lật giá trị x và y bằng cách nhân các giá trị đó với-1. - Sửa lỗi
TimestampWrappergặp sự cố khi dùng vớiExoPlayer#setVideoEffects(#821). - Thay đổi không gian làm việc màu SDR mặc định từ màu tuyến tính sang video BT 709 SDR điện. Ngoài ra, hãy cung cấp lựa chọn thứ ba để giữ lại không gian màu ban đầu.
- Cho phép xác định thứ tự z không xác định của EditedMediaItemSequences (#1055).
- Duy trì dải độ sáng nhất quán trên nhiều nội dung HDR (sử dụng dải HLG).
- Thêm tính năng hỗ trợ lớp phủ Ultra HDR (bitmap) trên nội dung HDR.
- Cho phép sử dụng hiệu ứng
SeparableConvolutiontrước API 26. - Xoá
OverlaySettings.useHdrkhông dùng đến vì dải động của lớp phủ và khung phải khớp nhau. - Thêm tính năng hỗ trợ HDR cho
TextOverlay. Bạn có thể điều chỉnh độ sáng của lớp phủ văn bản bằngOverlaySettings.Builder.setHdrLuminanceMultiplier().
- Hỗ trợ nhiều thay đổi về tốc độ trong cùng một
- Tiện ích IMA:
- Chuyển API cần thiết để ứng dụng phát luồng quảng cáo DAI lên bản ổn định.
- Thêm
replaceAdTagParameters(Map <String, String>)vàoImaServerSideAdInsertionMediaSource.AdLoaderđể thay thế các tham số thẻ quảng cáo trong thời gian chạy. - Khắc phục lỗi không gọi
VideoAdPlayer.VideoAdPlayerCallback.onError()khi xảy ra lỗi trình phát trong quá trình phát quảng cáo (#1334). - Chuyển IMA SDK lên phiên bản 3.33.0 để khắc phục lỗi
NullPointerExceptionkhi sử dụng URI thẻ quảng cáodata://(#700).
- Phiên:
- Thay đổi giá trị mặc định của
CommandButton.enabledthànhtruevà đảm bảo giá trị này có thể giữ nguyên là false cho bộ điều khiển ngay cả khi lệnh liên kết có sẵn. - Thêm hằng số biểu tượng cho
CommandButtonnên được dùng thay vì tài nguyên biểu tượng tuỳ chỉnh. - Thêm
MediaSessionService.isPlaybackOngoing()để cho phép ứng dụng truy vấn xem có cần dừng dịch vụ trongonTaskRemoved()hay không (#1219). - Thêm
MediaSessionService.pauseAllPlayersAndStopSelf()để tạm dừng phát tất cả các phiên một cách thuận tiện và gọistopSelf()để chấm dứt vòng đời củaMediaSessionService. - Ghi đè
MediaSessionService.onTaskRemoved(Intent)để cung cấp một phương thức triển khai mặc định an toàn giúp dịch vụ tiếp tục chạy ở nền trước nếu quá trình phát đang diễn ra hoặc dừng dịch vụ nếu không. - Ẩn thanh tua trong thông báo nội dung nghe nhìn cho sự kiện phát trực tiếp bằng cách không đặt thời lượng vào siêu dữ liệu phiên của nền tảng (#1256).
- Điều chỉnh việc chuyển đổi
MediaMetadatathànhMediaDescriptionCompatđể sử dụng cùng một thứ tự và logic ưu tiên khi chọn các thuộc tính siêu dữ liệu như trong media1. - Thêm
MediaSession.sendError()cho phép gửi lỗi không nghiêm trọng đến bộ điều khiển Media3. Khi sử dụng trình điều khiển thông báo (xemMediaSession.getMediaNotificationControllerInfo()), lỗi tuỳ chỉnh sẽ được dùng để cập nhậtPlaybackStatecủa phiên nền tảng thành trạng thái lỗi kèm theo thông tin lỗi đã cho (#543). - Thêm
MediaSession.Callback.onPlayerInteractionFinished()để thông báo cho các phiên khi một loạt hoạt động tương tác của người chơi từ một tay điều khiển cụ thể kết thúc. - Thêm
SessionErrorvà sử dụng trongSessionResultvàLibraryResultthay vì mã lỗi để cung cấp thêm thông tin về lỗi và cách giải quyết lỗi nếu có thể. - Phát hành mã cho ứng dụng kiểm thử trình điều khiển media3 có thể dùng để kiểm thử hoạt động tương tác với các ứng dụng phát hành phiên phát nội dung nghe nhìn.
- Truyền các phần bổ sung được chuyển đến
MediaSession[Builder].setSessionExtras()của media3 sangPlaybackStateCompat.getExtras()của bộ điều khiển media1. - Ánh xạ lỗi nghiêm trọng và không nghiêm trọng đến và từ phiên nền tảng.
PlaybackExceptionđược liên kết với trạng thái lỗi nghiêm trọng củaPlaybackStateCompat.SessionErrorđược gửi đến trình điều khiển thông báo nội dung nghe nhìn cóMediaSession.sendError(ControllerInfo, SessionError)được liên kết với một lỗi không nghiêm trọng trongPlaybackStateCompat, tức là mã lỗi và thông báo được đặt nhưng trạng thái của phiên nền tảng vẫn khác vớiSTATE_ERROR. - Cho phép đặt hoạt động của phiên cho mỗi bộ điều khiển để ghi đè hoạt động của phiên chung. Bạn có thể xác định hoạt động của phiên cho một bộ điều khiển tại thời điểm kết nối bằng cách tạo
ConnectionResultbằngAcceptedResultBuilder.setSessionActivivty(PendingIntent). Sau khi kết nối, bạn có thể cập nhật hoạt động của phiên bằngMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - Cải thiện khả năng sao chép lỗi của các lệnh gọi đến
MediaLibrarySession.Callback. Giờ đây, bạn có thể định cấu hình tính năng sao chép lỗi bằng cách sử dụngMediaLibrarySession.Builder.setLibraryErrorReplicationMode()để chọn loại lỗi hoặc chọn không sử dụng tính năng sao chép lỗi (được bật theo mặc định).
- Thay đổi giá trị mặc định của
- Giao diện người dùng:
- Thêm tính năng hỗ trợ hiển thị hình ảnh cho
PlayerViewkhi kết nối vớiExoPlayer(#1144). - Thêm chế độ tuỳ chỉnh cho nhiều biểu tượng trong
PlayerControlViewthông qua các thuộc tính xml để cho phép nhiều đối tượng có thể vẽ trên mỗi thực thểPlayerView, thay vì ghi đè chung (#1200). - Khắc phục lỗi nền tảng khiến video bị kéo giãn/cắt khi sử dụng
SurfaceViewbên trongAndroidViewcủa Compose trên API 34 (#1237).
- Thêm tính năng hỗ trợ hiển thị hình ảnh cho
- Nội dung đã tải xuống:
- Đảm bảo rằng
DownloadHelperkhông làm rò rỉ các thực thểRendererchưa được phát hành, điều này có thể dẫn đến việc ứng dụng gặp sự cố vớiIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224).
- Đảm bảo rằng
- Tiện ích Cronet:
- Khắc phục
SocketTimeoutExceptiontrongCronetDataSource. Trong một số phiên bản của Cronet, yêu cầu do lệnh gọi lại cung cấp không phải lúc nào cũng giống nhau. Điều này dẫn đến việc lệnh gọi lại không hoàn tất và yêu cầu hết thời gian chờ (https://issuetracker.google.com/328442628).
- Khắc phục
- Tiện ích HLS:
- Khắc phục lỗi trong đó các mẫu EMSG đang chờ một điểm gián đoạn được uỷ quyền trong
HlsSampleStreamWrappervới độ lệch không chính xác gây raIndexOutOfBoundsExceptionhoặcIllegalArgumentException(#1002). - Khắc phục lỗi danh sách phát không chính liên tục tải lại cho các luồng LL-HLS (#1240).
- Sửa lỗi khi bật CMCD cho HLS có các phân đoạn khởi chạy
dẫn đến
Source ErrorvàIllegalArgumentException. - Khắc phục lỗi danh sách phát không phải danh sách phát chính không được làm mới trong quá trình phát trực tiếp (#1240).
- Khắc phục lỗi khi bật CMCD cho sự kiện phát trực tiếp HLS gây ra
ArrayIndexOutOfBoundsException(#1395).
- Khắc phục lỗi trong đó các mẫu EMSG đang chờ một điểm gián đoạn được uỷ quyền trong
- Tiện ích DASH:
- Tiện ích truyền (cast):
- Khắc phục lỗi chuyển đổi tiêu đề đĩa nhạc của
MediaQueueItemthành nghệ sĩ trong mục nội dung nghe nhìn Media3 (#1255).
- Khắc phục lỗi chuyển đổi tiêu đề đĩa nhạc của
- Tiện ích kiểm thử:
- Triển khai
onInit()vàonRelease()trongFakeRenderer. - Thay đổi các phương thức
TestPlayerRunHelper.runUntil()/playUntil()để không thực hiện được đối với các lỗi không nghiêm trọng (ví dụ: những lỗi được báo cáo choAnalyticsListener.onVideoCodecError()). Sử dụng chuỗi phương thứcTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()mới để tắt hành vi này.
- Triển khai
- Ứng dụng minh hoạ:
- Sử dụng
DefaultPreloadManagertrong ứng dụng minh hoạ dạng ngắn. - Cho phép đặt chế độ lặp lại bằng đối số
Intenttừ dòng lệnh (#1266). - Sử dụng
HttpEngineDataSourcelàmHttpDataSourcekhi thiết bị hỗ trợ.
- Sử dụng
- Xoá các biểu tượng không dùng nữa:
- Xoá
CronetDataSourceFactory. Thay vào đó, hãy sử dụngCronetDataSource.Factory. - Xoá một số hàm khởi tạo
DataSpec. Thay vào đó, hãy sử dụngDataSpec.Builder. - Xoá phương thức
setContentTypePredicate(Predicate)khỏiDefaultHttpDataSource,OkHttpDataSourcevàCronetDataSource. Thay vào đó, hãy sử dụng phương thức tương đương trên mỗiXXXDataSource.Factory. - Xoá các hàm khởi tạo
OkHttpDataSourcevàOkHttpDataSourceFactory. Thay vào đó, hãy sử dụngOkHttpDataSource.Factory. - Xoá
PlayerMessage.setHandler(Handler). Thay vào đó, hãy sử dụngsetLooper(Looper). - Xoá trường
Timeline.Window.isLive. Hãy sử dụng phương thứcisLive(). - Xoá các hàm khởi tạo
DefaultHttpDataSource. Sử dụngDefaultHttpDataSource.Factory. - Xoá
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Sử dụngDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS. - Xoá
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Thay vào đó, hãy sử dụngMediaCodecInfo.canReuseCodec(Format, Format). - Xoá phương thức
DrmSessionManager.DUMMYvàgetDummyDrmSessionManager(). Thay vào đó, hãy sử dụngDrmSessionManager.DRM_UNSUPPORTED. - Xoá
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format). Thay vào đó, hãy sử dụng các phương thức nạp chồng lấyDecoderReuseEvaluation. - Xoá
RendererSupport.FormatSupportIntDef và các hằng sốFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPE,FORMAT_UNSUPPORTED_TYPE. Thay vào đó, hãy sử dụng IntDef và hằng số tương đương trongandroidx.media3.common.C(ví dụ:C.FORMAT_HANDLED). - Xoá giao diện
Bundleable. Điều này bao gồm cả việc xoá tất cả trường hằng sốBundleable.Creator<Foo> CREATOR. Thay vào đó, phương thức gọi nên sử dụng các phương thứcBundle toBundle()vàstatic Foo fromBundle(Bundle)trên mỗi loại.
- Xoá
Phiên bản 1.4.0-rc01
Ngày 10 tháng 7 năm 2024
Sử dụng phiên bản ổn định 1.4.0.
Phiên bản 1.4.0-beta01
Ngày 26 tháng 6 năm 2024
Sử dụng phiên bản ổn định 1.4.0.
Phiên bản 1.4.0-alpha02
Ngày 7 tháng 6 năm 2024
Sử dụng phiên bản ổn định 1.4.0.
Phiên bản 1.4.0-alpha01
Ngày 17 tháng 4 năm 2024
Sử dụng phiên bản ổn định 1.4.0.
Phiên bản 1.3.0
Phiên bản 1.3.1
Ngày 11 tháng 4 năm 2024
Phát hành androidx.media3:media3-*:1.3.1. Phiên bản 1.3.1 bao gồm các thay đổi sau.
- Thư viện Common:
- Thêm
Format.labelsđể cho phép nhãn đã bản địa hoá hoặc nhãn thay thế khác.
- Thêm
- ExoPlayer:
- Khắc phục vấn đề
PreloadMediaPeriodkhông thể giữ lại các luồng khi được tải trước một lần nữa. - Áp dụng
TrackSelectionResulttương ứng chính xác cho khoảng thời gian phát trong quá trình chọn lại bản nhạc. - Chỉ bắt đầu trình kết xuất được bật sớm sau khi chuyển sang giai đoạn phát khi chuyển đổi giữa các mục nội dung nghe nhìn (#1017).
- Thêm kiểu dữ liệu trả về bị thiếu vào quy tắc
-keepclasseswithmemberscủa proguard choDefaultVideoFrameProcessor.Factory.Builder.build()(#1187).
- Khắc phục vấn đề
- Bộ chuyển đổi:
- Thêm giải pháp cho trường hợp ngoại lệ được gửi do
MediaMuxerkhông hỗ trợ dấu thời gian trình bày âm trước API 30.
- Thêm giải pháp cho trường hợp ngoại lệ được gửi do
- Chọn bản nhạc:
DefaultTrackSelector: Ưu tiên các bản video có tốc độ khung hình "hợp lý" (>=10 khung hình/giây) hơn các bản video có tốc độ khung hình thấp hơn hoặc chưa được đặt. Điều này đảm bảo trình phát chọn bản video "thực" trong MP4 được trích xuất từ ảnh chuyển động có thể chứa hai bản HEVC, trong đó một bản có độ phân giải cao hơn nhưng số khung hình rất nhỏ (#1051).
- Công cụ trích xuất:
- Khắc phục lỗi khoảng đệm không bị bỏ qua khi đọc các đoạn có kích thước lẻ từ tệp WAV (#1117).
- MP3: Điền
Format.averageBitratetừ các khung siêu dữ liệu nhưXINGvàVBRI. - MPEG-TS: Huỷ bỏ thay đổi nhằm đảm bảo khung hình cuối cùng được kết xuất bằng cách chuyển đơn vị truy cập cuối cùng của một luồng đến hàng đợi mẫu (#7909). Điều này là do thay đổi gây ra các vấn đề mới với luồng HLS chỉ có khung hình I (#1150) và luồng HLS H.262 (#1126).
- Âm thanh:
- Cho phép khôi phục trình kết xuất bằng cách tắt tính năng giảm tải nếu không khởi động được bản âm thanh ở chế độ giảm tải.
- Video:
- Thêm giải pháp cho vấn đề về thiết bị trên Galaxy Tab S7 FE, Chromecast có Google TV và Lenovo M10 FHD Plus khiến các luồng H265 60 khung hình/giây bị đánh dấu là không được hỗ trợ
- Thêm giải pháp đảm bảo khung hình đầu tiên luôn được kết xuất trong khi tạo đường hầm, ngay cả khi thiết bị không tự động thực hiện việc này theo yêu cầu của API (#1169). (#966).
- Khắc phục vấn đề trong đó việc xử lý thông tin màu HDR khiến bộ mã hoá và giải mã hoạt động không đúng cách, đồng thời ngăn chặn việc chuyển đổi định dạng thích ứng cho các bản video SDR (#1158).
- Văn bản:
- WebVTT: Ngăn các tín hiệu liên tiếp trực tiếp tạo thêm các thực thể
CuesWithTiminggiả mạo từWebvttParser.parse(#1177).
- WebVTT: Ngăn các tín hiệu liên tiếp trực tiếp tạo thêm các thực thể
- DRM (Quản lý bản quyền nội dung số):
- Giải quyết lỗi
NoSuchMethodErrorcó thể do khungMediaDrmgửi thay vìResourceBusyExceptionhoặcNotProvisionedExceptiontrên một số thiết bị Android 14 (#1145).
- Giải quyết lỗi
- Hiệu ứng:
- Cải thiện việc ánh xạ tông màu từ PQ sang SDR bằng cách chuyển đổi không gian màu sắc.
- Phiên:
- Giao diện người dùng:
- Dự phòng để thêm tên ngôn ngữ của bản âm thanh nếu
Localekhông thể xác định tên hiển thị (#988).
- Dự phòng để thêm tên ngôn ngữ của bản âm thanh nếu
- Tiện ích DASH:
- Điền tất cả phần tử
Labeltừ tệp kê khai vàoFormat.labels(#1054).
- Điền tất cả phần tử
- Tiện ích RTSP:
- Bỏ qua các giá trị thông tin phiên trống (thẻ i) trong quá trình phân tích cú pháp SDP (#1087).
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Tắt tiện ích MIDI dưới dạng phần phụ thuộc cục bộ theo mặc định vì tiện ích này yêu cầu phải định cấu hình thêm một kho lưu trữ Maven. Người dùng cần mô-đun này từ một phần phụ thuộc cục bộ có thể bật lại mô-đun này.
Phiên bản 1.3.0
Ngày 6 tháng 3 năm 2024
Phát hành androidx.media3:media3-*:1.3.0. Phiên bản 1.3.0 bao gồm các thay đổi sau.
- Thư viện Common:
- Triển khai tính năng hỗ trợ cho URI tài nguyên thô
android.resource://package/[type/]name, trong đópackagekhác với gói của ứng dụng hiện tại. Điều này luôn được ghi nhận là hoạt động, nhưng chưa được triển khai chính xác cho đến nay. - Chuẩn hoá các loại MIME do mã ứng dụng đặt hoặc đọc từ nội dung nghe nhìn để hoàn toàn ở dạng chữ thường.
- Xác định quảng cáo bằng
MediaItemđầy đủ thay vì mộtUritrongAdPlaybackState. - Tăng
minSdklên 19 (Android KitKat). Điều này phù hợp với tất cả các thư viện AndroidX khác và là điều kiện bắt buộc để chúng tôi nâng cấp lên phiên bản mới nhất của các phần phụ thuộc AndroidX. - Điền cả
artworkUrivàartworkDatavàoMediaMetadata.Builder.populate(MediaMetadata)khi ít nhất một trong hai thuộc tính này không rỗng (#964).
- Triển khai tính năng hỗ trợ cho URI tài nguyên thô
- ExoPlayer:
- Thêm
PreloadMediaSourcevàPreloadMediaPeriodđể cho phép ứng dụng tải trước một nguồn nội dung nghe nhìn ở một vị trí bắt đầu cụ thể trước khi phát.PreloadMediaSourceđảm nhận việc chuẩn bị nguồn nội dung nghe nhìn để nhậnTimeline, chuẩn bị và lưu vào bộ nhớ đệm khoảng thời gian tại vị trí bắt đầu đã cho, chọn bản nhạc và tải dữ liệu nghe nhìn cho khoảng thời gian đó. Ứng dụng kiểm soát tiến trình tải trước bằng cách triển khaiPreloadMediaSource.PreloadControlvà đặt nguồn tải trước cho trình phát để phát. - Thêm
ExoPlayer.setImageOutputcho phép ứng dụng đặtImageRenderer.ImageOutput. DefaultRenderersFactoryhiện cung cấpImageRenderercho trình phát theo mặc định vớiImageOutputvàImageDecoder.Factory.DEFAULTrỗng.- Phát ra sự kiện
Player.Listener.onPositionDiscontinuitykhi bỏ qua khoảng lặng (#765). - Thêm tính năng hỗ trợ thử nghiệm để phân tích cú pháp phụ đề trong quá trình trích xuất. Bạn có thể bật tính năng này bằng cách sử dụng
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). - Hỗ trợ các nguồn nội dung nghe nhìn thích ứng bằng
PreloadMediaSource. - Triển khai
HttpEngineDataSource, mộtHttpDataSourcebằng cách sử dụng API HttpEngine. - Ngăn chặn việc tạo lớp con
CompositeSequenceableLoader. Thành phần này trước đây có thể mở rộng nhưng chưa từng được phân lớp con trong thư viện. Bạn có thể tuỳ chỉnh bằng cách gói một thực thể bằng mẫu trình trang trí và triển khaiCompositeSequenceableLoaderFactorytuỳ chỉnh. - Khắc phục vấn đề trong đó việc lặp lại cùng một thời gian khiến siêu dữ liệu của mục này bị xoá (#1007).
- Đổi tên các phương thức
experimentalSetSubtitleParserFactorytrênBundledChunkExtractor.FactoryvàDefaultHlsExtractorFactorythànhsetSubtitleParserFactoryvà không cho phép truyềnnull. Sử dụng các phương thứcexperimentalParseSubtitlesDuringExtraction(boolean)mới để kiểm soát hành vi phân tích cú pháp. - Thêm tính năng hỗ trợ để tuỳ chỉnh
SubtitleParser.Factoryđược dùng trong quá trình trích xuất. Bạn có thể thực hiện việc này bằngMediaSource.Factory.setSubtitleParserFactory(). - Thêm tiền tố nguồn vào tất cả các trường
Format.idđược tạo từMergingMediaSource. Điều này giúp xác định nguồn nào đã tạo raFormat(#883). - Sửa biểu thức chính quy dùng để xác thực tên khoá Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD) tuỳ chỉnh bằng cách sửa đổi biểu thức chính quy đó để chỉ kiểm tra dấu gạch nối (#1028).
- Ngừng mã hoá kép các tham số truy vấn CMCD (#1075).
- Thêm
- Bộ chuyển đổi:
- Thêm tính năng hỗ trợ làm phẳng video chuyển động chậm SEF H.265/HEVC.
- Tăng tốc độ chuyển đổi, đặc biệt là đối với các nội dung chỉnh sửa "xoá video".
- Thêm API để đảm bảo tệp đầu ra bắt đầu trên một khung hình video. Điều này có thể giúp kết quả của thao tác cắt tương thích hơn với các cách triển khai trình phát không hiển thị khung video đầu tiên cho đến khi có dấu thời gian trình bày (#829).
- Thêm tính năng hỗ trợ tối ưu hoá các thao tác cắt MP4 của một thành phần.
- Thêm tính năng hỗ trợ để đảm bảo khung video có dấu thời gian đầu tiên trong tệp đầu ra. Khắc phục lỗi tệp đầu ra bắt đầu bằng khung hình đen trên trình phát dựa trên iOS (#829).
- Chọn bản nhạc:
- Thêm
DefaultTrackSelector.selectImageTrackđể bật tính năng chọn bản nhạc hình ảnh. - Thêm
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledđể xác định xem có chọn một bản nhạc hình ảnh hay không nếu có cả bản nhạc hình ảnh và bản nhạc video. Giá trị mặc định làfalse, tức là ưu tiên chọn một bản video.
- Thêm
- Công cụ trích xuất:
- Thêm tính năng phân tích cú pháp AV1C bổ sung vào trình trích xuất MP4 để truy xuất các giá trị
ColorInfo.colorSpace,ColorInfo.colorTransfervàColorInfo.colorRange(#692). - MP3: Sử dụng tính năng tua theo tốc độ bit không đổi (CBR) cho các tệp có tiêu đề
Info(tương đương với tiêu đềXingcủa CBR). Trước đây, chúng tôi đã sử dụng bảng tua từ tiêu đềInfo, nhưng điều này dẫn đến việc tua kém chính xác hơn so với việc chúng tôi bỏ qua bảng này và giả định tệp là CBR. - MPEG2-TS: Thêm tính năng hỗ trợ DTS, DTS-LBR và DTS:X Profile2 (#275).
- Trích xuất các loại âm thanh từ chỉ số mô tả TS và liên kết các loại âm thanh đó với cờ vai trò, cho phép người dùng đưa ra lựa chọn sáng suốt hơn về bản âm thanh (#973).
- Thêm tính năng phân tích cú pháp AV1C bổ sung vào trình trích xuất MP4 để truy xuất các giá trị
- Âm thanh:
- Video:
- Thay đổi hàm khởi tạo
MediaCodecVideoRendererlấy đối sốVideoFrameProcessor.Factoryvà thay thế bằng hàm khởi tạo lấy đối sốVideoSinkProvider. Các ứng dụng muốn chèn mộtVideoFrameProcessor.Factorytuỳ chỉnh có thể tạo thực thể cho mộtCompositingVideoSinkProvidersử dụngVideoFrameProcessor.Factorytuỳ chỉnh và truyền trình cung cấp bồn lưu trữ video đếnMediaCodecVideoRenderer.
- Thay đổi hàm khởi tạo
- Văn bản:
- Khắc phục lỗi chuyển đổi tuần tự các tín hiệu bitmap để giải quyết lỗi
Tried to marshall a Parcel that contained Binder objectskhi sử dụngDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: Bỏ qua giá trị
rowLock. Thông số kỹ thuật CEA-708-E S-2023 nêu rõ rằngrowLockvàcolumnLockđều được giả định là đúng, bất kể các giá trị có trong luồng (columnLockkhông được hỗ trợ, vì vậy, giá trị này được giả định là luôn sai).
- Khắc phục lỗi chuyển đổi tuần tự các tín hiệu bitmap để giải quyết lỗi
- Hình ảnh:
- Thêm tính năng hỗ trợ hình thu nhỏ DASH. Hình ảnh lưới được cắt và hình thu nhỏ riêng lẻ được cung cấp cho
ImageOutputgần với thời gian trình bày.
- Thêm tính năng hỗ trợ hình thu nhỏ DASH. Hình ảnh lưới được cắt và hình thu nhỏ riêng lẻ được cung cấp cho
- DRM (Quản lý bản quyền nội dung số):
- Phát ngay các mẫu không mã hoá "clear lead" trong nội dung DRM theo mặc định, ngay cả khi các khoá cho các mẫu được mã hoá sau đó chưa sẵn sàng. Điều này có thể dẫn đến tình trạng tạm dừng giữa chừng nếu các khoá vẫn chưa sẵn sàng khi vị trí phát đến các mẫu đã mã hoá (nhưng trước đó, quá trình phát sẽ không bắt đầu tại thời điểm này). Bạn có thể tắt hành vi này bằng
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyhoặcDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- Tiện ích IMA:
- Khắc phục vấn đề không thể phát quảng cáo DASH và HLS không có đuôi tệp thích hợp.
- Phát ngay các mẫu không mã hoá "clear lead" trong nội dung DRM theo mặc định, ngay cả khi các khoá cho các mẫu được mã hoá sau đó chưa sẵn sàng. Điều này có thể dẫn đến tình trạng tạm dừng giữa chừng nếu các khoá vẫn chưa sẵn sàng khi vị trí phát đến các mẫu đã mã hoá (nhưng trước đó, quá trình phát sẽ không bắt đầu tại thời điểm này). Bạn có thể tắt hành vi này bằng
- Phiên:
- Tắt tính năng phát hiện thao tác nhấp đúp cho ứng dụng truyền hình (#962).
- Khắc phục vấn đề
MediaItem.RequestMetadatachỉ có các phần bổ sung không rỗng không được truyền giữa bộ điều khiển nội dung nghe nhìn và phiên. - Thêm hàm khởi tạo vào
MediaLibrarySession.Builderchỉ lấyContextthay vìMediaLibraryService.
- Tiện ích HLS:
- Giảm
HlsMediaPeriodxuống chế độ hiển thị riêng tư theo gói. Không nên trực tiếp phụ thuộc vào loại này từ bên ngoài gói HLS. - Giải quyết các lượt tìm kiếm đến đầu phân đoạn một cách hiệu quả hơn (#1031).
- Giảm
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Bộ giải mã MIDI: Bỏ qua thông báo sự kiện SysEx (#710).
- Tiện ích kiểm thử:
- Đừng tạm dừng phát trong
TestPlayerRunHelper.playUntilPosition. Thử nghiệm giữ cho quá trình phát ở trạng thái đang phát, nhưng tạm ngưng tiến trình cho đến khi thử nghiệm có thể thêm câu nhận định và các hành động khác.
- Đừng tạm dừng phát trong
- Ứng dụng minh hoạ:
- Thêm mô-đun minh hoạ dạng ngắn để minh hoạ cách sử dụng
PreloadMediaSourcevới trường hợp sử dụng nội dung dạng ngắn.
- Thêm mô-đun minh hoạ dạng ngắn để minh hoạ cách sử dụng
Phiên bản 1.3.0-rc01
Ngày 22 tháng 2 năm 2024
Sử dụng phiên bản ổn định 1.3.0.
Phiên bản 1.3.0-beta01
Ngày 7 tháng 2 năm 2024
Sử dụng phiên bản ổn định 1.3.0.
Phiên bản 1.3.0-alpha01
Ngày 15 tháng 1 năm 2024
Sử dụng phiên bản ổn định 1.3.0.
Phiên bản 1.2.0
Phiên bản 1.2.1
Ngày 9 tháng 1 năm 2024
- ExoPlayer:
- Khắc phục vấn đề khi thao tác tua thủ công ra ngoài phạm vi
LiveConfiguration.min/maxOffsetliên tục điều chỉnh độ lệch vềmin/maxOffset. - Khắc phục vấn đề bố cục kênh OPUS và VORBIS không chính xác đối với 3, 5, 6, 7 và 8 kênh (#8396).
- Khắc phục lỗi mà việc chọn nội dung đa phương tiện sau khi tua về 0 trong sự kiện phát trực tiếp khiến sự kiện bắt đầu không đúng cách ở vị trí mặc định (#9347).
- Khắc phục vấn đề trong đó các thực thể mới của
CmcdData.Factorynhận được giá trị âm chobufferedDurationUstừ các nguồn phân đoạn, dẫn đếnIllegalArgumentException(#888).
- Khắc phục vấn đề khi thao tác tua thủ công ra ngoài phạm vi
- Bộ chuyển đổi:
- Khắc phục vấn đề trong đó bộ mã hoá sẽ gửi thông báo lỗi tại thời điểm định cấu hình do đặt tốc độ hoạt động cao.
- Công cụ trích xuất:
- Đánh dấu các bản nhạc HEVC phụ (không thể phát) trong ảnh chuyển động JPEG là
ROLE_FLAG_ALTERNATEđể ngăn các bản nhạc này tự động được chọn để phát lại do có độ phân giải cao hơn. - Khắc phục lỗi phát hiện khung hình chính không chính xác cho luồng TS H264 (#864).
- Khắc phục lỗi ước tính thời lượng của các luồng TS dài hơn 47.721 giây (#855).
- Đánh dấu các bản nhạc HEVC phụ (không thể phát) trong ảnh chuyển động JPEG là
- Âm thanh:
- Khắc phục lỗi xử lý EOS cho
SilenceSkippingAudioProcessorkhi được gọi nhiều lần (#712).
- Khắc phục lỗi xử lý EOS cho
- Video:
- Thêm giải pháp cho vấn đề về thiết bị trên Galaxy Tab S7 FE, Chromecast có Google TV và Lenovo M10 FHD Plus khiến các luồng AVC 60 khung hình/giây bị đánh dấu là không được hỗ trợ (#693).
- Siêu dữ liệu:
- Khắc phục lỗi
MediaMetadatachỉ được điền từ các bình luận Vorbis có khoá viết hoa (#876). - Bắt
OutOfMemoryErrorkhi phân tích cú pháp các khung ID3 rất lớn, nghĩa là quá trình phát có thể tiếp tục mà không cần thông tin thẻ thay vì không phát được hoàn toàn.
- Khắc phục lỗi
- DRM (Quản lý bản quyền nội dung số):
- Mở rộng giải pháp cho URL giấy phép
https://default.urlClearKey giả mạo cho API 33 trở lên (trước đây, giải pháp này chỉ áp dụng chính xác cho API 33) (#837). - Khắc phục lỗi
ERROR_DRM_SESSION_NOT_OPENEDkhi chuyển từ nội dung đã mã hoá sang nội dung không mã hoá mà không có nền tảng nào được đính kèm vào trình phát. Lỗi này là do sử dụng không đúng bộ giải mã bảo mật để phát nội dung rõ ràng.
- Mở rộng giải pháp cho URL giấy phép
- Phiên:
- Đặt các khoá và giá trị tuỳ chỉnh trong
MediaMetadataCompatthànhMediaMetadata.extrasvàMediaMetadata.extrasthànhMediaMetadataCompat(#756, #802). - Khắc phục lỗi phát
notifyChildrenChangedcho bộ điều khiển cũ (#644). - Khắc phục lỗi trong đó việc đặt thời gian âm cho bộ hẹn giờ
setWhenbị tắt của thông báo gây ra sự cố trên một số thiết bị (#903). - Sửa lỗi
IllegalStateExceptionkhi trình điều khiển thông báo nội dung nghe nhìn chưa hoàn tất kết nối khi có yêu cầu cập nhật thông báo đầu tiên (#917).
- Đặt các khoá và giá trị tuỳ chỉnh trong
- Giao diện người dùng:
- Tiện ích DASH:
- Phân tích cú pháp "f800" dưới dạng số kênh là 5 cho Dolby trong tệp kê khai DASH (#688).
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Tiện ích truyền (cast):
- Vệ sinh quá trình tạo
Timelineđể không làm ứng dụng gặp sự cố khi không tải được nội dung nghe nhìn trên thiết bị truyền (#708).
- Vệ sinh quá trình tạo
Phiên bản 1.2.0
Ngày 15 tháng 11 năm 2023
- Thư viện Common:
- Thêm tham số
@Nullable Throwablevào các phương thức trong giao diệnLog.Logger. Tham sốmessagecho các phương thức này không còn chứa bất kỳ thông tin nào vềThrowableđược truyền đến các phương thứcLog.{d,i,w,e}(), vì vậy, các phương thức triển khai sẽ cần phải thêm thông tin này theo cách thủ công nếu muốn (có thể sử dụngLogger.appendThrowableString(String, Throwable)). - Khắc phục vấn đề về khả năng tương thích của Kotlin, trong đó các tham số kiểu chung có thể rỗng và các kiểu phần tử mảng có thể rỗng không được phát hiện là có thể rỗng. Ví dụ:
các tham số phương thức
TrackSelectorResultvàSimpleDecoder(#6792). - Thay đổi giao diện người dùng mặc định và hành vi thông báo trong
Util.shouldShowPlayButtonđể hiển thị nút "phát" trong khi quá trình phát tạm thời bị chặn (ví dụ: do mất quyền phát âm thanh tạm thời). Bạn có thể duy trì hành vi cũ bằng cách sử dụngPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)hoặcMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - Nâng cấp
androidx.annotation:annotation-experimentallên1.3.1để khắc phục https://issuetracker.google.com/251172715. - Di chuyển
ExoPlayer.setAudioAttributessang giao diệnPlayer.
- Thêm tham số
- ExoPlayer:
- Khắc phục vấn đề tua trong luồng AC4 do không xác định chính xác các mẫu chỉ giải mã (#11000).
- Thêm tính năng chặn phát trên các thiết bị đầu ra âm thanh không phù hợp (ví dụ: loa tích hợp trên thiết bị Wear OS) khi tính năng này được bật thông qua
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. Lý do chặn phát sẽ được cập nhật thànhPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTnếu bạn cố gắng phát khi không có đầu ra âm thanh phù hợp hoặc nếu tất cả đầu ra phù hợp đều bị ngắt kết nối trong khi phát. Lý do chặn sẽ bị xoá khi có một đầu ra phù hợp được kết nối. - Thêm
MediaSource.canUpdateMediaItemvàMediaSource.updateMediaItemđể chấp nhận nội dung cập nhậtMediaItemsau khi tạo thông quaPlayer.replaceMediaItem(s). - Cho phép cập nhật
MediaItemcho tất cả các lớpMediaSourcedo thư viện cung cấp thông quaPlayer.replaceMediaItem(s)(#33, #9978). - Đổi tên
MimeTypes.TEXT_EXOPLAYER_CUESthànhMimeTypes.APPLICATION_MEDIA3_CUES. - Thêm
PngExtractorđể gửi và đọc toàn bộ tệp PNG vàoTrackOutputdưới dạng một mẫu. - Cải thiện phương thức
SequenceableLoader.continueLoading(long)trong giao diệnSequenceableLoaderthànhSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfochứa các tham số bổ sung, bao gồmplaybackSpeedvàlastRebufferRealtimeMsngoàiplaybackPositionUshiện có. - Cải thiện phương thức
ChunkSource.getNextChunk(long, long, List, ChunkHolder)trong giao diệnChunkSourcethànhChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Thêm các trường bổ sung vào tính năng ghi nhật ký Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD): thiếu bộ đệm (
bs), thời hạn (dl), tốc độ phát (pr) và khởi động (su) (#8699). - Thêm độ sâu bit luma và chroma vào
ColorInfo(#491). - Thêm các trường bổ sung vào tính năng ghi nhật ký Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD): yêu cầu đối tượng tiếp theo (
nor) và yêu cầu dải ô tiếp theo (nrr) (#8699). - Thêm chức năng truyền dữ liệu Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD) bằng cách sử dụng tham số truy vấn (#553).
- Sửa
ConcurrentModificationExceptiontrongExperimentalBandwidthMeter(#612). - Thêm tham số
MediaPeriodIdvàoCompositeMediaSource.getMediaTimeForChildMediaTime. - Hỗ trợ
ClippingMediaSource(và các nguồn khác có độ lệch thời gian theo khoảng thời gian/cửa sổ) trongConcatenatingMediaSource2(#11226). - Thay đổi
BaseRenderer.onStreamChanged()để nhận cả đối sốMediaPeriodId.
- Bộ chuyển đổi:
- Phân tích cú pháp dữ liệu xoay EXIF cho dữ liệu đầu vào hình ảnh.
- Xoá loại chú thích
TransformationRequest.HdrModevà các hằng số liên quan. Thay vào đó, hãy sử dụngComposition.HdrModevà các hằng số liên quan. - Đơn giản hoá
OverlaySettingsđể khắc phục các vấn đề về chế độ xoay. - Thay đổi các tham số
frameRatevàdurationUscủaSampleConsumer.queueInputBitmapthànhTimestampIterator.
- Chọn bản nhạc:
- Thêm
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessđể cho phép hoặc không cho phép điều chỉnh không liền mạch một cách rõ ràng. Giá trị mặc định vẫn giữ nguyên hành vi hiện tại làtrue.
- Thêm
- Công cụ trích xuất:
- MPEG-TS: Đảm bảo khung hình cuối cùng được kết xuất bằng cách chuyển đơn vị truy cập cuối cùng của một luồng đến hàng đợi mẫu (#7909).
- Sửa lỗi chính tả khi xác định
rotationDegrees. Đã thay đổiprojectionPosePitchthànhprojectionPoseRoll(#461). - Xoá giả định rằng các thực thể
Extractorcó thể được kiểm tra trực tiếp bằnginstanceof. Nếu muốn có quyền truy cập trong thời gian chạy vào thông tin chi tiết về cách triển khai củaExtractor, trước tiên, bạn phải gọiExtractor.getUnderlyingInstance. - Thêm
BmpExtractor. - Thêm
WebpExtractor. - Thêm
HeifExtractor. - Thêm tính năng hỗ trợ QuickTime cổ điển vào
Mp4Extractor.
- Âm thanh:
- Thêm tính năng hỗ trợ PCM big-endian 24/32 bit trong MP4 và Matroska, đồng thời phân tích cú pháp mã hoá PCM cho
lpcmtrong MP4. - Thêm tính năng hỗ trợ trích xuất âm thanh Vorbis trong MP4.
- Thêm
AudioSink.getFormatOffloadSupport(Format)truy xuất mức độ hỗ trợ giảm tải mà bồn lưu trữ có thể cung cấp cho định dạng thông quaDefaultAudioOffloadSupportProvider. Phương thức này trả vềAudioOffloadSupportmới chứaisFormatSupported,isGaplessSupportedvàisSpeedChangeSupported. - Thêm
AudioSink.setOffloadMode()để định cấu hình giảm tải trên bồn âm thanh. Giá trị mặc định làAudioSink.OFFLOAD_MODE_DISABLED. - Bạn có thể bật tính năng giảm tải thông qua
setAudioOffloadPreferencetrongTrackSelectionParameters. Nếu lựa chọn ưu tiên được đặt là bật, thiết bị hỗ trợ giảm tải cho định dạng và lựa chọn bản nhạc là một bản âm thanh, thì tính năng giảm tải âm thanh sẽ được bật. - Nếu
audioOffloadModePreferenceđược đặt thànhAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, thìDefaultTrackSelectorsẽ chỉ chọn một bản âm thanh và chỉ khi định dạng của bản âm thanh đó được hỗ trợ trong quá trình giảm tải. Nếu không có bản âm thanh nào được hỗ trợ trong quá trình giảm tải, thì sẽ không có bản âm thanh nào được chọn. - Tắt tính năng hỗ trợ phát không gián đoạn cho chế độ giảm tải khi cấp độ API thấp hơn 33 do vấn đề về vị trí phát sau khi chuyển đổi bản nhạc.
- Xoá tham số
enableOffloadkhỏi chữ ký phương thứcDefaultRenderersFactory.buildAudioSink. - Xoá phương thức
DefaultAudioSink.Builder.setOffloadMode. - Xoá giá trị intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Thêm tính năng hỗ trợ siêu dữ liệu không có khoảng trống Opus trong khi phát giảm tải.
- Cho phép khôi phục trình kết xuất bằng cách tắt tính năng giảm tải nếu không thành công ở lần ghi đầu tiên (#627).
- Bật tính năng Lên lịch giảm tải theo mặc định cho chế độ phát giảm tải chỉ có âm thanh.
- Xoá
ExoPlayer.experimentalSetOffloadSchedulingEnabledvàAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. - Đổi tên
onExperimentalSleepingForOffloadChangedthànhonSleepingForOffloadChangedvàonExperimentalOffloadedPlaybackthànhonOffloadedPlayback. - Di chuyển các giao diện và định nghĩa
TrackSelectionParametersliên quan đến chế độ giảm tải âm thanh sang một lớpAudioOffloadPreferencesbên trong. - Thêm lệnh gọi lại
onAudioTrackInitializedvàonAudioTrackReleasedvàoAnalyticsListener,AudioRendererEventListenervàAudioSink.Listener. - Khắc phục vấn đề tràn dưới bộ đệm âm thanh DTS Express (#650).
- Sửa lỗi kiểm tra chức năng của E-AC3-JOC gửi
IllegalArgumentException(#677).
- Thêm tính năng hỗ trợ PCM big-endian 24/32 bit trong MP4 và Matroska, đồng thời phân tích cú pháp mã hoá PCM cho
- Video:
- Cho phép
MediaCodecVideoRenderersử dụngVideoFrameProcessor.Factorytuỳ chỉnh. - Khắc phục lỗi không thể kết xuất khung hình đầu tiên nếu luồng âm thanh bắt đầu bằng dấu thời gian âm (#291).
- Cho phép
- Văn bản:
- Xoá
ExoplayerCuesDecoder. Các bản âm thanh văn bản cósampleMimeType = application/x-media3-cueshiện đượcTextRendererxử lý trực tiếp mà không cần thực thểSubtitleDecoder.
- Xoá
- Siêu dữ liệu:
MetadataDecoder.decodesẽ không còn được gọi cho các mẫu "chỉ giải mã" vì dù sao thì quá trình triển khai cũng phải trả về giá trị rỗng.
- Hiệu ứng:
- Thêm
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)đầu vào bitmap hàng đợi theo dấu thời gian. - Thay đổi
VideoFrameProcessor.registerInputStream()thành không chặn. Ứng dụng phải triển khaiVideoFrameProcessor.Listener#onInputStreamRegistered(). - Thay đổi các tham số
frameRatevàdurationUscủaVideoFrameProcessor.queueInputBitmapthànhTimestampIterator.
- Thêm
- Tiện ích IMA:
- Khắc phục lỗi trong đó sự kiện phát trực tiếp DASH nhiều giai đoạn không phải là mục đầu tiên trong danh sách phát có thể gửi một ngoại lệ (#571).
- Giải phóng StreamManager trước khi gọi
AdsLoader.destroy() - Chuyển SDK IMA lên phiên bản 3.31.0.
- Phiên:
- Đặt hành vi của dịch vụ nền trước cho thông báo thành
FOREGROUND_SERVICE_IMMEDIATEtrongDefaultMediaNotificationProvider(#167). - Chỉ sử dụng
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()trên API 31 để tránh các vấn đề về API không dùng nữa trên thiết bị Samsung (#167). - Sử dụng trình điều khiển thông báo nội dung nghe nhìn làm proxy để đặt các lệnh có sẵn và bố cục tuỳ chỉnh dùng để điền thông báo và phiên nền tảng.
- Chuyển đổi các sự kiện nút nội dung nghe nhìn mà
MediaSessionService.onStartCommand()nhận được trong Media3 thay vì định tuyến các sự kiện đó đến phiên nền tảng rồi quay lại Media3. Nhờ đó, trình điều khiển cuộc gọi luôn là trình điều khiển thông báo nội dung nghe nhìn và các ứng dụng có thể dễ dàng nhận ra cuộc gọi đến từ thông báo theo cùng một cách trên tất cả các cấp độ API được hỗ trợ. - Sửa lỗi
MediaController.getCurrentPosition()không tiến lên khi kết nối vớiMediaSessionCompatcũ. - Thêm
MediaLibrarySession.getSubscribedControllers(mediaId)để tiện sử dụng. - Ghi đè
MediaLibrarySession.Callback.onSubscribe()để xác nhận tình trạng sẵn có của mã nhận dạng gốc mà bộ điều khiển đăng ký. Nếu thành công, gói thuê bao sẽ được chấp nhận vànotifyChildrenChanged()sẽ được gọi ngay lập tức để thông báo cho trình duyệt (#561). - Thêm mô-đun minh hoạ phiên cho Automotive OS và bật tính năng minh hoạ phiên cho Android Auto.
- Không đặt hàng đợi của phiên khung khi
COMMAND_GET_TIMELINEkhông có sẵn cho bộ điều khiển thông báo nội dung nghe nhìn. Khi Android Auto là trình điều khiển ứng dụng đọc từ phiên khung, nútqueuetrong giao diện người dùng của Android Auto sẽ không xuất hiện (#339). - Sử dụng
DataSourceBitmapLoadertheo mặc định thay vìSimpleBitmapLoader(#271, #327). - Thêm
MediaSession.Callback.onMediaButtonEvent(Intent)cho phép ứng dụng ghi đè chế độ xử lý sự kiện nút nội dung nghe nhìn mặc định.
- Đặt hành vi của dịch vụ nền trước cho thông báo thành
- Giao diện người dùng:
- Thêm một phương thức triển khai
Player.Listenercho các thiết bị Wear OS để xử lý việc chặn phát doPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTbằng cách chạy một hộp thoại hệ thống cho phép người dùng kết nối với một đầu ra âm thanh phù hợp (ví dụ: tai nghe Bluetooth). Trình nghe sẽ tự động tiếp tục phát nếu một thiết bị phù hợp được kết nối trong khoảng thời gian chờ có thể định cấu hình (mặc định là 5 phút).
- Thêm một phương thức triển khai
- Nội dung đã tải xuống:
- Khai báo loại dịch vụ nền trước "đồng bộ hoá dữ liệu" cho
DownloadServiceđể đảm bảo khả năng tương thích với Android 14. Khi sử dụng dịch vụ này, ứng dụng cũng cần thêmdataSynclàmforegroundServiceTypetrong tệp kê khai và thêm quyềnFOREGROUND_SERVICE_DATA_SYNC(#11239).
- Khai báo loại dịch vụ nền trước "đồng bộ hoá dữ liệu" cho
- Tiện ích HLS:
- Làm mới danh sách phát trực tiếp HLS theo khoảng thời gian được tính từ thời gian bắt đầu tải gần nhất thay vì thời gian hoàn tất tải gần nhất (#663).
- Tiện ích DASH:
- Cho phép nhiều giá trị nhận dạng DASH giống nhau trong URL mẫu phân đoạn.
- Thêm tính năng hỗ trợ thử nghiệm để phân tích cú pháp phụ đề trong quá trình trích xuất. Thư viện này hỗ trợ tốt hơn cho việc hợp nhất các phụ đề trùng lặp, bao gồm cả việc giải quyết hiện tượng nhấp nháy khi chuyển đổi giữa các phân đoạn phụ đề. Bạn có thể bật tính năng này bằng cách sử dụng
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288).
- Tiện ích RTSP:
- Khắc phục tình huống tương tranh có thể dẫn đến
IndexOutOfBoundsExceptionkhi quay lại TCP hoặc phát lại bị treo trong một số trường hợp. - Kiểm tra trạng thái trong quá trình thiết lập RTSP khi trả về trạng thái tải của
RtspMediaPeriod(#577). - Bỏ qua các phương thức yêu cầu RTSP tuỳ chỉnh trong tiêu đề công khai của phản hồi Options (#613).
- Sử dụng giá trị thời gian chờ của Phản hồi thiết lập RTSP trong khoảng thời gian gửi yêu cầu RTSP Options duy trì hoạt động (#662).
- Khắc phục tình huống tương tranh có thể dẫn đến
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Phát hành mô-đun bộ giải mã MIDI, hỗ trợ phát các tệp MIDI chuẩn bằng thư viện Jsyn để tổng hợp âm thanh.
- Thêm
DecoderOutputBuffer.shouldBeSkippedđể đánh dấu trực tiếp các vùng đệm đầu ra không cần hiển thị. Bạn nên dùng thuộc tính này thay vìC.BUFFER_FLAG_DECODE_ONLY(sẽ không được dùng nữa). - Thêm
Decoder.setOutputStartTimeUsvàSimpleDecoder.isAtLeastOutputStartTimeUsđể cho phép bộ giải mã bỏ qua các mẫu chỉ giải mã trước thời gian bắt đầu. Bạn nên ưu tiên sử dụng phương thức này thay vìBuffer.isDecodeOnlysắp ngừng hoạt động. - Sửa lỗi phát hành cấu phần phần mềm của bộ giải mã MIDI lên kho lưu trữ Maven. Cấu phần phần mềm được đổi tên thành
media3-exoplayer-midi(#734).
- Tiện ích Leanback:
- Sửa lỗi vô hiệu hoá nền tảng có thể gây ra
ArithmeticExceptiontrong mã Leanback (#617).
- Sửa lỗi vô hiệu hoá nền tảng có thể gây ra
- Tiện ích kiểm thử:
- Làm cho
TestExoPlayerBuildervàFakeClocktương thích với các chương trình kiểm thử giao diện người dùng Espresso và chương trình kiểm thử giao diện người dùng Compose. Điều này khắc phục lỗi khi quá trình phát tiến triển không xác định trong các hoạt động tương tác với chế độ xem Espresso hoặc Compose.
- Làm cho
- Xoá các biểu tượng không dùng nữa:
- Xoá
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)vàTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Thay vào đó, hãy sử dụngComposition.Builder.setHdrMode(int)và truyềnCompositionđếnTransformer.start(Composition, String). - Xoá phương thức
DownloadNotificationHelper.buildProgressNotificationkhông dùng nữa, thay vào đó, hãy sử dụng một phương thức không dùng nữa, lấy tham sốnotMetRequirements.
- Xoá
Phiên bản 1.2.0-rc01
Ngày 1 tháng 11 năm 2023
Sử dụng phiên bản ổn định 1.2.0.
Phiên bản 1.2.0-beta01
Ngày 19 tháng 10 năm 2023
Sử dụng phiên bản ổn định 1.2.0.
Phiên bản 1.2.0-alpha02
Ngày 29 tháng 9 năm 2023
Sử dụng phiên bản ổn định 1.2.0.
Phiên bản 1.2.0-alpha01
Ngày 17 tháng 8 năm 2023
Sử dụng phiên bản ổn định 1.2.0.
Phiên bản 1.1.0
Phiên bản 1.1.1
Ngày 16 tháng 8 năm 2023
- Thư viện Common:
- Xoá phần phụ thuộc
multidexvô tình được thêm vào khỏi tất cả các mô-đun (#499).
- Xoá phần phụ thuộc
- ExoPlayer:
- Khắc phục vấn đề trong
PlaybackStatsListener, trong đóPlaybackStatsgiả mạo được tạo sau khi danh sách phát bị xoá. - Thêm các trường bổ sung vào tính năng ghi nhật ký Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD): định dạng truyền trực tuyến (sf), loại luồng (st), phiên bản (v), tốc độ bit cao nhất (tb), thời lượng đối tượng (d), thông lượng đo được (mtp) và loại đối tượng (ot) (#8699).
- Khắc phục vấn đề trong
- Âm thanh:
- Khắc phục lỗi
Player.getState()không bao giờ chuyển sangSTATE_ENDEDkhi phát các tệp rất ngắn (#538).
- Khắc phục lỗi
- Giảm tải âm thanh:
- Thêm Trang tiêu đề nhận dạng Ogg và Trang tiêu đề nhận xét vào đầu dòng bit để phát Opus giảm tải theo RFC 7845.
- Video:
- H.265/HEVC: Khắc phục lỗi phân tích cú pháp thông tin ảnh tham chiếu ngắn hạn và dài hạn của SPS.
- Văn bản:
- CEA-608: Thay đổi logic cắt bớt gợi ý để chỉ xem xét văn bản hiển thị. Trước đây, độ lệch thụt lề và thẻ được đưa vào khi giới hạn độ dài của gợi ý ở mức 32 ký tự (về mặt kỹ thuật là đúng theo thông số kỹ thuật) (#11019).
- Tiện ích IMA:
- Chuyển SDK IMA lên phiên bản 3.30.3.
- Phiên:
- Thêm bố cục tuỳ chỉnh vào trạng thái của bộ điều khiển và cung cấp phương thức getter để truy cập vào bố cục đó. Khi bố cục tuỳ chỉnh thay đổi,
MediaController.Listener.onCustomLayoutChangedsẽ được gọi. Những ứng dụng muốn gửi nhiều bố cục tuỳ chỉnh đến nhiều bộ điều khiển Media3 có thể thực hiện việc này trongMediaSession.Callback.onConnectbằng cách sử dụngAcceptedResultBuilderđể đảm bảo bố cục tuỳ chỉnh có sẵn cho bộ điều khiển khi kết nối hoàn tất. - Khắc phục các trường hợp
MediaLibraryServiceLegacyStubgửi lỗi đến mộtResultkhông hỗ trợ việc này, dẫn đếnUnsupportedOperationException(#78). - Sửa cách
PlayerWrappertạoVolumeProviderCompatbằng cách xác địnhvolumeControlTypethông qua cả lệnh cũ (COMMAND_ADJUST_DEVICE_VOLUMEvàCOMMAND_SET_DEVICE_VOLUME) và lệnh mới (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSvàCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).
- Thêm bố cục tuỳ chỉnh vào trạng thái của bộ điều khiển và cung cấp phương thức getter để truy cập vào bố cục đó. Khi bố cục tuỳ chỉnh thay đổi,
Phiên bản 1.1.0
Ngày 5 tháng 7 năm 2023
- Thư viện Common:
- Thêm lý do chặn cho tuyến âm thanh không phù hợp và phát khi sẵn sàng thay đổi lý do chặn quá lâu. (#15).
- Thêm lệnh vào Trình phát:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Thêm các phương thức nạp chồng vào Player để cho phép người dùng chỉ định cờ âm lượng:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
- Thêm
BuilderchoDeviceInfovà ngừng sử dụng hàm khởi tạo hiện có. - Thêm
DeviceInfo.routingControllerIdđể chỉ định mã nhận dạng bộ điều khiển định tuyến cho các hoạt động phát từ xa. - Thêm
Player.replaceMediaItem(s)làm lối tắt để thêm và xoá các mục ở cùng một vị trí (#8046).
- ExoPlayer:
- Chỉ cho phép ExoPlayer có quyền kiểm soát các phương thức âm lượng của thiết bị nếu
được chọn sử dụng một cách rõ ràng. Sử dụng
ExoPlayer.Builder.setDeviceVolumeControlEnabledđể có quyền truy cập vào:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)vàsetDeviceVolume(int, int)increaseDeviceVolume(int)vàincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)vàdecreaseDeviceVolume(int, int)
- Thêm
FilteringMediaSourcecho phép lọc các loại bản nhạc có sẵn từMediaSource. - Thêm tính năng hỗ trợ để đưa Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD) vào các yêu cầu gửi đi của các định dạng truyền phát thích ứng DASH, HLS và SmoothStreaming. Các trường sau đây đã được tích hợp:
br,bl,cid,rtpvàsid(#8699). Cấu trúc API và các phương thức API:- Tính năng ghi nhật ký CMCD bị tắt theo mặc định, hãy sử dụng
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)để bật tính năng này. - Tất cả các phím đều được bật theo mặc định, hãy ghi đè
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)để lọc ra những phím được ghi lại. - Ghi đè
CmcdConfiguration.RequestConfig.getCustomData()để bật tính năng ghi nhật ký khoá tuỳ chỉnh.
- Tính năng ghi nhật ký CMCD bị tắt theo mặc định, hãy sử dụng
- Thêm hành động bổ sung vào tệp kê khai của bản minh hoạ chính để dễ dàng bắt đầu ứng dụng minh hoạ bằng tệp
*.exolist.jsontuỳ chỉnh (#439). - Thêm
ExoPlayer.setVideoEffects()để sử dụngEffecttrong khi phát video. - Cập nhật
SampleQueueđể lưu trữsourceIddưới dạnglongthay vìint. Thao tác này sẽ thay đổi chữ ký của các phương thức công khaiSampleQueue.sourceIdvàSampleQueue.peekSourceId. - Thêm tham số vào các phương thức
LoadControlshouldStartPlaybackvàonTracksSelectedcho phép liên kết các phương thức này vớiMediaPeriodcó liên quan. - Thay đổi chữ ký của
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)bằng cách thêm tham số dòng thời gian chứa các khoảng thời gian có UID được dùng làm khoá trong bản đồ. Điều này là bắt buộc để tránh các vấn đề đồng thời với sự kiện phát trực tiếp nhiều giai đoạn. - Ngừng sử dụng
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)vàBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). Thay vào đó, bạn có thể gọi biến thể của các phương thức không cómediaTimeOffsetUs. Xin lưu ý rằng ngay cả đối với các biến thể không dùng nữa, độ dời cũng không còn được thêm vàostartTimeUsvàendTimeUscủa các đối tượngMediaLoadDatado trình điều phối gửi đi. - Đổi tên
ExoTrackSelection.blacklistthànhexcludeTrackvàisBlacklistedthànhisTrackExcluded. - Khắc phục hành vi không nhất quán giữa
ExoPlayer.setMediaItem(s)vàaddMediaItem(s)khi được gọi trên một danh sách phát trống.
- Chỉ cho phép ExoPlayer có quyền kiểm soát các phương thức âm lượng của thiết bị nếu
được chọn sử dụng một cách rõ ràng. Sử dụng
- Bộ chuyển đổi:
- Xoá
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Thay vào đó, hãy sử dụngExoPlayerAssetLoader.Factory(MediaSource.Factory)vàTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory). - Xoá
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - Khắc phục lỗi khiến quá trình biến đổi có thể bị kẹt (dẫn đến hết thời gian chờ của bộ ghép kênh) nếu điểm kết thúc của luồng video được báo hiệu tại thời điểm khung đầu vào đang chờ xử lý.
- Truy vấn bộ mã hoá và giải mã thông qua
MediaCodecListthay vì sử dụng các tiện íchfindDecoder/EncoderForFormatđể mở rộng phạm vi hỗ trợ. - Xoá cấu hình khung B trong
DefaultEncoderFactoryvì cấu hình này không hoạt động trên một số thiết bị.
- Xoá
- Chọn bản nội dung:
- Thêm
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeđược tắt theo mặc định. Khi được bật,DefaultTrackSelectorsẽ kích hoạt lựa chọn bản nhạc mới khi các chức năng của trình kết xuất thay đổi.
- Thêm
- Công cụ trích xuất:
- Âm thanh:
- Sửa lỗi một số lượt phát không thành công khi bật tính năng tạo đường hầm và
AudioProcessorsđang hoạt động, ví dụ: để cắt bớt khoảng trống (#10847). - Đóng gói khung Opus trong gói Ogg trong các lượt phát trực tiếp (giảm tải).
- Ngoại suy vị trí hiện tại trong khi ngủ bằng tính năng lập lịch giảm tải.
- Thêm
Renderer.release()vàAudioSink.release()để giải phóng tài nguyên khi kết thúc vòng đời của trình phát. - Theo dõi các thay đổi về chức năng âm thanh trong
DefaultAudioSink. Thêm một tham số bắt buộccontexttrong hàm khởi tạo củaDefaultAudioSink. Tham số này sẽ giúpDefaultAudioSinkđăng ký làm trình nghe choAudioCapabilitiesReceivervà cập nhật thuộc tínhaudioCapabilitieskhi được thông báo về thay đổi đối với chức năng. - Truyền các thay đổi về chức năng âm thanh thông qua một sự kiện mới
onAudioCapabilitiesChangedtrong giao diệnAudioSink.Listenervà một giao diện mớiRendererCapabilities.Listenerkích hoạt các sự kiệnonRendererCapabilitiesChanged. - Thêm
ChannelMixingAudioProcessorđể áp dụng tỷ lệ/kết hợp cho các kênh âm thanh. - Thêm giá trị int mới
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEvàoDecoderDiscardReasonsđể loại bỏ bộ giải mã âm thanh khi có thể sử dụng chế độ bỏ qua sau khi chức năng âm thanh thay đổi. - Thêm tính năng hỗ trợ phát trực tiếp cho DTS Express và DTS:X (#335).
- Sửa lỗi một số lượt phát không thành công khi bật tính năng tạo đường hầm và
- Video:
- Đặt
MediaCodecVideoRendererbáo cáoVideoSizecó chiều rộng và chiều cao là 0 khi trình kết xuất bị tắt.Player.Listener.onVideoSizeChangedđược gọi tương ứng khiPlayer.getVideoSize()thay đổi. Với thay đổi này, kích thước video của ExoPlayer vớiMediaCodecVideoRenderercó chiều rộng và chiều cao là 0 khiPlayer.getCurrentTrackskhông hỗ trợ video hoặc kích thước của bản video được hỗ trợ chưa được xác định.
- Đặt
- DRM (Quản lý bản quyền nội dung số):
- Giảm chế độ hiển thị của một số phương thức chỉ dùng nội bộ trên
DefaultDrmSessionmà không được gọi từ bên ngoài gói DRM:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Giảm chế độ hiển thị của một số phương thức chỉ dùng nội bộ trên
- Muxer:
- Thêm một thư viện bộ ghép kênh mới có thể dùng để tạo tệp vùng chứa MP4.
- Tiện ích IMA:
- Bật luồng DASH trực tiếp nhiều giai đoạn cho DAI. Xin lưu ý rằng bản triển khai hiện tại chưa hỗ trợ tính năng tua trong sự kiện phát trực tiếp (#10912).
- Khắc phục lỗi chèn nhóm quảng cáo mới vào sự kiện phát trực tiếp do vị trí nội dung được tính toán trong các dòng thời gian liên tiếp có sự khác biệt nhỏ.
- Phiên:
- Thêm phương thức trợ giúp
MediaSession.getControllerForCurrentRequestđể lấy thông tin về tay điều khiển hiện đang gọi phương thứcPlayer. - Thêm
androidx.media3.session.MediaButtonReceiverđể cho phép các ứng dụng triển khai tính năng tiếp tục phát bằng các sự kiện nút nội dung nghe nhìn do tai nghe Bluetooth gửi (#167). - Thêm phương thức triển khai mặc định vào
MediaSession.Callback.onAddMediaItemsđể cho phép chuyểnMediaItemsđược yêu cầu sangPlayernếu các phương thức này cóLocalConfiguration(ví dụ: URI) (#282). - Thêm nút lệnh "tua về trước" và "tua đến sau" trên chế độ xem thông báo nhỏ gọn của nội dung nghe nhìn theo mặc định cho Android 12 trở xuống (#410).
- Thêm phương thức triển khai mặc định vào
MediaSession.Callback.onAddMediaItemsđể cho phép chuyểnMediaItemsđược yêu cầu sangPlayernếu các phương thức này cóLocalConfiguration(ví dụ: URI) (#282). - Thêm nút lệnh "tua về trước" và "tua đến sau" trên chế độ xem thông báo nhỏ gọn của nội dung nghe nhìn theo mặc định cho Android 12 trở xuống (#410).
- Thêm phương thức trợ giúp
- Giao diện người dùng:
- Thêm các phương thức Util
shouldShowPlayButtonvàhandlePlayPauseButtonActionđể viết các phần tử trên giao diện người dùng tuỳ chỉnh bằng nút phát/tạm dừng.
- Thêm các phương thức Util
- Tiện ích RTSP:
- Tiện ích DASH:
- Xoá độ lệch thời gian của nội dung nghe nhìn khỏi
MediaLoadData.startTimeMsvàMediaLoadData.endTimeMscho các luồng DASH nhiều giai đoạn. - Khắc phục lỗi chuẩn bị lại nguồn nội dung nghe nhìn Dash trực tiếp nhiều giai đoạn tạo ra
IndexOutOfBoundsException(#10838).
- Xoá độ lệch thời gian của nội dung nghe nhìn khỏi
- Tiện ích HLS:
- Thêm
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)để đặt thời gian chờ cho luồng tải nhằm chờTimestampAdjusterkhởi động. Nếu quá trình khởi chạy không hoàn tất trước thời gian chờ, thìPlaybackExceptionsẽ được gửi để tránh việc phát bị treo vô thời hạn. Thời gian chờ được đặt thành 0 theo mặc định (#323).
- Thêm
- Tiện ích kiểm thử:
- Kiểm tra xem lược đồ URI có phân biệt chữ hoa chữ thường trong
DataSourceContractTesthay không.
- Kiểm tra xem lược đồ URI có phân biệt chữ hoa chữ thường trong
- Xoá các biểu tượng không dùng nữa:
- Xoá các hàm khởi tạo
DefaultAudioSink, sử dụngDefaultAudioSink.Builder. - Xoá
HlsMasterPlaylist, thay vào đó hãy sử dụngHlsMultivariantPlaylist. - Xoá
Player.stop(boolean). Thay vào đó, hãy sử dụngPlayer.stop()vàPlayer.clearMediaItems()(nếuresetlàtrue). - Xoá hai hàm khởi tạo
SimpleCachekhông dùng nữa, sử dụng hàm khởi tạo không dùng nữa lấyDatabaseProviderđể có hiệu suất tốt hơn. - Xoá hàm khởi tạo
DefaultBandwidthMeter, sử dụngDefaultBandwidthMeter.Builder. - Xoá các hàm khởi tạo
DefaultDrmSessionManager, sử dụngDefaultDrmSessionManager.Builder. - Xoá hai hàm khởi tạo
HttpDataSource.InvalidResponseCodeExceptionkhông dùng nữa, sử dụng hàm khởi tạo không dùng nữa chấp nhận các trường bổ sung(cause,responseBody) để tăng cường ghi nhật ký lỗi. - Xoá
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDashvàDownloadHelper.forSmoothStreaming, sử dụngDownloadHelper.forMediaItem. - Xoá hàm khởi tạo
DownloadServicekhông dùng nữa, sử dụng hàm khởi tạo không dùng nữa có tuỳ chọn cung cấp tham sốchannelDescriptionResourceId. - Xoá các hằng số Chuỗi không dùng nữa cho Bộ ký tự (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEvàUTF16LE_NAME), thay vào đó, hãy sử dụng Bộ ký tự Kotlin từ góikotlin.text,java.nio.charset.StandardCharsetshoặccom.google.common.base.Charsets. - Xoá hàm khởi tạo
WorkManagerSchedulerkhông dùng nữa, sử dụng hàm khởi tạo không dùng nữa có tuỳ chọn cung cấp tham sốContext. - Xoá các phương thức không dùng nữa
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatvàcreateSampleFormat, vốn được dùng để tạo thực thể cho lớpFormat. Thay vào đó, hãy sử dụngFormat.Builderđể tạo các thực thể củaFormat. - Xoá các phương thức không dùng nữa
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitratevàcopyWithVideoSize, hãy sử dụngFormat.buildUpon()và các phương thức setter. - Xoá
ExoPlayer.retry()không dùng nữa, hãy dùngprepare(). - Xoá hàm khởi tạo
DefaultTrackSelectorkhông có đối số không dùng nữa, hãy sử dụngDefaultTrackSelector(Context). - Xoá hàm khởi tạo
OfflineLicenseHelperkhông dùng nữa, sử dụngOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Xoá hàm khởi tạo
DownloadManagerkhông dùng nữa, sử dụng hàm khởi tạo nhậnExecutor. - Xoá các hàm khởi tạo
Cuekhông dùng nữa, hãy sử dụngCue.Builder. - Xoá hàm khởi tạo
OfflineLicenseHelperkhông dùng nữa, sử dụngOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Xoá 4 phương thức
AnalyticsListenerkhông dùng nữa:onDecoderEnabled, hãy sử dụngonAudioEnabledvà/hoặconVideoEnabled.onDecoderInitialized, hãy sử dụngonAudioDecoderInitializedvà/hoặconVideoDecoderInitialized.onDecoderInputFormatChanged, hãy sử dụngonAudioInputFormatChangedvà/hoặconVideoInputFormatChanged.onDecoderDisabled, hãy sử dụngonAudioDisabledvà/hoặconVideoDisabled.
- Xoá
Player.Listener.onSeekProcessedvàAnalyticsListener.onSeekProcessedkhông dùng nữa, hãy sử dụngonPositionDiscontinuityvớiDISCONTINUITY_REASON_SEEK. - Xoá
ExoPlayer.setHandleWakeLock(boolean), hãy sử dụngsetWakeMode(int). - Xoá
DefaultLoadControl.Builder.createDefaultLoadControl()không dùng nữa, hãy dùngbuild(). - Xoá
MediaItem.PlaybackPropertieskhông dùng nữa, hãy dùngMediaItem.LocalConfiguration. Trường không được dùng nữaMediaItem.playbackPropertieshiện thuộc loạiMediaItem.LocalConfiguration.
- Xoá các hàm khởi tạo
Phiên bản 1.1.0-rc01
Ngày 21 tháng 6 năm 2023
Sử dụng phiên bản ổn định 1.1.0.
Phiên bản 1.1.0-beta01
Ngày 7 tháng 6 năm 2023
Sử dụng phiên bản ổn định 1.1.0.
Phiên bản 1.1.0-alpha01
Ngày 10 tháng 5 năm 2023
Sử dụng phiên bản ổn định 1.1.0.
Phiên bản 1.0.0
Phiên bản 1.0.2
Ngày 18 tháng 5 năm 2023
Phát hành androidx.media3:media3-*:1.0.2. Phiên bản 1.0.2 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.7.
Bản phát hành này có những thay đổi sau đây kể từ bản phát hành 1.0.1:
- Thư viện Core:
- Thêm
Buffer.isLastSample()để cho biết liệuBuffercó chứa cờC.BUFFER_FLAG_LAST_SAMPLEhay không. - Khắc phục vấn đề khung hình cuối cùng có thể không được kết xuất nếu mẫu cuối cùng có khung hình bị loại bỏ khỏi hàng đợi mà không đọc mẫu "kết thúc luồng". (#11079).
- Thêm
- Công cụ trích xuất:
- Khắc phục lỗi phân tích cú pháp H.265 SPS trong tệp MPEG-TS bằng cách sử dụng lại logic phân tích cú pháp đã được các trình trích xuất RTSP và MP4 sử dụng (#303).
- Văn bản:
- SSA: Thêm tính năng 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 (#319).
- Phiên:
- Khắc phục vấn đề
MediaControllerkhông cập nhật các lệnh có sẵn khi kết nối với mộtMediaSessionCompatcũ cập nhật các thao tác của nó. - Khắc phục lỗi ngăn
MediaLibraryServicetrả về giá trị rỗng cho lệnh gọi từ Giao diện người dùng hệ thống đếnCallback.onGetLibraryRootbằngparams.isRecent == truetrên API 30 (#355). - Khắc phục lỗi rò rỉ bộ nhớ của
MediaSessionServicehoặcMediaLibraryService(#346). - Khắc phục lỗi trong đó việc kết hợp
Timelinevà cập nhật vị trí trongMediaSessioncó thể khiếnMediaControllergửiIllegalStateException.
- Khắc phục vấn đề
Phiên bản 1.0.1
Ngày 18 tháng 4 năm 2023
Phát hành androidx.media3:media3-*:1.0.1. Phiên bản 1.0.1 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.6.
- Thư viện Core:
- Đặt lại chế độ ghi đè sự kiện phát trực tiếp mục tiêu khi tìm vị trí mặc định (#11051).
- Khắc phục lỗi luồng mẫu trống trong nội dung nghe nhìn có thể khiến quá trình phát bị kẹt.
- Phiên:
- Khắc phục lỗi trong đó nhiều mục hàng đợi giống hệt nhau do
MediaSessionCompatcũ phát hành dẫn đến ngoại lệ trongMediaController(#290). - Thêm tính năng chuyển tiếp bị thiếu của
MediaSession.broadcastCustomCommandsangMediaControllerCompat.Callback.onSessionEventcũ (#293). - Khắc phục lỗi khi gọi
MediaSession.setPlayerkhông cập nhật các lệnh có sẵn. - Khắc phục lỗi các thực thể
TrackSelectionOverrideđược gửi từMediaControllerbị bỏ qua nếu tham chiếu đến một nhóm cóFormat.metadata(#296). - Khắc phục vấn đề cần có
Player.COMMAND_GET_CURRENT_MEDIA_ITEMđể truy cập vào siêu dữ liệu thông quaMediaSessionCompatcũ. - Khắc phục vấn đề các thực thể
MediaSessiontrên một luồng nền gây ra sự cố khi dùng trongMediaSessionService(#318). - Khắc phục vấn đề thư viện khai báo một trình nhận nút nội dung nghe nhìn mà không có ý định của ứng dụng (#314).
- Khắc phục lỗi trong đó nhiều mục hàng đợi giống hệt nhau do
- DASH (Truyền phát thích ứng động qua HTTP):
- Khắc phục lỗi xử lý dòng thời gian của phân đoạn trống (#11014).
- RTSP (Giao thức truyền tin thời gian thực):
- Thử lại bằng TCP nếu quá trình Thiết lập RTSP bằng UDP không thành công và có Lỗi RTSP 461 UnsupportedTransport (#11069).
Phiên bản 1.0.0
Ngày 22 tháng 3 năm 2023
Phát hành androidx.media3:media3-*:1.0.0. Phiên bản 1.0.0 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.5.
Không có thay đổi nào kể từ phiên bản 1.0.0-rc02.
Phiên bản 1.0.0-rc02
Ngày 2 tháng 3 năm 2023
Phát hành androidx.media3:media3-*:1.0.0-rc02. Phiên bản 1.0.0-rc02 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.4.
- Thư viện Core:
- Nội dung đã tải xuống:
- Đặt mức chênh lệch tối đa về thời gian bắt đầu của hai phân đoạn cần hợp nhất thành có thể định cấu hình trong
SegmentDownloadervà các lớp con (#248).
- Đặt mức chênh lệch tối đa về thời gian bắt đầu của hai phân đoạn cần hợp nhất thành có thể định cấu hình trong
- Âm thanh:
- Video:
- Liên kết định dạng HEVC HDR10 với
HEVCProfileMain10HDR10thay vìHEVCProfileMain10. - Thêm giải pháp cho vấn đề về thiết bị trên Chromecast có Google TV và Lenovo M10 FHD Plus khiến các luồng AVC 60 khung hình/giây bị đánh dấu là không được hỗ trợ (#10898).
- Khắc phục các vấn đề về hiệu suất phát hành khung hình khi phát nội dung nghe nhìn có tốc độ khung hình cao hơn nhiều so với tốc độ làm mới màn hình.
- Liên kết định dạng HEVC HDR10 với
- Truyền:
- Khắc phục lỗi
STATE_IDLEtạm thời khi chuyển đổi giữa các mục nội dung nghe nhìn (#245).
- Khắc phục lỗi
- RTSP (Giao thức truyền tin thời gian thực):
- Bắt IllegalArgumentException được gửi khi phân tích cú pháp thông báo phản hồi Describe không hợp lệ của RTSP (#10971).
- Phiên:
- Khắc phục lỗi nút phát/tạm dừng thông báo không cập nhật theo trạng thái của trình phát (#192).
- Tiện ích IMA:
- Khắc phục lỗi ngăn các luồng DAI không có quảng cáo bắt đầu vì không nhận được sự kiện
LOADEDđầu tiên (và trong trường hợp không có quảng cáo thì đây là sự kiện duy nhất).
- Khắc phục lỗi ngăn các luồng DAI không có quảng cáo bắt đầu vì không nhận được sự kiện
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).
- 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
- Công cụ trích xuất:
- Gửi
ParserExceptionthay vìNullPointerExceptionnế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).
- Gửi
- Â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
AudioTracktrong các lượt phát trực tiếp (truyền qua).
- 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
- Văn bản:
- Sửa
TextRendererchuyển chỉ mục (âm) không hợp lệ đếnSubtitle.getEventTimenế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.
- Sửa
- 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ế choMediaMetadata.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
PlayerViewkhi dùng bố cục từ phải sang trái (RTL) (#227).
- Sửa
- Phiên:
- Thêm
SimpleBasePlayertrừu tượng để giúp triển khai giao diệnPlayercho 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()trongDefaultMediaNotificationProvidervà 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áchMediaItem, 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
QueueTimelinehoạ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).
- Thêm
- 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ế choMediaMetadata.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 (cast):
- 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
ImaServerSideAdInsertionMediaSourcetrên luồng ứng dụng để tránh các vấn đề về luồng. - Thêm một thuộc tính
focusSkipButtonWhenAvailablevàoImaServerSideAdInsertionMediaSource.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àoImaServerSideAdInsertionMediaSource.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.
- Xoá trình nghe của trình phát thuộc
- Ứ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ộtMediaSourceduy 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
onMediaItemTransitionbị thiếu khi gọiseekToNexthoặcseekToPrevioustrong danh sách phát một mục duy nhất (#10667). - Thêm
Player.getSurfaceSizetrả 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).
- Thêm
- Tạo:
- Thực thi
compileSdkVersiontố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.
- Thực thi
- 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:
- 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ểAudioTracknhằ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.onExperimentalOffloadedPlaybackcho trạng thái giảm tải AudioTrack. (#134). - Đặt
AudioTrackBufferSizeProviderlà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.AudioProcessorthànhandroidx.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).
- Dùng
- 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ớiMetadataRenderer(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.
- Bạn hiện có thể định cấu hình
- 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 openedkhi 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.presentationTimeOffsettừ các tệp kê khai (#10460).
- Phân tích cú pháp
- 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).
- Sử dụng cơ chế ghi đè hiện tại của trình phát làm giá trị đặt trước trong
- 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ứcDefaultMediaNotificationProvider.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). SimpleBitmapLoadercó thể tải bitmap từ các URIfile://(#108).- Sửa câu nhận định ngăn
MediaControllertì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,
MediaSessionServicesẽ 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
DefaultNotificationProvidertạ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):
- 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 địnhCastPlayerkhi kiểm soát hoạt động phát bằngMediaController(#142).
- Triển khai
- 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.
- Xoá
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
ShuffleOrdervớiExoPlayer.setShuffleOrdersẽ dẫn đến lệnh gọi đếnPlayer.Listener#onTimelineChangedbằngreason=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
setDataSourceFactorytrongDefaultMediaSourceFactorykhông hoạt động trong một số trường hợp (#116).
- Đảm bảo việc thay đổi
- Công cụ trích xuất:
- 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
playWhenReadytrongLeanbackAdapter(10420).
- Theo dõi các thay đổi đối với
- Truyền:
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ằngExoPlayer.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
nullvàoMediaSource.Factory.setDrmSessionManagerProvidervàMediaSource.Factory.setLoadErrorHandlingPolicy. Nếu được yêu cầu, hệ thống có thể truyền các bản sao củaDefaultDrmSessionManagerProvidervàDefaultLoadErrorHandlingPolicymộ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ácLocalConfiguration. Đồng thời xoáMediaMetadata.mediaUrlvì hiện có trongRequestMetadata. - 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.
- Bật tính năng hỗ trợ cho việc chẩn đoán nền tảng Android thông qua
- Chọn bản nhạc:
- Làm phẳng lớp
TrackSelectionOverridesthànhTrackSelectionParameters, và quảng báTrackSelectionOverridelên lớp cao cấp nhất. - Đổi tên
TracksInfothànhTracksvàTracksInfo.TrackGroupInfothànhTracks.Group.Player.getCurrentTracksInfovàPlayer.Listener.onTracksInfoChangedcũng đã được đổi tên thànhPlayer.getCurrentTracksvàPlayer.Listener.onTracksChanged. Cách này bao gồm cả việc "ngừng sử dụng" tên phương thứcPlayer.Listener.onTracksChanged, nhưng sử dụng các loại tham số khác. - Thay đổi
DefaultTrackSelector.buildUponParametersvàDefaultTrackSelector.Parameters.buildUponđể trả vềDefaultTrackSelector.Parameters.Builderthay vìDefaultTrackSelector.ParametersBuilderkhông dùng nữa. - Thêm
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitiesđược bật theo mặc định. Khi được bật,DefaultTrackSelectorsẽ ư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,DefaultTrackSelectorsẽ ư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,DefaultTrackSelectorsẽ 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ùngtelevisionsẽ 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 saoDefaultTrackSelectorphải được tạo bằngContext.
- Làm phẳng lớp
- Video:
- Đổi tên
DummySurfacethànhPlaceholderSurface. - Thêm tuỳ chọn hỗ trợ AV1 vào
MediaCodecVideoRenderer.getCodecMaxInputSize.
- Đổi tên
- Â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.AudioAttributesthành lớp trình bao bọcAudioAttributesV21mớ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
AudioTrackbằng mặt nạ kênhAudioFormat.CHANNEL_OUT_7POINT1POINT4nế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ềCueGroupthay vìList<Cue>. - SSA: Hỗ trợ chế độ cài đặt kiểu
OutlineColourkhiBorderStyle == 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á
RawCcExtractorchỉ được dùng để xử lý định dạng phụ đề nội bộ của Google.
- Thay đổi
- Công cụ trích xuất:
- 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àoPlayerViewtrong trường hợpuseController=false(#9605). Ngoài ra, hãy khắc phục việc phân phối sự kiện đếnOnLongClickListenercho 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
PlayerViewtrướcACTION_UPdướ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
TrackSelectionViewvàTrackSelectionDialogBuilderđể hoạt động được với giao diệnPlayerthay 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 khaiPlayerkhá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
PlayerViewvà 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).
- Khắc phục việc phân phối sự kiện tới
- 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đếnDashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Bạn có thể chuyển các thực thể củaDefaultCompositeSequenceableLoaderFactorymột cách rõ ràng nếu cần.
- Phân tích cú pháp số kênh từ các phần tử DTS
- 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đếnHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryvàHlsMediaSource.Factory.setPlaylistTrackerFactory. Hệ thống có thể chuyển các bản sao củaDefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactoryhoặc tệp tham chiếu đếnDefaultHlsPlaylistTracker.FACTORYmộ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đếnSsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Bạn có thể chuyển các thực thể củaDefaultCompositeSequenceableLoaderFactorymột cách rõ ràng nếu cần.
- Không cho phép truyề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
DummyDataSourcethànhPlaceholderDataSource. - Giải quyết việc xử lý gián đoạn OkHttp.
- Đổi tên
- Phiên:
- Thay thế
MediaSession.MediaItemFillerbằngMediaSession.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)khiMediaControllerkết nối với một phiên nội dung nghe nhìn cũ. - Xóa
MediaController.setMediaUrivàMediaSession.Callback.onSetMediaUri. Bạn có thể sử dụng cùng một chức năng bằng cách sử dụngMediaController.setMediaItemvàMediaSession.Callback.onAddMediaItems. - Chuyển tiếp cuộc gọi
MediaControllercũ để phát nội dung nghe nhìn đếnMediaSession.Callback.onAddMediaItemsthay vìonSetMediaUri. - Thêm
MediaNotification.ProvidervàDefaultMediaNotificationProviderđể tuỳ chỉnh thông báo. - Thêm
BitmapLoadervàSimpleBitmapLoaderđể 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.MediaSessionCallbackthànhMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallbackthànhMediaLibrarySession.CallbackvàMediaSession.Builder.setSessionCallbackthànhsetCallback. - 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
MediaControllerImplBasesau khi phát hành bộ điều khiển (#74).
- Thay thế
- 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).
- Cập nhật phiên bản CMake lên
- Xoá các biểu tượng không dùng nữa:
- Xoá
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Sử dụngPlayer.Listener.onTracksChanged(Tracks)thay thế. - Xoá
Player.getCurrentTrackGroupsvàPlayer.getCurrentTrackSelections. Thay vào đó, hãy sử dụngPlayer.getCurrentTracks. Bạn cũng có thể tiếp tục sử dụngExoPlayer.getCurrentTrackGroupsvàExoPlayer.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ố
DownloadHelperDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTvàDEFAULT_TRACK_SELECTOR_PARAMETERS. Ưu tiên sử dụnggetDefaultTrackSelectorParameters(Context)khi có thể, nếu không hãy dùngDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT. - Xóa hàm dựng
DefaultTrackSelector(ExoTrackSelection.Factory). Thay vào đó, hãy sử dụngDefaultTrackSelector(Context, ExoTrackSelection.Factory). - Xoá
Transformer.Builder.setContext.Contextphải được truyền vào hàm dựngTransformer.Builder.
- Xoá
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.setTrackIdvàMediaItem.SubtitleConfiguration.Builder.setIdđể ưu tiên trườngSubtitleConfigurationvà quay lại giá trịFactorynếu trường này không được thiết lập (#10016).
- Sửa lỗi tương tác của
- 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 HLS.
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ủaDefaultRenderersFactoryghi đèbuildVideoRenderers()hoặcbuildAudioRenderers()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,genrechoMediaMetadata.stationvàMediaMetadata.genređể truy cập vào ứng dụng quaPlayer.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ố quaMediaCodec. (#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#inputBufferCountthànhqueuedInputBufferCount. - Đặt
SimpleExoPlayer.renderersở chế độ riêng tư. Bạn có thể truy cập trình kết xuất thông quaExoPlayer.getRenderer. - Cập nhật một số giá trị
AnalyticsListener.EventFlagskhông đổi để khớp với các giá trị trongPlayer.EventFlags. - Phân tách
AnalyticsCollectorthà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.
- Thêm phương thức được bảo vệ
- 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
TrackGrouptrongTrackGroupArray. Luôn có thể phân biệtTrackGroupbằng cách đặt mộtidtrong hàm khởi tạoTrackGroup. 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ềnAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESthay vìnull. - Cho phép tuỳ chỉnh cách tính dung lượng bộ nhớ đệm
AudioTrackbằng cách chènAudioTrackBufferSizeProvidervàoDefaultAudioSink. (#8891). - Thử tạo lại
AudioTracknế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:
- Văn bản:
- DRM (Quản lý bản quyền nội dung số):
- Xoá
playbackLooperkhỏiDrmSessionManager.(pre)acquireSession. Khi một ứng dụng sử dụngDrmSessionManagertrong mộtMediaSourcetuỳ chỉnh,playbackLoopercần được truyền vàoDrmSessionManager.setPlayer.
- Xoá
- 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:
- 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
mainlàC.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.Locationtương đối (#9939).
- 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
- HLS (Phát trực tuyến dựa trên HTTP):
- Tự động điền chính xác
Format.labelkhi 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).
- Tự động điền chính xác
- RTSP (Giao thức truyền tin thời gian thực):
- Cung cấp một API máy khách để ghi đè
SocketFactorydù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).
- Cung cấp một API máy khách để ghi đè
- Bộ chuyển đổi:
- Tăng phiên bản API tối thiểu bắt buộc lên 21.
TransformationExceptionhiệ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.getProgresskhi 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,
MediaSessionConnectorhiệ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ọisetClearMediaItemsOnStop(false)trên trình kết nối.
- Theo mặc định,
- Tiện ích truyền (cast):
- Tiện ích FFmpeg:
- Cho
build_ffmpeg.shphụ thuộc vào tập công cụ quản lý tệp nhị phân LLVM thay vì GNU (#9933).
- Cho
- 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ủaplay-services-cast-frameworkkhông tương thích với các ứng dụng dành cho Android 12 và sẽ gặp sự cố vớiIllegalArgumentExceptionkhi tạoPendingIntent(#9528).
- Nâng cấp tiện ích Truyền để phụ thuộc vào
- Xoá các biểu tượng không dùng nữa:
- Xoá
Player.EventListener. Sử dụngPlayer.Listener. - Xoá
MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryvàMediaSourceFactory#setDrmUserAgent. Sử dụngMediaSourceFactory#setDrmSessionManagerProvider. - Xoá
MediaSourceFactory#setStreamKeys. Sử dụngMediaItem.Builder#setStreamKeys. - Xoá
MediaSourceFactory#createMediaSource(Uri). Sử dụngMediaSourceFactory#createMediaSource(MediaItem). - Xóa
setTagkhỏiDashMediaSource,HlsMediaSourcevàSsMediaSource. Sử dụngMediaItem.Builder#setTag. - Xoá
DashMediaSource#setLivePresentationDelayMs(long, boolean). Sử dụngMediaItem.Builder#setLiveConfigurationvàMediaItem.LiveConfiguration.Builder#setTargetOffsetMsđể ghi đè tệp kê khai hoặcDashMediaSource#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
ActionFilevàActionFileUpgradeUtil. Dùng ExoPlayer 2.16.1 hoặc các phiên bản trước đó để sử dụngActionFileUpgradeUtilnhằm hợp nhất các tệp thao tác cũ vàoDefaultDownloadIndex. - Xoá
ProgressiveMediaSource#setExtractorsFactory. Sử dụng hàm constructorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory). - Xóa
ProgressiveMediaSource.Factory#setTagvàProgressiveMediaSource.Factory#setCustomCacheKey. Sử dụngMediaItem.Builder#setTagvàMediaItem.Builder#setCustomCacheKey. - Xoá các hàm constructor
DefaultRenderersFactory(Context, @ExtensionRendererMode int)vàDefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Sử dụng hàm constructorDefaultRenderersFactory(Context),DefaultRenderersFactory#setExtensionRendererModevàDefaultRenderersFactory#setAllowedVideoJoiningTimeMs. - Xóa tất cả hàm constructor
CronetDataSourcecông khai. Sử dụngCronetDataSource.Factory.
- Xoá
- Chỉ thay đổi
IntDefssau 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óicom.google.android.exoplayer2.ext.flac)@FlacExtractor.Flags(trong góicom.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
Playergiố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 Media3 trên GitHub.
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.