Trong ExoPlayer, mỗi nội dung nghe nhìn được biểu thị bằng một MediaItem
. Tuy nhiên, trong nội bộ, trình phát cần có các thực thể MediaSource
để phát nội dung đó. Trình phát tạo các mục này từ các mục nội dung đa phương tiện bằng cách sử dụng MediaSource.Factory
.
Theo mặc định, trình phát sử dụng DefaultMediaSourceFactory
để có thể tạo các phiên bản của những nội dung triển khai MediaSource
sau đây:
DashMediaSource
cho DASH.SsMediaSource
cho SmoothStreaming.HlsMediaSource
cho HLS.ProgressiveMediaSource
cho các tệp nội dung nghe nhìn thông thường.RtspMediaSource
cho RTSP.
DefaultMediaSourceFactory
cũng có thể tạo các nguồn nội dung nghe nhìn phức tạp hơn tuỳ thuộc vào thuộc tính của các mục nội dung nghe nhìn tương ứng. Điều này được mô tả chi tiết hơn trên trang Mục nội dung đa phương tiện.
Đối với các ứng dụng cần thiết lập nguồn nội dung nghe nhìn không được cấu hình mặc định của trình phát hỗ trợ, có một số cách để tuỳ chỉnh.
Tuỳ chỉnh quá trình tạo nguồn nội dung nghe nhìn
Khi xây dựng trình phát, MediaSource.Factory
có thể được chèn. Ví dụ: nếu một ứng dụng muốn chèn quảng cáo và sử dụng CacheDataSource.Factory
để hỗ trợ việc lưu vào bộ nhớ đệm, thì bạn có thể định cấu hình một thực thể của DefaultMediaSourceFactory
để đáp ứng các yêu cầu này và chèn vào trong quá trình tạo trình phát:
Kotlin
val mediaSourceFactory: MediaSource.Factory = DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, playerView) val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()
Java
MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView); ExoPlayer player = new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();
DefaultMediaSourceFactory
JavaDoc mô tả chi tiết hơn về các tuỳ chọn có sẵn.
Bạn cũng có thể chèn một phương thức triển khai MediaSource.Factory
tuỳ chỉnh, chẳng hạn như để hỗ trợ việc tạo loại nguồn nội dung nghe nhìn tuỳ chỉnh. createMediaSource(MediaItem)
của nhà máy sẽ được gọi để tạo nguồn nội dung nghe nhìn cho mỗi mục nội dung nghe nhìn được thêm vào danh sách phát.
API danh sách phát dựa trên nguồn nội dung nghe nhìn
Giao diện ExoPlayer
xác định các phương thức danh sách phát bổ sung chấp nhận các nguồn nội dung nghe nhìn thay vì các mục nội dung nghe nhìn. Điều này giúp bạn có thể bỏ qua MediaSource.Factory
nội bộ của người chơi và truyền trực tiếp các thực thể nguồn nội dung đa phương tiện đến trình phát:
Kotlin
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources) // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource) // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)) exoPlayer.prepare() exoPlayer.play()
Java
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources); // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource); // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)); exoPlayer.prepare(); exoPlayer.play();
Thành phần nguồn nội dung nghe nhìn nâng cao
ExoPlayer cung cấp nhiều cách triển khai MediaSource
để sửa đổi và kết hợp các thực thể MediaSource
khác. Các phương thức này hữu ích nhất trong trường hợp phải kết hợp nhiều chế độ tuỳ chỉnh và không có đường dẫn thiết lập đơn giản hơn nào là đủ.
ClippingMediaSource
: Cho phép cắt nội dung nghe nhìn trong một phạm vi dấu thời gian chỉ định. Nếu đây là lần sửa đổi duy nhất, bạn nên sử dụngMediaItem.ClippingConfiguration
.FilteringMediaSource
: Lọc các bản nhạc có sẵn theo loại được chỉ định, chẳng hạn như chỉ hiển thị bản video khỏi một tệp chứa cả âm thanh và video. Nếu đây là cách sửa đổi duy nhất, bạn nên sử dụng tham số lựa chọn kênh.MergingMediaSource
: Hợp nhất nhiều nguồn nội dung nghe nhìn để phát song song. Trong hầu hết trường hợp, bạn nên gọi hàm khởi tạo cóadjustPeriodTimeOffsets
vàclipDurations
được đặt thành true để đảm bảo tất cả các nguồn đều bắt đầu và kết thúc cùng một lúc. Nếu thực hiện sửa đổi này để thêm phụ đề được tải hai bên, bạn nên sử dụngMediaItem.SubtitleConfiguration
.ConcatenatingMediaSource2
: Hợp nhất nhiều nguồn nội dung nghe nhìn để phát liên tục. Cấu trúc nội dung nghe nhìn mà người dùng thấy sẽ cho thấy mộtTimeline.Window
, nghĩa là nó trông giống như một mục duy nhất. Nếu thực hiện việc sửa đổi này để phát nhiều mục không nên trông giống như một mục, bạn nên sử dụng các phương thức API danh sách phát nhưPlayer.addMediaItem
.SilenceMediaSource
: Tạo khoảng lặng trong một khoảng thời gian được chỉ định, rất hữu ích trong việc lấp đầy các khoảng trống.AdsMediaSource
: Mở rộng nguồn nội dung nghe nhìn bằng tính năng chèn quảng cáo phía máy khách. Tham khảo hướng dẫn chèn quảng cáo để biết thông tin chi tiết.ServerSideAdInsertionMediaSource
: Mở rộng nguồn nội dung nghe nhìn bằng tính năng chèn quảng cáo phía máy chủ. Tham khảo hướng dẫn chèn quảng cáo để biết thông tin chi tiết.