মিডিয়া উপাদান কাস্টমাইজ করুন

আপনি ভেন্ডর এক্সটেনশন ব্যবহার করে মিডিয়া এক্সট্র্যাক্টর এবং মিডিয়া কোডেক উপাদানগুলি প্রসারিত করতে পারেন। MediaSession2 এবং MediaParser APIগুলি কাস্টমাইজ করা যাবে না (তবে আপনি লিগ্যাসি MediaPlayer এবং MediaSession APIগুলির জন্য আপস্ট্রিম পরিবর্তন করতে পারেন)।

অ্যান্ড্রয়েড মিডিয়া ফ্রেমওয়ার্কে অতিরিক্ত মিডিয়া প্রকার সমর্থন করতে, আপনাকে একটি কাস্টম এক্সট্র্যাক্টর এবং ডিকোডার তৈরি করতে হবে। উদাহরণস্বরূপ, AVI ফাইলগুলিতে উইন্ডোজ মিডিয়া ভিডিওর জন্য সমর্থন যোগ করতে, আপনাকে একটি AVI এক্সট্র্যাক্টর এবং একটি উইন্ডোজ মিডিয়া ভিডিও ডিকোডার তৈরি করতে হবে।

এক্সটেনশন সম্পর্কে

যদি ডিফল্ট মিডিয়া এক্সট্র্যাক্টরগুলি আপনার প্রয়োজনীয়তা পূরণ না করে, আপনি কাস্টম এক্সট্র্যাক্টর প্লাগইনগুলি /system/lib[64]/extractors/ এ রাখতে পারেন। এক্সট্রাক্টর প্রক্রিয়া স্বয়ংক্রিয়ভাবে Google-প্রদত্ত APEX প্যাকেজ এবং /system/lib[64]/extractors/ থেকে এক্সট্রাক্টর প্লাগইনগুলি লোড করে।

একইভাবে, আপনি কাস্টম মিডিয়া কোডেক পরিষেবাগুলি সেট আপ করতে পারেন যা frameworks/av/media/codec2/core/ সংজ্ঞায়িত কোডেক 2.0 ইন্টারফেস ব্যবহার করে। একটি মৌলিক বাস্তবায়নের জন্য, frameworks/av/media/codec2/hidl/services/ দেখুন। লাইব্রেরি এন্ট্রি পয়েন্ট হল C2ComponentStore ইন্টারফেস। একটি উদাহরণের জন্য, frameworks/av/media/codec2/vndk/C2Store.cpp এ ডিফল্ট সফ্টওয়্যার কোডেক স্টোর বাস্তবায়ন দেখুন।

আপনার নিজের APEX ব্যবহার করার সময়, কোডেক পরিষেবাটি গঠন করুন এবং mediaswcodec পরিষেবার মতো একই প্রক্রিয়াগুলি ব্যবহার করে APEX ফাইলটি লোড করুন৷ এটি করার জন্য, সমস্ত C2 উপাদান নিবন্ধনের জন্য দায়ী একটি শীর্ষ-স্তরের শেয়ার্ড লাইব্রেরি সংজ্ঞায়িত করুন, তারপর একটি APEX প্যাকেজ তৈরি করুন (ট্রানজিটিভ নির্ভরতা সহ) যা ভেন্ডর পার্টিশনে থাকে। যখন বিক্রেতা কোডেক পরিষেবা প্রক্রিয়া শুরু হয়, তখন এটি এই শীর্ষ-স্তরের এন্ট্রি পয়েন্টটি লোড করতে পারে।

একটি এক্সট্র্যাক্টর তৈরি করুন

একটি নতুন ফর্ম্যাটের জন্য একটি এক্সট্র্যাক্টর যোগ করার সময়, নিশ্চিত করুন যে এক্সট্র্যাক্টর শুধুমাত্র স্থিতিশীল NDK API-এর উপর নির্ভর করে এবং কোনও ব্যক্তিগত API-এর উপর নির্ভর করে না। এক্সট্রাক্টরদের frameworks/av/include/media/MediaExtractorPluginApi.h দ্বারা সংজ্ঞায়িত API প্রয়োগ করা উচিত এবং frameworks/av/include/media/MediaExtractorPluginHelper.h এ C++ সুবিধার মোড়ক ব্যবহার করতে পারে। যেহেতু অ্যান্ড্রয়েড 10 বা উচ্চতর এক্সট্রাক্টর API-এর শুধুমাত্র সর্বোচ্চ সংস্করণ সমর্থন করে, তাই সর্বোচ্চ API সংস্করণ নম্বর সহ এক্সট্র্যাক্টরের পরে আপনার এক্সট্র্যাক্টর মডেল করতে ভুলবেন না।

/system/lib/64/extractors বা একটি ভেন্ডর APEX-এ কাস্টম এক্সট্র্যাক্টর রাখুন, যেটি Google APEX-এর সাথে Google Extractors ধারণ করে খোলা হয়। আপনার এক্সট্রাক্টর লোড করা ফ্রেমওয়ার্ক যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান।

adb shell dumpsys media.extractor

আপনি উপলব্ধ এক্সট্র্যাক্টরগুলির একটি তালিকা পাবেন যা নিম্নলিখিতগুলির মতো।

