Đố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 triển khai các bước sau:
- Thêm ExoPlayer làm phần phụ thuộc vào dự án của bạn.
- Tạo một thực thể
ExoPlayer
. - Đính kèm trình phát vào một khung hiển thị (để xuất video và nhận thông tin đầu vào của người dùng).
- Chuẩn bị trình phát bằng một
MediaItem
để phát. - 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 ở phần dưới đây. Để 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 các 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 vào các thư viện bạn cần trong 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.7.1") implementation("androidx.media3:media3-exoplayer-dash:1.7.1") implementation("androidx.media3:media3-ui:1.7.1") implementation("androidx.media3:media3-ui-compose:1.7.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.7.1" implementation "androidx.media3:media3-exoplayer-dash:1.7.1" implementation "androidx.media3:media3-ui:1.7.1" implementation("androidx.media3:media3-ui-compose:1.7.1")
trong đó 1.7.1 là phiên bản bạn muốn dùng (bạn có thể tìm thấy phiên bản mới nhất bằng cách tham khảo ghi chú phát hành). Tất cả các mô-đun phải có cùng 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ố có sẵn trong kho lưu trữ Maven, trong khi những thành phần 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ể xem thêm thông tin về các mô-đun thư viện hiện có 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 trình phát
Bạn có thể tạo một phiên bản ExoPlayer
bằng ExoPlayer.Builder
. Thao tác này sẽ cung cấp một loạt các lựa chọn tuỳ chỉnh. Đoạn 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ề tính năng tạo luồng
Bạn phải truy cập vào các phiên bản ExoPlayer từ một luồng ứng dụng duy nhất. Trong phần lớn 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 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à bạn phải truy cập vào một thực thể ExoPlayer bằng cách truyền một 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 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 dùng. Trong mọi trường hợp, bạn có thể truy vấn Looper
của luồng mà người chơi phải truy cập bằng cách sử dụng Player.getApplicationLooper
.
Để biết thêm thông tin về mô hình luồng của ExoPlayer, hãy xem mục "Mô hình luồng" trong Javadoc của ExoPlayer.
Đính kèm 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 dựng sẵn để phát nội dung nghe nhìn. Trong đó có PlayerView
, bao gồm một PlayerControlView
, một SubtitleView
và một Surface
mà video được kết xuất lên. Bạn có thể thêm PlayerView
vào tệp bố cục xml 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 không bắt buộc phải 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 mục tiêu SurfaceView
, TextureView
, SurfaceHolder
hoặc Surface
bằng cách sử dụng các phương thức setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
và setVideoSurface
của ExoPlayer tương ứng. Bạn có thể dùng lệnh gọi lại Listener.onCues
để nhận phụ đề cần hiển thị trong quá trình phát và 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
hoặc đặt chế độ khoá đánh thức trên ExoPlayer. Bạn có thể điều tra các thao tác khác giúp thiết bị luôn ở trạng thái 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 đoạn nội dung nghe nhìn, bạn cần tạo một MediaItem
tương ứng, thêm đoạn 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 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 trình phát
Sau khi trình phát được chuẩn bị, bạn có thể điều khiển chế độ phát bằng cách gọi các phương thức trên trình phát. Sau đây là một số phương pháp thường được sử dụng nhất:
play
vàpause
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
,previous
vànext
cho phép di chuyển trong danh sách phát.setRepeatMode
kiểm soát việc có lặp lại nội dung nghe nhìn hay không và cách lặp lại.setShuffleModeEnabled
kiểm soát chế độ phát ngẫu nhiê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ì hoạt động 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.
Thả người chơi
Bạn cần giải phóng trình phát khi không cần dùng 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
.