Luỹ tiến

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

Định dạng vùng chứa Được hỗ trợ Bình luận
MP4
M4A
FMP4
WebM
Matroska
MP3 Một số luồng chỉ có thể tìm kiếm bằng cách tìm kiếm tốc độ bit không đổi**
Ogg Chứa Vorbis, Opus và FLAC
WAV
MPEG-TS
MPEG-PS
FLV Không tua được*
ADTS (AAC) Chỉ có thể tìm kiếm bằng cách sử dụng tính năng tìm kiếm tốc độ bit không đổi**
FLAC Sử dụng thư viện FLAC hoặc trình trích xuất FLAC trong thư viện ExoPlayer***
AMR Chỉ có thể tìm kiếm bằng cách sử dụng tính năng tìm kiếm tốc độ bit không đổi**

* Tính năng tua không được hỗ trợ 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 nghe nhìn thực hiện thao tác tua một cách hiệu quả. Nếu cần tìm kiếm, bạn nên sử dụng một định dạng vùng chứa phù hợp hơn.

** Các trình trích xuất này có cờ FLAG_ENABLE_CONSTANT_BITRATE_SEEKING để bật tính năng tìm kiếm gần đúng bằng cách 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 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 xuất âm thanh thô mà khung có thể xử lý trên mọi cấp độ API. Trình trích xuất FLAC của thư viện ExoPlayer xuất các khung âm thanh FLAC và do đó, phụ thuộc vào việc có một 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, nó sẽ sử dụng trình trích xuất thư viện ExoPlayer.

Sử dụng MediaItem

Để phát một luồng truyền trực tiếp, hãy tạo một MediaItem bằng URI nội dung nghe nhìn rồi truyền URI đó đế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 các lựa chọn tuỳ chỉnh, bạn có thể tạo một ProgressiveMediaSource và truyền trực tiếp đối tượng này đế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 chế độ phát

ExoPlayer cung cấp nhiều cách để bạn điều chỉnh trải nghiệm phát cho phù hợp với nhu cầu của ứng dụng. Hãy xem trang Tuỳ chỉnh để tham khảo các ví dụ.