ExoPlayer được nhiều ứng dụng Android sử dụng. Là nhà sản xuất thiết bị gốc (OEM), bạn cần đảm bảo rằng ExoPlayer hoạt động chính xác trên cả thiết bị mới và bản dựng nền tảng mới cho các thiết bị hiện có. Trang này mô tả các kiểm thử khả năng tương thích mà bạn nên chạy trước khi vận chuyển thiết bị hoặc nền tảng OTA, cũng như một số chế độ lỗi thường gặp khi chạy các kiểm thử đó.
Chạy kiểm thử
Để chạy các bài kiểm thử phát lại của ExoPlayer, trước tiên hãy xem bản phát hành mới nhất của ExoPlayer từ GitHub. Sau đó, bạn có thể chạy các chương trình kiểm thử qua dòng lệnh hoặc Android Studio.
Dòng lệnh
Từ thư mục gốc, hãy tạo và cài đặt các chương trình kiểm thử chế độ phát:
./gradlew :test-exoplayer-playback:installDebug
Tiếp theo, hãy chạy các bài kiểm thử phát trong gói GTS:
adb shell am instrument -w -r -e debug false \ -e package androidx.media3.test.exoplayer.playback.gts \ androidx.media3.test.exoplayer.playback.test/androidx.test.runner.AndroidJUnitRunner
Kết quả kiểm thử sẽ xuất hiện trong STDOUT.
Android Studio
Mở dự án ExoPlayer, chuyển đến mô-đun playbacktests
, nhấp chuột phải
trên thư mục gts
rồi chạy kiểm thử. Kết quả kiểm thử sẽ xuất hiện trong
Cửa sổ Run (Chạy).
Các chế độ lỗi thường gặp
Dưới đây là mô tả một số chế độ lỗi thường gặp khi chạy kiểm thử phát của ExoPlayer, cùng với nguyên nhân gốc rễ có thể xảy ra trong từng trường hợp. T4 sẽ thêm vào danh sách này khi phát hiện thêm chế độ lỗi.
Dấu thời gian trình bày vùng đệm video ngoài dự kiến
Logcat sẽ chứa một lỗi tương tự như sau:
Caused by: java.lang.IllegalStateException: Expected to dequeue video buffer
with presentation timestamp: 134766000. Instead got: 134733000 (Processed
buffers since last flush: 2242).
Lỗi này thường xảy ra do bộ giải mã video đang được kiểm thử loại bỏ, chèn hoặc sắp xếp lại vùng đệm không chính xác. Trong ví dụ trên, kiểm thử dự kiến sẽ xoá một vùng đệm có dấu thời gian trình bày 134766000
khỏi MediaCodec.dequeueOutputBuffer
, nhưng phát hiện rằng kiểm thử đã xoá một vùng đệm có dấu thời gian trình bày 134733000
. Bạn nên kiểm tra
khi gặp lỗi này, cụ thể là
xử lý chính xác các nút chuyển độ phân giải thích ứng mà không cần loại bỏ bất kỳ vùng đệm nào.
Quá nhiều vùng đệm bị bỏ qua
Logcat sẽ chứa một lỗi tương tự như sau:
junit.framework.AssertionFailedError: Codec(DashTest:Video) was late decoding:
200 buffers. Limit: 25.
Lỗi này là một vấn đề về hiệu suất, trong đó bộ giải mã video đang được kiểm thử bị trễ trong việc giải mã một lượng lớn vùng đệm. Trong ví dụ trên, ExoPlayer đã giảm 200 bộ đệm vì chúng bị trễ tại thời điểm bị đưa vào hàng đợi, cho một thử nghiệm áp dụng giới hạn 25. Nguyên nhân rõ ràng nhất là bộ giải mã video bộ đệm giải mã quá chậm. Nếu lỗi chỉ xảy ra với tập hợp con các bài kiểm thử phát nội dung được bảo vệ của Widevine, có khả năng các hoạt động của nền tảng cho quá trình giải mã vùng đệm quá chậm. Chúng tôi khuyên bạn nên kiểm tra hiệu suất của các thành phần này và xem xét liệu có thể thực hiện bất kỳ biện pháp tối ưu hoá nào để tăng tốc độ hay không chúng lên.
Không thể xác thực cửa sổ gốc
Logcat sẽ chứa một lỗi tương tự như sau:
SurfaceUtils: native window could not be authenticated
ExoPlayerImplInternal: Internal runtime error.
ExoPlayerImplInternal: android.media.MediaCodec$CodecException: Error 0xffffffff
Lỗi này cho thấy nền tảng không thiết lập đúng quy trình bảo mật cờ bit.
Hết giờ kiểm tra
Logcat sẽ chứa một lỗi tương tự như:
AssertionFailedError: Test timed out after 300000 ms.
Lỗi này thường là do kết nối mạng kém trong quá trình chạy kiểm thử. Nếu thiết bị có vẻ có kết nối mạng tốt thì có thể
bài kiểm thử gặp khó khăn khi gọi vào một thành phần của nền tảng (chẳng hạn như
MediaCodec
, MediaDrm
hoặc AudioTrack
). Kiểm tra ngăn xếp lệnh gọi của
luồng trong quy trình kiểm thử để xác định xem đây có phải là trường hợp này hay không.