Kiểm thử OEM (Nhà sản xuất thiết bị gốc)

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.