Available extractors:
AAC Extractor: plugin\_version(2), uuid(4fd80eae03d24d729eb948fa6bb54613), version(1), path(/system/lib64/extractors/libaacextractor.so)
AMR Extractor: plugin\_version(2), uuid(c86639c92f3140aca715fa01b4493aaf), version(1), path(/system/lib64/extractors/libamrextractor.so)
FLAC Extractor: plugin\_version(2), uuid(1364b048cc454fda9934327d0ebf9829), version(1), path(/system/lib64/extractors/libflacextractor.so)
MIDI Extractor: plugin\_version(2), uuid(ef6cca0af8a243e6ba5fdfcd7c9a7ef2), version(1), path(/system/lib64/extractors/libmidiextractor.so)
MP3 Extractor: plugin\_version(2), uuid(812a3f6cc8cf46deb5293774b14103d4), version(1), path(/system/lib64/extractors/libmp3extractor.so)
MP4 Extractor: plugin\_version(2), uuid(27575c6744174c548d3d8e626985a164), version(2), path(/system/lib64/extractors/libmp4extractor.so)
MPEG2-PS/TS Extractor: plugin\_version(1), uuid(3d1dcfebe40a436da574c2438a555e5f), version(1), path(/system/lib64/extractors/libmpeg2extractor.so)
Matroska Extractor: plugin\_version(2), uuid(abbedd9238c44904a4c1b3f45f899980), version(1), path(/system/lib64/extractors/libmkvextractor.so)
Ogg Extractor: plugin\_version(2), uuid(8cc5cd06f772495e8a62cba9649374e9), version(1), path(/system/lib64/extractors/liboggextractor.so)
WAV Extractor: plugin\_version(3), uuid(7d61385858374a3884c5332d1cddee27), version(1), path(/system/lib64/extractors/libwavextractor.so)

যদি আপনার কাস্টম এক্সট্র্যাক্টর এমন একটি ফর্ম্যাটকে সমর্থন করে যা ইতিমধ্যেই Google-প্রদত্ত এক্সট্র্যাক্টর দ্বারা সমর্থিত, আপনি Sniff() ফাংশন ব্যবহার করে Google-প্রদত্ত একের চেয়ে উচ্চতর আত্মবিশ্বাসের স্তর ফিরিয়ে আনতে ফ্রেমওয়ার্কটিকে আপনার এক্সট্র্যাক্টর ব্যবহার করতে বাধ্য করতে পারেন৷

যখন মিডিয়া ফ্রেমওয়ার্ক আপনার এক্সট্র্যাক্টর লোড করে ( /system/lib/64/extractors থেকে অথবা একটি ভেন্ডর APEX থেকে), এটি ফাইলটিকে চিনতে পারে এবং এর বিষয়বস্তু সম্পর্কে তথ্য পায়৷ পরবর্তী ধাপ হল বিন্যাসের জন্য একটি ডিকোডার যোগ করা যাতে ফ্রেমওয়ার্ক বুঝতে পারে কিভাবে ফাইলের বিষয়বস্তু পার্স করতে হয়।

একটি কাস্টম ডিকোডার তৈরি করুন

Google-প্রদত্ত ডিকোডার দ্বারা সমর্থিত নয় এমন যেকোনো বিন্যাসের জন্য আপনার একটি কাস্টম ডিকোডার প্রয়োজন৷ যেমন:

  • MP3 ধারণকারী AVI ফাইলগুলির জন্য মিডিয়া ফ্রেমওয়ার্ক সমর্থন যোগ করতে, আপনার একটি AVI এক্সট্র্যাক্টর প্রয়োজন কিন্তু একটি MP3 ডিকোডারের প্রয়োজন নেই কারণ একটি ইতিমধ্যেই বিদ্যমান।

  • উইন্ডোজ মিডিয়া ধারণকারী AVI ফাইলগুলির জন্য মিডিয়া ফ্রেমওয়ার্ক সমর্থন যোগ করতে, আপনার একটি AVI এক্সট্র্যাক্টর এবং একটি উইন্ডোজ মিডিয়া ডিকোডার উভয়ই প্রয়োজন।

একটি নতুন ডিকোডার যোগ করা AVC বা HEVC-এর জন্য আপনার নিজস্ব হার্ডওয়্যার ডিকোডার যোগ করার অনুরূপ।

এক্সট্র্যাক্টর এটিতে থাকা মিডিয়া ট্র্যাকগুলির MIME প্রকার প্রকাশ করার সময়, এই MIME প্রকারগুলিকে সমর্থন করে এমন কোডেকগুলি ফাইলটিকে সম্পূর্ণরূপে সমর্থন করার জন্য উপস্থিত থাকতে হবে৷ ব্যবহৃত প্রকৃত MIME প্রকারের স্ট্রিংটি এক্সট্রাক্টর এবং কোডেকের মধ্যে কঠোরভাবে একটি চুক্তি (স্ট্রিংটিকে MediaDefs.h ফাইলে যোগ করার প্রয়োজন নেই)।

মিডিয়া স্ক্যানারের সাথে একত্রিত করুন

মিডিয়া স্ক্যানার নতুন ফাইলের ধরন খোঁজে এবং সেগুলিকে মিডিয়া ডাটাবেসে যুক্ত করে। মিডিয়া স্ক্যানার আপনার কাস্টম ফাইল টাইপ পরিচালনা করতে, স্ক্যানারকে এটি সম্পর্কে জানতে হবে। Android 10 বা উচ্চতর সংস্করণে, MimeUtils ( libcore এ) MIME-টু-এক্সটেনশন ম্যাপিং বজায় রাখে। পূর্বে, এই ম্যাপিংটি MediaFile.java ফাইলে পরিচালনা করা হত, যেটিতে MIME প্রকার থেকে MTP বিন্যাস ধ্রুবক পর্যন্ত একটি ম্যাপিং থাকে।

একটি নিষ্কাশনকারী ফাইলের নাম এক্সটেনশনের একটি তালিকা রপ্তানি করতে পারে যা তারা সমর্থন করে (যেমন MP3 বা MP4)। যাইহোক, শুধুমাত্র LegacyMediaScanner এটি ব্যবহার করে; এটি ModernMediaScanner এ কোন প্রভাব ফেলে না, যা ডিফল্টরূপে ব্যবহৃত হয়।