Trong ExoPlayer, mọi nội dung nghe nhìn đều được biểu thị bằng một MediaItem. Tuy nhiên, về nội bộ, trình phát cần các thực thể MediaSource để phát nội dung. Trình phát tạo các đối tượng này từ các mục nội dung nghe nhìn bằng cách sử dụng MediaSource.Factory.
Theo mặc định, trình phát sẽ sử dụng DefaultMediaSourceFactory, có thể tạo các thực thể của nội dung MediaSource sau đây:
DashMediaSourcecho DASH.SsMediaSourcecho SmoothStreaming.HlsMediaSourcecho HLS.ProgressiveMediaSourcecho tệp nội dung nghe nhìn thông thường.RtspMediaSourcecho 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 các thuộc tính của 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 nghe nhìn.
Đối với những ứ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ợ, bạn có thể tuỳ chỉnh theo một số cách.
Tuỳ chỉnh việc tạo nguồn nội dung nghe nhìn
Khi tạo trình phát, bạn có thể chèn một 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ì một phiên bản của DefaultMediaSourceFactory có thể được định cấu hình để đáp ứng các yêu cầu này và được 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();
DefaultMediaSourceFactory JavaDoc mô tả chi tiết hơn về các lựa chọn hiện có.
Bạn cũng có thể chèn một chế độ triển khai MediaSource.Factory tuỳ chỉnh, chẳng hạn như để hỗ trợ việc tạo một 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 một 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 bổ sung cho danh sách phát 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 trình phát và chuyển trực tiếp các thực thể nguồn nội dung nghe nhì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à tạo các thực thể MediaSource khác. Những trường hợp này hữu ích nhất khi bạn phải kết hợp nhiều chế độ tuỳ chỉnh và không có chế độ 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 dải dấu thời gian cụ thể. Nếu đây là điểm 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, ví dụ: 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à điểm sửa đổi duy nhất, bạn nên sử dụng các tham số lựa chọn bản phụ đề.MergingMediaSource: Hợp nhất nhiều nguồn nội dung nghe nhìn để phát song song. Trong hầu hết các trường hợp, bạn nên gọi hàm khởi tạo vớiadjustPeriodTimeOffsetsvà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 bạn thực hiện sửa đổi này để thêm phụ đề được tải lên từ bên ngoài, thì 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 nhìn thấy sẽ hiển thị mộtTimeline.Windowduy nhất, tức là trông giống như một mục duy nhất. Nếu bạn thực hiện sửa đổi này để phát nhiều mục không được phép xuất hiện như một mục duy nhất, thì bạn nên sử dụng các phương thức playlist API nhưPlayer.addMediaItem.SilenceMediaSource: Tạo khoảng lặng trong một khoảng thời gian cụ thể, hữu ích để lấp đầy các khoảng trống.AdsMediaSource: Mở rộng nguồn nội dung nghe nhìn bằng các chức 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 một nguồn nội dung nghe nhìn bằng các chức 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.