Media3
Bản cập nhật mới nhất | Bản phát hành ổn định | Bản phát hành dùng thử | Bản phát hành beta | Bản phát hành alpha |
---|---|---|---|---|
Ngày 14 tháng 3 năm 2022 | - | - | - | 1.0.0-alpha03 |
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. Hãy đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.
Thêm phần phụ thuộc cho cấu phần mềm bạn cần trong tệp build.gradle
cho
ứng dụng hoặc mô-đun:
Groovy
dependencies { val media3_version = "1.0.0-alpha03" // 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 RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$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" // 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 media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" }
Kotlin
dependencies { val media3_version = "1.0.0-alpha03" // 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 RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$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") // 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 media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") }
Để biết thêm thông tin về các phần phụ thuộc, hãy xem nội dung Thêm phần phụ thuộc cho bản dựng.
Ý kiến phản hồi
Phản hồi của bạn giúp cải thiện Jetpack. Bạn có thể sử dụng trình theo dõi vấn đề Media3 để tìm câu trả lời cho các thắc mắc, lỗi đã biết cũng như yêu cầu tính năng, đồng thời để báo cáo lỗi mới.
Phiên bản 1.0.0
Phiên bản 1.0.0-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:
- Khắc phục 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 cài đặt (#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 nội dung đa phương tiện 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 nội dung đa phương tiện 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 khi không đủ băng thông mạng ngay cả khi quá trình 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 tùy chỉnh cách tính kích thước 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 nội dung số):
- Xóa
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
.
- Xóa
- Phát quảng cáo / IMA:
- Thêm tùy chọn hỗ trợ cho Chèn quảng cáo động IMA (DAI) (#8213).
- Thêm phương thức vào
AdPlaybackState
, cho phép đặt lại nhóm quảng cáo để 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ụ của nhiều nội dung đa phương tiện mà không được khai báo trong danh sách phát chính, thì thêm các nội dung đa phương tiện đó vào danh sách phát chính để có thể phát lại hoặc tắt thực hiện thao tác 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 tùy 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.EventLister
. 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ể phá vỡ việc biên dịch sử dụng trong Kotlin. Lỗi này có thể khắc phục bằng cách di chuyển phần chú giải để chú thích loạiInt
).@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 Mười, 2021
androidx.media3:media3-*:1.0.0-alpha01
đã phát hành.
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 đa phương tiện cấp ứng dụng dành cho Android, có thể dễ dàng tùy 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.