SmoothStreaming

ExoPlayer hỗ trợ SmoothStreaming với định dạng vùng chứa FMP4. Các luồng nội dung đa phương tiện phải được ẩn, nghĩa là video, âm thanh và văn bản phải được xác định trong các phần tử StreamIndex riêng biệt trong tệp kê khai SmoothStreaming. Các định dạng mẫu âm thanh và video có trong đó cũng phải được hỗ trợ (xem phần định dạng mẫu để biết thông tin chi tiết).

Tính năng Có thể làm Bình luận
Vùng chứa
FMP4 NÊN Chỉ các luồng đã được lọc
Phụ đề chi tiết
TTML NÊN Được nhúng trong FMP4
Bảo vệ nội dung
PlayReady SL2000 NÊN Chỉ phát hành cho Android TV
Phát trực tiếp
Phát trực tiếp định kỳ NÊN
Dữ liệu ứng dụng đa phương tiện chung (CMCD) NÊN Hướng dẫn tích hợp

Sử dụng MediaItem

Để phát luồng SmoothStreaming, bạn cần phụ thuộc vào mô-đun SmoothStreaming.

Kotlin

implementation("androidx.media3:media3-exoplayer-smoothstreaming:1.3.1")

Groovy

implementation "androidx.media3:media3-exoplayer-smoothstreaming:1.3.1"

Sau đó, bạn có thể tạo MediaItem cho URI tệp kê khai SmoothStreaming và truyền dữ liệu đó cho trình phát.

Kotlin

// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(ssUri))
// Prepare the player.
player.prepare()

Java

// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(ssUri));
// Prepare the player.
player.prepare();

Nếu URI không kết thúc bằng .ism/Manifest, bạn có thể chuyển MimeTypes.APPLICATION_SS đến setMimeType của MediaItem.Builder để chỉ rõ loại nội dung.

ExoPlayer sẽ tự động điều chỉnh giữa các bản trình bày được xác định trong tệp kê khai, có tính đến cả băng thông có sẵn và khả năng của thiết bị.

Sử dụng SsMediaSource

Để có thêm lựa chọn tuỳ chỉnh, bạn có thể tạo SsMediaSource và truyền trực tiếp đến trình phát thay vì MediaItem.

Kotlin

// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a SmoothStreaming media source pointing to a manifest uri.
val mediaSource: MediaSource =
  SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri))
// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media source to be played.
player.setMediaSource(mediaSource)
// Prepare the player.
player.prepare()

Java

// Create a data source factory.
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// Create a SmoothStreaming media source pointing to a manifest uri.
MediaSource mediaSource =
    new SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri));
// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media source to be played.
player.setMediaSource(mediaSource);
// Prepare the player.
player.prepare();

Truy cập tệp kê khai

Bạn có thể truy xuất tệp kê khai hiện tại bằng cách gọi Player.getCurrentManifest. Đối với SmoothStreaming, bạn nên truyền đối tượng được trả về đến SsManifest. Lệnh gọi lại onTimelineChanged của Player.Listener cũng được gọi mỗi khi tệp kê khai được tải. Điều này sẽ xảy ra một lần đối với nội dung theo yêu cầu và có thể nhiều lần đối với nội dung phát trực tiếp. Đoạn mã sau đây cho thấy cách một ứng dụng có thể thực hiện một việc nào đó bất cứ khi nào tệp kê khai được tải.

Kotlin

player.addListener(
  object : Player.Listener {
    override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) {
      val manifest = player.currentManifest
      if (manifest is SsManifest) {
        // Do something with the manifest.
      }
    }
  }
)

Java

player.addListener(
    new Player.Listener() {
      @Override
      public void onTimelineChanged(
          Timeline timeline, @Player.TimelineChangeReason int reason) {
        Object manifest = player.getCurrentManifest();
        if (manifest != null) {
          SsManifest ssManifest = (SsManifest) manifest;
          // Do something with the manifest.
        }
      }
    });

Tuỳ chỉnh tính năng phát

ExoPlayer cung cấp nhiều cách để bạn điều chỉnh trải nghiệm phát theo nhu cầu của ứng dụng. Xem trang Tuỳ chỉnh để biết ví dụ.