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ộ, người chơi cần có các thực thể MediaSource
để phát nội dung. Trình phát tạo các thành phần này từ các mục nội dung đa phương tiện bằng MediaSource.Factory
.
Theo mặc định, người chơi sử dụng DefaultMediaSourceFactory
có thể tạo các phiên bản của những cách triển khai nội dung MediaSource
sau đây:
DashMediaSource
cho DASH.SsMediaSource
cho SmoothStreaming.HlsMediaSource
cho HLS.ProgressiveMediaSource
đối với tệp phương tiệ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. Nội dung này được mô tả chi tiết hơn trên trang Mục nội dung nghe nhì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ố tuỳ chọn để tuỳ chỉnh.
Tuỳ chỉnh quá trình tạo nguồn nội dung nghe nhìn
Khi tạo trình phát, bạn có thể chèn MediaSource.Factory
. 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ợ 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
để khớp với các yêu cầu này và chèn 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();
JavaDoc DefaultMediaSourceFactory
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ợ 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 từng 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 các thực thể nguồn nội dung đa phương tiện trực tiếp cho người chơi:
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();
Cấu trúc nguồn nội dung nghe nhìn nâng cao
ExoPlayer cung cấp nhiều phương thức triển khai MediaSource
để sửa đổi và soạn 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 tuỳ chỉnh và không có đường dẫn thiết lập đơn giản nào là đủ.
ClippingMediaSource
: Cho phép cắt nội dung nghe nhìn theo một phạm vi dấu thời gian đã chỉ định. Nếu đây là điểm sửa đổi duy nhất, bạn nên dùngMediaItem.ClippingConfiguration
.FilteringMediaSource
: Lọc các bản nhạc có sẵn cho các loại đã chỉ định, chẳng hạn như chỉ hiển thị bản nhạc video từ một tệp chứa cả âm thanh và video. Nếu đây là nội dung sửa đổi duy nhất, bạn nên sử dụng các 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 mọi 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 bắt đầu và kết thúc cùng một lúc. Nếu sửa đổi này được thực hiện để thêm phụ đề tải không qua cửa hàng, 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 tiếp. Cấu trúc nội dung nghe nhìn hiển thị cho người dùng hiển thị mộtTimeline.Window
duy nhất, nghĩa là nó trông giống như một mục duy nhất. Nếu bạn thực hiện việc sửa đổi này để phát nhiều mục không được trông giống như một mục, thì 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 đã chỉ định, rất hữu ích để lấp đầy khoảng trống.AdsMediaSource
: Mở rộng nguồn nội dung nghe nhìn bằng các tính năng chèn quảng cáo ở phía máy khách. Hãy 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 các tính năng chèn quảng cáo phía máy chủ. Hãy tham khảo hướng dẫn chèn quảng cáo để biết thông tin chi tiết.