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ộ, 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:

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