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

ExoPlayer được rất nhiều ứng dụng Android sử dụng. Là một OEM, điều quan trọng là phải đảm bảo rằng ExoPlayer hoạt động chính xác cả trên thiết bị mới lẫn trên các bản dựng nền tảng mới cho thiết bị hiện có. Trang này mô tả các quy trình kiểm thử khả năng tương thích mà bạn nên chạy trước khi vận chuyển OTA của thiết bị hoặc nền tảng, cũng như một số chế độ lỗi thường gặp khi chạy các kiểm thử đó.

Chạy bài kiểm thử

Để chạy các thử nghiệm 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 kiểm thử qua dòng lệnh hoặc Android Studio.

Dòng lệnh

Trong thư mục gốc, hãy tạo và cài đặt các chương trình kiểm thử phát lại:

./gradlew :test-exoplayer-playback:installDebug

Tiếp theo, hãy chạy các bài kiểm thử phát lại 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 vào thư mục gts rồi chạy các bài kiểm thử. Kết quả kiểm thử sẽ xuất hiện trong cửa sổ Chạy của Android Studio.

Các chế độ lỗi thường gặp

Một số chế độ lỗi thường gặp khi chạy quy trình kiểm thử phát lại của ExoPlayer được mô tả bên dưới, cùng với nguyên nhân gốc có thể xảy ra trong từng trường hợp. Chúng tôi sẽ thêm vào danh sách này khi phát hiện thêm các 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 lỗi tương tự như:

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 là do bộ giải mã video đang được kiểm thử xoá nhầm, chèn hoặc sắp xếp lại vùng đệm. Trong ví dụ trên, quy trình kiểm thử dự kiến sẽ đưa một bộ đệm có dấu thời gian trình bày 134766000 vào hàng đợi từ MediaCodec.dequeueOutputBuffer, nhưng nhận thấy rằng quá trình này đã đưa một bộ đệm có dấu thời gian trình bày 134733000 vào hàng đợi. Bạn nên kiểm tra việc triển khai bộ giải mã khi gặp lỗi này, cụ thể là để xử lý đúng cách 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.

Đã bỏ quá nhiều vùng đệm

Logcat sẽ chứa lỗi tương tự như:

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ử đã giải mã muộn một số lượng lớn bộ đệm. Trong ví dụ trên, ExoPlayer đã bỏ 200 bộ đệm vì các bộ đệm này bị trễ vào thời điểm chúng được đưa ra hàng đợi, cho một bài kiểm thử có giới hạn là 25. Nguyên nhân rõ ràng nhất là bộ giải mã video là 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 lượt kiểm thử phát nội dung được bảo vệ của Widevine, thì có thể các hoạt động trên nền tảng để giải mã vùng đệm diễn ra quá chậm. 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 độ của chúng hay không.

Không thể xác thực cửa sổ gốc

Logcat sẽ chứa lỗi tương tự như:

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 đặt chính xác cờ bit bảo mật.

Đã hết thời gian thử nghiệm

Logcat sẽ chứa 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ể hoạt động kiểm thử gặp sự cố khi gọi vào một thành phần 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 các luồng trong quá trình kiểm thử để xác định xem đây có phải là trường hợp này hay không.