OEM পরীক্ষা

এক্সোপ্লেয়ার বিপুল সংখ্যক অ্যান্ড্রয়েড অ্যাপ ব্যবহার করে। একটি OEM হিসেবে, এটি নিশ্চিত করা গুরুত্বপূর্ণ যে এক্সোপ্লেয়ার নতুন ডিভাইস এবং বিদ্যমান ডিভাইসের জন্য নতুন প্ল্যাটফর্ম বিল্ড উভয় ক্ষেত্রেই সঠিকভাবে কাজ করে। এই পৃষ্ঠায় আমরা কোনও ডিভাইস বা প্ল্যাটফর্ম OTA পাঠানোর আগে যে সামঞ্জস্যতা পরীক্ষাগুলি চালানোর পরামর্শ দিই এবং সেগুলি চালানোর সময় যে সাধারণ ব্যর্থতার মোডগুলির সম্মুখীন হই তার বর্ণনা দেওয়া হয়েছে।

পরীক্ষা চালানো হচ্ছে

ExoPlayer এর প্লেব্যাক পরীক্ষা চালানোর জন্য, প্রথমে GitHub থেকে ExoPlayer এর সর্বশেষ সংস্করণটি দেখুন। তারপর আপনি কমান্ড লাইন বা Android Studio থেকে পরীক্ষাগুলি চালাতে পারেন।

কমান্ড লাইন

রুট ডিরেক্টরি থেকে, প্লেব্যাক পরীক্ষাগুলি তৈরি এবং ইনস্টল করুন:

./gradlew :test-exoplayer-playback:installDebug

এরপর, 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

পরীক্ষার ফলাফল STDOUT-তে প্রদর্শিত হবে।

অ্যান্ড্রয়েড স্টুডিও

ExoPlayer প্রজেক্টটি খুলুন, playbacktests মডিউলে যান, gts ফোল্ডারে ডান ক্লিক করুন এবং পরীক্ষাগুলি চালান। পরীক্ষার ফলাফল অ্যান্ড্রয়েড স্টুডিওর রান উইন্ডোতে প্রদর্শিত হবে।

সাধারণ ব্যর্থতা মোড

ExoPlayer এর প্লেব্যাক পরীক্ষা চালানোর সময় যেসব সাধারণ ব্যর্থতার মোডের সম্মুখীন হতে হয় তার কিছু নিচে বর্ণনা করা হল, প্রতিটি ক্ষেত্রে সম্ভাব্য মূল কারণ সহ। আরও ব্যর্থতার মোড আবিষ্কৃত হলে আমরা এই তালিকায় আরও যোগ করব।

অপ্রত্যাশিত ভিডিও বাফার উপস্থাপনা টাইমস্ট্যাম্প

Logcat-এ এর মতো একটি ত্রুটি থাকবে:

Caused by: java.lang.IllegalStateException: Expected to dequeue video buffer
with presentation timestamp: 134766000. Instead got: 134733000 (Processed
buffers since last flush: 2242).

এই ব্যর্থতা প্রায়শই পরীক্ষার অধীনে ভিডিও ডিকোডার ভুলভাবে বাফারগুলি বাতিল, সন্নিবেশ বা পুনরায় অর্ডার করার কারণে ঘটে। উপরের উদাহরণে, পরীক্ষাটি MediaCodec.dequeueOutputBuffer থেকে উপস্থাপনা টাইমস্ট্যাম্প 134766000 সহ একটি বাফার ডিকিউ করার আশা করেছিল, কিন্তু দেখা গেছে যে এটি পরিবর্তে উপস্থাপনা টাইমস্ট্যাম্প 134733000 সহ একটি বাফার ডিকিউ করেছে। আমরা সুপারিশ করছি যে আপনি এই ব্যর্থতার সম্মুখীন হলে ডিকোডার বাস্তবায়ন পরীক্ষা করুন, বিশেষ করে এটি কোনও বাফার বাতিল না করেই সঠিকভাবে অভিযোজিত রেজোলিউশন সুইচ পরিচালনা করে কিনা।

অনেক বেশি বাফার বাদ পড়েছে

Logcat-এ এর মতো একটি ত্রুটি থাকবে:

junit.framework.AssertionFailedError: Codec(DashTest:Video) was late decoding:
200 buffers. Limit: 25.

