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 22 tháng 10 năm 2025 | 1.8.0 | - | - | 1.9.0-alpha01 |
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.8.0" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs 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 integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.8.0" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs 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 integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // 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 vấn đề Media3 để tìm câu trả lời cho các thắc mắc, lỗi đã biết cũng như yêu cầu tính năng, đồng thời để báo cáo lỗi mới.
Phiên bản 1.9.0
Phiên bản 1.9.0-alpha01
Ngày 22 tháng 10 năm 2025
Phát hành androidx.media3:media3-*:1.9.0-alpha01.
Phiên bản 1.9.0-alpha01 bao gồm các thay đổi sau.
- Thư viện chung:
- Cập nhật
minSdkthành23theo các thư viện AndroidX khác. - Thêm
PlayerTransferStateđể tạo điều kiện 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 để giữ lại và do đó khôi phục âm lượng của Player trước và sau khi đặt âm lượng về 0. - Xuất bản các lớp tiện ích
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagervàStuckPlayerDetectormàExoPlayerđã dùng nội bộ trước đây để cho phép sử dụng lại cho những trình phát khác (#1893). - Khắc phục vấn đề xử lý trình nghe
ForwardingPlayerkhi trình phát uỷ quyền cơ bản sử dụng tính năng so sánh 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-ktxchỉ đị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 báo cáo trong bộ nhớ đệm lớn hơn nhiều so với thời lượng được báo cáo (#2750).
- Cập nhật
- ExoPlayer:
- Thêm tính năng phát hiện trình phát bị treo để kích hoạt lỗi trình phát
StuckPlayerExceptionnếu trình phát có vẻ bị treo. Điều này xảy ra trong các trường hợp sau, trong đó bạn có thể định cấu hình từng thời gian chờ mặc đị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 đệm. - Sau 10 giây
STATE_READYtrong khi cố gắng phát nhưng 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 đạt đến cuối mục. - Sau 10 phút, lý do chặn phát xuất hiện trong khi người dùng cố gắng phát.
- Sau 10 phút
- Bật tính năng xử lý khoá đánh thức theo mặc định để khắc phục các vấn đề về việc lưu vào bộ nhớ đệm trong quá trình phát ở chế độ nền. Điều này tương đương với việc đặt
ExoPlayer.Builder.setWakeModethànhC.WAKE_MODE_LOCAL. - Thêm logic nghe để tự động cập nhật mã nhận dạng 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ừContexttruyền đếnExoPlayer.Builder. - Đảm bảo trình kết xuất không sử dụng dữ liệu từ mục tiếp theo trong danh sách phát quá 10 giây trước khi mục hiện tại kết thúc.
- 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 vào bộ nhớ đệm trước 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 vào bộ nhớ đệm trước. - Sử dụng chức năng lưu trước vào bộ nhớ đệm của
DefaultPreloadManagertrong ứng dụng minh hoạ nội dung dạng ngắn. - Thêm các setter
DefaultLoadControl.Builderđể phát cục bộ và điều chỉnh 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 việc đặt một danh sách phát trống có thể khiến trình phát ở trạng thái
STATE_READYhoặcSTATE_BUFFERING. - Nâng cao 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á. Các ứ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 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.
- Thêm
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)để các ứng dụng đặt giá trị của số byte trong bộ đệm đích cho một trình phát cóplayerNameđược chỉ định. Giờ đây,DefaultLoadControlcó thể đưa ra quyết định riêng cho từng trình phát dựa trên số byte được phân bổ và số byte đệ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 từng 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 một quảng cáo sau video gây ra sự cố (#2746). - Khắc phục tình trạng giật hình trong quá trình phát danh sách phát, trong đó các khung hình luôn bị đặt nhầm thành 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 đệm cho các nguồn trong
DefaultPreloadManagernhằm tránh tổng số byte đệm cho việc tải trước tăng tuỳ ý. Để sử dụng logic kiểm soát mặc định, Ứng dụng có thể đặt số byte của vùng đệm mục tiêu để tải trước thông quaDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)choplayerNamecủaPlayerId.Preload.name("preload"), đồng thời chènDefaultLoadControlđã tạo thông quaDefaultPreloadManager.Builder.setLoadControl(LoadControl).
- Thêm tính năng phát hiện trình phát bị treo để kích hoạt lỗi trình phát
- CompositionPlayer:
- Xuất bản
CompositionPlayertrong chú thích@ExperimentalApimới để cho biết rằng tính năng này có thể được 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ó các 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 chuỗi phụ trong
CompositionPlayer.
- 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 phụ đề/âm thanh:
- Thêm
TrackSelectionParameters.selectTextByDefaultđể ưu tiên lựa chọn bất kỳ phụ đề nào mà không chỉ định các lựa chọn ưu tiên cụ thể hơn khác. - Thêm
preferredVideoLabels,preferredAudioLabelsvàpreferredTextLabelsvàoTrackSelectionParametersđể chỉ định lựa chọn ưu tiên cho các bản ghi có nhãn cụ thể, chẳng hạn như những bản ghi được đọc từ thẻ NAME của HLS (#1666).
- Thêm
- Công cụ trích xuất:
- FLAC: Tăng cường khả năng phát hiện tiêu đề để giảm khả năng tìm thấy các tiêu đề giả trong dữ liệu FLAC được mã hoá, dẫn đến lỗi giải mã (#558).
- MP3: Cho phép có khoảng trống giữa (và trước) các thẻ ID3 ở đầu tệp MP3 (#811, #5718).
- 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 trước giá trị lớp của mẫu đầu tiên trước khi phát ra đị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ác tệp có kích thước rất lớn bằng cách giả định rằng hộp
stbllớn hơn 1MB ngụ ý rằng tệp phải không bị phân mảnh (#2650). - Matroska: Thêm tính năng hỗ trợ phát hiện DTS-HD (#6225).
- Khắc phục một vấn đề trong
MatroskaExtractor, trong đó việc tìm kiếm có thể không chính xác đối với các tệp có nhiều bản âm thanh. Giờ đây, các điểm đánh dấu được liên kết chính xác với các bản nhạc tương ứng, giúp việc tìm kiếm chính xác hơn. - MP4: Thêm chế độ 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 dưới dạng các đối tượngTextInformationFrametrongFormat.metadatavới mã nhận dạng tương ứng làMVNMvàMVIN(#2754). - 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). - MP4: Bỏ qua các bản nhạc bị thiếu hộp
stsd(thay vì không phân tích cú pháp toàn bộ tệp). - Thêm tính năng hỗ trợ trích xuất Ảnh động HEIC. Giờ đây,
HeifExtractorcó thể phân tích cú pháp các tệp HEIC chứa bản video và âm thanh được nhúng. - MP3: Thay đổi
FLAG_ENABLE_INDEX_SEEKINGđể ưu tiên tìm kiếm thông tin từ tiêu đề siêu dữ liệu (chẳng hạn 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 tìm kiếm (#2839).
- Công cụ kiểm tra:
- Ra mắt mô-đun
:media3-inspectormới để đóng vai trò là trang chủ 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 chứa mộtandroidx.media3.inspector.MetadataRetrievermới, sẽ cung cấp một API hợp nhất cho cả siêu dữ liệu và việc trích xuất khung hình. Chúng tôi hiện không dùngandroidx.media3.exoplayer.MetadataRetrievernữa, thay vào đó là 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 đối tượng này thông quaBuildercho mộtMediaItemcụ thể. - FrameExtractor: Thêm
getThumbnail()để trích xuất một khung hình thu nhỏ đại diện từ một tệp nội dung nghe nhìn mà không cần có dấu thời gian cụ thể.
- Ra mắt mô-đun
- Âm thanh:
- Giúp các thực thể
AudioProcessornhận biết được thao tác tìm kiếm. - Cho phép chèn giao diện
AudioOutputProvidermới vàoDefaultAudioSink.Builderđể hỗ trợ các đường dẫn đầu ra âm thanh tuỳ chỉnh. Giá trị mặc định làAudioTrackAudioOutputProvider. - Xử lý các thao tác tìm kiếm trong
GainProcessor. - Tận dụng các chức năng về cấp độ và hồ sơ bộ giải mã AC-4 trong quá trình đánh giá khả năng hỗ trợ định dạng bản ghi (#2580).
- Tránh độ trễ tiềm ẩn do xử lý các 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 có độ chính xác đơn 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ơ.
- 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 đề ScrubbingMode (Chế độ tua) khiến trình phát bị kẹt khi tua một bản nội dung hình thu nhỏ DASH (#2815).
- DRM (Quản lý bản quyền nội dung số):
- Thay đổi loại dữ liệu trả về của các phương thức
MediaDrmCallbacktừbyte[]thành loạiMediaDrmCallback.Responsemới để cho phép trả về thông tin bổ sung không bắt buộc. Đây là một thay đổi có thể gây lỗi nguồn, nhưng bạn có thể dễ dàng giải quyết các lỗi bằng cách bao bọc 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ừ một tham số URL sang phần nội dung POST.
- Thay đổi loại dữ liệu trả về của các phương thức
- Bộ trộn:
- Thêm
MediaMuxerCompat, một giải pháp thay thế tức thì cho khungMediaMuxer. - Thêm
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()để cho phép tạo Ảnh động. - Thêm
WebmMuxerđể cho phép ghép các luồng nội dung nghe nhìnOPUS,VORBIS,VP8vàVP9vào đị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 kho lưu trữ Android IMA.
- Thêm
ImaServerSideAdInsertionUriBuilder.setNetworkCode, một API mới để đặt mã mạng Google Ad Manager cho SDK IMA nhằm xử lý các giá trị nhận dạng quảng cáo như được chỉ định trong phần cài đặt Google Ad Manager. Mã mạng là không bắt buộc nhưng nên dùng cho các yêu cầu về luồng phát Dịch vụ đầy đủ. Để tìm mã mạng, hãy xem bài viết này. - Tăng phần phụ thuộc IMA lên 3.37.0. Việc này yêu cầu bật tính năng khử đường cú pháp của 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ú về cấu hình của IMA.
- Hỗ trợ các lựa chọn giao diện người dùng tuỳ chỉnh DAI của IMA trong trình tạo URI SSAI. Các lựa chọn về giao diện người dùng tuỳ chỉnh để chèn quảng cáo phía máy chủ bao gồm hỗ trợ hiển thị "Có thể bỏ qua" và "Giới thiệu về quảng cáo này". Tính năng này hiện chỉ được cung cấp 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 lựa chọn giao diện người dùng tuỳ chỉnh.
- Phiên:
- Thêm tham số mới vào
MediaSession.Callback.onPlaybackResumptionđể cho biết liệu lệnh gọi có chỉ thu thập thông tin hay bắt đầu phát (#1764). - Cập nhật
MediaSession.ControllerInfo.isTrustedđể cũng khai báo các bộ điều khiển từ ứng dụng của riêng 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 của
MediaLibrarySession.Builder.setLibraryErrorReplicationModethành không nghiêm trọng. - Thêm tham số
ContextvàoMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - Đọc mã nhận dạng điều khiển âm lượng từ
PlaybackInfonền tảng thay vì tìm nạp mã nhận dạng đó thông qua liên kết. Điều này đảm bảo rằng loại phát và mã nhận dạng điều khiển âm lượng được đọc một cách tự động và khớp với nhau. - Khắc phục lỗi trong đó các sự kiện khoá
ACTION_UPbị lọc ra trước khi truyề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 này đã làm (#2637). - Khắc phục lỗi trong đó
getCurrentTimeline()được gọi bởiPlayerWrapperngay cả khi lệnh không có sẵn (#2665). - Khắc phục lỗi trong đó một thông báo bị bỏ lại trong hàng đợi thông báo của trình vòng lặp chính, gây ra tình trạng rò rỉ bộ nhớ sau khi dịch vụ kết thúc (#2692).
- Khi được kết nối với một ứng dụng phiên cũ bằng
MediaBrowser, các lệnh tuỳ chỉnh sẽ chỉ được gửi đến phiên nếu thao tác tuỳ chỉnh được quảng cáo dưới dạng một 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 ID phiên âm thanh được đặt theo phiên (#244). - Khắc phục lỗi
KEYCODE_HEADSETHOOKkhông khởi động trình phát khi sự kiện khoá 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 kích thước Surface không được truyền đạt 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 trình diễn. Nếu bạn đang sử dụng bộ điều khiển, thì đây có thể là một thay đổi đột phá nếu trình phát của bạn không xử lý được lệnh gọi
setVideoSurfaceHolder. - Khắc phục vấn đề truyền các giá trị siêu dữ liệu không phải
StringCharSequence, chẳng hạn như các chuỗi có kiểu span (#2853).
- Thêm tham số mới vào
- Giao diện người dùng:
- Thêm lớp
ProgressStateWithTickIntervalvàrememberProgressStateWithTickIntervalcó thể kết hợp tương ứng vào mô-đunmedia3-ui-compose. Trình 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ướ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. Trình 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àrememberProgressStateWithTickCountcó thể kết hợp tươ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 theo tỷ lệ khung hình và che bằng màn trập. - Xử lý một lỗi nền tảng API 34 đã biết khiến video bị kéo giãn/cắt khi sử dụng
SurfaceViewbên trongAndroidViewCompose và do đó ảnh hưởng đếnContentFramevàPlayerSurfaceComposables bằngSURFACE_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 tính năng hỗ trợ đặt nút tuyến đường truyền nội dung nghe nhìn trong
PlayerView.
- 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.
- Ánh xạ 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 tài sản vào
AdPlaybackStateđể truy cập công khai. - Khắc phục lỗi trong đó thời gian bắt đầu của danh sách phát bị giảm khi thẻ EXT-X-PROGRAM-START-DATE xác định thời gian bắt đầu bị xoá khỏi danh sách phát (#2760).
- Sử dụ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.
- Tiện ích DASH:
- Khắc phục
UnsupportedOperationExceptionkhi phát các luồng DASH bằng tệp kê khai URIdata:không theo hệ phân cấp (#2688). - Đặt lại
LiveConfigurationthành 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 các sự cố do nội dung cập nhật tệp kê khai không hợp lệ chưa được báo cáo dưới dạng lỗi trình phát (#2805).
- Khắc phục
- 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 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 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ả nội dung cục bộ và nội dung truyền. Để giữ lại hành vi cũ củaCastPlayerlà chỉ hỗ trợ chế độ 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 sẽ không được dùng nữa để thay thế bằ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 để dùng trongDefaultCastOptionsProvider#toMediaQueueItem, khi có. - Cho phép chuyển từ xa sang cục bộ trong
DefaultCastOptionsProvider. - Thêm tính năng hỗ trợ Truyền trong bản minh hoạ Phiên.
- Thêm tính năng hỗ trợ hiển thị nút tuyến đường truyền nội dung nghe nhìn trên giao diện người dùng có khả năng kết hợp.
- Thêm tính năng hỗ trợ hiển thị nút tuyến phát 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 đường truyền phát nội dung nghe nhìn dưới dạng Giao diện người dùng dạng 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 trang của
FakeClock. Theo mặc định, giá trị này là 1 giây, nhưng bạn 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). Chênh lệch này 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 mới được nạp chồng. - 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 trang 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. - Xoá các hàm khởi tạo
EditedMediaItemSequencekhông dùng nữa. Sử dụngEditedMediaItemSequence.Builder.
- Xoá hàm khởi tạo
Phiên bản 1.8.0
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 chung:
- 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). - Gửi một 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 một 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 đó
DefaultTrackSelectorcó thể đánh dấu các định dạng âm thanh không phải âm thanh nổi trên TV 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 (theo mặc định, cờ này được bật ở chế độ tua). - Thêm tính năng hỗ trợ sử dụng mã nhận dạng thiết bị ảo từ
Contextđược truyền đếnExoPlayer.Builder. - Bật tính năng lập lịch động theo mặc định ở chế độ tua.
- Tránh tải lại nguồn không cần thiết khi tìm đế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ằngExoPlayercó luồng phát khác với luồng tải trước (#2495). - Thêm
cloneAndMovevàoShuffleModebằng một 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. - Khắc phục lỗi trong đó việc lập lịch nội bộ làm trễ khung hình cuối cùng khi tìm đến cuối trong khi tạm dừng. Hiện tại, bản sửa lỗi này 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 thao tác tìm kiếm thường xuyên (ví dụ: khi người dùng kéo thanh tua qua). Bạn có thể tuỳ chỉnh hành vi của chế độ tua bằngsetScrubbingModeParameters(..)trênExoPlayervàExoPlayer.Builder. - Cho phép tuỳ chỉnh dung sai tìm kiếm theo phân số ở chế độ tua.
- Tăng tốc độ hoạt động của bộ mã hoá và giải mã ở chế độ tua.
- Khắc phục lỗi mà các 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, chẳng hạn như khi tải phụ đề bên cạnh (#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 kích thước 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 phụ đề) lên 26 MB, đủ lớn cho hình ảnh HDR siêu nét 50 MP (#2417).
- Thêm
PreCacheHelpercho phép các ứng dụng lưu trước vào bộ nhớ đệm một nội dung nghe nhìn duy nhất 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
CodecDbLiteđể cho phép tối ưu hoá các chế độ cài đặt mã hoá video theo chipset cụ thể. - 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 điền vào khoảng trống ban đầu (được thêm qua
addGap()) bằng âm thanh im lặ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 chuỗi, thì bạn không cần phải dùng cờ này. - Di chuyển giao diện
Muxertừmedia3-transformersangmedia3-muxer. - Đặt chế độ cài đặt
MediaItem.Builder().setImageDuration(long)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)bao gồm danh sách chỉnh sửa MP4 khi cắt để hướng dẫn trình phát 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 chuỗi 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 khi bắt đầu (#2552).
- Thêm tính năng hỗ trợ tìm kiếm trong MP4 phân mảnh có nhiều phầ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 các điểm tìm kiếm của 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 được nhận dạng (#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 các 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 do camera trước của iPhone chụp 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ừ siêu dữ liệu tốc độ bit thay đổi Xing, VBRI và các siêu dữ liệu tương tự không tìm kiếm được khi quay lại tìm kiếm tốc độ bit không đổi do
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- Âm thanh:
- Khắc phục lỗi
AnalyticsListener.onAudioPositionAdvancingkhông được gọi khi quá trình phát âm thanh bắt đầu rất gần với cuối nội dung nghe nhìn. - Thêm khả năng hỗ trợ cho tất cả cá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 tới
BaseAudioProcessor#flush()khỏiBaseAudioProcessor#reset(). - Cho phép trộn/giảm trộn công suất không đổi trong DefaultAudioMixer.
- Công khai
ChannelMappingAudioProcessor,TrimmingAudioProcessorvàToFloatPcmAudioProcessor(#2339). - Sử dụng
AudioTrack#getUnderrunCount()trongAudioTrackPositionTrackerđể phát hiện tình trạng thiếu hụt trongDefaultAudioSinkthay vì ước tính tốt nhất. - Cải thiện tính năng làm mượt dấu thời gian âm thanh trong trường hợp thiết bị đầu ra âm thanh bị trôi vị trí ngoài dự kiến.
- Khắc phục lỗi khiến tính năng đồng bộ hoá âm thanh/hình ảnh 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.
- Khắc phục lỗi
AnalyticsListener.onAudioPositionAdvancingkhông báo cáo thời gian khi âm thanh bắt đầu phát nhưng lại báo cáo thời gian của lần đo đầu tiên. - Khắc phục lỗi khôi phục âm thanh đa kênh sau khi chuyển về âm thanh nổi trên một số thiết bị (#2258).
- Khắc phục lỗi
- Video:
- Mở rộng giải pháp cho bề mặt 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 tại vị trí được yêu cầu.
- Mở rộng giải pháp cho bề mặt 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 xếp hàng các vùng đệm đầu vào chỉ giải mã. Cờ này sẽ báo hiệu cho bộ giải mã bỏ qua các vùng đệm chỉ giải mã, do đó giúp quá trình tìm kiếm diễn ra nhanh hơn. Bật chế độ này bằng cách nhấn vàoDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. - Cải thiện các quy trình kiểm tra hiệu suất của bộ mã hoá và giải mã cho bộ mã hoá và giải mã video phần mềm. Điều này có thể dẫn đến việc một số bản nhạc bổ sung 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 tệp VobSub trong tệp MP4 (#2510).
- Khắc phục tình trạng phát bị gián đoạn khi một phân đoạn phụ đề ban đầu không tải được và sau đó tải thành công, tiếp theo là một số phân đoạn phụ đề trống (#2517).
- Sửa SSA và SubRip để hiển thị một tín hiệu đang diễn ra khi bật phụ đề (#2309).
- Khắc phục lỗi khiến quá trình phát bị kẹt khi chuyển từ một luồng có lỗi phụ đề sang một luồng phát trực tiếp có bản phụ đề trống (#2328).
- Khắc phục lỗi phụ đề CEA-608 bị rối khi phát các luồng H.262 có chứa khung hình B (#2372).
- Thêm tính năng hỗ trợ cho phụ đề SSA bằng
CodecId = S_TEXT/SSAtrong các tệp Matroska. Trước đây,MatroskaExtractorchỉ hỗ trợCodecId = S_TEXT/ASS. Đây là biến thể "nâng cao" (v4+) của phụ đề SubStation Alpha (nhưng logic phân tích cú pháp của ExoPlayer giống nhau đối với cả hai biến thể) (#2384). - Thêm chế độ hỗ trợ cho thuộc tính
layertrong tệp phụ đề SubStation Alpha (SSA). Thuộc tính này dùng để xác định thứ tự z của 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à
TimelinethànhMetadataRetriever, đồng thời di chuyển tính năng này sang APIAutoCloseabledựa trên phiên bản. Sử dụngBuildermới để tạo một phiên bản choMediaItem, sau đó gọiretrieveTrackGroups(),retrieveTimeline()vàretrieveDurationUs()để nhậnListenableFuturecho siêu dữ liệu. Các phương thức tĩnh trước đây hiện không đượ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 số lượng bitmap được giải mã theo kích thước màn hình 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 có kích thước rất lớn (ví dụ: 50MP). - Thay đổi chữ ký của
DefaultRenderersFactory.getImageDecoderFactory()để lấy tham sốContext. - Căn chỉnh kích thước đầu ra bitmap tối đa được dùng trong
CompositionPlayervới kích thước đã dùng trongTransformer(nghĩa làCompositionPlayerkhông xem xét kích thước màn hình khi giải mã bitmap, không giống nhưExoPlayer).
- Giới hạn số lượng bitmap được giải mã theo kích thước màn hình 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 các tiêu đề 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ộ trộn:
- 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ộ trộn thay vìMediaCodec.BufferInfo. - Thêm
Muxer.Factory#supportsWritingNegativeTimestampsInEditList(mặc định là false).
- Tiện ích IMA:
- Khắc phục lỗi khiến một lỗi tải trong một quảng cáo có thể vô tình làm mất hiệu lực 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 hết khung giờ xem VOD bị 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 đưa vào hàng đợi
MediaPeriodQueuenữa (#2215).
- Phiên:
- Khắc phục lỗi trong đó các kết nối từ những bộ điều khiển Media3 không có đặc quyền của bên thứ ba sẽ bị bỏ qua.
- Xoá bước kiểm tra các lệnh có sẵn khi gửi lệnh tuỳ chỉnh đến
MediaBrowserServiceCompatcũ. Điều này tương đương với hành vi của các bộ điều khiển/trình duyệt cũ khi được 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 nhầm là một ngoại lệ tuỳ chỉnh liên tục. Điều này ngăn ứng dụng khôi phục.
- Khắc phục lỗi khiến 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 trong đó các thao tác của bộ điều khiển không được phiên xử lý có thể khiến bộ điều khiển ở trạng thái không hợp lệ.
- Khắc phục cảnh báo vi phạm khi khởi chạy không an toàn 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 thì luồng chính gây raIllegalStateException(#2265). - Không tự động hiện thông báo nếu người chơi thiết lập 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 khi thao tác tua trong một sự kiện phát trực tiếp trên
MediaControllercó thể gây raIllegalArgumentException. - Đối với các 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 tìm kiếm trong mục hiện tại cho các bộ điều khiển nội dung nghe nhìn của nền tảng để tránh các hiện tượng bất thường về 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 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ũ sẽ tạo raNullPointerException. - Khắc phục lỗi khiến việc gửi các thao tác tuỳ chỉnh, kết quả tìm kiếm hoặc yêu cầu getItem làm ứng dụng phiên cũ gặp sự cố với
ClassNotFoundException. - Khắc phục lỗi khi
MediaItem.LocalConfiguration.uriđược chia sẻ vớiMediaMetadatacủa các phiên trên nền tảng. Để cố ý 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 một lỗi Compose dẫn đến khoảng trống giữa việc đặt trạng thái nút ban đầu và quan sát sự thay đổi về trạng thái (ví dụ: hình dạng biểu tượng hoặc trạng thái được 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 các thành phần kết hợp và đối tượng giữ trạng thái vào mô-đun
media3-ui-composechoSeekBackButtonStatevàSeekForwardButtonState. - Thêm chế độ tua của ExoPlayer vào
PlayerControlView. Khi được bật, chế độ này sẽ chuyển trình phát sang 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 ngón tay khỏi màn hình. Bạn có thể bật chế độ tích hợp này bằngtime_bar_scrubbing_enabled = truetrong XML hoặc phương thứcsetTimeBarScrubbingEnabled(boolean)trong Java/Kotlin. - Khiến
PlayerSurfacechấp nhận một đối sốPlayercó thể rỗng.
- Khắc phục lỗi
- Nội dung đã tải xuống:
- Thêm tính năng hỗ trợ tải một phần cho các luồng phát trực tuyến tăng dần. Các ứng dụng có thể chuẩn bị một luồng truyền trực tuyến 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 nội dung nghe nhìn dựa trên thời gian mà quá trình tải xuống sẽ bao gồm.DownloadRequestđược trả về mang theo dải byte đã phân giải, nhờ đó có thể tạoProgressiveDownloadervà tải nội dung xuống tương ứng. - Thêm
DownloadHelper.Factorymà các phương thứcDownloadHelper.forMediaItem()tĩnh sẽ được thay thế. - Thêm
Factorycho các phương thức triển khaiSegmentDownloader. - Thêm tính năng hỗ trợ tải một phần cho các luồng thích ứng. Các ứ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 nội dung nghe nhìn dựa trên thời gian mà bản tải xuống sẽ bao gồm.DownloadRequestđược trả về sẽ mang theo phạm vi thời gian đã phân giải, nhờ đó, bạn có thể tạo mộtSegmentDownloadercụ thể và tải nội dung tương ứng xuống.
- Thêm tính năng hỗ trợ tải một phần cho các luồng phát trực tuyến tăng dần. Các ứng dụng có thể chuẩn bị một luồng truyền trực tuyến 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 khi các thay đổi về lựa chọn nội dung đa phương tiện 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). - Khắc phục lỗi khiến quá trình phát bị tạm dừng khi bắt đầu một luồng quảng cáo xen kẽ trước một quảng cáo trong video và hệ thống đã cố gắng phân giải danh sách tài sản cho quảng cáo không chính xác (#2558).
- Khắc phục lỗi phân tích cú pháp danh sách phát để chấp nhận
\f(nguồn cấp dữ liệu biểu mẫu) trong các giá trị thuộc tính chuỗi được trích dẫn (#2420). - Hỗ trợ việc 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 các lỗi tải danh sách phát không được truyền đi sau khi một chương trình 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 các bản âm thanh đã được nhóm (#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 vấn đề trong đó bộ điều chỉnh chế độ tua 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ây ra một ngoại lệ khi quy trình kết xuất đã đọc các mẫu vượt quá thời lượng mới (#2440).
- Khắc phục lỗi không tuân theo lệnh chuyển hướng khi sử dụng các tham số truy vấn CMCD (#2475).
- Khắc phục vấn đề trong đó bộ điều chỉnh chế độ tua 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 giải mã (FFmpeg, VP9, AV1, v.v.):
- Khắc phục lỗi
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangekhông có tác dụng đối với các tiện ích của bộ giải mã âm thanh (#2258).
- Khắc phục lỗi
- Tiện ích truyền (cast):
- Tiện ích kiểm thử:
- Thêm
advance(player).untilPositionAtLeastvàuntilMediaItemIndexvàoTestPlayerRunHelperđể chuyển người chơi cho đến khi đạt được một vị trí cụ thể. Trong hầu hết các trường hợp, các 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để dùng lại trong các kiểm thử khác. - Xoá
transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)vàtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). Thay vào đó, hãy 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 codec do
ShadowMediaCodecConfigbáo cáo.
- Thêm
- Xoá các biểu tượng không dùng nữa:
- Xoá 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 conDashDownloader,HlsDownloadervàSsDownloader. - Đã xoá
Player.hasNext(),Player.hasNextWindow()không dùng nữa. Thay vào đó, hãy sử dụngPlayer.hasNextMediaItem(). - Đã xoá
Player.next()không dùng nữa. Thay vào đó, hãy sử dụngPlayer.seekToNextMediaItem(). - Đã xoá
Player.seekToPreviousWindow()không dùng nữa. Sử dụngPlayer.seekToPreviousMediaItem(). - Đã xoá
Player.seekToNextWindow()không 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).
- Xoá 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. Đây 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 lẽ ra 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 chung:
- Thêm phương thức
PlaybackParameters.withPitch(float)để dễ dàng sao chép mộtPlaybackParametersbằng giá trịpitchmới (#2257).
- Thêm phương thức
- ExoPlayer:
- Khắc phục vấn đề 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 đề trong đó
ProgressiveMediaPeriodgửiIllegalStateExceptionkhiPreloadMediaSourcecố 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á các nhóm quảng cáo. Người dùng vẫn cần truyền vào 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ột mụcMp4AlternateGroupDatatrongFormat.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 đề về việc chuyển tải, trong đó vị trí có thể bị kẹt khi phát danh sách phát nội dung ngắn (#1920).
- Phiên:
- Giảm thời gian chờ tổng hợp cho các lệnh gọi lại
MediaSessioncủa nền tảng từ 500 xuống 100 mili giây và thêm một bộ thiết lập thử nghiệm để cho phép các ứng dụng định cấu hình giá trị này. - Khắc phục vấn đề trong đó thông báo xuất hiện lại sau khi người dùng đóng (#2302).
- Khắc phục lỗi khiến phiên trả về dòng thời gian gồm một mục khi trình phát bao bọc thực sự trống. Điều này xảy ra khi trình phát được bao bọc không có
COMMAND_GET_TIMELINEtrong khiCOMMAND_GET_CURRENT_MEDIA_ITEMcó sẵn và trình phát được bao bọc không có nội dung (#2320). - Khắc phục lỗi khi lệnh gọi
MediaSessionService.setMediaNotificationProviderbị bỏ qua âm thầm sau các hoạt động tương tác khác với dịch vụ, chẳng hạn nhưsetForegroundServiceTimeoutMs(#2305).
- Giảm thời gian chờ tổng hợp cho các lệnh gọi lại
- Giao diện người dùng:
- Cho phép
PlayerSurfacehoạt động vớiExoPlayer.setVideoEffectsvàCompositionPlayer. - Khắc phục lỗi không thể kết hợp lại
PlayerSurfacevớiPlayermới.
- Cho phép
- Tiện ích HLS:
- Khắc phục vấn đề không đặt thời lượng đoạn trong
CmcdDatacho nội dung nghe nhìn HLS, gây ra lỗi khẳng định khi xử lý các đoạn nội dung nghe nhìn được mã hoá (#2312).
- Khắc phục vấn đề không đặt thời lượng đoạn trong
- Tiện ích RTSP:
- Thêm chế độ hỗ trợ cho URI có giao thức RTSPT làm cách định cấu hình phiên RTSP để dùng TCP (#1484).
- Tiện ích truyền (cast):
- Thêm tính năng hỗ trợ 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 chung:
- 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 Gradle. Nâng cấp thư viện KotlinX Coroutines từ 1.8.1 lên 1.9.0.
- Xoá phương thức
Format.toBundle(boolean excludeMetadata), thay vào đó hãy sử dụngFormat.toBundle(). - Khắc phục lỗi trong
SimpleBasePlayerkhi việc đặt mộ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ớiMediaExtractorcủa nền tảng. - Thêm tính năng hỗ trợ thử nghiệm "ExoPlayer" làm nóng trước để phát bằng
MediaCodecVideoRenderer. Bạn có thể định cấu hìnhDefaultRenderersFactorythông quaexperimentalSetEnableMediaCodecVideoRendererPrewarmingđể cung cấpMediaCodecVideoRendererphụ choExoPlayer. Nếu được 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ễ chuyển đổi giữa các 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 lập tức 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ó sẵn ngay sau khi tạo trình phát nữa. Bạn có thể dùng
AnalyticsListener.onAudioSessionIdChangedđể nghe bản cập nhật ban đầu nếu cần. - Hãy cân nhắc ngôn ngữ khi chọn một phụ đề. Theo mặc định, hãy chọn một bản video "chính" có ngôn ngữ 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).
- Di chuyển
BasePreloadManager.ListenerđếnPreloadManagerListenercấp cao nhất. RenderersFactory.createSecondaryRenderercó thể được triển khai để cung cấp trình kết xuất phụ cho quá trình làm nóng trước. Tính năng làm nóng trước giúp chuyển đổi các mục nội dung nghe nhìn nhanh hơn trong quá trình phát.- Cho phép gửi
CmcdDatacho các yêu cầu tệp kê khai ở các định dạng truyền phát 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épAdPlaybackStatestăng lên bằng cách thêm các 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à đưa ra một ngoại lệ. - Khắc phục vấn đề có thể hiển thị thêm các khung hình chỉ giải mã liên tiếp khi chuyển sang nội dung đa phương tiện sau một quảng cáo trong video.
- Hãy để
DefaultRenderersFactorythêm hai thực thểMetadataRendererđể cho phép các ứng dụng nhận được 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 quá trình phát bị tạm dừng hay không (#1785).
- Thêm lựa chọn vào
ClippingMediaSourceđể cho phép cắt trong nội dung nghe nhìn không thể tua. - Khắc phục lỗi khi thao tác tìm kiếm 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 trong đó
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 mã thành các định dạng tương thích ngược khác.
- Thêm tính năng hỗ trợ chuyển mã và truyền trực tiếp định dạng Dolby Vision (cấu hình 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 chuyển tiếp các sự kiện chỉnh sửa 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 Transformer bằngTransformer.Builder.setUsePlatformDiagnostics(false). - Chia
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: Khắc phục vấn đề xử lý các 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 việc 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ộ mà không có khung đồng bộ hoá nào trước đó (#2062). - Khắc phục vấn đề trong đó luồng TS có thể bị treo trên một số thiết bị (#2069).
- FLAC: Thêm tính năng hỗ trợ cho các tệp FLAC 32 bit. Trước đây, những video 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 quá trình phát tiếp tục (trước đây, lỗi này được gọi khi quá trình phát bị tạm dừng). - Đừng bỏ qua
SonicAudioProcessorkhiSpeedChangingAudioProcessorđược định cấu hình bằng các tham số mặc định. - Khắc phục tình trạng tràn số âm trong
Sonic#getOutputSize()có thể khiếnDefaultAudioSinkbị tạm dừng. - Sửa
MediaCodecAudioRenderer.getDurationToProgressUs()vàDecoderAudioRenderer.getDurationToProgressUs()để các thao tác tìm kiếm đặt lại đúng khoảng thời gian đã cung cấp. - Đặt
androidx.media3.common.audio.SonicAudioProcessorlàm số thường trực. - 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 thành phần giữ chỗ (#1905). - Thêm tính năng phân tích cú pháp phần phụ thuộc mẫu
ExoPlayerAV1 thử nghiệm để tăng tốc độ tìm kiếm. Bật tính năng này bằng APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesmới. - Thêm API
ExoPlayerthử nghiệm để loại bỏ các vùng đệm đầu vào của bộ giải mãMediaCodecVideoRendererđến muộn không phụ thuộc vào. Bật chế độ này bằng cách nhấn vàoDefaultRenderersFactory.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ã mọi khung hình đang chờ xử lý rất chậm (#1973).
- Loại trừ các thiết bị Xiaomi và OPPO khỏi chế độ màn hình 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 hỗ trợ cho phụ đề VobSub (#8260).
- Ngừng tải trước tất cả các tệp phụ đề được định cấu hình bằng
MediaItem.Builder.setSubtitleConfigurationsvà thay vào đó, chỉ tải một tệp nếu tệp đó được chọn bằng tính năng chọn phụ đề (#1721). - TTML: Thêm tính năng hỗ trợ tham chiếu
tts:originvàtts:extentbằngstyle(#2953). - Hạn chế 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ố lượng 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 tình trạng treo khi phát nếu danh sách phát có chứa các mục bị cắt có phụ đề CEA-608 hoặc CEA-708.
- Khắc phục lỗi
IllegalStateExceptionkhi tệp SSA chứa một chú thích có thời lượng bằng 0 (thời gian bắt đầu và thời gian kết thúc bằng nhau) (#2052). - Ngăn chặn (và ghi nhật ký) các 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 vấn đề xử lý các ký tự UTF-8 nhiều byte trong tệp WebVTT bằng cách sử dụng ký tự kết thúc dòng CR (#2167).
- DRM (Quản lý bản quyền nội dung số):
- Khắc phục 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).
- Khắc phục lỗi
- Hiệu ứng:
- Đã di chuyển chức năng của
OverlaySettingsvàoStaticOverlaySettings.OverlaySettingscó thể được phân lớp con để cho phép các chế độ cài đặt lớp phủ động.
- Đã di chuyển chức năng của
- Bộ trộn:
- 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ã nhận dạngintthay vìTrackToken.Mp4MuxervàFragmentedMp4Muxerkhông còn triển khai giao diệnMuxernữa.- Tắt tính năng sao chép và tạo hàng loạt mẫu
Mp4Muxertheo mặc định. - Khắc phục một lỗi trong
FragmentedMp4Muxertạo ra nhiều đoạn khi chỉ có bản âm thanh được ghi.
- Di chuyển
- Phiên:
- Duy trì trạng thái dịch vụ trên 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. Điều này cho phép người dùng tiếp tục phát trong khoảng thời gian chờ này mà không gặp phải các quy định hạn chế đối với dịch vụ trên nền trước 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ụ trên nền trước trướcstopSelf()khi ghi đèonTaskRemoved, hãy sử dụngMediaSessionService.pauseAllPlayersAndStopSelf()thay thế. - 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 MediaSession ACTION_PLAY và ACTION_PAUSE của nền tảng Android để chỉ đặt một trong các thao tác đó theo các lệnh hiện có và cũng chấp nhận nếu chỉ đặt một trong các thao tác đó.
- Thêm
Contextlàm tham số vàoMediaButtonReceiver.shouldStartForegroundService(#1887). - Khắc phục lỗi khi gọi một phương thức
PlayertrênMediaControllerđược kết nối với một phiên cũ sẽ loại bỏ các thay đổi trong bản cập nhật đang chờ xử lý. - Cho phép
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).
- Duy trì trạng thái dịch vụ trên 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. Điều này cho phép người dùng tiếp tục phát trong khoảng thời gian chờ này mà không gặp phải các quy định hạn chế đối với dịch vụ trên nền trước 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 các đối tượng 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 các đối tượng 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 các nguồn dữ liệu vẫ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 sẽ đọc quảng cáo xen kẽ HLS của một 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. Các ứng dụng có thể dùng đối tượng 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-CODECStrong 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 tìm kiếm để đồng bộ hoá vị trí trong luồng HLS (#2209).
- Thêm phiên bản đầu tiên của
- Tiện ích DASH:
- Thêm chế độ 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 việc xử lý các chuyển đổi theo giai đoạn trong sự kiện phát trực tiếp, trong đó giai đoạn này chứa các mẫu nội dung nghe nhìn ngoài thời lượng giai đoạn đã khai báo (#1698).
- Khắc phục vấn đề khi các bộ điều chỉnh được đánh dấu bằng
adaptation-set-switchingnhưng các ngôn ngữ hoặc cờ vai trò khác nhau lại được hợp nhất với nhau (#2222).
- Tiện ích 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):
- Tăng phần phụ thuộc
play-services-cast-frameworklê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).
- Tăng phần phụ thuộc
- Ứng dụng minh hoạ:
- Mở rộng
demo-composebằng các nút bổ sung và cải thiện khả năng tích hợpPlayerSurfacevới tính năng hỗ trợ thu phóng 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 trongEditedMediaItem.Builder.setEffects()và truyền bộ xử lý đó đếnTransformer.start().setVideoEffects(), đặt hiệu ứng video trongEditedMediaItem.Builder.setEffects()và truyền hiệu ứng đó đếnTransformer.start().setRemoveAudio(), hãy 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 dùngEditedMediaItem.Builder.setFlattenForSlowMotion()để làm phẳngEditedMediaItemđược truyền đếnTransformer.start().setListener(), hãy dùngaddListener(),removeListener()hoặcremoveAllListeners().
- Xoá các phương thức
Transformer.Listenerkhông dùng nữa sau đây:onTransformationCompleted(MediaItem), thay vào đó, hãy dùngonCompleted(Composition, ExportResult).onTransformationCompleted(MediaItem, TransformationResult), thay vào đó, hãy dùngonCompleted(Composition, ExportResult).onTransformationError(MediaItem, Exception), thay vào đó, hãy dùngonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationException), thay vào đó, hãy dùngonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationResult, TransformationException), hãy dùngonError(Composition, ExportResult, ExportException).onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), hãy 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. - Đã xoá 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). - Bạn có thể đạt được chức năng tương đương của
getRendererCapabilities(RenderersFactory)bằng cách tạo mộtDefaultRendererCapabilitiesListbằngRenderersFactoryvà gọiDefaultRendererCapabilitiesList.getRendererCapabilities().
- Hàm khởi tạo
- Đã xoá 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().
- 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ã đã báo cáo với API nền tảng này (#1641).
- Công cụ trích xuất:
- MP3: Đừng dừng phát sớm khi bảng nội dung của khung
VBRIkhông bao gồm tất cả dữ liệu MP3 trong một tệp (#1904).
- MP3: Đừng dừng phát sớm khi bảng nội dung của khung
- Video:
- Quay lại việc sử dụng các giá trị tỷ lệ khung hình bằng pixel
MediaCodecAdapterđược cung cấp khi được cung cấp trong quá trình xử lýonOutputFormatChanged(#1371).
- Quay lại việc sử dụng các giá trị tỷ lệ khung hình bằng pixel
- Văn bản:
- Khắc phục lỗi trong
ReplacingCuesResolver.discardCuesBeforeTimeUstrong đó tín hiệu đ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ài hát và thể loại từ bình luận Vorbis vào
MediaMetadata(#1958).
- Trích xuất số đĩa/bài hát 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 chung:
- Thêm
ForwardingSimpleBasePlayercho phép chuyển tiếp đến một trình phát khác với các điều chỉnh nhỏ trong khi vẫn đảm bảo tính nhất quán hoàn toàn và xử lý trình nghe (#1183). - Thay thế
SimpleBasePlayer.State.playlistbằng phương thứcgetPlaylist(). - Thêm chế độ ghi đè cho
SimpleBasePlayer.State.Builder.setPlaylist()để trực tiếp chỉ địnhTimelinevàTrackshiện tại cũng nhưMetadatathay 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 tiện ích tạm ngưng
Player.listenđể xoay một coroutine nhằm theo dõiPlayer.Eventsđến thư việnmedia3-common-ktx. - Xoá chú thích
@DoNotInlinekhỏi các lớp bên trong được tách dòng theo cách thủ công nhằm 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 gọi ngoài dòng như thế này để tránh lỗi thời gian chạy (do đó, không còn cần thiết phải gọi ngoài dòng theo cách thủ công). Tất cả người dùng Gradle của thư viện đều phải đang sử dụng một phiên bản của Trình bổ trợ Android cho Gradle có sử dụng một phiên bản của R8 thực hiện việc này, docompileSdk = 35. Người dùng thư viện có hệ thống bản dựng không phải Gradle sẽ cần đảm bảo bước rút gọn/làm rối mã 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 đây, hệ thống không 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 hoạt động triển khaiPreloadMediaSource.PreloadControlthực hiện hành động khi xảy ra lỗi. - Thêm
BasePreloadManager.Listenerđể truyền các 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ếu thiết bị quảng cáo hỗ trợ tính năng này).
- Hoãn cuộc 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 không được thực hiện nếu bạn không bật tính năng xử lý tiêu điểm âm thanh (#1616). - Cho phép phát bất kể thời lượng được lưu vào bộ nhớ đệm khi quá trình tải không thành công (#1571).
- Thêm
AnalyticsListener.onRendererReadyChanged()để báo hiệu khi các trình kết xuất riêng lẻ cho phép phát sẵn sàng. - Khắc phục lỗi
MediaCodec.CryptoExceptionđôi khi được báo cáo là "lỗi không mong muốn về thời gian chạy" khiMediaCodechoạt động ở 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, hãy 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 chế độ triển khai
ForwardingRendererchuyển tiếp tất cả cá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. Các ứng dụng có thể bật tính năng tải trước bằng cách gọi
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)cho phù hợp. Theo mặc định, tính năng tải trước sẽ bị tắt. Khi người dùng chọn sử dụng và để không ảnh hưởng đến 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. Các ứng dụng có thể thay đổi hành vi này bằng cách triển khaiLoadControl.shouldContinuePreloading()cho phù hợp (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 một ứ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àExoPlayervới các cấu hình được chia sẻ 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[]. - Không dùng
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])nữa và đánh dấu phương thức là phương thức cuối cùng để ngăn việc ghi đè. Bạn nên sử 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 lên từ bên ngoài (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 khiến quá trình phát bị dừng hoàn toàn.
Thay vào đó, bản phụ đề có vấn đề sẽ bị tắt và quá trình phát các bản phụ đề còn lại sẽ tiếp tục (#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) được liên kết sẽ được phát ra thông qua các lệnh gọi lại
onLoadError. - Trong quá trình xử lý phụ đề cũ (trong quá trình kết xuất), chỉ các lỗi tải liên kết mới được phát ra thông qua lệnh gọi lại
onLoadErrortrong khi các lỗi phân tích cú pháp sẽ bị bỏ qua một cách âm thầm (đây là hành vi có từ trước).
- 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) được liên kết sẽ được phát ra thông qua các 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 một phương thức thiết lập vào
SntpClientđể thiết lập thời gian tối đa đã trôi qua kể từ lần cập nhật gần đây nhất mà sau đó ứng dụng sẽ được khởi động lại (#1794).
- Giờ đây, bạn có thể gọi
- Bộ chuyển đổi:
- Thêm
SurfaceAssetLoader, hỗ trợ việc đưa dữ liệu video vào hàng đợi đến Transformer thông quaSurface. ImageAssetLoaderbáo cáo đầu vào không được hỗ trợ thông quaAssetLoader.onErrorthay vì gửiIllegalStateException.- Bắt buộc phải đặt thời lượng hình ảnh bằng
MediaItem.Builder.setImageDurationMsđể 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 EditedMediaItem âm thanh.
- Thêm
- Chọn bản phụ đề/âm thanh:
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 bằng 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 mẫu tham chiếu cho các mẫu tiếp theo. - Thêm lựa chọn bật tính năng tìm kiếm dựa trên chỉ mục trong
AmrExtractor. - Xử lý các tệp MP3 có kích thước lớn hơn 128 kB giữa các khung hình 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à những 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 các byte MP3, giờ đây sẽ ngừng phát ở cuối dữ liệu MP3 thay vì gặp lỗi
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - Khắc phục lỗi xử lý mẫu quảng cáo trước video cho các vị trí bắt đầu nội dung nghe nhìn không phải là khung hình chính khi xử lý danh sách chỉnh sửa trong tệp MP4 (#1659).
- Cải thiện việc tính toán tốc độ khung hình bằng cách sử dụng thời lượng của nội dung nghe nhìn trong hộp
mdhdtrongMp4ExtractorvàFragmentedMp4Extractor(#1531). - Khắc phục lỗi 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ưng giờ đây,media_timeđượ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 quá trình tính toán
endIndicescho MP4 có 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 chế độ hỗ trợ định dạng tệp phương tiệ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 bắt đầu từ tiện ích phiên bản S 7 thay vì API cấp 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, các 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ị "open" sau một lệnh gọi không thành công đếnopen()(do tài nguyên "không tìm thấy") và trước một 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 cho phép phân biệt giữa HTTP 404 (có tiêu đề) và "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 khi tua.
- Khắc phục hiện tượng âm thanh bị giật có thể xảy ra trong quá trình tìm kiếm.
- Khắc phục lỗi tích luỹ việc cắt bớt cho thuật toán kéo dài thời gian/thay đổi cao độ của Sonic.
- Khắc phục lỗi trong
SpeedChangingAudioProcessorgây ra hiện tượng giảm khung hình đầu ra.
- Video:
MediaCodecVideoRenderertránh giải mã các mẫu không được kết xuất cũng như không được dùng làm mẫu tham chiếu bởi các mẫu khác.- Trên API 35 trở lên,
MediaCodecAdapterhiện có thể nhận đượcnullSurfacetrongconfigurevà các lệnh 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ợ phương thức này (MediaCodecInfo.detachedSurfaceSupported). - Sử dụng các giá trị tỷ lệ khung hình bằng pixel
MediaCodecAdapterđược cung cấp nếu có khi xử lýonOutputFormatChanged(#1371). - Thêm giải pháp cho một 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 một
VoiceSpantuỳ chỉnh và điền sẵn thông tin 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 (vượt quá
long64 bit khi được biểu thị bằng micro giây và nhân với cơ sở thời gian90,000MPEG) đượ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 trên các luồng DASH có nhiều khoảng thời gian khi bật phụ đề CEA-608 (#1863).
- Thêm một
- Siêu dữ liệu:
- Chỉ định loại
C.TRACK_TYPE_METADATAcho các bản nhạc có nội dung lạnh giá 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
DefaultVideoFrameProcessorcho hoạt động mở rộng quy môSurfaceTexturekhông đáng kể.SurfaceTexturecó thể bao gồm một tỷ lệ nhỏ cắt bỏ đường viền 1 texel xung quanh rìa của vùng đệm bị cắt. Giờ đây, điều này được xử lý để đầu ra gần với kết quả dự kiến hơn. - Tăng tốc độ
DefaultVideoFrameProcessor.queueInputBitmap(). Do đó, việc xuất hình ảnh sang video bằngTransformersẽ nhanh hơn.
- Thêm giải pháp
- Tiện ích IMA:
- Khắc phục lỗi 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 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ụ này luôn được khởi động và không thể ngăn chặn quá trình phát mà không khiến hệ thống gặp sự cố dịch vụ bằngForegroundServiceDidNotStartInTimeException(#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 đặt broadcast receiver cho các ý đị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 những gì được gọi là
Custom browse actionsbằng thư viện cũ cóMediaBrowserCompat. Xin lưu ý rằng các nút lệnh Media3 cho các mục nội dung nghe nhìn đều có sẵn cho cảMediaBrowservàMediaController. Xem phần Triển khai các thao tác duyệt qua tuỳ chỉnh. - Khắc phục lỗi khiến đôi khi bộ điều khiển Media3 không cho phép ứng dụng phiên bắt đầu một dịch vụ trên nền trước sau khi yêu cầu
play(). - Hạn chế
CommandButton.Builder.setIconUrichỉ chấp nhận URI nội dung. - Truyền các 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ác gợi ý kết nối được truyền vào 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 đó
MediaBrowserđược kết nối với một 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 các 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:
- Chọn sử dụng giải pháp
PlayerView-in-Compose-AndroidViewcho video bị kéo giãn/cắt, do có vấn đề với 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 tương tác nhấp (#1590, #184). - Khắc phục lỗi không hoạt động của lựa chọn "Không có" trong lựa chọn văn bản nếu có các lựa chọn ưu tiên về lựa chọn phụ đề do ứng dụng xác định.
- Chọn sử dụng giải pháp
- Tiện ích DASH:
- Thêm chế độ 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 Phát trực tuyến mượt mà:
- Khắc phục lỗi
Bad magic number for Bundlekhi phát các luồng SmoothStreaming có bản phụ đề (#1779).
- Khắc phục lỗi
- Tiện ích RTSP:
- Tiện ích giải mã (FFmpeg, VP9, AV1, v.v.):
- Thêm mô-đun bộ giải mã IAMF, mô-đun này hỗ trợ phát các tệp MP4 có chứa các bản nhạc IAMF bằng thư viện gốc libiamf để tổng hợp âm thanh.
- Chế độ phát được bật với bố cục âm thanh nổi cũng như 5.1 có tính năng không gian hoá cùng với tính năng theo dõi chuyển động của đầu (không bắt buộc), nhưng hiện không hỗ trợ chế độ phát âm thanh hai tai.
- Thêm tính năng hỗ trợ trang 16 KB cho các tiện ích giải mã trên Android 15 (#1685).
- Thêm mô-đun bộ giải mã IAMF, mô-đun này hỗ trợ phát các tệp MP4 có chứa các bản nhạc IAMF bằng thư viện gốc libiamf để tổng hợp âm thanh.
- Tiện ích truyền:
- Dừng dọn dẹp dòng thời gian sau khi CastSession ngắt kết nối. Việc này cho phép ứng dụng người gửi tiếp tục phát cục bộ sau khi ngắt kết nối.
- Điền
DeviceInfocủa CastPlayer khi cóContext. Điều này cho phép liên kếtMediaSessionvớiRoutingSession, điều cần thiết để tích hợp Output Switcher (Bộ chuyển đổi đầu ra) (#1056).
- Tiện ích kiểm thử:
DataSourceContractTesthiện bao gồm các kiểm thử để xác minh:- Luồng đầu vào
read positionđã được cập nhật. - Bộ đệm đầu ra
offsetđược áp dụng đúng cách.
- Luồng đầu vào
- Ứng dụng minh hoạ
- Giải quyết vấn đề rò rỉ bộ nhớ trong ứng dụng minh hoạ video 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: Khắc phục 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: Khắc phục lỗi
- Văn bản:
- TTML: Khắc phục vấn đề 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
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 vấn đề xử lý các giá trị
- DRM (Quản lý bản quyền nội dung số):
- Khắc phục lỗi
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEtrên các thiết bị có API 31 trở lên phát nội dung Widevine L1. Lỗi này xảy ra do việc triển khai phương thứcMediaDrm.requiresSecureDecoder(#1603) của khung chưa hoàn chỉnh.
- Khắc phục lỗi
- Hiệu ứng:
- Thêm phương thức
release()vàoGlObjectsProvider.
- Thêm phương thức
- Phiên:
- Biến thao tác nhấn đúp vào
KEYCODE_HEADSETHOOKthành thao tác "chuyển đến tiếp theo", như đã ghi lại (#1493). - Xử lý
KEYCODE_HEADSETHOOKdưới dạng lệnh "phát" trongMediaButtonReceiverkhi quyết định có bỏ qua lệnh đó hay không để tránhForegroundServiceDidNotStartInTimeException(#1581).
- Biến thao tác nhấn đúp vào
- Tiện ích RTSP:
- Bỏ qua phần mô tả nội dung nghe nhìn không hợp lệ 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 chung:
- Chuyển tiếp các lệnh gọi tìm kiếm không hoạt động giả định đế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 trên quá trình đơ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ư được 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 tìm kiếm không hoạt động giả định đế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 dorankingDataxác định. 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 hoạt động triển khaiLoadControlhỗ trợ nhiều người chơi. - Xóa
Buffer.isDecodeOnly()vàC.BUFFER_FLAG_DECODE_ONLY. Bạn không cần đặt cờ này vì trình kết xuất và bộ giải mã sẽ quyết định bỏ qua các vùng đệm dựa trên dấu thời gian. Các chế độ triển khaiRenderertuỳ chỉnh phải kiểm tra xem thời gian đệm 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 quy trình 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 các vùng đệm đó. - 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 giữ lại trong khi vẫn giữ phiên bản trình quản lý tải trước. - Thêm
ExoPlayer.setPriority()(vàBuilder.setPriority()) để xác định giá trị mức độ ưu tiên dùng trongPriorityTaskManagervà cho tầm quan trọng của MediaCodec từ API 35. - Khắc phục vấn đề khi cập nhật thời gian đệm lại gần đây nhất, dẫn đến khoá
bs(thiếu bộ nhớ đệm) không chính xác trong CMCD (#1124). - Thêm
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)để cho biết nguồn đã tải đến cuối. Điều này cho phépDefaultPreloadManagervà các phương thức triển khaiPreloadMediaSource.PreloadControltuỳ chỉnh tải trước nguồn tiếp theo hoặc thực hiện các thao tác khác. - Khắc phục lỗi trong đó tính năng bỏ qua đoạn im lặng ở cuối các 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 các tài nguyên codec đượ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 quá trình chuẩn bị nội dung nghe nhìn ban đầu hoàn tất (#1358). - Khắc phục lỗi khi chế độ phát chuyển sang
STATE_ENDEDkhi chuẩn bị lại 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, hãy đổi tên IntDefs trongDefaultPreloadManager.Stagecho phù hợp. - Thêm tính năng hỗ trợ thử nghiệm cho tính năng lập lịch động để điều chỉnh công việc cho phù hợp hơn với chu kỳ hoạt động của 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 chế độ này bằng cách sử dụng
experimentalSetDynamicSchedulingEnabled()khi thiết lập phiên bản ExoPlayer. - Thêm
Renderer.getDurationToProgressUs().Renderercó thể triển khai phương thức này để trả về cho ExoPlayer khoảng thời gian mà quá trình phát phải tiến lên để trình kết xuất tiến hành. NếuExoPlayerđược đặt thànhexperimentalSetDynamicSchedulingEnabled(), 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ủa mình. - Thêm
MediaCodecAdapter#OnBufferAvailableListenerđể cảnh báo khi bộ đệm đầu vào và đầu ra có sẵn đểMediaCodecRenderersử dụng.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 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 kiếm 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, chẳng hạn như không báo cáo tình trạng mất quyền phát âm thanh hoàn toàn hoặc tạm thời trong khi trình phát đang tạm dừng (#1436).
- Khắc phục
IndexOutOfBoundsExceptiontiềm ẩn do các trình trích xuất báo cáo thêm các bản nhạc 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
IllegalArgumentExceptiontiềm ẩn khi xử lý lỗi trình phát xảy ra trong khi đọc trước vào 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 ra bản phụ đề tương ứng trong tệp đầu ra. - Nới lỏng các bước kiểm tra cấp độ H.264 để tối ưu hoá việc cắt.
- Thêm tính năng hỗ trợ thay đổi giữa nội dung đa phương tiện đầu vào SDR và HDR trong một chuỗi.
- Thêm tính năng hỗ trợ cho hiệu ứng âm thanh ở cấp thành phần.
- 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 đề
DefaultAudioMixerkhông xuất ra đúng số lượng byte sau khi được đặt lại và sử dụng lại. - Khắc phục một lỗi của bộ giải mã khiến số lượng kênh âm thanh bị giới hạn ở mức âm thanh nổi khi xử lý đầu vào PCM.
- Khi chọn các bản âm thanh trong
ExoPlayerAssetLoader, hãy bỏ qua các hạn chế về số lượng kênh âm thanh vì những hạn chế này chỉ áp dụng cho chế độ 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ừ các lược đồ URI nội dung. (#1373).
- Điều chỉnh thời lượng của 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 dùng trường này cho thông tin chi tiết về bộ mã hoá và giải mã, hãy dùngDefaultDecoderFactory.listener. Trong trường hợp có ngoại lệ về codec, thông tin chi tiết về codec 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 truyề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 đề xuất hiện 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). Điều này giúp loại trừ dữ liệu đoạn video giới thiệu không phát được (ví dụ: ảnh bìa album) khỏi các phép tính toán tốc độ bit không đổi khi tìm kiếm, 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à các dữ liệu khác trong khung hình
Info(nếu có) để tính tốc độ bit trung bình cho hoạt động tìm kiếm tốc độ bit không đổi, thay vì ngoại suy từ tốc độ bit của khung hình sau khung hìnhInfo, tốc độ này có thể nhỏ một cách giả tạo, ví dụ: khung hìnhPCUT(#1376). - Sửa lỗi trích xuất định dạng âm thanh PCM trong vùng chứa AVI.
- Âm thanh:
- Khắc phục các thuộc tính mã hoá DTS:X Profile 2 để phát lại truyền qua (#1299).
- Đối với quá trình phát được chuyển bớt, 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. - Khắc phục lỗi trong
SilenceSkippingAudioProcessor, trong đó các quá trình chuyển đổi giữa các định dạng âm thanh khác nhau (ví dụ: từ âm thanh nổi sang âm thanh đơn kênh) có thể khiến bộ xử lý đưa ra một ngoại lệ (#1352). - Triển khai
MediaCodecAudioRenderer.getDurationToProgressUs()để ExoPlayer sẽ lên lịch động cho vòng lặp công việc chính của mình vào thời điểm MediaCodecAudioRenderer có thể tiến hành.
- Video:
- Khắc phục vấn đề
Listener.onRenderedFirstFrame()xuất hiện quá sớm khi chuyển đổi các bề mặt trong 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ể xảy ra do việc bật trình kết xuất video trong quá trình 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í tìm kiếm 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 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ề hoạt động tuỳ chỉnh để biết cách kết nối 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à mọi hoạt động hỗ trợ giải mã phụ đề cũ) sẽ bị xoá trong một bản phát hành trong tương lai. - Các ứng dụng có quy trình 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ã theo độ dài chạy để phân giải
0dưới dạng chỉ mục màu, thay vì giá trị màu theo nghĩa đen (#1367). - CEA-708: Bỏ qua giá trị
rowLock. Quy cách CEA-708-E S-2023 nêu rõ rằng cảrowLockvàcolumnLockđều được giả định là đúng, bất kể giá trị có trong luồng (chưa triển khai tính năng hỗ trợcolumnLocknên tính năng này luôn được giả định là sai).- Thay đổi này ban đầu có trong ghi chú phát hành
1.3.0-alpha01, nhưng vô tình bị huỷ 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 sẽ xuất hiện trở lại.
- Thay đổi này ban đầu có trong ghi chú phát hành
- CEA-708: Tránh việc ExoPlayer thêm các dòng mới trùng lặp do cách xử lý đơn giản của lệnh "set pen location" (đặt vị trí bút) (#1315).
- Khắc phục
IllegalArgumentExceptiontừLegacySubtitleUtilkhi mẫu phụ đề WebVTT không chứa chú thích, chẳng hạn như trong 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 theo đĩa nhạc" (
soal), "sắp xếp theo nghệ sĩ" (soar) và "sắp xếp theo nghệ sĩ đĩ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 theo đĩa nhạc" (
- Hình ảnh:
- Thêm chế độ hỗ trợ cho lưới hình thu nhỏ DASH không 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 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, điều này không được ghi lại để hoạt động, nhưng đây là một cách hiệu quả hơn để truy cập vào các tài nguyên trong một gói khác thay vì theo tên. - Kiểm tra ngay xem
urlcó giá trị rỗng hay khô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 một URI thành một mảng byte trongopen(), thay vì được mã hoá cứng tại cấu trúc (#1405).
- Triển khai 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 HDR siêu cao.
- Thêm chế độ hỗ trợ cho EGL_GL_COLORSPACE_BT2020_HLG_EXT, giúp cải thiện đầu ra bề mặt HLG trong ExoPlayer.setVideoEffect và Debug SurfaceView của Transformer.
- Cập nhật việc 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 các giá trị x và y bằng cách nhân chúng với-1. - Khắc phục lỗi
TimestampWrappergặp sự cố khi được dùng vớiExoPlayer#setVideoEffects(#821). - Thay đổi không gian làm việc mặc định cho màu SDR từ màu tuyến tính sang video SDR BT 709 điện tử. 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 độ chói nhất quán trên nhiều phần 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 các 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 với nhau. - Thêm tính năng hỗ trợ HDR cho
TextOverlay. Bạn có thể điều chỉnh độ chói 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 quảng bá (bắt buộc đối với ứng dụng để phát luồng quảng cáo DAI) sang bản ổn định.
- Thêm
replaceAdTagParameters(Map <String, String>)vàoImaServerSideAdInsertionMediaSource.AdLoaderđể cho phép thay thế các tham số thẻ quảng cáo trong thời gian chạy. - Khắc phục lỗi
VideoAdPlayer.VideoAdPlayerCallback.onError()không được gọi khi xảy ra lỗi trình phát trong quá trình phát quảng cáo (#1334). - Chuyển SDK IMA lên phiên bản 3.33.0 để khắc phục
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ị có thể giữ nguyên là false đối với bộ điều khiển ngay cả khi có lệnh liên kết. - Thêm hằng số biểu tượng cho
CommandButton. Bạn nên sử dụng hằng số này thay vì tài nguyên biểu tượng tuỳ chỉnh. - Thêm
MediaSessionService.isPlaybackOngoing()để cho phép các ứng dụng truy vấn xem dịch vụ có cần dừng trongonTaskRemoved()hay không (#1219). - Thêm
MediaSessionService.pauseAllPlayersAndStopSelf()giúp bạn dễ dàng tạm dừng phát tất cả các phiên và gọistopSelf()để kết thúc 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ụ 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 tìm kiếm trong thông báo về 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()để gửi lỗi không nghiêm trọng đến bộ điều khiển Media3. Khi sử dụng bộ đ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 lượt tương tác của người dùng với trình phát thông qua một bộ đ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ể). - Xuất bản mã cho ứng dụng kiểm thử trình điều khiển media3. Mã này có thể dùng để kiểm thử các hoạt động tương tác với những ứng dụng xuất bản một phiên phát nội dung nghe nhìn.
- Truyền các phần bổ sung được truyền đến
MediaSession[Builder].setSessionExtras()của media3 đếnPlaybackStateCompat.getExtras()của bộ điều khiển media1. - Ánh xạ các 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. MộtSessionErrorđược gửi đến bộ điều khiển thông báo về nội dung nghe nhìn bằngMediaSession.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 theo từng 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 (theo mặc định là bật).
- 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 vào
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 các đối tượng có thể vẽ khác nhau cho mỗi thực thểPlayerView, thay vì ghi đè trên toàn cục (#1200). - Xử lý một lỗi nền tảng khiến video bị kéo giãn/cắt khi dùng
SurfaceViewbên trongAndroidViewCompose trên API 34 (#1237).
- Thêm tính năng hỗ trợ hiển thị hình ảnh vào
- Nội dung đã tải xuống:
- Đảm bảo rằng
DownloadHelperkhông rò rỉ các thực thểRendererchưa 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ờ xử lý chờ một sự 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 trong đó các danh sách phát không phải là danh sách phát chính tiếp tục tải lại cho các luồng LL-HLS (#1240).
- Khắc phục 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 là 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 luồng phát trực tiếp HLS sẽ gây ra
ArrayIndexOutOfBoundsException(#1395).
- Khắc phục lỗi trong đó các mẫu EMSG đang chờ xử lý chờ một sự gián đoạn được uỷ quyền trong
- Tiện ích DASH:
- Tiện ích truyền:
- Khắc phục lỗi chuyển đổi tên album 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 tên album 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()để thất bại khi gặp 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ạ video ngắn. - Cho phép đặt chế độ lặp lại bằng các đối số
Intenttừ dòng lệnh (#1266). - 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 constructor
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 constructor
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á hằng số
RendererSupport.FormatSupportIntDef và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 việc xoá tất cả các trường hằng sốBundleable.Creator<Foo> CREATOR. 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 từng 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 chung:
- Thêm
Format.labelsđể cho phép nhãn thay thế hoặc nhãn được bản địa hoá 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 lại. - Á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 các 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 trả về bị thiếu vào quy tắc
-keepclasseswithmembersproguard choDefaultVideoFrameProcessor.Factory.Builder.build()(#1187).
- Khắc phục vấn đề
- Bộ chuyển đổi:
- Thêm giải pháp cho 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 ngoại lệ được gửi do
- Chọn bản phụ đề/âm thanh:
DefaultTrackSelector: Ưu tiên các video có tốc độ khung hình "hợp lý" (>=10 khung hình/giây) hơn những 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 các tệp MP4 được trích xuất từ ảnh động có thể chứa 2 bản HEVC, trong đó một bản có độ phân giải cao hơn nhưng số lượng khung hình rất nhỏ (#1051).
- Công cụ trích xuất:
- Khắc phục vấn đề không bỏ qua khoảng đệm 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: Hoàn nguyên một thay đổi nhằm đảm bảo khung hình cuối cùng được kết xuất bằng cách truyề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 chuyển tải nếu không khởi động được bản âm thanh ở chế độ chuyển 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 truyền qua đườ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 gây ra hành vi sai lệch của bộ mã hoá và giải mã, đồng thời ngăn chặn việc chuyển đổi định dạng thích ứng cho các 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 ra các thực thể
CuesWithTimingbổ sung giả tạo từWebvttParser.parse(#1177).
- WebVTT: Ngăn các tín hiệu liên tiếp trực tiếp tạo ra các thực thể
- DRM (Quản lý bản quyền nội dung số):
- Giải quyết vấn đề
NoSuchMethodErrorcó thể do khungMediaDrmthay vìResourceBusyExceptionhoặcNotProvisionedExceptiontrên một số thiết bị Android 14 (#1145) gây ra.
- Giải quyết vấn đề
- 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.
- 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 xác định được 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ả các phần tử
Labeltừ tệp kê khai vàoFormat.labels(#1054).
- Điền tất cả các phần tử
- Tiện ích RTSP:
- Bỏ qua các giá trị thông tin phiên trống (i-tag) trong quá trình phân tích cú pháp SDP (#1087).
- Tiện ích giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Tắt tiện ích MIDI làm phần phụ thuộc cục bộ theo mặc định vì tiện ích này yêu cầu bạn 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.
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 chung:
- Triển khai 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à có hiệu quả, nhưng cho đến nay vẫn chưa được triển khai đúng cách. - Chuẩn hoá các loại MIME do mã ứng dụng đặt hoặc đọc từ nội dung nghe nhìn thành chữ thường hoàn toàn.
- Xác định quảng cáo bằng một
MediaItemđầy đủ thay vì mộtUriduy nhất trongAdPlaybackState. - 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à chúng tôi cần phả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 số chúng không phải là giá trị rỗng (#964).
- Triển khai hỗ trợ cho URI tài nguyên thô
- ExoPlayer:
- Thêm
PreloadMediaSourcevàPreloadMediaPeriodcho phép các ứng dụng tải trước một nguồn nội dung đa phương tiện ở một vị trí bắt đầu cụ thể trước khi phát.PreloadMediaSourcechịu trách nhiệm chuẩn bị nguồn nội dung đa phương tiệ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 các bản nhạc và tải dữ liệu đa phương tiện cho khoảng thời gian đó. Các ứ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 được tải trước thành trình phát để phát. - Thêm
ExoPlayer.setImageOutputđể cho phép các ứng dụng đặtImageRenderer.ImageOutput. - Giờ đây,
DefaultRenderersFactorycung cấpImageRenderercho trình phát theo mặc định vớiImageOutputvàImageDecoder.Factory.DEFAULTrỗng. - Phát sự kiện
Player.Listener.onPositionDiscontinuitykhi đoạn im lặng bị bỏ qua (#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 chế độ 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 phân lớp con
CompositeSequenceableLoader. Thành phần này trước đây có thể mở rộng nhưng chưa bao giờ được phân lớp trong thư viện. Bạn có thể tuỳ chỉnh bằng cách bao bọc một phiên bản bằng mẫu 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 sẽ khiến siêu dữ liệu của mục này bị xoá (#1007).
- Đổi tên 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ể làm được điều 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ỉ kiểm tra dấu gạch ngang (#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 H.265/HEVC SEF.
- Tăng tốc độ truyền tải, đặc biệt là đối với các thao tác chỉnh sửa "xoá video".
- Thêm API để đảm bảo rằng tệp đầu ra bắt đầu trên một khung hình video. Điều này có thể giúp đầu ra của các thao tác cắt tương thích hơn với những cách triển khai trình phát không hiển thị khung hình 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 tệp MP4 một thành phần.
- Thêm chức năng hỗ trợ để đảm bảo khung hình video có dấu thời gian đầu tiên trong tệp đầu ra. Khắc phục các tệp đầu ra bắt đầu bằng khung hình màu đen trên các trình phát dựa trên iOS (#829).
- Chọn bản phụ đề/âm thanh:
- Thêm
DefaultTrackSelector.selectImageTrackđể cho phép chọn phụ đề hình ảnh. - Thêm
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledđể xác định xem có chọn một bản phụ đề hình ảnh hay không nếu cả bản phụ đề hình ảnh và bản phụ đề video đều có sẵn. Giá trị mặc định làfalse, tức là việc chọn một bản video sẽ được ưu tiên.
- 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 chế độ tìm kiếm tốc độ bit không đổi (CBR) cho các tệp có tiêu đề
Info(CBR tương đương với tiêu đềXing). Trước đây, chúng tôi đã sử dụng bảng tìm kiếm từ tiêu đềInfo, nhưng điều này dẫn đến việc tìm kiếm kém chính xác hơn so với trường hợp chúng tôi bỏ qua bảng này và giả định rằng 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ừ bộ mô tả TS và liên kết chúng với cờ vai trò, cho phép người dùng lựa chọn nội dung âm thanh một cách sáng suốt hơn (#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
MediaCodecVideoRenderersử dụng đối sốVideoFrameProcessor.Factoryvà thay thế bằng hàm khởi tạo sử dụng đối sốVideoSinkProvider. Những ứng dụng muốn chèn mộtVideoFrameProcessor.Factorytuỳ chỉnh có thể khởi tạo mộtCompositingVideoSinkProvidersử dụngVideoFrameProcessor.Factorytuỳ chỉnh và truyền trình cung cấp chìm 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. Quy cách CEA-708-E S-2023 nêu rõ rằng cảrowLockvàcolumnLockđều được giả định là đúng, bất kể giá trị có trong luồng (chưa triển khai tính năng hỗ trợcolumnLocknên tính năng này luôn được giả định là 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 dạng lưới sẽ được cắt và các hình thu nhỏ riêng lẻ sẽ được cung cấp cho
ImageOutputgần với thời điểm trình chiếu.
- Thêm tính năng hỗ trợ hình thu nhỏ DASH. Hình ảnh dạng lưới sẽ được cắt và các hình thu nhỏ riêng lẻ sẽ được cung cấp cho
- DRM (Quản lý bản quyền nội dung số):
- Theo mặc định, hãy phát ngay các mẫu "đầu rõ ràng" chưa mã hoá trong nội dung DRM, 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 phát bị gián đoạn nếu các khoá vẫn chưa sẵn sàng khi vị trí phát đạt đến các mẫu được mã hoá (nhưng trước đây, 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.
- Theo mặc định, hãy phát ngay các mẫu "đầu rõ ràng" chưa mã hoá trong nội dung DRM, 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 phát bị gián đoạn nếu các khoá vẫn chưa sẵn sàng khi vị trí phát đạt đến các mẫu được mã hoá (nhưng trước đây, 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
- Tiện ích IMA:
- Khắc phục vấn đề không phát được quảng cáo DASH và HLS không có đuôi tệp thích hợp.
- Phiên:
- Tắt tính năng phát hiện thao tác nhấp đúp cho các ứng dụng TV (#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 và phiên nội dung nghe nhì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 phụ thuộc trực tiếp vào loại này từ bên ngoài gói HLS. - Giải quyết các yêu cầu tìm kiếm đến đầu một phân đoạn hiệu quả hơn (#1031).
- Giảm
- Tiện ích 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ử:
- Không tạm dừng phát trong
TestPlayerRunHelper.playUntilPosition. Thử nghiệm này giữ trạng thái 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ác câu khẳng định và các hành động khác.
- Không tạm dừng phát trong
- Ứng dụng minh hoạ:
- Thêm một mô-đun minh hoạ nội dung 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ột mô-đun minh hoạ nội dung 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 tìm kiếm thủ công bên ngoài phạm vi
LiveConfiguration.min/maxOffsetvẫn tiếp 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 vấn đề khi lựa chọn nội dung đa phương tiện sau khi tìm đến vị trí 0 trong một sự kiện phát trực tiếp khiến sự kiện phát trực tiếp bắt đầu ở vị trí mặc định một cách không chính xác (#9347).
- Khắc phục vấn đề khi các phiên bản mới của
CmcdData.Factorynhận được các giá trị âm chobufferedDurationUstừ các nguồn đoạn, dẫn đếnIllegalArgumentException(#888).
- Khắc phục vấn đề khi thao tác tìm kiếm thủ công bên ngoài phạm vi
- Bộ chuyển đổi:
- Giải quyết vấn đề mà bộ mã hoá sẽ gặp lỗi tại thời điểm định cấu hình do thiết lập tốc độ hoạt động cao.
- Công cụ trích xuất:
- Đánh dấu các tệp HEVC phụ (không phát được) trong ảnh động JPEG là
ROLE_FLAG_ALTERNATEđể ngăn các tệp này tự động được chọn để phát 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 47721 giây (#855).
- Đánh dấu các tệp HEVC phụ (không phát được) trong ảnh độ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 chỉ điền
MediaMetadatatừ bình luận Vorbis bằng các khoá chữ 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ó thông tin thẻ thay vì quá trình phát hoàn toàn không thành công.
- Khắc phục lỗi chỉ điền
- 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 sang API 33 trở lên (trước đây, giải pháp này chỉ áp dụng chính xác trên API 33) (#837). - Khắc phục lỗi
ERROR_DRM_SESSION_NOT_OPENEDkhi chuyển từ nội dung được mã hoá sang nội dung rõ ràng mà không có một bề mặt nào được đính kèm vào trình phát. Lỗi này xảy ra do bạn sử dụng sai bộ giải mã bảo mật để phát nội dung không được mã hoá.
- 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 truyền
notifyChildrenChangedcho bộ điều khiển cũ (#644). - Khắc phục lỗi trong đó việc đặt thời gian âm cho một bộ hẹn giờ
setWhenđã tắt của thông báo gây ra lỗi trên một số thiết bị (#903). - Sửa lỗi
IllegalStateExceptionkhi bộ điều khiển thông báo nội dung nghe nhìn chưa hoàn tất quá trình kết nối khi yêu cầu cập nhật thông báo lần đầu (#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" thành số kênh là 5 cho Dolby trong tệp kê khai DASH (#688).
- Tiện ích giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Tiện ích truyền:
- 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 chung:
- Thêm một 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}()nữa, vì vậy, các hoạt động 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 với Kotlin khi các tham số kiểu chung có thể rỗng và các loại phần tử mảng có thể rỗng không được phát hiện là có thể rỗng. Ví dụ là 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 nút "phát" trong khi quá trình phát bị tạm thời chặn (ví dụ: do mất tiêu điểm â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.setAudioAttributesđến giao diệnPlayer.
- Thêm một tham số
- ExoPlayer:
- Khắc phục các vấn đề khi tìm kiếm 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 ngă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 người dùng 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 bị ngắt kết nối trong khi phát. Lý do chặn sẽ bị xoá khi bạn kết nối một đầu ra phù hợp. - Thêm
MediaSource.canUpdateMediaItemvàMediaSource.updateMediaItemđể chấp nhận các bản 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àoTrackOutputlàm một mẫu. - Nâng cao 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ó. - Nâng cao 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 nhật ký Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD): tình trạng thiếu bộ nhớ đệm (
bs), thời hạn (dl), tốc độ phát (pr) và thời gian 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 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 phạm vi 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 các tham số truy vấn (#553).
- Khắc phục
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 giai đoạn/cửa sổ) trongConcatenatingMediaSource2(#11226). - Thay đổi
BaseRenderer.onStreamChanged()để cũng nhận được một đố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ú giải
TransformationRequest.HdrModevà các hằng số liên kết của loại chú giải này. Thay vào đó, hãy sử dụngComposition.HdrModevà các hằng số liên kết của nó. - Đơn giản hoá
OverlaySettingsđể khắc phục vấn đề về hướng xoay. - Thay đổi các tham số
frameRatevàdurationUscủaSampleConsumer.queueInputBitmapthànhTimestampIterator.
- Chọn bản phụ đề/âm thanh:
- Thêm
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessđể cho phép hoặc không cho phép thích ứng 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 truyền đơn vị truy cập cuối cùng của một luồng đến hàng đợi mẫu (#7909).
- Khắc phục 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ề việc triển khai của mộtExtractor, trước tiên, bạn phải gọiExtractor.getUnderlyingInstance. - Thêm
BmpExtractor. - Thêm
WebpExtractor. - Thêm
HeifExtractor. - Thêm chế độ hỗ trợ QuickTime classic vào
Mp4Extractor.
- Âm thanh:
- Thêm khả năng hỗ trợ PCM có thứ tự byte lớn 24/32 bit trong MP4 và Matroska, đồng thời phân tích cú pháp phương thức 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 cấp độ hỗ trợ truyền dữ liệu mà nguồn 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 cấu hình giảm tải trên nguồn nhận âm thanh. Giá trị mặc định làAudioSink.OFFLOAD_MODE_DISABLED. - Bạn có thể bật tính năng chuyển bớt dữ liệu thông qua
setAudioOffloadPreferencetrongTrackSelectionParameters. Nếu lựa chọn ưu tiên đã đặt là bật, thiết bị sẽ hỗ trợ tính năng chuyển tải cho định dạng và lựa chọn bản nhạc là một bản nhạc âm thanh duy nhất, thì tính năng chuyển 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 chuyển tải. Nếu không có bản âm thanh nào được hỗ trợ trong quá trình chuyển tải, thì sẽ không có bản nào được chọn. - Tắt tính năng hỗ trợ phát không gián đoạn cho hoạt động truyền dữ liệu khi trước API cấp 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 của Opus trong quá trình phát lại khi tải xuống.
- Cho phép khôi phục trình kết xuất bằng cách tắt tính năng chuyển tải nếu không thành công ở lần ghi đầu tiên (#627).
- Bật tính năng Lập lịch truyền dữ liệu theo mặc định cho chế độ phát chỉ có âm thanh được truyền dữ liệu.
- 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ế độ chuyển tải âm thanh sang một lớpAudioOffloadPreferencesbên trong. - Thêm các lệnh gọi lại
onAudioTrackInitializedvàonAudioTrackReleasedvàoAnalyticsListener,AudioRendererEventListenervàAudioSink.Listener. - Khắc phục vấn đề tràn bộ nhớ đệm âm thanh DTS Express (#650).
- Khắc phục lỗi khiến quá trình kiểm tra khả năng của E-AC3-JOC gặp
IllegalArgumentException(#677).
- Thêm khả năng hỗ trợ PCM có thứ tự byte lớn 24/32 bit trong MP4 và Matroska, đồng thời phân tích cú pháp phương thức 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. Giờ đây,TextRenderersẽ trực tiếp xử lý các tệp phụ đề cósampleMimeType = application/x-media3-cuesmà không cần đến một 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 đầu vào bitmap xếp hàng
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)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 đầu vào bitmap xếp hàng
- Tiện ích IMA:
- Sửa lỗi trong đó luồng phát trực tiếp DASH có nhiều khoảng thời gian không phải là mục đầu tiên trong danh sách phát có thể gây ra 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ụ thông báo trên nền trước 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ới API không dùng nữa trên thiết bị Samsung (#167). - Sử dụng bộ điều khiển thông báo đa phương tiệ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 đa phương tiệ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. Với cách này, bộ điều khiển của phương thức gọi luôn là bộ điều khiển thông báo về nội dung nghe nhìn và các ứng dụng có thể dễ dàng nhận ra các lệnh 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ợ. - Khắc phục lỗi
MediaController.getCurrentPosition()không tiến triển khi kết nối vớiMediaSessionCompatcũ. - Thêm
MediaLibrarySession.getSubscribedControllers(mediaId)để thuận tiện. - Ghi đè
MediaLibrarySession.Callback.onSubscribe()để xác nhận tính 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 trình diễn phiên cho Automotive OS và bật trình diễn 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 trình điều khiển thông báo về nội dung nghe nhìn. Với Android Auto là bộ điều khiển ứng dụng đọc từ phiên khung, điều này có tác dụng là nútqueuetrong giao diện người dùng của Android Auto 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 các ứng dụng ghi đè quá trình xử lý sự kiện nút nội dung đa phương tiện mặc định.
- Đặt hành vi của dịch vụ thông báo trên nền trước thành
- Giao diện người dùng:
- Thêm chế độ 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 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 chế độ triển khai
- Nội dung đã tải xuống:
- Khai báo loại dịch vụ trên nền trước "đồng bộ hoá dữ liệu" cho
DownloadServiceđể 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ụ trên 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 một khoảng thời gian được tính từ thời gian bắt đầu tải lần gần đây nhất thay vì thời gian hoàn tất tải lần gần đây 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. Phiên bản này hỗ trợ tốt hơn việc hợp nhất các phụ đề chồng chéo, bao gồm cả việc giải quyết tình trạng nhấp nháy khi chuyển đổi giữa các đ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 một tình huống tương tranh có thể dẫn đến
IndexOutOfBoundsExceptionkhi quay lại TCP hoặc quá trình phát bị treo trong một số trường hợp. - Kiểm tra trạng thái trong chế độ 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ờ Phản hồi thiết lập RTSP trong khoảng thời gian gửi các yêu cầu RTSP Options duy trì kết nối (#662).
- Khắc phục một tình huống tương tranh có thể dẫn đến
- Tiện ích 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 tiêu 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 được trình bày. Bạn nên dùngC.BUFFER_FLAG_DECODE_ONLYvìC.BUFFER_FLAG_DECODE_ONLYsẽ không được dùng nữa. - Thêm
Decoder.setOutputStartTimeUsvàSimpleDecoder.isAtLeastOutputStartTimeUsđể cho phép bộ giải mã loại bỏ 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ụngBuffer.isDecodeOnlythay vìBuffer.isDecodeOnlyvì tham số này sẽ không được dùng nữa. - Khắc phục lỗi xuất bản cấu phần phần mềm bộ giải mã MIDI vào kho lưu trữ Maven. Cấu phần phần mềm này được đổi tên thành
media3-exoplayer-midi(#734).
- Tiện ích Leanback:
- Khắc phục lỗi vô hiệu hoá một nền tảng có thể gây ra
ArithmeticExceptiontrong mã Leanback (#617).
- Khắc phục lỗi vô hiệu hoá một nền tảng có thể gây ra
- Tiện ích kiểm thử:
- Tạo
TestExoPlayerBuildervàFakeClocktương thích với các bài kiểm thử giao diện người dùng Espresso và các bài kiểm thử giao diện người dùng Compose. Điều này khắc phục một lỗi trong đó quá trình phát diễn ra không xác định trong các hoạt động tương tác với chế độ xem Espresso hoặc Compose.
- Tạo
- Xoá các biểu tượng không dùng nữa:
- Xoá
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)vàTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). 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 nhận 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 chung:
- Xoá phần phụ thuộc
multidexvô tình được thêm 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ả được tạo sau khi danh sách phát bị xoá. - Thêm các trường khác vào nhật ký Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD): định dạng phát 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
- Tải âm thanh lên:
- Thêm Trang tiêu đề và Trang tiêu đề bình luận Ogg vào luồng bit để phát Opus được chuyển 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 SPS.
- Văn bản:
- CEA-608: Thay đổi logic cắt bớt tín hiệu chỉ để xem xét văn bản hiển thị. Trước đây, phần thụt lề và độ lệch của ký tự tab được đưa vào khi giới hạn độ dài của phụ đề ở mức 32 ký tự (về mặt kỹ thuật, điều này là chính xác theo quy cách) (#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 một 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 các bố cục tuỳ chỉnh khác nhau đến bộ điều khiển Media3 khác nhau 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 quá trình kết nối hoàn tất. - Khắc phục các trường hợp
MediaLibraryServiceLegacyStubgửi lỗi đếnResultkhông hỗ trợ lỗi này, dẫn đếnUnsupportedOperationException(#78). - Khắc phục 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 một 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 chung:
- 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 bị nạp chồng vào Trình phát để 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 chế độ 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 kiểm soát các phương thức âm lượng của thiết bị nếu đã 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 phụ đề hiện có từMediaSource. - Thêm tính năng hỗ trợ việc đư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 đi của các định dạng phát trực tiếp thích ứng DASH, HLS và SmoothStreaming. Các trường sau đây:
br,bl,cid,rtpvàsidđã được hợp nhất (#8699). Cấu trúc API và phương thức API:- Tính năng ghi nhật ký CMCD ở trạng thái 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. - Theo mặc định, tất cả các khoá đều được bật, hãy ghi đè
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)để lọc ra những khoá đượ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 ở trạng thái tắt theo mặc định, hãy sử dụng
- Thêm thao tác bổ sung vào tệp kê khai của bản minh hoạ chính để giúp bạn dễ dàng khởi động ứng dụng minh hoạ bằng một 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 các tham số vào 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 một 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à cần thiết để tránh các vấn đề về tính đồng thời với sự kiện phát trực tiếp có nhiều khoảng thời gian. - 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, độ lệch sẽ không được thêm vàostartTimeUsvàendTimeUscủa các đối tượngMediaLoadDatado trình điều phối gửi đi nữa. - Đổ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 kiểm soát các phương thức âm lượng của thiết bị nếu đã 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 trong đó quá trình chuyển đổi có thể bị treo (dẫn đến hết thời gian chờ của bộ trộn) nếu cuối luồng video được báo hiệu tại thời điểm khung hình đầu vào đang chờ xử lý.
- Truy vấn codec thông qua
MediaCodecListthay vì sử dụng các tiện íchfindDecoder/EncoderForFormatđể mở rộng khả năng hỗ trợ. - Xoá cấu hình khung hình 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.allowInvalidateSelectionsForRendererCapabilitiesChangebị tắt theo mặc định. Khi được bật,DefaultTrackSelectorsẽ kích hoạt một lựa chọn phụ đề 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:
- Khắc phục lỗi khiến một số nội dung phát không thành công khi bật tính năng truyền dữ liệu qua đường hầm và
AudioProcessorsđang hoạt động, chẳng hạn như để cắt không gián đoạn (#10847). - Đóng gói các khung hình Opus trong các gói Ogg trong các lượt phát trực tiếp (tải xuống).
- Ngoại suy vị trí hiện tại trong khi ở chế độ ngủ bằng tính năng lập lịch tải xuống.
- Thêm
Renderer.release()vàAudioSink.release()để phát hành tài nguyên vào cuối vòng đời của trình phát. - Nghe các thay đổi về chức năng âm thanh trong
DefaultAudioSink. Thêm một tham số bắt buộccontextvào hàm khởi tạo củaDefaultAudioSink, màDefaultAudioSinksẽ dùng để đăng ký làm trình nghe choAudioCapabilitiesReceivervà cập nhật thuộc tínhaudioCapabilitieskhi được thông báo về một thay đổi đối với các chức năng. - Truyền tải 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.Listenersẽ kích hoạt các sự kiệnonRendererCapabilitiesChanged. - Thêm
ChannelMixingAudioProcessorđể áp dụng tính năng chia tỷ lệ/trộn 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ể bỏ qua chế độ sau khi thay đổi khả năng âm thanh. - Thêm chế độ hỗ trợ phát trực tiếp cho DTS Express và DTS:X (#335).
- Khắc phục lỗi khiến một số nội dung phát không thành công khi bật tính năng truyền dữ liệu qua đường hầm và
- Video:
- Khi trình kết xuất bị vô hiệu hoá, hãy để
MediaCodecVideoRendererbáo cáoVideoSizecó chiều rộng và chiều cao bằng 0.Player.Listener.onVideoSizeChangedđược gọi theo đó khiPlayer.getVideoSize()thay đổi. Với thay đổi này, kích thước video của ExoPlayer cóMediaCodecVideoRenderersẽ có chiều rộng và chiều cao bằng 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.
- Khi trình kết xuất bị vô hiệu hoá, hãy để
- DRM (Quản lý bản quyền nội dung số):
- Giảm khả năng hiển thị của một số phương thức chỉ dành cho 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 khả năng hiển thị của một số phương thức chỉ dành cho nội bộ trên
- Bộ trộn:
- Thêm một thư viện muxer mới có thể dùng để tạo tệp vùng chứa MP4.
- Tiện ích IMA:
- Bật luồng trực tiếp DASH nhiều giai đoạn cho DAI. Xin lưu ý rằng chế độ 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 khi một nhóm quảng cáo mới được chèn vào luồng phát trực tiếp vì 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ề bộ điều khiển hiện đang gọi một 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 của nút nội dung nghe nhìn do, ví dụ: tai nghe Bluetooth gửi (#167). - Thêm chế độ triển khai mặc định vào
MediaSession.Callback.onAddMediaItemsđể cho phépMediaItemsđược yêu cầu chuyển sangPlayernếu chúng cóLocalConfiguration(ví dụ: URI) (#282). - Thêm các nút lệnh "chuyển đến đoạn trước" và "chuyển đến đoạn tiếp theo" vào chế độ xem thông báo đa phương tiện ở dạng thu gọn theo mặc định cho Android 12 trở xuống (#410).
- Thêm chế độ triển khai mặc định vào
MediaSession.Callback.onAddMediaItemsđể cho phépMediaItemsđược yêu cầu chuyển sangPlayernếu chúng cóLocalConfiguration(ví dụ: URI) (#282). - Thêm các nút lệnh "chuyển đến đoạn trước" và "chuyển đến đoạn tiếp theo" vào chế độ xem thông báo đa phương tiện ở dạng thu gọ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ử tuỳ chỉnh trên giao diện người dùng 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.endTimeMsđối với luồng DASH nhiều giai đoạn. - Khắc phục lỗi khi chuẩn bị lại nguồn nội dung nghe nhìn Dash trực tiếp có nhiều khoảng thời gian sẽ 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 để chờTimestampAdjusterkhởi động. Nếu quá trình khởi tạo không hoàn tất trước khi hết thời gian chờ, thìPlaybackExceptionsẽ được gửi để tránh tình trạng phát bị treo vô thời hạn. Theo mặc định, thời gian chờ được đặt thành 0 (#323).
- Thêm
- Tiện ích kiểm thử:
- Kiểm tra tính không phân biệt chữ hoa chữ thường của giao thức URI trong
DataSourceContractTest.
- Kiểm tra tính không phân biệt chữ hoa chữ thường của giao thức URI trong
- Xoá các biểu tượng không dùng nữa:
- Xoá các hàm khởi tạo
DefaultAudioSink, thay vào đó hãy dùngDefaultAudioSink.Builder. - Xoá
HlsMasterPlaylist, thay vào đó hãy dùngHlsMultivariantPlaylist. - Xoá
Player.stop(boolean). Thay vào đó, hãy sử dụngPlayer.stop()vàPlayer.clearMediaItems()(nếuresetlàtrue). - Xoá 2 hàm khởi tạo
SimpleCachekhông còn dùng nữa, hãy sử dụng hàm khởi tạo không còn dùng nữa lấyDatabaseProviderthay vì để có hiệu suất tốt hơn. - Xoá hàm khởi tạo
DefaultBandwidthMeter, thay vào đó hãy sử dụngDefaultBandwidthMeter.Builder. - Xoá các hàm khởi tạo
DefaultDrmSessionManager, thay vào đó hãy 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, thay vào đó hãy dùngDownloadHelper.forMediaItem. - Xoá hàm khởi tạo
DownloadServicekhông còn dùng nữa, hãy sử dụng hàm khởi tạo không còn dùng nữa bao gồm lựa chọn cung cấp tham sốchannelDescriptionResourceId. - Xoá các hằng số String không dùng nữa cho Charsets (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEvàUTF16LE_NAME), thay vào đó, hãy dùng Kotlin Charsets 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, thay vào đó, hãy dùng hàm khởi tạo không dùng nữa có lựa 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. Các phương thức này được dùng để tạo thực thể cho lớpFormat. Thay vào đó, hãy 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, thay vào đó hãy 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, thay vào đó hãy sử dụngDefaultTrackSelector(Context). - Xoá hàm khởi tạo
OfflineLicenseHelperkhông dùng nữa, thay vào đó hãy sử dụngOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Xoá hàm khởi tạo
DownloadManagerkhông dùng nữa, thay vào đó, hãy 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, thay vào đó hãy dùngCue.Builder. - Xoá hàm khởi tạo
OfflineLicenseHelperkhông dùng nữa, thay vào đó hãy 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ặconVideoDecoderInitializedthay thế.onDecoderInputFormatChanged, hãy sử dụngonAudioInputFormatChangedvà/hoặconVideoInputFormatChangedthay thế.onDecoderDisabled, hãy sử dụngonAudioDisabledvà/hoặconVideoDisabled.
- Xoá
Player.Listener.onSeekProcessedvàAnalyticsListener.onSeekProcessedkhông dùng nữa, hãy dùngonPositionDiscontinuityvớiDISCONTINUITY_REASON_SEEK. - Xoá
ExoPlayer.setHandleWakeLock(boolean), thay vào đó hãy dùngsetWakeMode(int). - Xoá
DefaultLoadControl.Builder.createDefaultLoadControl()không dùng nữa, thay vào đó hãy dùngbuild(). - Xoá
MediaItem.PlaybackPropertieskhông dùng nữa, hãy dùngMediaItem.LocalConfiguration. TrườngMediaItem.playbackPropertieskhông được dùng nữa hiện 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ó các thay đổi sau kể từ bản phát hành 1.0.1:
- Thư viện Core:
- Thêm
Buffer.isLastSample()biểu thị xemBuffercó chứa cờC.BUFFER_FLAG_LAST_SAMPLEhay không. - Khắc phục vấn đề khi 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 được xoá 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 các tệp MPEG-TS bằng cách sử dụng lại logic phân tích cú pháp mà các trình trích xuất RTSP và MP4 đã dùng (#303).
- Văn bản:
- SSA: 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 (#319).
- Phiên:
- Khắc phục vấn đề
MediaControllerkhông cập nhật các lệnh hiện có khi kết nối vớiMediaSessionCompatcũ cập nhật các thao tác. - Khắc phục lỗi ngăn
MediaLibraryServicetrả về giá trị rỗng cho một 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 đó một
Timelinekết hợp và bản 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 kiếm đến vị trí mặc định (#11051).
- Khắc phục lỗi các luồng mẫu trống trong nội dung nghe nhìn có thể khiến quá trình phát bị treo.
- Phiên:
- Khắc phục lỗi trong đó nhiều mục hàng giống hệt nhau trong hàng đợi do
MediaSessionCompatcũ xuất bản sẽ dẫn đến một ngoại lệ trongMediaController(#290). - Thêm tính năng chuyển tiếp còn thiếu của
MediaSession.broadcastCustomCommandvàoMediaControllerCompat.Callback.onSessionEventcũ (#293). - Khắc phục lỗi khi gọi
MediaSession.setPlayerkhông cập nhật các lệnh hiện có. - Khắc phục vấn đề các thực thể
TrackSelectionOverrideđược gửi từMediaControllersẽ bị bỏ qua nếu chúng tham chiếu đến một nhóm cóFormat.metadata(#296). - Khắc phục vấn đề khi
Player.COMMAND_GET_CURRENT_MEDIA_ITEMcần có sẵn để 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 được dùng trongMediaSessionService(#318). - Khắc phục vấn đề thư viện khai báo một bộ nhận nút nội dung nghe nhìn mà ứng dụng không có ý định này (#314).
- Khắc phục lỗi trong đó nhiều mục hàng giống hệt nhau trong hàng đợi 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 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 RTSP Setup (Thiết lập RTSP) bằng UDP không thành công với Lỗi RTSP 461 UnsupportedTransport (Giao thức không được hỗ trợ) (#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:
- Thiết lập được sự khác biệt tối đa về thời gian bắt đầu của hai đoạn cần hợp nhất trong
SegmentDownloadervà các lớp con (#248).
- Thiết lập được sự khác biệt tối đa về thời gian bắt đầu của hai đoạn cần hợp nhất 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 trong quá trình phân tích cú pháp các 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 một lỗi khiến các luồng DAI không có quảng cáo không thể 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 một lỗi khiến các luồng DAI không có quảng cáo không thể 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:
- 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.
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 GitHub Media3.
Trước đây, ExoPlayer đã được lưu trữ trong một
dự án GitHub ExoPlayer riêng biệt. Trong Media3, tên gói
là androidx.media3.exoplayer. Chúng tôi dự định tiếp tục duy trì và phát hành dự án GitHub ExoPlayer trong một thời gian để các ứng dụng có thời gian chuyển sang Media3. Media3 có các lựa chọn thay thế cho tất cả các mô-đun ExoPlayer, ngoại trừ
các tiện ích media2 và mediasession cũ. Các tiện ích này được thay thế bằng
mô-đun media3-session mới. Điều này giúp tích hợp trực tiếp giữa trình phát và các media session mà không cần phải sử dụng lớp chuyển đổi/trình kết nối.