ExoPlayer hỗ trợ mootStreaming với định dạng vùng chứa FMP4. Luồng nội dung đa phương tiện phải được loại bỏ, 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 mootStreaming. 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ỉ những sự kiện phát trực tiếp chưa được phát trực tiếp |
Phụ đề | ||
TTML | NÊN | Được nhúng trong FMP4 |
Bảo vệ nội dung | ||
PlaySẵn sàng SL2000 | NÊN | Chỉ phát hành cho Android TV |
Phát trực tiếp | ||
Phát trực tiếp thường xuyên | NÊN | |
Dữ liệu ứng dụng nội dung nghe nhìn phổ biến (CMCD) | NÊN | Hướng dẫn tích hợp |
Sử dụng MediaItem
Để phát một luồng smoothStreaming, bạn cần phụ thuộc vào mô-đun mootStreaming.
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 của mootStreaming và truyền cho người chơi.
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 của bạn 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
để cho biết rõ loại nội dung.
ExoPlayer sẽ tự động điều chỉnh giữa các cách biểu diễn đượ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 người chơi 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 vào 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 mootStreaming, bạn nên truyền đối tượng được trả về tới SsManifest
. Lệnh gọi lại onTimelineChanged
của Player.Listener
cũng được gọi bất cứ khi nào 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ể làm một việc gì đó 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 chế độ 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 các ví dụ.