এই ব্যর্থতাটি একটি পারফরম্যান্স সমস্যা, যেখানে পরীক্ষিত ভিডিও ডিকোডারটি প্রচুর সংখ্যক বাফার ডিকোড করতে দেরি করছিল। উপরের উদাহরণে, ExoPlayer ২০০টি বাফার বাদ দিয়েছে কারণ সেগুলি ডিকিউ করার সময় দেরিতে ছিল, একটি পরীক্ষায় যেখানে ২৫টির সীমা আরোপ করা হয়েছে। সবচেয়ে স্পষ্ট কারণ হল ভিডিও ডিকোডারটি খুব ধীর ডিকোডিং বাফার। যদি ব্যর্থতাগুলি শুধুমাত্র Widevine সুরক্ষিত কন্টেন্ট চালানোর জন্য পরীক্ষাগুলির উপসেটের ক্ষেত্রে ঘটে, তাহলে সম্ভবত বাফার ডিক্রিপশনের জন্য প্ল্যাটফর্মের ক্রিয়াকলাপগুলি খুব ধীর। আমরা এই উপাদানগুলির কর্মক্ষমতা পরীক্ষা করার এবং তাদের গতি বাড়ানোর জন্য কোনও অপ্টিমাইজেশন করা যেতে পারে কিনা তা দেখার পরামর্শ দিচ্ছি।

নেটিভ উইন্ডো প্রমাণীকরণ করা যায়নি

Logcat-এ এর মতো একটি ত্রুটি থাকবে:

SurfaceUtils: native window could not be authenticated
ExoPlayerImplInternal: Internal runtime error.
ExoPlayerImplInternal: android.media.MediaCodec$CodecException: Error 0xffffffff

এই ব্যর্থতা প্ল্যাটফর্মটি সঠিকভাবে নিরাপদ বিট পতাকা সেট করতে ব্যর্থ হওয়ার ইঙ্গিত দেয়।

পরীক্ষার সময় শেষ

Logcat-এ এর মতো একটি ত্রুটি থাকবে:

AssertionFailedError: Test timed out after 300000 ms.

এই ব্যর্থতা প্রায়শই পরীক্ষা চালানোর সময় দুর্বল নেটওয়ার্ক সংযোগের কারণে ঘটে। যদি ডিভাইসটিতে ভালো নেটওয়ার্ক সংযোগ থাকে বলে মনে হয়, তাহলে সম্ভবত পরীক্ষাটি কোনও প্ল্যাটফর্ম উপাদানে (যেমন MediaCodec , MediaDrm , অথবা AudioTrack ) কলিং আটকে যাচ্ছে। এটি সত্য কিনা তা নির্ধারণ করতে পরীক্ষা প্রক্রিয়ায় থ্রেডগুলির কল স্ট্যাকগুলি পরীক্ষা করুন।

,

এক্সোপ্লেয়ার বিপুল সংখ্যক অ্যান্ড্রয়েড অ্যাপ ব্যবহার করে। একটি OEM হিসেবে, এটি নিশ্চিত করা গুরুত্বপূর্ণ যে এক্সোপ্লেয়ার নতুন ডিভাইস এবং বিদ্যমান ডিভাইসের জন্য নতুন প্ল্যাটফর্ম বিল্ড উভয় ক্ষেত্রেই সঠিকভাবে কাজ করে। এই পৃষ্ঠায় আমরা কোনও ডিভাইস বা প্ল্যাটফর্ম OTA পাঠানোর আগে যে সামঞ্জস্যতা পরীক্ষাগুলি চালানোর পরামর্শ দিই এবং সেগুলি চালানোর সময় যে সাধারণ ব্যর্থতার মোডগুলির সম্মুখীন হই তার বর্ণনা দেওয়া হয়েছে।

পরীক্ষা চালানো হচ্ছে

ExoPlayer এর প্লেব্যাক পরীক্ষা চালানোর জন্য, প্রথমে GitHub থেকে ExoPlayer এর সর্বশেষ সংস্করণটি দেখুন। তারপর আপনি কমান্ড লাইন বা Android Studio থেকে পরীক্ষাগুলি চালাতে পারেন।

কমান্ড লাইন

রুট ডিরেক্টরি থেকে, প্লেব্যাক পরীক্ষাগুলি তৈরি এবং ইনস্টল করুন:

./gradlew :test-exoplayer-playback:installDebug

এরপর, 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

পরীক্ষার ফলাফল STDOUT-তে প্রদর্শিত হবে।

অ্যান্ড্রয়েড স্টুডিও

ExoPlayer প্রজেক্টটি খুলুন, playbacktests মডিউলে যান, gts ফোল্ডারে ডান ক্লিক করুন এবং পরীক্ষাগুলি চালান। পরীক্ষার ফলাফল অ্যান্ড্রয়েড স্টুডিওর রান উইন্ডোতে প্রদর্শিত হবে।

সাধারণ ব্যর্থতা মোড

ExoPlayer এর প্লেব্যাক পরীক্ষা চালানোর সময় যেসব সাধারণ ব্যর্থতার মোডের সম্মুখীন হতে হয় তার কিছু নিচে বর্ণনা করা হল, প্রতিটি ক্ষেত্রে সম্ভাব্য মূল কারণ সহ। আরও ব্যর্থতার মোড আবিষ্কৃত হলে আমরা এই তালিকায় আরও যোগ করব।

