Bắt đầu

Đối với các trường hợp sử dụng đơn giản, để bắt đầu với ExoPlayer, bạn cần thực hiện các bước sau:

  1. Thêm ExoPlayer làm phần phụ thuộc cho dự án.
  2. Tạo một thực thể ExoPlayer.
  3. Gắn trình phát vào một khung hiển thị (để xuất video và hoạt động đầu vào của người dùng).
  4. Chuẩn bị trình phát bằng MediaItem để phát.
  5. Giải phóng trình phát khi hoàn tất.

Các bước này được mô tả chi tiết hơn bên dưới. Để xem ví dụ hoàn chỉnh, hãy tham khảo PlayerActivity trong ứng dụng minh hoạ chính.

Thêm ExoPlayer làm phần phụ thuộc

Thêm mô-đun ExoPlayer

Cách dễ nhất để bắt đầu sử dụng AndroidX Media3 là thêm các phần phụ thuộc gradle của các thư viện bạn cần vào tệp build.gradle của mô-đun ứng dụng.

Ví dụ: để phụ thuộc vào ExoPlayer có hỗ trợ phát DASH và các thành phần giao diện người dùng, bạn có thể thêm các phần phụ thuộc vào các mô-đun như sau:

Kotlin

implementation("androidx.media3:media3-exoplayer:1.9.3")
implementation("androidx.media3:media3-exoplayer-dash:1.9.3")
implementation("androidx.media3:media3-ui:1.9.3")
implementation("androidx.media3:media3-ui-compose:1.9.3")

Groovy

implementation "androidx.media3:media3-exoplayer:1.9.3"
implementation "androidx.media3:media3-exoplayer-dash:1.9.3"
implementation "androidx.media3:media3-ui:1.9.3"
implementation("androidx.media3:media3-ui-compose:1.9.3")

trong đó 1.9.3 là phiên bản bạn muốn dùng (bạn có thể tham khảo ghi chú phát hành để biết phiên bản mới nhất). Tất cả các mô-đun phải thuộc cùng một phiên bản.

AndroidX Media3 có các mô-đun thư viện phụ thuộc vào các thư viện bên ngoài để cung cấp thêm chức năng. Một số mô-đun có sẵn trong kho lưu trữ Maven, trong khi các mô-đun khác phải được tạo theo cách thủ công. Duyệt qua thư mục thư viện và xem từng tệp README để biết thông tin chi tiết.

Bạn có thể tìm thêm thông tin về các mô-đun thư viện có sẵn trên trang Google Maven AndroidX Media.

Bật tính năng hỗ trợ Java 8

Nếu chưa bật, bạn cần bật ít nhất tính năng hỗ trợ Java 8 trong tất cả các tệp build.gradle phụ thuộc vào ExoPlayer bằng cách thêm nội dung sau vào phần android:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Tạo người chơi

Bạn có thể tạo một thực thể ExoPlayer bằng ExoPlayer.Builder, cung cấp nhiều lựa chọn tuỳ chỉnh. Mã sau đây là ví dụ đơn giản nhất về cách tạo một thực thể.

Kotlin

val player = ExoPlayer.Builder(context).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();

Lưu ý về việc tạo luồng

Bạn phải truy cập vào các thực thể ExoPlayer từ một luồng ứng dụng duy nhất. Trong phần lớn các trường hợp, đây phải là luồng chính của ứng dụng. Bạn phải sử dụng luồng chính của ứng dụng khi sử dụng các thành phần giao diện người dùng của ExoPlayer hoặc tiện ích IMA.

Bạn có thể chỉ định rõ ràng luồng mà thực thể ExoPlayer phải truy cập bằng cách truyền Looper khi tạo trình phát. Nếu không có Looper nào được chỉ định, thì Looper của luồng mà trình phát được tạo sẽ được sử dụng. Hoặc nếu luồng đó không có Looper, thì Looper của luồng chính của ứng dụng sẽ được sử dụng. Trong mọi trường hợp, bạn có thể truy vấn Looper của luồng mà trình phát phải truy cập bằng Player.getApplicationLooper.

Để biết thêm thông tin về mô hình tạo luồng của ExoPlayer, hãy xem phần "Mô hình tạo luồng" trong ExoPlayer Javadoc.

Gắn trình phát vào một khung hiển thị

