ExoPlayer অনেক সংখ্যক Android অ্যাপ ব্যবহার করে। একটি OEM হিসাবে, ExoPlayer নতুন ডিভাইসে এবং বিদ্যমান ডিভাইসগুলির জন্য নতুন প্ল্যাটফর্ম তৈরি উভয় ক্ষেত্রেই সঠিকভাবে কাজ করে তা নিশ্চিত করা গুরুত্বপূর্ণ। এই পৃষ্ঠাটি সামঞ্জস্যপূর্ণ পরীক্ষাগুলি বর্ণনা করে যা আমরা একটি ডিভাইস বা প্ল্যাটফর্ম OTA শিপিংয়ের আগে চালানোর সুপারিশ করি এবং সেগুলি চালানোর সময় কিছু সাধারণ ব্যর্থতার মোডের সম্মুখীন হয়।
পরীক্ষা চলছে
ExoPlayer এর প্লেব্যাক পরীক্ষা চালানোর জন্য, প্রথমে GitHub থেকে ExoPlayer-এর সর্বশেষ রিলিজটি দেখুন। তারপর আপনি কমান্ড লাইন বা অ্যান্ড্রয়েড স্টুডিও থেকে পরীক্ষা চালাতে পারেন।
কমান্ড লাইন
রুট ডিরেক্টরি থেকে, প্লেব্যাক পরীক্ষাগুলি তৈরি এবং ইনস্টল করুন:
./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 200টি বাফার বাদ দিয়েছে কারণ সেগুলি সারিবদ্ধ হওয়ার সময় দেরি হয়ে গিয়েছিল, একটি পরীক্ষার জন্য যা 25 এর সীমা আরোপ করে৷ সবচেয়ে স্পষ্ট কারণ হল ভিডিও ডিকোডারটি খুব ধীর ডিকোডিং বাফার৷ যদি ব্যর্থতা শুধুমাত্র পরীক্ষাগুলির উপসেটের জন্য ঘটে যা 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
) কল করা আটকে যাচ্ছে। এটি এমন কিনা তা নিশ্চিত করতে পরীক্ষার প্রক্রিয়ায় থ্রেডগুলির কল স্ট্যাকগুলি পরিদর্শন করুন৷