Nguồn nội dung nghe nhìn

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:

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ụng MediaItem.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ó adjustPeriodTimeOffsetsclipDurations đượ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ụng MediaItem.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ột Timeline.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.