Thư viện ExoPlayer cung cấp nhiều thành phần giao diện người dùng tạo sẵn để phát nội dung nghe nhìn. Các thành phần này bao gồm PlayerView, gói gọn PlayerControlView, SubtitleViewSurface mà video được kết xuất. Bạn có thể đưa PlayerView vào tệp XML bố cục của ứng dụng. Ví dụ: để liên kết trình phát với khung hiển thị:

Kotlin

// Bind the player to the view.
playerView.player = player

Java

// Bind the player to the view.
playerView.setPlayer(player);

Bạn có thể sử dụng các thành phần giao diện người dùng tạo sẵn của ExoPlayer. Đối với các ứng dụng video triển khai giao diện người dùng riêng, bạn có thể đặt SurfaceView, TextureView, SurfaceHolder hoặc Surface mục tiêu bằng các phương thức setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHoldersetVideoSurface của ExoPlayer. Bạn có thể sử dụng lệnh gọi lại Listener.onCues để nhận phụ đề cần kết xuất trong quá trình phát và có thể sử dụng setImageOutput để nhận hình ảnh đã giải mã.

Để mang lại trải nghiệm thoải mái hơn cho người dùng, hãy cân nhắc thêm thuộc tính keepScreenOn. Bạn có thể tìm hiểu các hành động khác giúp thiết bị luôn hoạt động trong các trang công việc ở chế độ nền.

android:keepScreenOn="true"

Đọc thêm về cách sử dụng các thành phần giao diện người dùng Media3 và cách tuỳ chỉnh các thành phần này trên trang Giao diện người dùng.

Điền sẵn danh sách phát và chuẩn bị trình phát

Trong ExoPlayer, mọi nội dung nghe nhìn đều được biểu thị bằng một MediaItem. Để phát một nội dung nghe nhìn, bạn cần tạo một MediaItem tương ứng, thêm nội dung đó vào trình phát, chuẩn bị trình phát và gọi play để bắt đầu phát:

Kotlin

// Build the media item.
val mediaItem = MediaItem.fromUri(videoUri)
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media item.
MediaItem mediaItem = MediaItem.fromUri(videoUri);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

ExoPlayer hỗ trợ trực tiếp danh sách phát, vì vậy, bạn có thể chuẩn bị trình phát với nhiều mục nội dung nghe nhìn để phát lần lượt:

Kotlin

// Build the media items.
val firstItem = MediaItem.fromUri(firstVideoUri)
val secondItem = MediaItem.fromUri(secondVideoUri)
// Add the media items to be played.
player.addMediaItem(firstItem)
player.addMediaItem(secondItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media items.
MediaItem firstItem = MediaItem.fromUri(firstVideoUri);
MediaItem secondItem = MediaItem.fromUri(secondVideoUri);
// Add the media items to be played.
player.addMediaItem(firstItem);
player.addMediaItem(secondItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

Bạn có thể cập nhật danh sách phát trong khi phát mà không cần chuẩn bị lại trình phát. Đọc thêm về cách điền và thao tác với danh sách phát trên trang Danh sách phát. Đọc thêm về các lựa chọn khác nhau có sẵn khi tạo mục nội dung nghe nhìn, chẳng hạn như cắt và đính kèm tệp phụ đề, trên trang Mục nội dung nghe nhìn.

Điều khiển người chơi

Sau khi trình phát được chuẩn bị, bạn có thể điều khiển quá trình phát bằng cách gọi các phương thức trên trình phát. Dưới đây là một số phương thức thường dùng nhất:

  • playpause bắt đầu và tạm dừng phát.
  • seekTo cho phép tìm kiếm trong nội dung nghe nhìn.
  • hasPrevious, hasNext, previousnext cho phép di chuyển qua danh sách phát.
  • setRepeatMode kiểm soát việc lặp lại nội dung nghe nhìn và cách lặp lại.
  • setShuffleModeEnabled kiểm soát việc xáo trộn danh sách phát.
  • setPlaybackParameters điều chỉnh tốc độ phát và cao độ âm thanh.

Nếu trình phát được liên kết với PlayerView hoặc PlayerControlView, thì lượt tương tác của người dùng với các thành phần này sẽ khiến các phương thức tương ứng trên trình phát được gọi.

Giải phóng người chơi

Bạn phải giải phóng trình phát khi không còn cần nữa để giải phóng các tài nguyên có hạn như bộ giải mã video cho các ứng dụng khác sử dụng. Bạn có thể thực hiện việc này bằng cách gọi ExoPlayer.release.