Luỹ tiến

ExoPlayer có thể phát trực tiếp các luồng ở các định dạng vùng chứa sau đây. Các định dạng mẫu âm thanh và video bên trong cũng phải được hỗ trợ (xem phần định dạng mẫu để biết thông tin chi tiết).

Định dạng vùng chứa Có thể làm Bình luận
MP4 NÊN
M4A NÊN
FMP4 NÊN
WebM NÊN
Tiếng Matroska NÊN
MP3 NÊN Một số luồng chỉ có thể tua bằng cách sử dụng tốc độ bit không đổi khi tua**
Ogg NÊN Chứa Vorbis, Opus và FLAC
WAV NÊN
MPEG-TS NÊN
MPEG-PS NÊN
FLV NÊN Không thể tìm kiếm*
ADTS (AAC) NÊN Chỉ có thể tua bằng cách sử dụng tốc độ bit không đổi đang tua**
FLAC NÊN Sử dụng thư viện FLAC hoặc trình trích xuất FLAC trong thư viện ExoPlayer***
AMR (phản ứng cực khoái độc lập về giác quan) NÊN Chỉ có thể tua bằng cách sử dụng tốc độ bit không đổi đang tua**
Ảnh chuyển động JPEG NÊN Chỉ nội dung MP4 được trích xuất

* Không hỗ trợ tính năng tìm kiếm vì vùng chứa không cung cấp siêu dữ liệu (ví dụ: chỉ mục mẫu) để cho phép trình phát nội dung đa phương tiện thực hiện thao tác tìm kiếm một cách hiệu quả. Nếu cần phải tìm kiếm, bạn nên sử dụng định dạng vùng chứa phù hợp hơn.

** Các công cụ trích xuất này có cờ FLAG_ENABLE_CONSTANT_BITRATE_SEEKING để cho phép tìm kiếm gần đúng bằng cách sử dụng giả định tốc độ bit không đổi. Chức năng này không được bật theo mặc định. Cách đơn giản nhất để bật chức năng này cho tất cả các trình trích xuất có hỗ trợ chức năng này là sử dụng DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, như mô tả tại đây.

*** Trình trích xuất thư viện FLAC sẽ xuất ra âm thanh thô mà khung có thể xử lý ở tất cả các cấp độ API. Trình trích xuất FLAC của thư viện ExoPlayer xuất ra các khung âm thanh FLAC và do đó phụ thuộc vào việc có bộ giải mã FLAC (ví dụ: bộ giải mã MediaCodec xử lý FLAC (bắt buộc từ API cấp 27) hoặc thư viện FFmpeg có bật FLAC). DefaultExtractorsFactory sẽ dùng trình trích xuất tiện ích nếu ứng dụng được tạo bằng thư viện FLAC. Nếu không, hệ thống sẽ sử dụng trình trích xuất thư viện ExoPlayer.

Sử dụng MediaItem

Để phát một luồng tiến bộ, hãy tạo một MediaItem bằng URI nội dung đa phương tiện và truyền tệp đó đến 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(progressiveUri))
// 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(progressiveUri));
// Prepare the player.
player.prepare();

Sử dụng ProgressiveMediaSource

Để có thêm lựa chọn tuỳ chỉnh, bạn có thể tạo ProgressiveMediaSource và 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 progressive media source pointing to a stream uri.
val mediaSource: MediaSource =
ProgressiveMediaSource.Factory(dataSourceFactory)
    .createMediaSource(MediaItem.fromUri(progressiveUri))
// 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 progressive media source pointing to a stream uri.
MediaSource mediaSource =
    new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri(progressiveUri));
// 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();

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ụ.