অপ্রত্যাশিত ভিডিও বাফার উপস্থাপনা টাইমস্ট্যাম্প

Logcat-এ এর মতো একটি ত্রুটি থাকবে:

Caused by: java.lang.IllegalStateException: Expected to dequeue video buffer
with presentation timestamp: 134766000. Instead got: 134733000 (Processed
buffers since last flush: 2242).

এই ব্যর্থতা প্রায়শই পরীক্ষার অধীনে ভিডিও ডিকোডার ভুলভাবে বাফারগুলি বাতিল, সন্নিবেশ বা পুনরায় অর্ডার করার কারণে ঘটে। উপরের উদাহরণে, পরীক্ষাটি MediaCodec.dequeueOutputBuffer থেকে উপস্থাপনা টাইমস্ট্যাম্প 134766000 সহ একটি বাফার ডিকিউ করার আশা করেছিল, কিন্তু দেখা গেছে যে এটি পরিবর্তে উপস্থাপনা টাইমস্ট্যাম্প 134733000 সহ একটি বাফার ডিকিউ করেছে। আমরা সুপারিশ করছি যে আপনি এই ব্যর্থতার সম্মুখীন হলে ডিকোডার বাস্তবায়ন পরীক্ষা করুন, বিশেষ করে এটি কোনও বাফার বাতিল না করেই সঠিকভাবে অভিযোজিত রেজোলিউশন সুইচ পরিচালনা করে কিনা।

অনেক বেশি বাফার বাদ পড়েছে

Logcat-এ এর মতো একটি ত্রুটি থাকবে:

junit.framework.AssertionFailedError: Codec(DashTest:Video) was late decoding:
200 buffers. Limit: 25.

এই ব্যর্থতাটি একটি পারফরম্যান্স সমস্যা, যেখানে পরীক্ষিত ভিডিও ডিকোডারটি প্রচুর সংখ্যক বাফার ডিকোড করতে দেরি করছিল। উপরের উদাহরণে, ExoPlayer ২০০টি বাফার বাদ দিয়েছে কারণ সেগুলি ডিকিউ করার সময় দেরিতে ছিল, একটি পরীক্ষায় যেখানে ২৫টির সীমা আরোপ করা হয়েছে। সবচেয়ে স্পষ্ট কারণ হল ভিডিও ডিকোডারটি খুব ধীর ডিকোডিং বাফার। যদি ব্যর্থতাগুলি শুধুমাত্র Widevine সুরক্ষিত কন্টেন্ট চালানোর জন্য পরীক্ষাগুলির উপসেটের ক্ষেত্রে ঘটে, তাহলে সম্ভবত বাফার ডিক্রিপশনের জন্য প্ল্যাটফর্মের ক্রিয়াকলাপগুলি খুব ধীর। আমরা এই উপাদানগুলির কর্মক্ষমতা পরীক্ষা করার এবং তাদের গতি বাড়ানোর জন্য কোনও অপ্টিমাইজেশন করা যেতে পারে কিনা তা দেখার পরামর্শ দিচ্ছি।

নেটিভ উইন্ডো প্রমাণীকরণ করা যায়নি

Logcat-এ এর মতো একটি ত্রুটি থাকবে:

SurfaceUtils: native window could not be authenticated
ExoPlayerImplInternal: Internal runtime error.
ExoPlayerImplInternal: android.media.MediaCodec$CodecException: Error 0xffffffff

এই ব্যর্থতা প্ল্যাটফর্মটি সঠিকভাবে নিরাপদ বিট পতাকা সেট করতে ব্যর্থ হওয়ার ইঙ্গিত দেয়।

পরীক্ষার সময় শেষ

Logcat-এ এর মতো একটি ত্রুটি থাকবে:

AssertionFailedError: Test timed out after 300000 ms.

এই ব্যর্থতা প্রায়শই পরীক্ষা চালানোর সময় দুর্বল নেটওয়ার্ক সংযোগের কারণে ঘটে। যদি ডিভাইসটিতে ভালো নেটওয়ার্ক সংযোগ থাকে বলে মনে হয়, তাহলে সম্ভবত পরীক্ষাটি কোনও প্ল্যাটফর্ম উপাদানে (যেমন MediaCodec , MediaDrm , অথবা AudioTrack ) কলিং আটকে যাচ্ছে। এটি সত্য কিনা তা নির্ধারণ করতে পরীক্ষা প্রক্রিয়ায় থ্রেডগুলির কল স্ট্যাকগুলি পরীক্ষা করুন।