Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Media3

Thư viện hỗ trợ cho các trường hợp sử dụng nội dung đa phương tiện.
Bản cập nhật mới nhất Bản phát hành ổn định Bản phát hành dùng thử Bản phát hành beta Bản phát hành alpha
Ngày 21 tháng 7 năm 2022 - - 1.0.0-beta02 -

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-beta02"

    // 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-beta02"

    // 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-beta02

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

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

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

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

Phiên bản 1.0.0-beta01

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

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

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

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

Phiên bản 1.0.0-alpha03

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

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

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

  • Âm thanh:
    • 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.setTrackIdMediaItem.SubtitleConfiguration.Builder.setId để ưu tiên trường SubtitleConfiguration và quay lại giá trị Factory nếu trường này không được cài đặt (#10016).
  • Phát quảng cáo:
    • Khắc phục sự cố âm thanh chạy ngầm giữa các khoảng thời gian quảng cáo trong luồng SSAI trực tiếp.

Phiên bản 1.0.0-alpha02

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

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

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

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

Phiên bản 1.0.0-alpha01

Ngày 27 tháng 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.