Media3
Tài liệu tham khảo Java về AndroidX
Tài liệu tham khảo về Kotlin của AndroidX
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 10 tháng 7 năm 2024 | 1.3.1 | 1.4.0-rc01 | 1.4.0-beta01 | 1.4.0-alpha02 |
Khai báo phần phụ thuộc
Để thêm một phần phụ thuộc trên Media3, bạn phải thêm kho lưu trữ Google Maven vào dự án. Đọc nội dung Kho lưu trữ Maven của Googleđể biết thêm thông tin.
Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle
cho ứng dụng hoặc mô-đun của mình:
Groovy
dependencies { def media3_version = "1.4.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.4.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // 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.4.0
Phiên bản 1.4.0-rc01
Ngày 10 tháng 7 năm 2024
Phát hành androidx.media3:media3-*:1.4.0-rc01
.
Phiên bản 1.4.0-rc01 bao gồm các thay đổi sau.
- Thư viện chung:
- 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
.
- Thêm
- ExoPlayer:
- Khắc phục một số điểm không thống nhất của tiêu điểm âm thanh, ví dụ: không báo cáo mất tiêu điểm toàn bộ hoặc tạm thời trong khi trình phát bị tạm dừng (#1436).
- Khắc phục
IndexOutOfBoundsException
tiềm ẩn do trình trích xuất báo cáo các kênh bổ sung sau bước chuẩn bị ban đầu (#1476). Effects
trongExoPlayer.setVideoEffect()
sẽ nhận được các dấu thời gian đã xoá độ lệch của trình kết xuất (#1098).- Khắc phục
IllegalArgumentException
tiềm ẩn khi xử lý lỗi trình phát xảy ra khi đọc tiếp một mục khác trong danh sách phát (#1483).
- Văn bản:
- Sửa
IllegalArgumentException
từLegacySubtitleUtil
khi một mẫu phụ đề WebVTT không chứa tín hiệu, chẳng hạn như một phần của luồng DASH (#1516).
- Sửa
- Phiên:
- Cho phép đặt hoạt động của phiên cho mỗi bộ điều khiển để ghi đè hoạt động của phiên chung. Bạn có thể xác định hoạt động trong phiên cho một tay điều khiển tại thời điểm kết nối bằng cách tạo một
ConnectionResult
cóAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. Sau khi kết nối, bạn có thể cập nhật hoạt động trong phiên bằngMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
. - Cải thiện khả năng sao chép lỗi của các lệnh gọi đến
MediaLibrarySession.Callback
. Giờ đây, bạn có thể định cấu hình tính năng sao chép lỗi bằng cách sử dụngMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
để chọn loại lỗi hoặc chọn không sử dụng tính năng sao chép lỗi được bật theo mặc định.
- Cho phép đặt hoạt động của phiên cho mỗi bộ điều khiển để ghi đè hoạt động của phiên chung. Bạn có thể xác định hoạt động trong phiên cho một tay điều khiển tại thời điểm kết nối bằng cách tạo một
- Giao diện người dùng:
- Giải quyết lỗi nền tảng gây ra tình trạng video bị kéo giãn/cắt khi sử dụng
SurfaceView
bên trongAndroidView
Compose trên API 34 (#1237).
- Giải quyết lỗi nền tảng gây ra tình trạng video bị kéo giãn/cắt khi sử dụng
- Ứng dụng minh hoạ:
- Sử dụng
HttpEngineDataSource
làmHttpDataSource
khi được thiết bị hỗ trợ.
- Sử dụng
Phiên bản 1.4.0-beta01
Ngày 26 tháng 6 năm 2024
Phát hành androidx.media3:media3-*:1.4.0-beta01
.
Phiên bản 1.4.0-beta01 bao gồm các thay đổi sau.
- ExoPlayer:
- 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 đến mục trước (#1425).
- Thêm
- Bộ chuyển đổi:
- Xoá trường
ExportResult.processedInputs
. Nếu bạn sử dụng trường này để biết thông tin chi tiết về bộ mã hoá và giải mã, hãy chuyển sang sử dụngDefaultDecoderFactory.listener
. Trong trường hợp ngoại lệ của bộ mã hoá và giải mã, thông tin chi tiết về bộ mã hoá và giải mã sẽ có trongExportException.codecInfo
.
- Xoá trường
- Công cụ trích xuất:
- Khắc phục lỗi trích xuất định dạng âm thanh PCM trong vùng chứa AVI.
- Hình ảnh:
- Cho phép
null
làm tham số choExoPlayer.setImageOutput
để xoáImageOutput
đã đặt trước đó.
- Cho phép
- Hiệu ứng:
- Xoá
OverlaySettings.useHdr
không dùng đến vì phạm vi động của lớp phủ và khung phải khớp nhau. - Thêm chế độ hỗ trợ HDR cho
TextOverlay
. Bạn có thể điều chỉnh độ sáng của lớp phủ văn bản bằngOverlaySettings.setHdrLuminanceMultiplier
.
- Xoá
- Phiên:
- Thêm
MediaSession.Callback.onPlayerInteractionFinished
để thông báo về các phiên hoạt động khi một loạt tương tác của người chơi từ một tay điều khiển cụ thể kết thúc. - Thêm
SessionError
và sử dụng thuộc tính này trongSessionResult
vàLibraryResult
thay vì mã lỗi để cung cấp thêm thông tin về lỗi và cách giải quyết lỗi nếu có thể. - Phát hành mã cho ứng dụng kiểm thử trình điều khiển media3 có thể dùng để kiểm thử lượt tương tác với các ứng dụng phát hành phiên phát nội dung đa phương tiện.
- Truyền các dữ liệu bổ sung được truyền đến
MediaSession[Builder].setSessionExtras()
của media3 đếnPlaybackStateCompat.getExtras()
của bộ điều khiển media1. - Liên kết các lỗi nghiêm trọng và không nghiêm trọng đến và từ phiên hoạt động trê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
gửi đến trình điều khiển thông báo về nội dung nghe nhìn bằngMediaSession.sendError(ControllerInfo, SessionError)
sẽ được liên kết với một lỗi không nghiêm trọng trongPlaybackStateCompat
, có nghĩa là mã lỗi và thông báo đã được đặt nhưng trạng thái của phiên trên nền tảng vẫn khác vớiSTATE_ERROR
.
- Thêm
- Giao diện người dùng:
- Tiện ích HLS:
- Khắc phục lỗi không làm mới các danh sách phát đang phát phụ trong khi phát trực tiếp (#1240).
- Xoá các biểu tượng không dùng nữa:
- Xoá giao diện
Bundleable
. Điều này bao gồm việc xoá mọi trường không đổiBundleable.Creator<Foo> CREATOR
. Phương thức gọi nên sử dụng phương thứcBundle toBundle()
vàstatic Foo fromBundle(Bundle)
trên từng loại.
- Xoá giao diện
Phiên bản 1.4.0-alpha02
Ngày 7 tháng 6 năm 2024
Phát hành androidx.media3:media3-*:1.4.0-alpha02
.
Phiên bản 1.4.0-alpha02 bao gồm các thay đổi sau.
- Thư viện chung:
- Chuyển tiếp các lệnh gọi được cho là không hoạt động đến 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ể phải 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ới mộtMediaItem
không phải hình ảnh (như đã ghi trong tài liệu).
- Chuyển tiếp các lệnh gọi được cho là không hoạt động đến phương thức
- ExoPlayer:
- Thêm
reset
vàoBasePreloadManager
để giải phóng tất cả các nguồn lưu giữ trong khi vẫn giữ lại bản sao 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 trongPriorityTaskManager
và cho mức độ quan trọng MediaCodec từ API 35. - Khắc phục vấn đề cập nhật thời gian đệm lại gần đây nhất dẫn đến khoá
bs
(bị thiếu bộ đệm) không chính xác trong CMCD (#1124). - Thêm
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
để cho biết rằng nguồn đã tải đến cuối. Điều này cho phép các phương thức triển khaiDefaultPreloadManager
vàPreloadMediaSource.PreloadControl
tuỳ chỉnh tải trước nguồn tiếp theo hoặc thực hiện các hành động khác. - Khắc phục lỗi trong đó việc bỏ qua khoảng lặng ở cuối các mục có thể kích hoạt ngoại lệ phát.
- Thêm
clear
và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
. Mã này sẽ được dùng khi tài nguyên bộ mã hoá và giải mã được lấy lại cho các tác vụ có mức độ ưu tiên cao hơn. - Cho phép
AdsMediaSource
tải quảng cáo trước video trước khi quá trình chuẩn bị nội dung đa phương tiện ban đầu hoàn tất (#1358). - Sửa lỗi khiến chế độ phát được chuyển sang
STATE_ENDED
khi chuẩn bị lại một sự kiện phát trực tiếp DASH nhiều giai đoạn sau khi khoảng thời gian ban đầu đã bị xoá khỏi tệp kê khai. - Đổi tên
onTimelineRefreshed
thànhonSourcePrepared
vàonPrepared
thànhonTracksSelected
trongPreloadMediaSource.PreloadControl
. Đồng thời, đổi tên IntDefs trongDefaultPreloadManager.Stage
cho phù hợp. - Thêm tính năng hỗ trợ thử nghiệm cho tính năng lên lịch động để điều chỉnh công việc hiệu quả hơn với chu kỳ đánh thức của CPU và trì hoãn việc đánh thức thời điểm trình kết xuất có thể tiến hành.
Bạn có thể bật tính năng này bằng
experimentalSetDynamicSchedulingEnabled
khi thiết lập thực thể ExoPlayer. - Thêm
Renderer.getDurationToProgressMs
.Renderer
có thể triển khai phương thức này để quay lại ExoPlayer trong khoảng thời gian phát mà trình kết xuất phải xử lý. Nếu bạn đặtExoPlayer
bằngexperimentalSetDynamicSchedulingEnabled
, thìExoPlayer
sẽ gọi phương thức này khi tính toán thời gian để lên lịch tác vụ công việc. - Thêm
MediaCodecAdapter#OnBufferAvailableListener
để cảnh báo khi các vùng đệm đầu vào và đầu ra có sẵn đểMediaCodecRenderer
sử dụng.MediaCodecRenderer
sẽ báo hiệuExoPlayer
khi nhận được những lệnh gọi lại này và nếuExoPlayer
được đặt bằngexperimentalSetDynamicSchedulingEnabled
, thìExoPlayer
sẽ lên lịch cho vòng lặp công việc của mình khi trình kết xuất có thể tiến hành. - Sử dụng lớp dữ liệu cho các phương thức
LoadControl
thay vì các tham số riêng lẻ.
- Thêm
- Bộ chuyển đổi:
- Khắc phục lỗi bộ giải mã, trong đó số lượng kênh âm thanh bị giới hạn ở chế độ âm thanh nổi khi xử lý đầu vào PCM.
- Khi chọn các bản nhạc trong
ExoPlayerAssetLoader
, hãy bỏ qua các giới hạn về số lượng kênh âm thanh vì các giới hạn này chỉ áp dụng cho việc phát. - Thay thế giao diện
androidx.media3.transformer.Muxer
bằngandroidx.media3.muxer.Muxer
và xoáandroidx.media3.transformer.Muxer
. - Khắc phục sự cố tải hình ảnh HEIC từ giao thức URI nội dung. (#1373).
- Hãy điều chỉnh thời lượng của bản âm thanh trong
AudioGraphInput
để cải thiện tính năng đồng bộ hoá AV.
- Công cụ trích xuất:
- MPEG-TS: Chuyển tiếp 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 gần đây nhất của luồng tới hàng đợi mẫu (#7909). Kết hợp các bản sửa lỗi để giải quyết các vấn đề chỉ phát sinh trong luồng HLS (#1150) và HLS (Phát trực tuyến dựa trên HTTP) H.262 (#1126).
- MP3: Ưu tiên kích thước dữ liệu từ khung
Info
hơ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 giới thiệu không phát được (ví dụ: ảnh bìa đĩa nhạc) khỏi quá trình tính toán tốc độ bit liên tục để tìm kiếm chính xác hơn (#1376). - MP3: Sử dụng số lượng khung hình và dữ liệu khác trong khung
Info
(nếu có) để tính toán tốc độ bit trung bình để tìm kiếm tốc độ bit không đổi, thay vì ngoại suy từ tốc độ bit của khung sau khungInfo
, có thể là nhỏ một cách giả tạo, ví dụ: khungPCUT
(#1376).
- Âm thanh:
- Sửa các thuộc tính mã hoá DTS:X Profile 2 để phát truyền qua (#1299).
- Đối với chế độ phát không tải, hãy đặt lại trường theo dõi để hoàn thành luồng trong
DefaultAudioSink
trước khi gọiAudioTrack.stop()
đểAudioTrack.StreamEventCallback#onPresentationEnded
xác định chính xác thời điểm phát tất cả dữ liệu đang chờ xử lý. - Khắc phục lỗi trong
SilenceSkippingAudioProcessor
, trong đó quá trình chuyển đổi giữa nhiều định dạng âm thanh (ví dụ: âm thanh nổi sang đơn âm) có thể khiến bộ xử lý gửi ra một ngoại lệ (#1352). - Triển khai
MediaCodecAudioRenderer.getDurationToProgressUs
để ExoPlayer sẽ tự động lên lịch vòng lặp công việc chính vào thời điểm MediaCodecAudioRenderer có thể tiến hành.
- Video:
- Sửa logic dự phòng của bộ giải mã cho Dolby Vision để sử dụng bộ giải mã AV1 tương thích nếu cần (#1389).
- Văn bản:
- Khắc phục vấn đề phụ đề bắt đầu trước khi vị trí tua bị bỏ qua. Vấn đề này chỉ được giới thiệu 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 khi kết xuất (xem Sơ đồ cấu trúc của ExoPlayer để biết sự khác biệt giữa việc 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ề cách tuỳ chỉnh để biết cách đưa các thành phần này vào một thực thểExoPlayer
. Các phương thức này (và mọi phương thức hỗ trợ giải mã phụ đề cũ) sẽ bị xoá trong bản phát hành sau này. - Các ứng dụng đã triển khai
SubtitleDecoder
tuỳ chỉnh cần cập nhật chúng để triển khaiSubtitleParser
(vàSubtitleParser.Factory
thay vìSubtitleDecoderFactory
).
- Bạn có thể ghi đè thay đổi này bằng cách gọi cả
- PGS: Sửa bộ giải mã độ dài chạy để phân giải
0
dưới dạng chỉ mục màu, thay vì giá trị màu cố định (#1367). - CEA-708: Bỏ qua giá trị
rowLock
. Thông số kỹ thuật CEA-708-E S-2023 nêu rõ rằng cảrowLock
vàcolumnLock
đều phải được giả định là đúng, bất kể giá trị có trong luồng (không triển khai chức năng hỗ trợcolumnLock
nên luôn được giả định là luôn sai).- Ban đầu, thay đổi này có trong ghi chú phát hành
1.3.0-alpha01
, nhưng vô tình bị huỷ bỏ trước bản phát hành1.3.0-rc01
. Lỗi này hiện đã được khắc phục, vì vậy thay đổi sẽ xuất hiện trở lại.
- Ban đầu, thay đổi này có trong ghi chú phát hành
- CEA-708: Tránh việc thêm các dòng mới trùng lặp bằng cách xử lý ngây thơ của ExoPlayer đối với lệnh "set pen location" (vị trí đặt bút) (#1315).
- Siêu dữ liệu:
- Khắc phục lỗi ánh xạ thẻ sắp xếp MP4 với ID3. Trước đây, các thẻ MP4 "sắp xếp đĩa nhạc"
(
soal
), "sắp xếp nghệ sĩ" (soar
) và "sắp xếp nghệ sĩ đĩa nhạc" (soaa
) bị liên kết nhầm với các thẻ mã nhận dạngTSO2
,TSOA
vàTSOP
(#1302). - Sửa lỗi đọc thẻ
gnre
(thể loại) vàtmpo
(nhịp độ) của MP4 (/iTunes) ở dạng số khi giá trị dài hơn một byte. - Truyền khung ID3
TCON
thànhMediaMetadata.genre
(#1305).
- Khắc phục lỗi ánh xạ thẻ sắp xếp MP4 với ID3. Trước đây, các thẻ MP4 "sắp xếp đĩa nhạc"
(
- Hình ảnh:
- Thêm tuỳ chọn hỗ trợ cho lưới hình thu nhỏ DASH không vuông (#1300).
- Thêm tính năng hỗ trợ cho AVIF cho API 34 trở lên.
- Nguồn dữ liệu:
- Cho phép
ByteArrayDataSource
phân giải một URI thành một mảng byte trongopen()
thay vì được mã hoá cứng khi tạo (#1405).
- Cho phép
- DRM (Quản lý bản quyền kỹ thuật số):
- Cho phép đặt
LoadErrorHandlingPolicy
trênDefaultDrmSessionManagerProvider
(#1271).
- Cho phép đặt
- Hiệu ứng:
- Khắc phục lỗi
TimestampWrapper
gặp sự cố khi sử dụng vớiExoPlayer#setVideoEffects
(#821). - Thay đổi không gian làm việc màu SDR mặc định từ màu tuyến tính thành video BT 709 SDR điện. Ngoài ra, hãy cung cấp tuỳ chọn thứ ba để giữ lại không gian màu gốc.
- Cho phép xác định thứ tự z không xác định của EditedMediaItemSequences (#1055).
- Duy trì phạm vi độ chói nhất quán trên các nội dung HDR khác nhau (sử dụng phạm vi HLG).
- Thêm tính năng hỗ trợ cho lớp phủ Ultra HDR (bitmap) trên nội dung HDR.
- Cho phép sử dụng hiệu ứng
SeparableConvolution
trước API 26.
- Khắc phục lỗi
- Tiện ích IMA:
- Quảng bá API cần thiết cho các ứng dụng để phát luồng quảng cáo DAI ổn định.
- Thêm
replaceAdTagParameters(Map <String, String>)
vàoImaServerSideAdInsertionMediaSource.AdLoader
để cho phép thay thế thông 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 phiên bản SDK IMA lên phiên bản 3.33.0 để khắc phục
NullPointerException
khi sử dụng URI thẻ quảng cáodata://
(#700).
- Phiên:
- Ẩn thanh tua trong thông báo về nội dung nghe nhìn đối với sự kiện phát trực tiếp bằng cách không đặt thời lượng trong siêu dữ liệu về phiên trên nền tảng (#1256).
- Điều chỉnh lượt chuyển đổi
MediaMetadata
thànhMediaDescriptionCompat
để sử dụng cùng một thứ tự và logic ưu tiên khi chọn các thuộc tính siêu dữ liệu như trong media1. - Thêm
MediaSession.sendError()
cho phép gửi lỗi không nghiêm trọng đến bộ điều khiển Media3. Khi sử dụng trình điều khiển thông báo (xemMediaSession.getMediaNotificationControllerInfo()
), lỗi tuỳ chỉnh sẽ được dùng để cập nhậtPlaybackState
của phiên hoạt động trên nền tảng thành trạng thái lỗi kèm theo thông tin lỗi cụ thể (#543).
- Phần mở rộng Cronet:
- Khắc phục
SocketTimeoutException
trongCronetDataSource
. Trong một số phiên bản của Chromium, yêu cầu mà 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 sẽ dẫn đến 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 các mẫu EMSG đang chờ xử lý chờ gián đoạn được uỷ quyền trong
HlsSampleStreamWrapper
với độ lệch không chính xác gây raIndexOutOfBoundsException
hoặcIllegalArgumentException
(#1002). - Khắc phục lỗi trong đó danh sách phát phụ liên tục tải lại đối với các luồng LL-HLS (#1240).
- Khắc phục lỗi trong đó việc bật CMCD cho HLS với các phân đoạn khởi chạy dẫn đến
Source Error
vàIllegalArgumentException
.
- Khắc phục lỗi các mẫu EMSG đang chờ xử lý chờ 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 tiêu đề album của
MediaQueueItem
thành nghệ sĩ trong mục nội dung đa phương tiện Media3 (#1255).
- Khắc phục lỗi đã chuyển đổi tiêu đề album của
- Ứng dụng minh hoạ:
- Cho phép đặt chế độ lặp lại với các đối số
Intent
từ dòng lệnh (#1266).
- Cho phép đặt chế độ lặp lại với các đối số
- Xoá các biểu tượng không dùng nữa:
- Xoá phương thức
setContentTypePredicate(Predicate)
khỏiDefaultHttpDataSource
,OkHttpDataSource
vàCronetDataSource
. Thay vào đó, hãy sử dụng phương thức tương đương trên từngXXXDataSource.Factory
. - Xoá hàm khởi tạo
OkHttpDataSource
và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
. Thay vào đó, hãy sử dụng phương thứcisLive()
. - Xoá hàm khởi tạo
DefaultHttpDataSource
. Chuyển sang 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)
. Sử dụngMediaCodecInfo.canReuseCodec(Format, Format)
thay thế. - Xoá phương thức
DrmSessionManager.DUMMY
và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á các hằng số
RendererSupport.FormatSupport
IntDef 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à các hằng số tương đương trongandroidx.media3.common.C
(ví dụ:C.FORMAT_HANDLED
).
- Xoá phương thức
Phiên bản 1.4.0-alpha01
Ngày 17 tháng 4 năm 2024
Phát hành androidx.media3:media3-*:1.4.0-alpha01
.
Phiên bản 1.4.0-alpha01 bao gồm các thay đổi sau.
- ExoPlayer:
- Thêm
BasePreloadManager
để điều phối quá trình tải trước cho nhiều nguồn dựa trên mức độ ưu tiên dorankingData
của các nguồn đó xác định. Bạn có thể tuỳ chỉnh bằng cách mở rộng lớp này. ThêmDefaultPreloadManager
sử dụngPreloadMediaSource
để tải trước mẫu nội dung đa phương tiện của các nguồn vào bộ nhớ và sử dụng số nguyênrankingData
cho biết chỉ mục của một mục trên giao diện người dùng. - Thêm
PlayerId
vào hầu hết các phương thức củaLoadControl
để cho phép triển khaiLoadControl
nhằm hỗ 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à giải mã sẽ quyết định bỏ qua vùng đệm dựa trên dấu thời gian. Các hoạt động triển khaiRenderer
tuỳ chỉnh nên kiểm tra xem thời gian đệm tối thiểu có phải làBaseRenderer.getLastResetPositionUs()
hay không để quyết định xem có hiển thị một mẫu hay không. Quá trình triển khaiSimpleDecoder
tuỳ 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ề một giá trị rỗng để cho biết không cần tải trướcMediaSource
bằngrankingData
nhất định. - Thêm
remove(MediaSource)
vàoBasePreloadManager
.
- Thêm
- Bộ chuyển đổi:
- Thêm
audioConversionProcess
vàvideoConversionProcess
vàoExportResult
cho biết cách tạo bản nhạc tương ứng trong tệp đầu ra. - Giảm bớt việc kiểm tra cấp độ H.264 tối ưu hoá cắt bỏ.
- Thêm tính năng hỗ trợ thay đổi giữa nội dung nghe nhìn đầu vào SDR và HDR theo trình tự.
- Thêm tính năng hỗ trợ cho hiệu ứng âm thanh ở cấp độ sáng tác.
- Thêm tính năng hỗ trợ chuyển mã hình ảnh Ultra HDR thành video HDR.
- Khắc phục vấn đề
DefaultAudioMixer
không xuất số lượng byte chính xác sau khi được đặt lại và sử dụng lại.
- Thêm
- Video:
- Khắc phục vấn đề
Listener.onRenderedFirstFrame()
đến quá sớm khi chuyển đổi giao diện trong thời gian phát.
- Khắc phục vấn đề
- Nguồn dữ liệu:
- Triển khai dịch vụ hỗ trợ cho các URI tài nguyên thô
android.resource://package/id
, trong đópackage
khác với gói của ứng dụng hiện tại. Phương thức này trước đây chưa được ghi nhận là có hiệu quả, nhưng là 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 so với theo tên. - Kiểm tra nghiêm ngặt
url
có giá trị không rỗng trong hàm khởi tạoDataSpec
. Tham số này đã được chú thích để không rỗng.
- Triển khai dịch vụ hỗ trợ cho các URI tài nguyên thô
- Hiệu ứng:
- Hỗ trợ nhiều thay đổi về tốc độ trong cùng một
EditedMediaItem
hoặcComposition
trongSpeedChangeEffect
. - Hỗ trợ đầu ra HLG và PQ từ đầu vào bitmap siêu HDR.
- Thêm tính năng 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à SurfaceView gỡ lỗi của Transformer.
- Cập nhật phương thức triển khai ma trận Lớp phủ để 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 của các giá trị này bằng cách nhân với-1
.
- Hỗ trợ nhiều thay đổi về tốc độ trong cùng một
- Phiên:
- Thay đổi giá trị mặc định là
CommandButton.enabled
thànhtrue
và đảm bảo giá trị có thể là false cho 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
nên được sử dụng 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 có cần dừng dịch vụ trongonTaskRemoved()
(#1219) hay không. - Thêm
MediaSessionService.pauseAllPlayersAndStopSelf()
để cho phép tạm dừng phát tất cả các phiên một cách thuận tiện và gọistopSelf
để chấm dứt vòng đời củaMediaSessionService
. - Ghi đè
MediaSessionService.onTaskRemoved(Intent)
để cung cấp phương thức triển khai mặc định an toàn giúp dịch vụ luôn chạy ở nền trước nếu quá trình phát đang diễn ra hoặc dừng dịch vụ.
- Thay đổi giá trị mặc định là
- Tệp đã tải xuống:
- Đảm bảo rằng
DownloadHelper
không làm rò rỉ các thực thểRenderer
chưa phát hành, điều này cuối cùng có thể dẫn đến sự cố ứng dụng vớiIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224).
- Đảm bảo rằng
- Tiện ích kiểm thử:
- Triển khai
onInit()
vàonRelease()
trongFakeRenderer
. - Thay đổi các phương thức
TestPlayerRunHelper.runUntil/playUntil
để không thực hiện được đối với các lỗi không nghiêm trọng (ví dụ: các phương thức đã báo cáo choAnalyticsListener.onVideoCodecError
). Hãy sử dụng chuỗi phương thứcTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
mới để vô hiệu hoá hành vi này.
- Triển khai
- Ứng dụng minh hoạ:
- Sử dụng
DefaultPreloadManager
trong ứng dụng minh hoạ dạng ngắn.
- Sử dụng
- Xoá các biểu tượng không dùng nữa:
- Xoá
CronetDataSourceFactory
. Thay vào đó, hãy sử dụngCronetDataSource.Factory
. - Xoá một số hàm khởi tạo
DataSpec
. Sử dụngDataSpec.Builder
thay thế.
- Xoá
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 đã bản địa hoá hoặc nhãn thay thế khác.
- Thêm
- ExoPlayer:
- Khắc phục vấn đề
PreloadMediaPeriod
không thể giữ lại các luồng khi tải trước lại. - Áp dụng đúng
TrackSelectionResult
tương ứng cho giai đoạn phát trong quá trình lựa 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 đa phương tiện (#1017).
- Thêm kiểu dữ liệu trả về bị thiếu vào quy tắc
-keepclasseswithmembers
Proguard choDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- Khắc phục vấn đề
- Bộ chuyển đổi:
- Thêm giải pháp cho trường hợp ngoại lệ được gửi do
MediaMuxer
không hỗ trợ dấu thời gian trình bày âm trước API 30.
- Thêm giải pháp cho trường hợp ngoại lệ được gửi do
- Chọn bản nhạc:
DefaultTrackSelector
: Ưu tiên các video có tốc độ khung hình "hợp lý" (>=10fps) so với các video có tốc độ khung hình thấp hơn hoặc chưa được đặt. Điều này đảm bảo rằng người chơi chọn bản video "thực" trong tệp MP4 được trích xuất từ các ảnh chuyển động có thể chứa 2 bản nhạc HEVC, trong đó một bản nhạc 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 đề khoảng đệm không bị bỏ qua khi đọc các đoạn có kích thước lẻ từ tệp WAV (#1117).
- MP3: Điền
Format.averageBitrate
từ các khung siêu dữ liệu nhưXING
vàVBRI
. - MPEG-TS: Huỷ bỏ thay đổi nhằm đảm bảo khung hình cuối cùng được kết xuất bằng cách truyền đơn vị truy cập gần đây nhất 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 sự cố mới với luồng HLS chỉ gồm khung hình I (#1150) và HLS H.262 (#1126).
- Âm thanh:
- Cho phép khôi phục trình kết xuất bằng cách tắt tính năng giảm tải nếu bản âm thanh không khởi động được ở chế độ giảm tải.
- Video:
- Thêm giải pháp cho một sự cố 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 tốc độ 60 khung hình/giây được đá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 hiển thị trong khi chuyển đường ống 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 trái của bộ mã hoá và giải mã và ngăn việc chuyển đổi định dạng thích ứng cho các bản video SDR (#1158).
- Văn bản:
- WebVTT: Ngăn các tín hiệu liên tiếp trực tiếp tạo thực thể
CuesWithTiming
giả mạo từWebvttParser.parse
(#1177).
- WebVTT: Ngăn các tín hiệu liên tiếp trực tiếp tạo thực thể
- DRM (Quản lý bản quyền kỹ thuật số):
- Tìm cách giải quyết một
NoSuchMethodError
mà khungMediaDrm
có thể gửi thay vìResourceBusyException
hoặcNotProvisionedException
trên một số thiết bị Android 14 (#1145).
- Tìm cách giải quyết một
- Hiệu ứng:
- Cải thiện chất lượng PQ thành ánh xạ tông màu SDR bằng cách chuyển đổi hệ màu.
- Phiên:
- Giao diện người dùng:
- Dự phòng để bao gồm tên ngôn ngữ của bản âm thanh nếu
Locale
không thể xác định tên hiển thị (#988).
- Dự phòng để bao gồm tên ngôn ngữ của bản âm thanh nếu
- Tiện ích DASH:
- Điền tất cả phần tử
Label
từ tệp kê khai vàoFormat.labels
(#1054).
- Điền tất cả phần tử
- Tiện ích RTSP:
- Bỏ qua các giá trị thông tin phiên trống (i-Tag) trong quá trình phân tích cú pháp SDP (#1087).
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Theo mặc định, hãy tắt tiện ích MIDI dưới dạng phần phụ thuộc cục bộ vì tiện ích này yêu cầu phải định cấu hình thêm kho lưu trữ Maven. Người dùng cần mô-đun này từ một phần phụ thuộc cục bộ có thể bật lại mô-đun này.
Phiên bản 1.3.0
Ngày 6 tháng 3 năm 2024
Phát hành androidx.media3:media3-*:1.3.0
.
Phiên bản 1.3.0 bao gồm các thay đổi sau.
- Thư viện chung:
- Triển khai dịch vụ hỗ trợ cho các URI tài nguyên thô
android.resource://package/[type/]name
, trong đópackage
khác với gói của ứng dụng hiện tại. Phương pháp này luôn được ghi nhận là có hiệu quả, nhưng cho đến nay chưa được triển khai đúng cách. - Chuẩn hoá các loại MIME được đặt theo mã ứng dụng 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 có
MediaItem
đầy đủ thay vì mộtUri
trongAdPlaybackState
. - Tăng
minSdk
lên 19 (Android KitKat). Điều này phù hợp với tất cả các thư viện AndroidX khác và là điều bắt buộc để chúng tôi nâng cấp lên phiên bản mới nhất của các phần phụ thuộc AndroidX. - Điền cả
artworkUri
vàartworkData
vàoMediaMetadata.Builder.populate(MediaMetadata)
khi có ít nhất một trong hai giá trị này không có giá trị rỗng (#964).
- Triển khai dịch vụ hỗ trợ cho các URI tài nguyên thô
- ExoPlayer:
- Thêm
PreloadMediaSource
vàPreloadMediaPeriod
để cho phép các ứng dụng tải trước nguồn nội dung nghe nhìn tại một vị trí bắt đầu cụ thể trước khi phát.PreloadMediaSource
đảm nhận việc chuẩn bị nguồn nội dung nghe nhìn để nhậnTimeline
, chuẩn bị và lưu vào bộ nhớ đệm khoảng thời gian tại vị trí bắt đầu nhất định, chọn kênh và tải dữ liệu nội dung nghe nhì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.PreloadControl
và đặ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
. - Theo mặc định,
DefaultRenderersFactory
nay cung cấp mộtImageRenderer
cho người chơi vớiImageOutput
vàImageDecoder.Factory.DEFAULT
rỗng. - Phát ra sự kiện
Player.Listener.onPositionDiscontinuity
khi bỏ qua khoảng lặng (#765). - Thêm tính năng hỗ trợ thử nghiệm để phân tích cú pháp phụ đề trong quá trình trích xuất. Bạn có thể bật tính năng này bằng cách sử dụng
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Hỗ trợ các nguồn nội dung nghe nhìn thích ứng bằng
PreloadMediaSource
. - Triển khai
HttpEngineDataSource
, mộtHttpDataSource
bằng cách sử dụng API HttpEngine. - Ngă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 con trong thư viện. Bạn có thể tuỳ chỉnh bằng cách gói một thực thể bằng cách sử dụng mẫu trang trí và triển khai mộtCompositeSequenceableLoaderFactory
tuỳ chỉnh. - Khắc phục vấn đề việc lặp lại cùng một lúc khiến siêu dữ liệu của mục này bị xoá (#1007).
- Đổi tên các phương thức
experimentalSetSubtitleParserFactory
trênBundledChunkExtractor.Factory
vàDefaultHlsExtractorFactory
thànhsetSubtitleParserFactory
và không cho phép truyềnnull
. Hãy sử dụng các phương thứcexperimentalParseSubtitlesDuringExtraction(boolean)
mới để kiểm soát hành vi phân tích cú pháp. - Thêm tính năng hỗ trợ để tuỳ chỉnh
SubtitleParser.Factory
được dùng trong quá trình trích xuất. Bạn có thể thực hiện việc này bằngMediaSource.Factory.setSubtitleParserFactory()
. - Thêm tiền tố nguồn vào tất cả các trường
Format.id
được tạo từMergingMediaSource
. Điều này giúp xác định nguồn nào đã tạo raFormat
(#883). - Sửa biểu thức chính quy dùng để xác thực tên khoá Dữ liệu ứng dụng đa phương tiện chung (CMCD) tuỳ chỉnh bằng cách sửa đổi biểu thức đó để chỉ kiểm tra dấu gạch nối (#1028).
- Dừ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, đặc biệt đối với cá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 kết quả của các thao tác cắt tương thích hơn với những cách triển khai của trình phát không hiển thị khung hình video đầu tiên cho đến dấu thời gian hiển thị (#829).
- Thêm tính năng hỗ trợ tối ưu hoá hoạt động cắt MP4 cho một tài sản.
- Thêm tính năng hỗ trợ để đảm bảo một khung hình video có dấu thời gian đầu tiên trong tệp đầu ra. Sửa các tệp đầu ra bắt đầu bằng khung màu đen trên trình phát dựa trên iOS (#829).
- Chọn bản nhạc:
- Thêm
DefaultTrackSelector.selectImageTrack
để bật lựa chọn bản nhạc hình ảnh. - Thêm
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
để xác định xem có chọn kênh hình ảnh hay không nếu có cả bản nhạc hình ảnh và video. Giá trị mặc định làfalse
, nghĩa 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 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.colorTransfer
vàColorInfo.colorRange
(#692). - MP3: Sử dụng tốc độ bit không đổi (CBR) đang tìm kiếm các tệp có tiêu đề
Info
(tiêu đề CBR tương đương với tiêu đềXing
). Trước đây, chúng ta đã 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 nếu chúng ta bỏ qua và giả định tệp là CBR. - MPEG2-TS: Thêm 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 rồi ánh xạ các loại đó với cờ vai trò, giúp người dùng lựa chọn bản âm thanh sáng suốt hơn (#973).
- Thêm 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
MediaCodecVideoRenderer
lấy đối sốVideoFrameProcessor.Factory
rồi thay thế bằng một hàm khởi tạo nhận đối sốVideoSinkProvider
. Các ứng dụng muốn chènVideoFrameProcessor.Factory
tuỳ chỉnh có thể tạo thực thểCompositingVideoSinkProvider
sử dụngVideoFrameProcessor.Factory
tuỳ chỉnh và truyền trình cung cấp bồn lưu trữ video đếnMediaCodecVideoRenderer
.
- Thay đổi hàm khởi tạo
- Văn bản:
- Khắc phục quá trình 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 objects
khi sử dụngDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: Bỏ qua giá trị
rowLock
. Thông số kỹ thuật CEA-708-E S-2023 nêu rõ rằng cảrowLock
vàcolumnLock
đều phải được giả định là đúng, bất kể giá trị có trong luồng (không triển khai chức năng hỗ trợcolumnLock
nên luôn được giả định là luôn sai).
- Khắc phục quá trình 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ợ cho hình thu nhỏ DASH. Hình ảnh lưới được cắt và từng hình thu nhỏ sẽ được cung cấp cho
ImageOutput
gần với thời gian trình bày.
- Thêm tính năng hỗ trợ cho hình thu nhỏ DASH. Hình ảnh lưới được cắt và từng hình thu nhỏ sẽ được cung cấp cho
- DRM (Quản lý bản quyền kỹ thuật số):
- Phát các mẫu chưa mã hoá "rõ ràng khách hàng tiềm năng" trong nội dung DRM ngay lập tức theo mặc định, ngay cả khi các khoá cho các mẫu được mã hoá sau này chưa sẵn sàng. Điều này có thể dẫn đến các gian hàng phát giữa chừng nếu các khoá vẫn chưa sẵn sàng khi vị trí phát đạt đến các mẫu đã mã hoá (nhưng trước đó quá trình phát sẽ không bắt đầu vào thời điểm này). Bạn có thể tắt hành vi này bằng
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
hoặcDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Phát các mẫu chưa mã hoá "rõ ràng khách hàng tiềm năng" trong nội dung DRM ngay lập tức theo mặc định, ngay cả khi các khoá cho các mẫu được mã hoá sau này chưa sẵn sàng. Điều này có thể dẫn đến các gian hàng phát giữa chừng nếu các khoá vẫn chưa sẵn sàng khi vị trí phát đạt đến các mẫu đã mã hoá (nhưng trước đó quá trình phát sẽ không bắt đầu vào 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 thể phát quảng cáo DASH và HLS nếu 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 ứng dụng TV (#962).
- Khắc phục vấn đề
MediaItem.RequestMetadata
chỉ với dữ liệu bổ sung khác rỗng không được truyền giữa bộ điều khiển nội dung nghe nhìn và phiên. - Thêm hàm khởi tạo vào
MediaLibrarySession.Builder
chỉ lấyContext
thay vìMediaLibraryService
.
- Tiện ích HLS:
- Giảm
HlsMediaPeriod
xuống chế độ hiển thị ở chế độ riêng tư của gói. Loại này không được phụ thuộc trực tiếp từ bên ngoài gói HLS. - Giải quyết tìm cách bắt đầu một phân đoạn hiệu quả hơn (#1031).
- Giảm
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Bộ giải mã MIDI: Bỏ qua các 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
. Quá trình kiểm thử sẽ duy trì quá trình phát ở trạng thái đang phát, nhưng sẽ tạm ngưng tiến trình cho đến khi quá trình kiểm thử có thể thêm câu nhận định và các thao tác khác.
- Không tạm dừng phát trong
- Ứng dụng minh hoạ:
- Thêm một mô-đun minh hoạ dạng ngắn để minh hoạ cách sử dụng
PreloadMediaSource
với trường hợp sử dụng nội dung dạng ngắn.
- Thêm một mô-đun minh hoạ dạng ngắn để minh hoạ cách sử dụng
Phiên bản 1.3.0-rc01
Ngày 22 tháng 2 năm 2024
Sử dụng phiên bản ổn định 1.3.0.
Phiên bản 1.3.0-beta01
Ngày 7 tháng 2 năm 2024
Sử dụng phiên bản ổn định 1.3.0.
Phiên bản 1.3.0-alpha01
Ngày 15 tháng 1 năm 2024
Sử dụng phiên bản ổn định 1.3.0.
Phiên bản 1.2.0
Phiên bản 1.2.1
Ngày 9 tháng 1 năm 2024
- ExoPlayer:
- Khắc phục vấn đề tìm kiếm thủ công bên ngoài phạm vi
LiveConfiguration.min/maxOffset
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 cho 3, 5, 6, 7 và 8 kênh (#8396).
- Khắc phục vấn đề các lựa chọn bản nhạc sau khi tìm về 0 trong sự kiện phát trực tiếp không để sự kiện bắt đầu ở vị trí mặc định (#9347).
- Khắc phục vấn đề các thực thể mới của
CmcdData.Factory
nhận giá trị âm chobufferedDurationUs
từ các nguồn phân đoạn, dẫn đếnIllegalArgumentException
(#888).
- Khắc phục vấn đề tìm kiếm thủ công bên ngoài phạm vi
- Bộ chuyển đổi:
- Giải quyết vấn đề bộ mã hoá sẽ gửi vào thời gian cấu hình do đặt tốc độ hoạt động cao.
- Công cụ trích xuất:
- Đánh dấu các bản nhạc HEVC phụ (không phát được) trong ảnh chuyển động JPEG là
ROLE_FLAG_ALTERNATE
để tránh tự động được chọn phát lại do có độ phân giải cao hơn. - Khắc phục vấn đề phát hiện khung hình chính không chính xác cho các luồng TS H264 (#864).
- Sửa thông tin ướ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 bản nhạc HEVC phụ (không phát được) trong ảnh chuyển động JPEG là
- Âm thanh:
- Khắc phục việc xử lý EOS cho
SilenceSkippingAudioProcessor
khi được gọi nhiều lần (#712).
- Khắc phục việc xử lý EOS cho
- Video:
- Thêm giải pháp cho một sự cố thiết bị trên Galaxy Tab S7 FE, Chromecast có Google TV và Lenovo M10 FHD Plus khiến luồng AVC 60 khung hình/giây được đánh dấu là không được hỗ trợ (#693).
- Siêu dữ liệu:
- Khắc phục lỗi
MediaMetadata
chỉ được điền từ nhận xét Vorbis bằng các khoá viết hoa (#876). - Bắt
OutOfMemoryError
khi phân tích cú pháp các khung ID3 rất lớn, nghĩa là quá trình phát có thể tiếp tục mà không cần thông tin thẻ thay vì phát lại hoàn toàn không thành công.
- Khắc phục lỗi
- DRM (Quản lý bản quyền kỹ thuật số):
- Mở rộng giải pháp cho URL giấy phép
https://default.url
giả mạo sang API 33 trở lên (trước đây, giải pháp chỉ được áp dụng chính xác cho API 33) (#837). - Sửa
ERROR_DRM_SESSION_NOT_OPENED
khi chuyển từ phương thức đã mã hoá sang xoá nội dung mà không gắn bề mặt cho trình phát. Lỗi này là do sử dụng sai bộ giải mã an toàn để phát nội dung rõ ràng.
- Mở rộng giải pháp cho URL giấy phép
- Phiên:
- Đặt các khoá và giá trị tuỳ chỉnh trong
MediaMetadataCompat
vàoMediaMetadata.extras
vàMediaMetadata.extras
vàoMediaMetadataCompat
(#756, #802). - Khắc phục tính năng truyền tin
notifyChildrenChanged
cho các bộ điều khiển cũ (#644). - Khắc phục lỗi khi việc đặt thời gian âm cho bộ tính giờ
setWhen
đã tắt của thông báo gây ra sự cố trên một số thiết bị (#903). - Khắc phục
IllegalStateException
khi trình đ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 đầu tiên (#917).
- Đặt các khoá và giá trị tuỳ chỉnh trong
- Giao diện người dùng:
- Tiện ích DASH:
- Phân tích cú pháp "f800" dưới dạng số lượng kênh bằng 5 cho Dolby trong tệp kê khai DASH (#688).
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Tiện ích Truyền:
- Dọn dẹp việc tạo
Timeline
để ứng dụng khô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).
- Dọn dẹp việc tạo
Phiên bản 1.2.0
Ngày 15 tháng 11 năm 2023
- Thư viện chung:
- Thêm tham số
@Nullable Throwable
vào các phương thức trong giao diệnLog.Logger
. Tham sốmessage
cho các phương thức này không còn chứa bất kỳ thông tin nào vềThrowable
được truyền đến các phương thứcLog.{d,i,w,e}()
, vì vậy, các 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, trong đó các tham số kiểu chung có thể rỗng và các loại phần tử mảng có tính chất rỗng không được phát hiện là có tính chất rỗng. Ví dụ: các tham số phương thức
TrackSelectorResult
vàSimpleDecoder
(#6792). - Thay đổi giao diện người dùng và hành vi thông báo mặc định trong
Util.shouldShowPlayButton
để hiển thị nút "phát" trong khi quá trình phát tạm thời bị chặn (ví dụ: do mất quyền phát âm thanh tạm thời). Bạn có thể duy trì hành vi cũ bằng cách sử dụngPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
hoặcMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Hãy nâng cấp
androidx.annotation:annotation-experimental
lên1.3.1
để khắc phục lỗi https://issuetracker.google.com/251172715. - Di chuyển
ExoPlayer.setAudioAttributes
sang giao diệnPlayer
.
- Thêm tham số
- ExoPlayer:
- Khắc phục sự cố tìm kiếm trong luồng AC4 do không xác định chính xác mẫu chỉ giải mã (#11000).
- Thêm tính năng chặn phát trên các thiết bị đầu ra âm thanh không phù hợp (ví dụ: loa tích hợp trên các thiết bị Wear OS) khi tính năng này được bật qua
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. Lý do chặn hoạt động phát sẽ được cập nhật thànhPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
nếu bạn cố gắng phát khi không có đầu ra âm thanh phù hợp, hoặc nếu tất cả đầu ra phù hợp bị ngắt kết nối trong khi phát. Lý do chặn sẽ được xoá khi bạn kết nối một đầu ra phù hợp. - Thêm
MediaSource.canUpdateMediaItem
vàMediaSource.updateMediaItem
để chấp nhận nội dung cập nhật củaMediaItem
sau khi tạo thông quaPlayer.replaceMediaItem(s)
. - Cho phép cập nhật
MediaItem
đối với tất cả các lớpMediaSource
do thư viện cung cấp thông quaPlayer.replaceMediaItem(s)
(#33, #9978). - Đổi tên
MimeTypes.TEXT_EXOPLAYER_CUES
thànhMimeTypes.APPLICATION_MEDIA3_CUES
. - Thêm
PngExtractor
sẽ gửi và đọc toàn bộ tệp PNG vàoTrackOutput
dưới dạng một mẫu. - Cải thiện phương thức
SequenceableLoader.continueLoading(long)
trong giao diệnSequenceableLoader
thànhSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
chứa các tham số bổ sung, bao gồmplaybackSpeed
vàlastRebufferRealtimeMs
ngoàiplaybackPositionUs
hiện có. - Cải thiện phương thức
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
trong giao diệnChunkSource
thànhChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Thêm các trường bổ sung vào tính năng ghi nhật ký Dữ liệu ứng dụng đa phương tiện chung (CMCD): thiếu bộ đệm (
bs
), thời hạn (dl
), tốc độ phát (pr
) và khởi động (su
) (#8699). - Thêm độ chói và độ sâu bit sắc độ vào
ColorInfo
(#491). - Thêm các trường bổ sung vào nhật ký Dữ liệu ứng dụng đa phương tiện chung (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 Ứng dụng đa phương tiện chung (CMCD) bằng cách sử dụng các tham số truy vấn (#553).
- Sửa
ConcurrentModificationException
trongExperimentalBandwidthMeter
(#612). - Thêm tham số
MediaPeriodId
vàoCompositeMediaSource.getMediaTimeForChildMediaTime
. - Hỗ trợ
ClippingMediaSource
(và các nguồn khác có mức chênh lệch thời gian theo khoảng thời gian/thời lượng) trongConcatenatingMediaSource2
(#11226). - Thay đổi
BaseRenderer.onStreamChanged()
để nhận cả đối sốMediaPeriodId
.
- Bộ chuyển đổi:
- Phân tích cú pháp dữ liệu xoay EXIF đối với đầu vào hình ảnh.
- Xoá loại chú giải
TransformationRequest.HdrMode
và các hằng số liên kết. Thay vào đó, hãy sử dụngComposition.HdrMode
và các hằng số liên kết. - Đơn giản hoá
OverlaySettings
để khắc phục vấn đề xoay. - Thay đổi các thông số
frameRate
vàdurationUs
củaSampleConsumer.queueInputBitmap
thànhTimestampIterator
.
- Chọn bản nhạc:
- 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 gần đây nhất của luồng đến hàng đợi mẫu (#7909).
- Sửa lỗi chính tả khi xác định
rotationDegrees
. Thay đổiprojectionPosePitch
thànhprojectionPoseRoll
(#461). - Xoá giả định rằng có thể kiểm tra trực tiếp các thực thể
Extractor
bằnginstanceof
. Nếu muốn truy cập khi bắt đầu chạy vào thông tin triển khai củaExtractor
, trước tiên, bạn phải gọiExtractor.getUnderlyingInstance
. - Thêm
BmpExtractor
. - Thêm
WebpExtractor
. - Thêm
HeifExtractor
. - Thêm tính năng hỗ trợ QuickTime Classic vào
Mp4Extractor
.
- Âm thanh:
- Thêm tính năng hỗ trợ PCM Big-endian 24/32 bit trong MP4 và Matroska, đồng thời phân tích cú pháp mã hoá PCM cho
lpcm
trong 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ợ giảm tải mà bồn lưu trữ dữ liệu có thể cung cấp cho định dạng thông quaDefaultAudioOffloadSupportProvider
. Phương thức này sẽ trả vềAudioOffloadSupport
mới chứaisFormatSupported
,isGaplessSupported
vàisSpeedChangeSupported
. - Thêm
AudioSink.setOffloadMode()
mà qua đó cấu hình giảm tải trên bồn lưu âm thanh được định cấu hình. Giá trị mặc định làAudioSink.OFFLOAD_MODE_DISABLED
. - Bạn có thể bật tính năng giảm tải thông qua
setAudioOffloadPreference
trongTrackSelectionParameters
. Nếu bạn bật lựa chọn ưu tiên đã đặt, thiết bị sẽ hỗ trợ tính năng giảm tải cho định dạng và lựa chọn bản nhạc là một bản âm thanh duy nhất, thì chế độ giảm tải âm thanh sẽ được bật. - Nếu bạn đặt
audioOffloadModePreference
thànhAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
, thìDefaultTrackSelector
sẽ chỉ chọn một bản âm thanh và chỉ khi định dạng của bản nhạc đó được hỗ trợ trong chế độ giảm tải. Nếu không có bản âm thanh nào được hỗ trợ trong chế độ giảm tải, thì sẽ không có bản âm thanh nào được chọn. - Tắt tính năng hỗ trợ không có khoảng trống cho việc giảm tải khi API trước cấp 33 gặp vấn đề về vị trí phát sau khi chuyển đổi kênh.
- Xoá tham số
enableOffload
khỏ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ợ cho siêu dữ liệu không có khoảng trống của Opus trong quá trình phát giảm tải.
- Cho phép khôi phục trình kết xuất bằng cách tắt tính năng giảm tải nếu không thể ghi ở lần ghi đầu tiên (#627).
- Bật tính năng lên lịch giảm tải theo mặc định để chỉ phát âm thanh giảm tải.
- Xoá
ExoPlayer.experimentalSetOffloadSchedulingEnabled
vàAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. - Đổi tên
onExperimentalSleepingForOffloadChanged
thànhonSleepingForOffloadChanged
vàonExperimentalOffloadedPlayback
thànhonOffloadedPlayback
. - Di chuyển các giao diện và định nghĩa
TrackSelectionParameters
liên quan đến chế độ giảm tải âm thanh sang một lớpAudioOffloadPreferences
bên trong. - Thêm lệnh gọi lại
onAudioTrackInitialized
vàonAudioTrackReleased
vàoAnalyticsListener
,AudioRendererEventListener
vàAudioSink.Listener
. - Khắc phục sự cố tràn vùng đệm âm thanh DTS Express (#650).
- Khắc phục lỗi khi quá trình kiểm tra chức năng cho E-AC3-JOC gửi ra
IllegalArgumentException
(#677).
- Thêm tính năng hỗ trợ PCM Big-endian 24/32 bit trong MP4 và Matroska, đồng thời phân tích cú pháp mã hoá PCM cho
- Video:
- Cho phép
MediaCodecVideoRenderer
sử dụngVideoFrameProcessor.Factory
tuỳ 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 với dấu thời gian âm (#291).
- Cho phép
- Văn bản:
- Xoá
ExoplayerCuesDecoder
. Các đoạn văn bản cósampleMimeType = application/x-media3-cues
hiện đượcTextRenderer
trực tiếp xử lý mà không cần có bản saoSubtitleDecoder
.
- Xoá
- Siêu dữ liệu:
MetadataDecoder.decode
sẽ không còn được gọi cho các mẫu "chỉ để giải mã" vì quá trình triển khai vẫn phải trả về giá trị rỗng.
- Hiệu ứng:
- Thêm
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
xếp hàng đợi đầu vào bitmap 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 thông số
frameRate
vàdurationUs
củaVideoFrameProcessor.queueInputBitmap
thànhTimestampIterator
.
- Thêm
- Tiện ích IMA:
- Khắc phục lỗi trong đó sự kiện phát trực tiếp DASH nhiều giai đoạn không phải là mục đầu tiên trong danh sách phát có thể gửi một trường hợp ngoại lệ (#571).
- Giải phóng StreamManager trước khi gọi
AdsLoader.destroy()
- Chuyển phiên bản SDK IMA lên phiên bản 3.31.0.
- Phiên:
- Đặt hành vi của dịch vụ trên nền trước của thông báo thành
FOREGROUND_SERVICE_IMMEDIATE
trongDefaultMediaNotificationProvider
(#167). - Chỉ sử dụng
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
trên API 31 để tránh các sự cố về API không dùng nữa trên các thiết bị Samsung (#167). - Sử dụng trình điều khiển thông báo nội dung nghe nhìn làm proxy để đặt các lệnh có sẵn và bố cục tuỳ chỉnh dùng để điền thông báo và phiên hoạt động trên nền tảng.
- Chuyển đổi các sự kiện nút nội dung đ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 và quay lại Media3. Với mô hình này, bộ điều khiển phương thức gọi luôn là bộ điều khiển thông báo nội dung nghe nhìn và các ứng dụng có thể dễ dàng nhận dạng các cuộc gọi đến từ thông báo theo cách tương tự ở tất cả các cấp độ API được hỗ trợ. - Khắc phục lỗi
MediaController.getCurrentPosition()
không tiến bộ khi được kết nối với mộtMediaSessionCompat
cũ. - Thêm
MediaLibrarySession.getSubscribedControllers(mediaId)
để thuận tiện. - Ghi đè
MediaLibrarySession.Callback.onSubscribe()
để xác nhận rằng có mã nhận dạng gốc mà tay điều khiển đăng ký. Nếu thành công, gói thuê bao sẽ được chấp nhận vànotifyChildrenChanged()
sẽ được gọi ngay lập tức để thông báo cho trình duyệt (#561). - Thêm mô-đun minh hoạ phiên cho Automotive OS và bật bản minh hoạ phiên cho Android Auto.
- Không đặt hàng đợi của phiên khung khi không có
COMMAND_GET_TIMELINE
cho trình điều khiển thông báo nội dung nghe nhìn. Với Android Auto làm bộ điều khiển ứng dụng đọc từ phiên khung, điều này có ảnh hưởng đến việc nútqueue
trong giao diện người dùng của Android Auto không hiển thị (#339). - Sử dụng
DataSourceBitmapLoader
theo mặc định thay vìSimpleBitmapLoader
(#271, #327). - Thêm
MediaSession.Callback.onMediaButtonEvent(Intent)
cho phép các ứng dụng ghi đè cách xử lý sự kiện nút nội dung nghe nhìn mặc định.
- Đặt hành vi của dịch vụ trên nền trước của thông báo thành
- Giao diện người dùng:
- Thêm phương thức triển khai
Player.Listener
cho các thiết bị Wear OS xử lý tình trạng chặn phát doPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
bằng cách khởi chạy hộp thoại hệ thống để cho phép người dùng kết nối đầ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 thời gian chờ có thể định cấu hình (mặc định là 5 phút).
- Thêm phương thức triển khai
- Tệp đã tải xuống:
- Khai báo loại dịch vụ "đồng bộ hoá dữ liệu" trên nền trước 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êmdataSync
dưới dạngforegroundServiceType
trong tệp kê khai và thêm quyềnFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- Khai báo loại dịch vụ "đồng bộ hoá dữ liệu" trên nền trước cho
- Tiện ích HLS:
- Làm mới danh sách phát trực tiếp HLS bằng khoảng thời gian được tính từ thời gian bắt đầu tải gần đây nhất thay vì thời gian hoàn thành lượt tải 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. Tính năng này hỗ trợ tốt hơn cho việc hợp nhất các phụ đề trùng lặp, bao gồm cả việc giải quyết hiện tượng nhấp nháy khi chuyển đổi giữa các phân đoạn phụ đề. Bạn có thể bật tính năng này bằng cách sử dụng
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- Tiện ích RTSP:
- Khắc phục một tình huống tương tranh có thể dẫn đến
IndexOutOfBoundsException
khi quay về TCP hoặc phát bị treo trong một số trường hợp. - Kiểm tra trạng thái trong quá trình thiết lập RTSP khi trả về trạng thái tải của
RtspMediaPeriod
(#577). - Bỏ qua các phương thức yêu cầu Rtsp tuỳ chỉnh trong tiêu đề công khai của phản hồi Tuỳ chọn (#613).
- Sử dụng giá trị thời gian chờ của Phản hồi thiết lập RTSP trong khoảng thời gian gửi yêu cầu Tùy chọn RTSP giữ kết nối mạng (#662).
- Khắc phục một tình huống tương tranh có thể dẫn đến
- Tiện ích bộ giải mã (FFmpeg, VP9, AV1, MIDI, v.v.):
- Phát hành mô-đun bộ giải mã MIDI. Mô-đun này hỗ trợ phát tệp MIDI chuẩn bằng cách sử dụng thư viện Jsyn để tổng hợp âm thanh.
- Thêm
DecoderOutputBuffer.shouldBeSkipped
để trực tiếp đánh dấu các vùng đệm đầu ra không cần trình bày. Tính năng này được ưu tiên hơn so vớiC.BUFFER_FLAG_DECODE_ONLY
và sẽ không được dùng nữa. - Thêm
Decoder.setOutputStartTimeUs
vàSimpleDecoder.isAtLeastOutputStartTimeUs
để cho phép bộ giải mã thả các mẫu chỉ giải mã trước thời gian bắt đầu. Phương thức này nên được ưu tiên hơn so vớiBuffer.isDecodeOnly
(sẽ không dùng nữa). - Khắc phục lỗi phát hành cấu phần phần mềm bộ giải mã MIDI lên 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 trong đó việc vô hiệu hoá một nền tảng có thể gây ra
ArithmeticException
trong mã Leanback (#617).
- Khắc phục lỗi trong đó việc vô hiệu hoá một nền tảng có thể gây ra
- Tiện ích kiểm thử:
- Giúp
TestExoPlayerBuilder
vàFakeClock
tương thích với quy trình kiểm thử giao diện người dùng Espresso và quy trình kiểm thử giao diện người dùng Compose. Điều này sửa lỗi khiến quá trình phát tiến triển không xác định trong các hoạt động tương tác khung hiển thị Espresso hoặc Compose.
- Giúp
- Xoá các biểu tượng không dùng nữa:
- Xoá
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
vàTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. Thay vào đó, hãy sử dụngComposition.Builder.setHdrMode(int)
và truyềnComposition
đếnTransformer.start(Composition, String)
. - Xoá phương thức
DownloadNotificationHelper.buildProgressNotification
không dùng nữa, hãy sử dụng một phương thức không còn được dùng nữa. Phương thức này lấy tham sốnotMetRequirements
.
- Xoá
Phiên bản 1.2.0-rc01
Ngày 1 tháng 11 năm 2023
Sử dụng phiên bản ổn định 1.2.0.
Phiên bản 1.2.0-beta01
Ngày 19 tháng 10 năm 2023
Sử dụng phiên bản ổn định 1.2.0.
Phiên bản 1.2.0-alpha02
Ngày 29 tháng 9 năm 2023
Sử dụng phiên bản ổn định 1.2.0.
Phiên bản 1.2.0-alpha01
Ngày 17 tháng 8 năm 2023
Sử dụng phiên bản ổn định 1.2.0.
Phiên bản 1.1.0
Phiên bản 1.1.1
Ngày 16 tháng 8 năm 2023
- Thư viện chung:
- Xoá phần phụ thuộc
multidex
vô tình được thêm vào khỏi tất cả các mô-đun (#499).
- Xoá phần phụ thuộc
- ExoPlayer:
- Khắc phục vấn đề trong
PlaybackStatsListener
, trong đóPlaybackStats
giả được tạo sau khi danh sách phát bị xoá. - Thêm các trường bổ sung vào nhật ký Dữ liệu ứng dụng đa phương tiện chung (CMCD): định dạng truyền trực tuyến (sf), loại luồng (st), phiên bản (v), tốc độ chia đôi trên cùng (tb), thời lượng đối tượng (d), thông lượng đo lường (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 đổi sangSTATE_ENDED
khi phát các tệp rất ngắn (#538).
- Khắc phục lỗi
- Giảm tải âm thanh:
- Thêm tiêu đề Ogg ID và Trang tiêu đề nhận xét vào luồng bit để phát Opus không 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 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, mức thụt lề và độ lệch thẻ cũng được đưa vào khi giới hạn độ dài tín hiệu ở mức 32 ký tự (theo thông số kỹ thuật là đúng) (#11019).
- Tiện ích IMA:
- Chuyển phiên bản SDK IMA lên phiên bản 3.30.3.
- Phiên:
- Thêm bố cục tuỳ chỉnh vào trạng thái của bộ điều khiển và cung cấp phương thức getter để truy cập vào bố cục đó. Khi bố cục tuỳ chỉnh thay đổi,
MediaController.Listener.onCustomLayoutChanged
sẽ được gọi. Ứng dụng muốn gửi nhiều bố cục tuỳ chỉnh đến bộ điều khiển Media3 khác có thể thực hiện việc này trongMediaSession.Callback.onConnect
bằng cách sử dụngAcceptedResultBuilder
để đảm bảo bố cục tuỳ chỉnh có sẵn cho bộ điều khiển khi kết nối hoàn tất. - Khắc phục các trường hợp trong đó
MediaLibraryServiceLegacyStub
gửi lỗi đếnResult
không hỗ trợ lỗi này, dẫn đếnUnsupportedOperationException
(#78). - Sửa cách
PlayerWrapper
tạo mộtVolumeProviderCompat
bằng cách xác địnhvolumeControlType
thông qua cả lệnh cũ (COMMAND_ADJUST_DEVICE_VOLUME
vàCOMMAND_SET_DEVICE_VOLUME
) và lệnh mới (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
vàCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- Thêm bố cục tuỳ chỉnh vào trạng thái của bộ điều khiển và cung cấp phương thức getter để truy cập vào bố cục đó. Khi bố cục tuỳ chỉnh thay đổi,
Phiên bản 1.1.0
Ngày 5 tháng 7 năm 2023
- Thư viện chung:
- Thêm lý do chặn cho định tuyến âm thanh không phù hợp và phát khi đã sẵn sàng thay đổi lý do bị chặn quá lâu. (#15).
- Thêm các lệnh vào Trình phát:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Thêm các phương thức 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
Builder
choDeviceInfo
và không dùng hàm khởi tạo hiện có nữa. - Thêm
DeviceInfo.routingControllerId
để chỉ định mã nhận dạng bộ điều khiển định tuyến cho hoạt động phát từ xa. - Thêm
Player.replaceMediaItem(s)
làm lối tắt để thêm và xoá các mục ở cùng một vị trí (#8046).
- ExoPlayer:
- Chỉ cho phép ExoPlayer kiểm soát các phương thức âm lượng thiết bị nếu bạn 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
FilteringMediaSource
cho phép lọc các loại kênh có sẵn từMediaSource
. - Thêm tính năng hỗ trợ để đưa Dữ liệu ứng dụng đa phương tiện chung (CMCD) vào các yêu cầu gửi đi của các định dạng truyền trực tuyến thích ứng DASH, HLS và mootStreaming. Các trường sau đây,
br
,bl
,cid
,rtp
vàsid
, đã được tích hợp (#8699). Cấu trúc API và các phương thức API:- Tính năng ghi nhật ký CMCD bị tắt theo mặc định, hãy sử dụng
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
để bật tính năng này. - Tất cả các khoá đều được bật theo mặc định, 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 bị 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 để dễ dàng khởi động ứng dụng minh hoạ bằng tệp
*.exolist.json
tuỳ chỉnh (#439). - Thêm
ExoPlayer.setVideoEffects()
để sử dụngEffect
trong khi phát video. - Cập nhật
SampleQueue
để lưu trữsourceId
dưới dạnglong
thay vìint
. Thao tác này sẽ thay đổi chữ ký của các phương thức công khaiSampleQueue.sourceId
vàSampleQueue.peekSourceId
. - Thêm tham số vào phương thức
LoadControl
shouldStartPlayback
vàonTracksSelected
để cho phép liên kết các phương thức này vớiMediaPeriod
liên quan. - Thay đổi chữ ký của
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
bằng cách thêm tham số dòng thời gian chứa các khoảng thời gian mà UID được dùng làm khoá trong bản đồ. Đây là yêu cầu bắt buộc để tránh các vấn đề đồng thời với sự kiện phát trực tiếp nhiều 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òn được thêm vàostartTimeUs
vàendTimeUs
của đối tượngMediaLoadData
do trình điều phối điều phối. - Đổi tên
ExoTrackSelection.blacklist
thànhexcludeTrack
vàisBlacklisted
thà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 thiết bị nếu bạn 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 quá trình chuyển đổi có thể bị gián đoạn (dẫn đến thời gian chờ kết hợp) nếu điểm kết thúc luồng video được báo hiệu tại thời điểm khung đầu vào đang chờ xử lý.
- Truy vấn bộ mã hoá và giải mã qua
MediaCodecList
thay vì sử dụng tiện íchfindDecoder/EncoderForFormat
để mở rộng khả năng hỗ trợ. - Xoá cấu hình khung B trong
DefaultEncoderFactory
vì cấu hình này không hoạt động trên một số thiết bị.
- Xoá
- Chọn bản nội dung:
- Thêm
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
bị tắt theo mặc định. Khi bật,DefaultTrackSelector
sẽ kích hoạt một lựa chọn kênh mới khi khả năng của trình kết xuất thay đổi.
- Thêm
- Công cụ trích xuất:
- Âm thanh:
- Sửa lỗi một số lượt phát không thành công khi bật tính năng tạo đường hầm và
AudioProcessors
đang hoạt động, ví dụ: cắt bỏ không có khoảng trống (#10847). - Đóng gói khung Opus trong gói Ogg trong các lượt phát trực tiếp (giảm tải).
- Ngoại suy vị trí hiện tại trong chế độ ngủ bằng tính năng lên lịch giảm tải.
- Thêm
Renderer.release()
vàAudioSink.release()
để phát hành tài nguyên ở cuối vòng đời của người chơi. - Nghe những thay đổi về chức năng âm thanh trong
DefaultAudioSink
. Thêm một tham số bắt buộccontext
vào hàm khởi tạo củaDefaultAudioSink
. Trong hàm này,DefaultAudioSink
sẽ đăng ký làm trình nghe choAudioCapabilitiesReceiver
và cập nhật thuộc tínhaudioCapabilities
khi được thông báo về sự thay đổi về chức năng. - Truyền bá các thay đổi về chức năng âm thanh thông qua một sự kiện mới
onAudioCapabilitiesChanged
trong giao diệnAudioSink.Listener
và giao diện mớiRendererCapabilities.Listener
kích hoạt các sự kiệnonRendererCapabilitiesChanged
. - Thêm
ChannelMixingAudioProcessor
để áp dụng việc điều chỉnh tỷ lệ/phối lại cho các kênh âm thanh. - Thêm giá trị int mới
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
vàoDecoderDiscardReasons
để loại bỏ bộ giải mã âm thanh khi có thể bỏ qua chế độ bỏ qua sau khi chức năng âm thanh thay đổi. - Thêm tính năng hỗ trợ phát trực tiếp cho DTS Express và DTS:X (#335).
- Sửa lỗi một số lượt phát không thành công khi bật tính năng tạo đường hầm và
- Video:
- Tạo
MediaCodecVideoRenderer
báo cáoVideoSize
có chiều rộng và chiều cao là 0 khi trình kết xuất tắt.Player.Listener.onVideoSizeChanged
được gọi tương ứng khiPlayer.getVideoSize()
thay đổi. Với thay đổi này, kích thước video của ExoPlayer cóMediaCodecVideoRenderer
sẽ có chiều rộng và chiều cao bằng 0 khiPlayer.getCurrentTracks
không hỗ trợ video hoặc kích thước của bản video được hỗ trợ chưa được xác định.
- Tạo
- DRM (Quản lý bản quyền kỹ thuật số):
- Giảm mức độ hiển thị của một số phương thức chỉ dành cho nội bộ trên
DefaultDrmSession
mà dự kiến sẽ 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 mức độ hiển thị của một số phương thức chỉ dành cho nội bộ trên
- Trình phân tích cú pháp:
- Thêm một thư viện kết hợp mới có thể dùng để tạo tệp vùng chứa MP4.
- Tiện ích IMA:
- Bật luồng DASH trực tiếp nhiều giai đoạn cho DAI. Xin lưu ý rằng cách triển khai hiện tại chưa hỗ trợ tính năng tìm kiếm trong các sự kiện phát trực tiếp (#10912).
- Sửa lỗi khi một nhóm quảng cáo mới được chèn vào sự kiện phát trực tiếp vì vị trí nội dung được tính trong các dòng thời gian liên tiếp có sự khác biệt nhỏ.
- Phiên:
- Thêm phương thức trợ giúp
MediaSession.getControllerForCurrentRequest
để lấy thông tin về tay điều khiển hiện đang gọi phương thứcPlayer
. - Thêm
androidx.media3.session.MediaButtonReceiver
để cho phép các ứng dụng triển khai việc tiếp tục phát với các sự kiện nút nội dung nghe nhìn được gửi bởi tai nghe Bluetooth (#167). - Thêm phương thức triển khai mặc định vào
MediaSession.Callback.onAddMediaItems
để cho phép truyềnMediaItems
được yêu cầu vàoPlayer
nếu các phương thức này cóLocalConfiguration
(ví dụ: URI) (#282). - Theo mặc định, thêm các nút lệnh "tìm kiếm trước đó" và "tìm kiếm tiếp theo" trên chế độ xem thông báo nội dung nghe nhìn thu gọn cho Android 12 trở xuống (#410).
- Thêm phương thức triển khai mặc định vào
MediaSession.Callback.onAddMediaItems
để cho phép truyềnMediaItems
được yêu cầu vàoPlayer
nếu các phương thức này cóLocalConfiguration
(ví dụ: URI) (#282). - Theo mặc định, thêm các nút lệnh "tìm kiếm trước đó" và "tìm kiếm tiếp theo" trên chế độ xem thông báo nội dung nghe nhìn thu gọn 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 Tiện ích
shouldShowPlayButton
vàhandlePlayPauseButtonAction
để viết các phần tử trên giao diện người dùng tuỳ chỉnh có nút phát/tạm dừng.
- Thêm các phương thức Tiện ích
- Tiện ích RTSP:
- Tiện ích DASH:
- Xoá độ lệch thời gian của nội dung đa phương tiện khỏi
MediaLoadData.startTimeMs
vàMediaLoadData.endTimeMs
cho các luồng DASH nhiều giai đoạn. - Khắc phục lỗi trong đó việc chuẩn bị lại nguồn phương tiện Dash trực tiếp nhiều giai đoạn đã tạo ra
IndexOutOfBoundsException
(#10838).
- Xoá độ lệch thời gian của nội dung đa phương tiện khỏi
- Tiện ích HLS:
- Thêm
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
để đặt thời gian chờ cho luồng đang tải chờTimestampAdjuster
khởi chạy. Nếu quá trình khởi chạy không hoàn tất trước thời gian chờ, thìPlaybackException
sẽ được gửi để tránh tình trạng trì hoãn liên tục. 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 phân biệt chữ hoa chữ thường của giao thức URI trong
DataSourceContractTest
.
- Kiểm tra tính 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á hàm khởi tạo
DefaultAudioSink
, chuyển sang dùngDefaultAudioSink.Builder
. - Xoá
HlsMasterPlaylist
, chuyển sang dùngHlsMultivariantPlaylist
. - Xoá
Player.stop(boolean)
. Thay vào đó, hãy sử dụngPlayer.stop()
vàPlayer.clearMediaItems()
(nếureset
làtrue
). - Xoá 2 hàm khởi tạo
SimpleCache
không dùng nữa, sử dụng một hàm khởi tạo không còn được dùng nữa và nhậnDatabaseProvider
để có hiệu suất tốt hơn. - Xoá hàm khởi tạo
DefaultBandwidthMeter
, chuyển sang sử dụngDefaultBandwidthMeter.Builder
. - Xoá hàm khởi tạo
DefaultDrmSessionManager
, thay vào đó hãy sử dụngDefaultDrmSessionManager.Builder
. - Xoá 2 hàm khởi tạo
HttpDataSource.InvalidResponseCodeException
không dùng nữa, sử dụng một hàm khởi tạo không dùng nữa, chấp nhận các trường bổ sung(cause
,responseBody
) để cải thiện tính năng ghi nhật ký lỗi. - Xoá
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
vàDownloadHelper.forSmoothStreaming
, thay vào đó hãy sử dụngDownloadHelper.forMediaItem
. - Xoá hàm khởi tạo
DownloadService
không dùng nữa, sử dụng một hàm khởi tạo không dùng nữa có bao gồm tuỳ chọn cung cấp tham sốchannelDescriptionResourceId
. - Xoá các hằng số Chuỗi không dùng nữa cho Bộ ký tự (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
vàUTF16LE_NAME
), sử dụng Bộ ký tự Kotlin trong góikotlin.text
,java.nio.charset.StandardCharsets
hoặccom.google.common.base.Charsets
. - Xoá hàm khởi tạo
WorkManagerScheduler
không dùng nữa, sử dụng một hàm khởi tạo không còn được dùng nữa, có chứa lựa chọn cung cấp tham sốContext
. - Xoá các phương thức
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
vàcreateSampleFormat
không dùng nữa (dùng để tạo thực thể cho lớpFormat
). Thay vào đó, hãy sử dụngFormat.Builder
để tạo các thực thể củaFormat
. - Xoá các phương thức
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
vàcopyWithVideoSize
(không dùng nữa), thay vào đó hãy dùngFormat.buildUpon()
và phương thức setter. - Xoá
ExoPlayer.retry()
không dùng nữa, hãy sử dụngprepare()
. - Xoá hàm khởi tạo
DefaultTrackSelector
zero-arg không dùng nữa, chuyển sang sử dụngDefaultTrackSelector(Context)
. - Xoá hàm khởi tạo
OfflineLicenseHelper
không dùng nữa, hãy sử dụngOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Xoá hàm khởi tạo
DownloadManager
không dùng nữa, sử dụng hàm khởi tạo nhậnExecutor
. - Xoá các hàm khởi tạo
Cue
không dùng nữa, chuyển sang dùngCue.Builder
. - Xoá hàm khởi tạo
OfflineLicenseHelper
không dùng nữa, hãy sử dụngOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Xoá 4 phương thức
AnalyticsListener
không dùng nữa:onDecoderEnabled
, sử dụngonAudioEnabled
và/hoặconVideoEnabled
.onDecoderInitialized
, chuyển sang sử dụngonAudioDecoderInitialized
và/hoặconVideoDecoderInitialized
.onDecoderInputFormatChanged
, hãy chuyển sang sử dụngonAudioInputFormatChanged
và/hoặconVideoInputFormatChanged
.onDecoderDisabled
, sử dụngonAudioDisabled
và/hoặconVideoDisabled
.
- Xoá
Player.Listener.onSeekProcessed
vàAnalyticsListener.onSeekProcessed
không dùng nữa, chuyển sang sử dụngonPositionDiscontinuity
vớiDISCONTINUITY_REASON_SEEK
. - Xoá
ExoPlayer.setHandleWakeLock(boolean)
, chuyển sang sử dụngsetWakeMode(int)
. - Xoá
DefaultLoadControl.Builder.createDefaultLoadControl()
không dùng nữa, chuyển sang sử dụngbuild()
. - Xoá
MediaItem.PlaybackProperties
không dùng nữa, thay vào đó hãy sử dụngMediaItem.LocalConfiguration
. Trường không dùng nữaMediaItem.playbackProperties
hiện thuộc loạiMediaItem.LocalConfiguration
.
- Xoá 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 bản phát hành 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ị liệuBuffer
có chứa cờC.BUFFER_FLAG_LAST_SAMPLE
hay không. - Khắc phục vấn đề khung hình cuối cùng có thể không hiển thị nếu mẫu cuối cùng có khung đã được đưa vào hàng đợi nếu 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 dùng lại logic phân tích cú pháp đã được trình trích xuất RTSP và MP4 sử dụng (#303).
- Văn bản:
- SSA: Thêm tính năng hỗ trợ cho các tệp UTF-16 nếu các tệp này bắt đầu bằng một dấu thứ tự byte (#319).
- Phiên:
- Khắc phục vấn đề
MediaController
không cập nhật các lệnh có sẵn khi được kết nối vớiMediaSessionCompat
cũ cập nhật các hành động của mình. - Khắc phục lỗi ngăn
MediaLibraryService
trả về giá trị rỗng cho lệnh gọi từ Giao diện người dùng hệ thống đếnCallback.onGetLibraryRoot
bằngparams.isRecent == true
trên API 30 (#355). - Khắc phục tình trạng rò rỉ bộ nhớ của
MediaSessionService
hoặcMediaLibraryService
(#346). - Khắc phục lỗi khi kết hợp
Timeline
và cập nhật vị trí trongMediaSession
có thể khiếnMediaController
gử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 bản phát hành 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 tua về vị trí mặc định (#11051).
- Khắc phục lỗi luồng mẫu trống trong nội dung nghe nhìn có thể khiến quá trình phát bị treo.
- Phiên:
- Khắc phục lỗi trong đó nhiều mục hàng đợi giống nhau do
MediaSessionCompat
cũ phát hành dẫn đến một ngoại lệ trongMediaController
(#290). - Thêm tính năng chuyển tiếp
MediaSession.broadcastCustomCommand
bị thiếu vàoMediaControllerCompat.Callback.onSessionEvent
cũ (#293). - Khắc phục lỗi khi việc gọi
MediaSession.setPlayer
không cập nhật các lệnh hiện có. - Khắc phục vấn đề các thực thể
TrackSelectionOverride
gửi từMediaController
sẽ bị bỏ qua nếu các thực thể đó tham chiếu đến một nhóm cóFormat.metadata
(#296). - Khắc phục vấn đề cần có
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
để truy cập vào siêu dữ liệu thông quaMediaSessionCompat
cũ. - Khắc phục vấn đề các thực thể
MediaSession
trên một luồng ở chế độ nền gây ra sự cố khi sử dụng trongMediaSessionService
(#318). - Khắc phục vấn đề trình nhận nút đa phương tiện được thư viện khai báo trong khi ứng dụng không định làm điều này (#314).
- Khắc phục lỗi trong đó nhiều mục hàng đợi giống nhau do
- DASH (Truyền phát thích ứng động qua HTTP):
- Khắc phục việc xử lý tiến trình 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 Thiết lập RTSP với UDP không thành công kèm theo Lỗi RTSP 461 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 bản phát hành 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 bản phát hành ExoPlayer 2.18.4.
- Thư viện Core:
- Tệp đã tải xuống:
- Tạo chênh lệch tối đa về thời gian bắt đầu của 2 phân đoạn để có thể hợp nhất cấu hình trong
SegmentDownloader
và các lớp con (#248).
- Tạo chênh lệch tối đa về thời gian bắt đầu của 2 phân đoạn để có thể hợp nhất cấu hình trong
- Âm thanh:
- Video:
- Ánh xạ định dạng HEVC HDR10 với
HEVCProfileMain10HDR10
thay vìHEVCProfileMain10
. - Thêm giải pháp cho sự cố 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 được đá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.
- Ánh xạ định dạng HEVC HDR10 với
- Truyền:
- Khắc phục
STATE_IDLE
tạm thời khi chuyển đổi giữa các mục nội dung đa phương tiện (#245).
- Khắc phục
- RTSP (Giao thức truyền tin thời gian thực):
- Phát hiện IllegalArgumentException được gửi khi phân tích cú pháp RTSP không hợp lệ Mô tả các thông báo phản hồi (#10971).
- Phiên:
- Khắc phục lỗi trong đó nút phát/tạm dừng thông báo không cập nhật theo trạng thái người chơi (#192).
- Tiện ích IMA:
- Khắc phục lỗi ngăn luồng DAI mà không có bất kỳ quảng cáo nào bắt đầu
vì sự kiện
LOADED
đầu tiên (và trong trường hợp không có quảng cáo) duy nhất không được nhận.
- Khắc phục lỗi ngăn luồng DAI mà không có bất kỳ quảng cáo nào bắt đầu
vì 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
ParserException
thay vìNullPointerException
nếu bảng mẫu (stbl) thiếu phần mô tả mẫu bắt buộc (stsd) khi phân tích cú pháp các nguyên tử trak. - Bỏ qua chính xác các mẫu khi tìm kiếm trực tiếp ở khung đồng bộ hoá trong fMP4 (#10941).
- 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
AudioTrack
trong 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
TextRenderer
chuyển chỉ mục (âm) không hợp lệ đếnSubtitle.getEventTime
nếu tệp phụ đề không chứa chú thích. - SubRip: Thêm hỗ trợ cho các tệp UTF-16 nếu các tệp đó bắt đầu bằng dấu thứ tự byte.
- 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
PlayerView
khi dùng bố cục từ phải sang trái (RTL) (#227).
- Sửa
- Phiên:
- Thêm
SimpleBasePlayer
trừu tượng để giúp triển khai giao diệnPlayer
cho các trình phát tuỳ chỉnh. - Thêm phương thức hỗ trợ để chuyển đổi mã phiên của nền tảng thành Media3
SessionToken
(#171). - Sử dụng
onMediaMetadataChanged
để kích hoạt bản cập nhật của phiên nội dung nghe nhìn trên nền tảng (#219). - Thêm phiên nội dung nghe nhìn làm đối số của
getMediaButtons()
trongDefaultMediaNotificationProvider
và sử dụng danh sách không thể thay đổi để đảm bảo rõ ràng (#216). - Thêm trình nghe gọi lại
onSetMediaItems
để cung cấp phương thức sửa đổi/đặt danh sá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
QueueTimeline
hoạt động mạnh mẽ hơn trong trường hợp trạng thái phiên cũ không rõ ràng (#241).
- Thêm
- Siêu dữ liệu:
- Phân tích cú pháp nhiều giá trị được phân tách bằng giá trị rỗng trên các khung ID3, như được ID3 phiên bản 2.4 cho phép.
- Thêm
MediaMetadata.mediaType
để biểu thị loại nội dung hoặc loại thư mục được siêu dữ liệu mô tả. - Thêm
MediaMetadata.isBrowsable
để thay thế choMediaMetadata.folderType
. Loại thư mục sẽ không được dùng trong bản phát hành tiếp theo.
- Tiện ích truyền (cast):
- Chuyển phiên bản Cast SDK lên phiên bản 21.2.0.
- Tiện ích IMA:
- Xoá trình nghe của trình phát thuộc
ImaServerSideAdInsertionMediaSource
trên luồng ứng dụng để tránh các vấn đề về luồng. - Thêm một thuộc tính
focusSkipButtonWhenAvailable
và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ộtMediaSource
duy nhất (#7279). - Loại bỏ vùng đệm phụ trước khi hành động phát bị treo do không đủ bộ nhớ.
- Đóng khối Tracing "doSomeWork" khi bật chế độ giảm tải.
- Dùng các lệnh tìm kiếm nhanh trong
PlaybackStatsListener
(#180) để khắc phục vấn đề khi theo dõi phiên. - Gửi lệnh gọi lại
onMediaItemTransition
bị thiếu khi gọiseekToNext
hoặcseekToPrevious
trong danh sách phát một mục duy nhất (#10667). - Thêm
Player.getSurfaceSize
trả về kích thước của nền tảng hiển thị video. - Sửa lỗi xoá trình nghe trong quá trình phát hành trình phát có thể gây ra
IllegalStateException
(#10758).
- Thêm
- Bản dựng:
- Thực thi
compileSdkVersion
tối thiểu để tránh lỗi biên dịch (#10684). - Tránh phát hành khối khi được đưa vào một bản dựng gradle khác.
- Thực thi
- Chọn bản nội dung:
- Ư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).
- Tệp đã 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ểAudioTrack
nhằm tránh lỗi OutOfMemory khi phát hành nhiều trình phát cùng một lúc (#10057). - Thêm
AudioOffloadListener.onExperimentalOffloadedPlayback
cho trạng thái giảm tải AudioTrack. (#134). - Đặt
AudioTrackBufferSizeProvider
làm giao diện công khai. - Thêm
ExoPlayer.setPreferredAudioDevice
để thiết lập thiết bị đầu ra âm thanh ưu tiên (#135). - Đổi tên
androidx.media3.exoplayer.audio.AudioProcessor
thà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 kỹ thuật số):
- Tìm cách sửa lỗi trong quá trình triển khai Android 13 ClearKey có trả về một URL giấy phép không trống nhưng không hợp lệ.
- Sửa lỗi
setMediaDrmSession failed: session not opened
khi chuyển đổi giữa các giao thức DRM trong một danh sách phát (ví dụ: Widevine sang ClearKey).
- Văn bản:
- CEA-608: Đảm bảo các lệnh chuyển đổi dịch vụ trên trường 2 được xử lý chính xác (#10666).
- DASH (Truyền phát thích ứng động qua HTTP):
- Phân tích cú pháp
EventStream.presentationTimeOffset
từ các tệp kê khai (#10460).
- 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). SimpleBitmapLoader
có thể tải bitmap từ các URIfile://
(#108).- Sửa câu nhận định ngăn
MediaController
tìm kiếm quảng cáo trong một khoảng thời gian (#122). - Khi quá trình phát kết thúc,
MediaSessionService
sẽ dừng trên nền trước và một thông báo sẽ hiển thị để bắt đầu phát lại mục nội dung nghe nhìn đã phát gần đây nhất (#112). - Không bắt đầu dịch vụ trên nền trước với ý định tạm dừng đang chờ xử lý (#167).
- Ẩn "huy hiệu" theo cách thủ công được liên kết với thông báo do
DefaultNotificationProvider
tạo trên API 26 và API 27 (huy hiệu sẽ tự động ẩn trên API 28 trở lên) (#131). - Sửa lỗi kết nối liên kết thứ hai từ MediaSession cũ với Media3 MediaController gây ra IllegalStateExceptions (#49).
- RTSP (Giao thức truyền tin thời gian thực):
- 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 địnhCastPlayer
khi 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
ShuffleOrder
vớiExoPlayer.setShuffleOrder
sẽ dẫn đến lệnh gọi đếnPlayer.Listener#onTimelineChanged
bằ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
setDataSourceFactory
trongDefaultMediaSourceFactory
khô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
playWhenReady
trongLeanbackAdapter
(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
null
vàoMediaSource.Factory.setDrmSessionManagerProvider
vàMediaSource.Factory.setLoadErrorHandlingPolicy
. Nếu được yêu cầu, hệ thống có thể truyền các bản sao củaDefaultDrmSessionManagerProvider
vàDefaultLoadErrorHandlingPolicy
một cách rõ ràng. - Thêm
MediaItem.RequestMetadata
để đại diện cho siêu dữ liệu cần thiết khi phát nội dung nghe nhìn mà không biết chính xácLocalConfiguration
. Đồng thời xoáMediaMetadata.mediaUrl
vì 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 nội dung:
- Làm phẳng lớp
TrackSelectionOverrides
thànhTrackSelectionParameters
, và quảng báTrackSelectionOverride
lên lớp cao cấp nhất. - Đổi tên
TracksInfo
thànhTracks
vàTracksInfo.TrackGroupInfo
thànhTracks.Group
.Player.getCurrentTracksInfo
vàPlayer.Listener.onTracksInfoChanged
cũng đã được đổi tên thànhPlayer.getCurrentTracks
và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.buildUponParameters
vàDefaultTrackSelector.Parameters.buildUpon
để trả vềDefaultTrackSelector.Parameters.Builder
thay vìDefaultTrackSelector.ParametersBuilder
không dùng nữa. - Thêm
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
được bật theo mặc định. Khi được bật,DefaultTrackSelector
sẽ ưu tiên các bản âm thanh có số kênh không vượt quá khả năng đầu ra của thiết bị. Trên thiết bị cầm tay,DefaultTrackSelector
sẽ ưu tiên định dạng âm thanh nổi/đơn âm thay vì định dạng âm thanh đa kênh, trừ trường hợp định dạng đa kênh có thể là Âm thanh không gian (Android 12L trở lên) hoặc là định dạng âm thanh vòm Dolby. Ngoài ra, trên các thiết bị hỗ trợ việc tạo không gian âm thanh,DefaultTrackSelector
sẽ theo dõi những thay đổi trong Thuộc tính của âm thanh không gian và kích hoạt lựa chọn mới cho các bản nhạc. Các thiết bị có Chế độ giao diện người dùngtelevision
sẽ bị loại trừ khỏi những hạn chế này và định dạng có số kênh cao nhất sẽ được ưu tiên. Để bật tính năng này, bản saoDefaultTrackSelector
phải được tạo bằngContext
.
- Làm phẳng lớp
- Video:
- Đổi tên
DummySurface
thà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.AudioAttributes
thành lớp trình bao bọcAudioAttributesV21
mới để ngăn việc xác minh ART chậm trên API < 21. - Truy vấn nền tảng (API 29 trở lên) hoặc giả sử số kênh mã hoá âm thanh để truyền âm thanh khi số kênh âm thanh của định dạng không được thiết lập, việc này xảy ra với quá trình chuẩn bị phân đoạn HLS (10204).
- Định cấu hình
AudioTrack
bằng mặt nạ kênhAudioFormat.CHANNEL_OUT_7POINT1POINT4
nếu bộ giải mã xuất ra âm thanh PCM 12 kênh (#10322).
- DRM (Quản lý bản quyền kỹ thuật số)
- Đảm bảo phiên DRM luôn được cập nhật chính xác khi tìm kiếm ngay sau khi thay đổi định dạng (10274).
- Văn bản:
- Thay đổi
Player.getCurrentCues()
để trả vềCueGroup
thay vìList<Cue>
. - SSA: Hỗ trợ chế độ cài đặt kiểu
OutlineColour
khiBorderStyle == 3
(tức làOutlineColour
đặt nền của tín hiệu) (#8435). - CEA-708: Phân tích cú pháp dữ liệu thành nhiều khối dịch vụ và bỏ qua các khối không liên quan đến số dịch vụ hiện được chọn.
- Xoá
RawCcExtractor
chỉ được dùng để xử lý định dạng phụ đề nội bộ của Google.
- 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àoPlayerView
trong trường hợpuseController=false
(#9605). Ngoài ra, hãy khắc phục việc phân phối sự kiện đếnOnLongClickListener
cho tất cả các cấu hình chế độ xem. - Sửa lỗi xử lý không chính xác một chuỗi các sự kiện chạm thoát ra khỏi giới hạn của
PlayerView
trướcACTION_UP
dưới dạng một lượt nhấp (#9861). - Khắc phục vấn đề về khả năng tiếp cận
PlayerView
, trong đó thao tác nhấn có thể chuyển đổi chế độ phát thay vì ẩn các nút điều khiển (#8627). - Viết lại
TrackSelectionView
vàTrackSelectionDialogBuilder
để hoạt động được với giao diệnPlayer
thay vìExoPlayer
. Điều này cho phép chế độ xem được sử dụng cùng với các hoạt động triển khaiPlayer
khác, đồng thời loại bỏ phần phụ thuộc khỏi mô-đun giao diện người dùng sang mô-đun ExoPlayer. Đây là một thay đổi có thể gây lỗi. - Không hiển thị các đoạn văn bản bắt buộc trong bộ chọn bản nhạc
PlayerView
và giữ một đoạn văn bản bắt buộc phù hợp được chọn nếu bạn chọn "Không có" (#9432).
- 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ủaDefaultCompositeSequenceableLoaderFactory
mộ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.setPlaylistParserFactory
vàHlsMediaSource.Factory.setPlaylistTrackerFactory
. Hệ thống có thể chuyển các bản sao củaDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
hoặc tệp tham chiếu đếnDefaultHlsPlaylistTracker.FACTORY
một cách rõ ràng nếu cần thiết.
- Phát trực tuyến mượt mà:
- Không cho phép truyền
null
đếnSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Bạn có thể chuyển các thực thể củaDefaultCompositeSequenceableLoaderFactory
mộ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
DummyDataSource
thànhPlaceholderDataSource
. - Giải quyết việc xử lý gián đoạn OkHttp.
- Đổi tên
- Phiên:
- Thay thế
MediaSession.MediaItemFiller
bằ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)
khiMediaController
kết nối với một phiên nội dung nghe nhìn cũ. - Xóa
MediaController.setMediaUri
và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.setMediaItem
vàMediaSession.Callback.onAddMediaItems
. - Chuyển tiếp cuộc gọi
MediaController
cũ để phát nội dung nghe nhìn đếnMediaSession.Callback.onAddMediaItems
thay vìonSetMediaUri
. - Thêm
MediaNotification.Provider
vàDefaultMediaNotificationProvider
để tuỳ chỉnh thông báo. - Thêm
BitmapLoader
và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.MediaSessionCallback
thànhMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
thànhMediaLibrarySession.Callback
vàMediaSession.Builder.setSessionCallback
thà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
MediaControllerImplBase
sau 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.getCurrentTrackGroups
vàPlayer.getCurrentTrackSelections
. Thay vào đó, hãy sử dụngPlayer.getCurrentTracks
. Bạn cũng có thể tiếp tục sử dụngExoPlayer.getCurrentTrackGroups
và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ố
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
và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
.Context
phả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.setTrackId
vàMediaItem.SubtitleConfiguration.Builder.setId
để ưu tiên trườngSubtitleConfiguration
và quay lại giá trịFactory
nế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ủaDefaultRenderersFactory
ghi đè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
,genre
choMediaMetadata.station
và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#inputBufferCount
thà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.EventFlags
không đổi để khớp với các giá trị trongPlayer.EventFlags
. - Phân tách
AnalyticsCollector
thành một giao diện và phương thức triển khai mặc định để cho phép R8 loại bỏ nếu ứng dụng không cần.
- 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
TrackGroup
trongTrackGroupArray
. Luôn có thể phân biệtTrackGroup
bằng cách đặt mộtid
trong 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_CAPABILITIES
thay vìnull
. - Cho phép tuỳ chỉnh cách tính dung lượng bộ nhớ đệm
AudioTrack
bằng cách chènAudioTrackBufferSizeProvider
vàoDefaultAudioSink
. (#8891). - Thử tạo lại
AudioTrack
nếu dung lượng bộ nhớ đệm được yêu cầu lớn hơn 1 MB. (#9712).
- Công cụ trích xuất:
- Văn bản:
- DRM (Quản lý bản quyền kỹ thuật số):
- Xoá
playbackLooper
khỏiDrmSessionManager.(pre)acquireSession
. Khi một ứng dụng sử dụngDrmSessionManager
trong mộtMediaSource
tuỳ chỉnh,playbackLooper
cầ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
main
là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.Location
tươ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.label
khi chỉ phát âm thanh dựa trên giao thức HLS (#9608). - Mặc định sử dụng thông tin đa biến trong danh sách phát cho việc phát nội dung đa phương tiện (chunkless preparation) để cải thiện thời gian khởi động. Nếu việc truyền và nhận dữ liệu có chứa các bản phụ đề kết hợp (không được khai báo trong danh sách phát chính), thì bạn phải thêm các bản phụ đề đó vào danh sách phát chính để có thể phát, hoặc tắt chế độ chuẩn bị phát trực tiếp nội dung trong danh sách phát đa phương tiện (chunkless preparation) bằng
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - Hỗ trợ tua tới chính xác khung hình chính trong HLS (#2882).
- 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 đè
SocketFactory
dùng cho mọi kết nối máy chủ (#9606). - Ưu tiên phương thức xác thực DIGEST hơn BASIC nếu có cả hai (#9800).
- Xử lý khi không có thời gian của nội dung đa phương tiện phát qua giao thức RTSP (#9775).
- Bỏ qua các giá trị tiêu đề RTP-Info không hợp lệ (#9619).
- 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.
TransformationException
hiện được dùng để mô tả lỗi xảy ra trong quá trình chuyển đổi.- Thêm
TransformationRequest
để chỉ định các tuỳ chọn chuyển đổi. - Cho phép đăng ký nhiều trình nghe (event listener).
- Sửa lỗi Bộ chuyển đổi bị kẹt khi đọc một phần đầu ra bộ mã hoá và giải mã.
- Sửa lỗi NPE tiềm ẩn trong
Transformer.getProgress
khi phát hành các khai báo ngoại lệ cho chương trình kết hợp nội dung đa phương tiện. - Thêm ứng dụng minh hoạ áp dụng chuyển đổi.
- Phần mở rộng MediaSession:
- Theo mặc định,
MediaSessionConnector
hiện sẽ xoá danh sách phát đã dừng. Các ứng dụng muốn giữ lại danh sách phát có thể gọ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.sh
phụ 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-framework
không tương thích với các ứng dụng dành cho Android 12 và sẽ gặp sự cố vớiIllegalArgumentException
khi 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#setDrmHttpDataSourceFactory
và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
setTag
khỏiDashMediaSource
,HlsMediaSource
vàSsMediaSource
. Sử dụngMediaItem.Builder#setTag
. - Xoá
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. Sử dụngMediaItem.Builder#setLiveConfiguration
và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
ActionFile
vàActionFileUpgradeUtil
. Dùng ExoPlayer 2.16.1 hoặc các phiên bản trước đó để sử dụngActionFileUpgradeUtil
nhằ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#setTag
vàProgressiveMediaSource.Factory#setCustomCacheKey
. Sử dụngMediaItem.Builder#setTag
và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#setExtensionRendererMode
vàDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Xóa tất cả hàm constructor
CronetDataSource
công khai. Sử dụngCronetDataSource.Factory
.
- Xoá
- Chỉ thay đổi
IntDefs
sau thành@Target(TYPE_USE)
. Thay đổi này có thể làm gián đoạn quá trình biên dịch các trường hợp sử dụng trong Kotlin. Bạn có thể khắc phục lỗi này bằng cách di chuyển phần chú giải để chú thích loại (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(trong gó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
Player
giống như ExoPlayer. - Các thành phần giao diện người dùng để xây dựng giao diện người dùng phát lại nội dung đa phương tiện.
- Các mô-đun gói chức năng trong các thư viện khác để sử dụng với ExoPlayer, ví dụ: chèn quảng cáo thông qua SDK IMA.
Để biết thêm thông tin, hãy xem dự án GitHub Media3.
Trước đây, ExoPlayer đã được lưu trữ trong một
dự án GitHub ExoPlayer riêng biệt. Trong Media3, tên gói
là androidx.media3.exoplayer
. Chúng tôi dự định tiếp tục duy trì và phát hành dự án GitHub ExoPlayer trong một thời gian để các ứng dụng có thời gian chuyển sang Media3. Media3 có các lựa chọn thay thế cho tất cả các mô-đun ExoPlayer, ngoại trừ
các tiện ích media2 và mediasession cũ. Các tiện ích này được thay thế bằng
mô-đun media3-session
mới. Điều này giúp tích hợp trực tiếp giữa trình phát và các media session mà không cần phải sử dụng lớp chuyển đổi/trình kết nối.