Android 11 বা উচ্চতর সংস্করণের জন্য, আপনি A/V সামগ্রী সরবরাহ করতে Android Tuner ফ্রেমওয়ার্ক ব্যবহার করতে পারেন। ফ্রেমওয়ার্ক বিক্রেতাদের কাছ থেকে হার্ডওয়্যার পাইপলাইন ব্যবহার করে, এটিকে নিম্ন-এন্ড এবং উচ্চ-এন্ড SoC উভয়ের জন্য উপযুক্ত করে তোলে। ফ্রেমওয়ার্ক একটি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট (TEE) এবং সুরক্ষিত মিডিয়া পাথ (SMP) দ্বারা সুরক্ষিত A/V সামগ্রী সরবরাহ করার একটি নিরাপদ উপায় প্রদান করে, এটি একটি অত্যন্ত সীমাবদ্ধ, সামগ্রী সুরক্ষা পরিবেশে ব্যবহার করার অনুমতি দেয়।
টিউনার এবং অ্যান্ড্রয়েড সিএএস-এর মধ্যে প্রমিত ইন্টারফেসের ফলে টিউনার বিক্রেতা এবং সিএএস বিক্রেতাদের মধ্যে দ্রুত একীকরণ হয়। টিউনার ইন্টারফেস MediaCodec
এবং AudioTrack
সাথে কাজ করে অ্যান্ড্রয়েড টিভির জন্য এক বিশ্ব সমাধান তৈরি করতে। টিউনার ইন্টারফেস প্রধান সম্প্রচার মানগুলির উপর ভিত্তি করে ডিজিটাল টিভি এবং এনালগ টিভি উভয়কেই সমর্থন করে।
উপাদান
অ্যান্ড্রয়েড 11-এর জন্য, তিনটি উপাদান বিশেষভাবে টিভি প্ল্যাটফর্মের জন্য ডিজাইন করা হয়েছে।
- টিউনার HAL: ফ্রেমওয়ার্ক এবং বিক্রেতাদের মধ্যে একটি ইন্টারফেস
- টিউনার SDK API: ফ্রেমওয়ার্ক এবং অ্যাপের মধ্যে একটি ইন্টারফেস
- টিউনার রিসোর্স ম্যানেজার (টিআরএম): টিউনার এইচডব্লিউ রিসোর্স সমন্বয় করে
Android 11-এর জন্য, নিম্নলিখিত উপাদানগুলিকে উন্নত করা হয়েছে।
- CAS V2
-
TvInputService
বা টিভি ইনপুট সার্ভিস (TIS) -
TvInputManagerService
বা টিভি ইনপুট ম্যানেজার সার্ভিস (TIMS) -
MediaCodec
বা মিডিয়া কোডেক -
AudioTrack
বা অডিও ট্র্যাক -
MediaResourceManager
বা মিডিয়া রিসোর্স ম্যানেজার (MRM)
চিত্র 1. অ্যান্ড্রয়েড টিভি উপাদানগুলির মধ্যে মিথস্ক্রিয়া
বৈশিষ্ট্য
Frontend নীচের DTV মান সমর্থন করে।
- ATSC
- ATSC3
- ডিভিবি সি/এস/টি
- ISDB S/S3/T
- এনালগ
টিউনার HAL 1.1 বা উচ্চতর সহ Android 12-এর ফ্রন্টএন্ড নীচের DTV মানকে সমর্থন করে।
- ডিটিএমবি
Demux নীচের স্ট্রিম প্রোটোকল সমর্থন করে।
- পরিবহন প্রবাহ (TS)
- MPEG মিডিয়া ট্রান্সপোর্ট প্রোটোকল (MMTP)
- ইন্টারনেট প্রোটোকল (আইপি)
- প্রকার দৈর্ঘ্য মান (TLV)
- ATSC লিঙ্ক-লেয়ার প্রোটোকল (ALP)
Descrambler নীচের বিষয়বস্তু সুরক্ষা সমর্থন করে।
- নিরাপদ মিডিয়া পথ
- মিডিয়া পথ পরিষ্কার করুন
- স্থানীয় রেকর্ড সুরক্ষিত
- স্থানীয় প্লেব্যাক নিরাপদ
টিউনার APIগুলি নীচের ব্যবহারের ক্ষেত্রে সমর্থন করে।
- স্ক্যান করুন
- লাইভ
- প্লেব্যাক
- রেকর্ড
টিউনার, MediaCodec
এবং AudioTrack
নীচের ডেটা প্রবাহ মোডগুলিকে সমর্থন করে৷
- পরিষ্কার মেমরি বাফার সহ ES পেলোড
- নিরাপদ মেমরি হ্যান্ডেল সহ ES পেলোড
- পাসথ্রু
সামগ্রিক নকশা
টিউনার এইচএএল অ্যান্ড্রয়েড ফ্রেমওয়ার্ক এবং বিক্রেতার হার্ডওয়্যারের মধ্যে সংজ্ঞায়িত করা হয়েছে।
- ফ্রেমওয়ার্ক বিক্রেতার কাছ থেকে কী আশা করে এবং বিক্রেতা কীভাবে এটি করতে পারে তা বর্ণনা করে।
-
IFrontend
,IDemux
,IDescrambler
,IFilter
,IDvr
, এবংILnb
ইন্টারফেসের মাধ্যমে ফ্রন্টএন্ড, ডেমুক্স এবং ডেসক্র্যাম্বলারের কার্যকারিতাগুলি ফ্রেমওয়ার্কে রপ্তানি করে৷ -
MediaCodec
এবংAudioTrack
মতো অন্যান্য ফ্রেমওয়ার্ক উপাদানগুলির সাথে টিউনার HAL-কে সংহত করার ফাংশনগুলি অন্তর্ভুক্ত করে৷
একটি টিউনার জাভা ক্লাস এবং নেটিভ ক্লাস তৈরি করা হয়।
- টিউনার জাভা API অ্যাপগুলিকে পাবলিক API-এর মাধ্যমে টিউনার এইচএএল অ্যাক্সেস করতে দেয়।
- নেটিভ ক্লাস টিউনার এইচএএল-এর সাথে প্রচুর পরিমাণে রেকর্ডিং বা প্লেব্যাক ডেটার অনুমতি নিয়ন্ত্রণ এবং পরিচালনার অনুমতি দেয়।
- নেটিভ টিউনার মডিউল হল টিউনার জাভা ক্লাস এবং টিউনার এইচএএল-এর মধ্যে একটি সেতু।
একটি টিআরএম ক্লাস তৈরি করা হয়েছে।
- সীমিত টিউনার সংস্থান পরিচালনা করে, যেমন ফ্রন্টেন্ড, এলএনবি, সিএএস সেশন এবং টিভি ইনপুট HAL থেকে একটি টিভি ইনপুট ডিভাইস।
- অ্যাপগুলি থেকে অপর্যাপ্ত সম্পদ পুনরুদ্ধার করার জন্য নিয়ম প্রয়োগ করে। ডিফল্ট নিয়ম হল ফোরগ্রাউন্ড জয়।
মিডিয়া CAS এবং CAS HAL নীচের বৈশিষ্ট্যগুলির সাথে উন্নত করা হয়েছে৷
- বিভিন্ন ব্যবহার এবং অ্যালগরিদমের জন্য CAS সেশন খোলে।
- গতিশীল CAS সিস্টেম সমর্থন করে, যেমন CICAM অপসারণ এবং সন্নিবেশ।
- কী টোকেন প্রদান করে টিউনার HAL-এর সাথে একীভূত হয়।
MediaCodec
এবং AudioTrack
নীচের বৈশিষ্ট্যগুলির সাথে উন্নত করা হয়েছে৷
- কন্টেন্ট ইনপুট হিসাবে নিরাপদ A/V মেমরি নেয়।
- টানেল প্লেব্যাকে হার্ডওয়্যার A/V সিঙ্ক করতে কনফিগার করা হয়েছে।
-
ES_payload
এবং পাসথ্রু মোডের জন্য কনফিগার করা সমর্থন।
চিত্র 2. টিউনার HAL-এর মধ্যে উপাদানগুলির চিত্র
সামগ্রিক কর্মপ্রবাহ
নীচের চিত্রগুলি সরাসরি সম্প্রচার প্লেব্যাকের জন্য কল ক্রমগুলিকে চিত্রিত করে৷
সেটআপ
চিত্র 3. লাইভ সম্প্রচার প্লেব্যাকের জন্য সেটআপ ক্রম
A/V হ্যান্ডলিং
চিত্র 4. সরাসরি সম্প্রচার প্লেব্যাকের জন্য A/V হ্যান্ডলিং
স্ক্র্যাম্বল কন্টেন্ট হ্যান্ডলিং
চিত্র 5. লাইভ সম্প্রচার প্লেব্যাকের জন্য স্ক্র্যাম্বল করা বিষয়বস্তু পরিচালনা করা
A/V ডেটা প্রসেস করা হচ্ছে
চিত্র 6. লাইভ সম্প্রচার প্লেব্যাকের জন্য A/V প্রক্রিয়াকরণ
টিউনার SDK API
Tuner SDK API টিউনার JNI, Tuner HAL, এবং TunerResourceManager
সাথে মিথস্ক্রিয়া পরিচালনা করে। টিআইএস অ্যাপ টিউনার রিসোর্স এবং ফিল্টার এবং ডেসক্র্যাম্বলারের মতো সাবকম্পোনেন্ট অ্যাক্সেস করতে Tuner SDK API ব্যবহার করে। ফ্রন্টএন্ড এবং ডেমুক্স হল অভ্যন্তরীণ উপাদান।
চিত্র 7. টিউনার SDK API-এর সাথে মিথস্ক্রিয়া
সংস্করণ
অ্যান্ড্রয়েড 12 থেকে, টিউনার SDK API টিউনার HAL 1.1-এ নতুন বৈশিষ্ট্য সমর্থন করে, যা টিউনার 1.0-এর একটি পশ্চাদগামী-সামঞ্জস্যপূর্ণ সংস্করণ আপগ্রেড।
চলমান HAL সংস্করণ পরীক্ষা করতে নিম্নলিখিত API ব্যবহার করুন।
-
android.media.tv.tuner.TunerVersionChecker.getTunerVersion()
ন্যূনতম প্রয়োজনীয় HAL সংস্করণটি নতুন Android 12 API-এর ডকুমেন্টেশনে পাওয়া যাবে।
প্যাকেজ
টিউনার SDK API নিচের চারটি প্যাকেজ প্রদান করে।
-
android.media.tv.tuner
-
android.media.tv.tuner.frontend
-
android.media.tv.tuner.filter
-
android.media.tv.tuner.dvr
চিত্র 8. টিউনার SDK API প্যাকেজ
Android.media.tv.tuner
টিউনার প্যাকেজ টিউনার ফ্রেমওয়ার্ক ব্যবহার করার জন্য একটি এন্ট্রি পয়েন্ট। টিআইএস অ্যাপটি প্রাথমিক সেটিং এবং কলব্যাক নির্দিষ্ট করে রিসোর্স ইনস্ট্যান্স শুরু করতে এবং অর্জন করতে প্যাকেজটি ব্যবহার করে।
-
tuner()
:useCase
এবংsessionId
প্যারামিটার উল্লেখ করে একটি টিউনার ইনস্ট্যান্স শুরু করে। -
tune()
:FrontendSetting
প্যারামিটার নির্দিষ্ট করে একটি ফ্রন্টএন্ড রিসোর্স এবং টিউন অর্জন করে। -
openFilter()
: ফিল্টার টাইপ নির্দিষ্ট করে একটি ফিল্টার ইনস্ট্যান্স অর্জন করে। -
openDvrRecorder()
: বাফার আকার নির্দিষ্ট করে একটি রেকর্ডিং উদাহরণ অর্জন করে। -
openDvrPlayback()
: বাফার আকার নির্দিষ্ট করে একটি প্লেব্যাক উদাহরণ অর্জন করে। -
openDescrambler()
: একটি descrambler উদাহরণ অর্জন করে। -
openLnb()
: একটি অভ্যন্তরীণ LNB উদাহরণ অর্জন করে। -
openLnbByName()
: একটি বাহ্যিক LNB উদাহরণ অর্জন করে। -
openTimeFilter()
: একটি সময় ফিল্টার উদাহরণ অর্জন করে।
টিউনার প্যাকেজ এমন কার্যকারিতা প্রদান করে যা ফিল্টার, ডিভিআর এবং ফ্রন্টএন্ড প্যাকেজের অধীনে নেই। কার্যকারিতা নীচে তালিকাভুক্ত করা হয়.
-
cancelTuning
-
scan
/cancelScanning
-
getAvSyncHwId
-
getAvSyncTime
-
connectCiCam1
/disconnectCiCam
-
shareFrontendFromTuner
-
updateResourcePriority
-
setOnTuneEventListener
-
setResourceLostListener
Android.media.tv.tuner.frontend
ফ্রন্টএন্ড প্যাকেজ ফ্রন্টএন্ড-সম্পর্কিত সেটিংস, তথ্য, স্ট্যাটাস, ইভেন্ট এবং ক্ষমতার সংগ্রহ অন্তর্ভুক্ত করে।
ক্লাস
FrontendSettings
নিচের শ্রেণী দ্বারা বিভিন্ন DTV মানগুলির জন্য উদ্ভূত হয়েছে।
-
AnalogFrontendSettings
-
Atsc3FrontendSettings
-
AtscFrontendSettings
-
DvbcFrontendSettings
-
DvbsFrontendSettings
-
DvbtFrontendSettings
-
Isdbs3FrontendSettings
-
IsdbsFrontendSettings
-
IsdbtFrontendSettings
Android 12 থেকে Tuner HAL 1.1 বা উচ্চতর, নিম্নলিখিত DTV মান সমর্থিত।
-
DtmbFrontendSettings
FrontendCapabilities
নীচের শ্রেণীগুলির দ্বারা বিভিন্ন DTV মানগুলির জন্য উদ্ভূত হয়েছে৷
-
AnalogFrontendCapabilities
-
Atsc3FrontendCapabilities
-
AtscFrontendCapabilities
-
DvbcFrontendCapabilities
-
DvbsFrontendCapabilities
-
DvbtFrontendCapabilities
-
Isdbs3FrontendCapabilities
-
IsdbsFrontendCapabilities
-
IsdbtFrontendCapabilities
Android 12 থেকে Tuner HAL 1.1 বা উচ্চতর, নিম্নলিখিত DTV মান সমর্থিত।
-
DtmbFrontendCapabilities
FrontendInfo
ফ্রন্টএন্ডের তথ্য পুনরুদ্ধার করে। FrontendStatus
ফ্রন্টএন্ডের বর্তমান অবস্থা পুনরুদ্ধার করে। OnTuneEventListener
ফ্রন্টএন্ডে ইভেন্ট শোনে। TIS অ্যাপ ফ্রন্টএন্ড থেকে স্ক্যান বার্তাগুলি প্রক্রিয়া করতে ScanCallback
ব্যবহার করে।
চ্যানেল স্ক্যান
একটি টিভি সেট আপ করতে, অ্যাপটি সম্ভাব্য ফ্রিকোয়েন্সি স্ক্যান করে এবং ব্যবহারকারীদের অ্যাক্সেসের জন্য একটি চ্যানেল লাইন আপ তৈরি করে। চ্যানেল স্ক্যানিং সম্পূর্ণ করতে TIS Tuner.tune
, Tuner.scan(BLIND_SCAN)
বা Tuner.scan(AUTO_SCAN)
ব্যবহার করতে পারে।
যদি TIS-এর কাছে সিগন্যালের জন্য সঠিক ডেলিভারি তথ্য থাকে, যেমন ফ্রিকোয়েন্সি, স্ট্যান্ডার্ড (উদাহরণস্বরূপ, T/T2, S/S2), এবং অতিরিক্ত প্রয়োজনীয় তথ্য (উদাহরণস্বরূপ, PLD ID), তাহলে Tuner.tune
দ্রুত বিকল্প হিসাবে সুপারিশ করা হয় .
ব্যবহারকারী Tuner.tune
কল করলে, নিম্নলিখিত ক্রিয়াগুলি ঘটবে:
- টিআইএস
Tuner.tune
ব্যবহার করে প্রয়োজনীয় তথ্য দিয়েFrontendSettings
পপুলেট করে। - সংকেত লক করা থাকলে HAL টিউন
LOCKED
মেসেজ রিপোর্ট করে। - TIS প্রয়োজনীয় তথ্য সংগ্রহ করতে
Frontend.getStatus
ব্যবহার করে। - TIS তার ফ্রিকোয়েন্সি তালিকার পরবর্তী উপলব্ধ ফ্রিকোয়েন্সিতে চলে যায়।
সমস্ত ফ্রিকোয়েন্সি শেষ না হওয়া পর্যন্ত TIS আবার Tuner.tune
কল করে।
টিউনিংয়ের সময়, আপনি Tuner.tune
কল থামাতে বা শেষ করতে stopTune()
বা close()
কল করতে পারেন।
Tuner.scan(AUTO_SCAN)
টিআইএস-এর কাছে Tuner.tune
ব্যবহার করার জন্য পর্যাপ্ত তথ্য না থাকলে, কিন্তু একটি ফ্রিকোয়েন্সি তালিকা এবং স্ট্যান্ডার্ড টাইপ (উদাহরণস্বরূপ, DVB T/C/S), তাহলে Tuner.scan(AUTO_SCAN)
সুপারিশ করা হয়।
যখন ব্যবহারকারী Tuner.scan(AUTO_SCAN)
কল করে, নিম্নলিখিত ক্রিয়াগুলি ঘটে:
TIS
Tuner.scan(AUTO_SCAN)
ব্যবহার করেFrontendSettings
ফ্রিকোয়েন্সিতে ভরা।HAL রিপোর্ট
LOCKED
মেসেজ স্ক্যান করে যদি সিগন্যাল লক থাকে। সংকেত সম্পর্কে অতিরিক্ত তথ্য প্রদানের জন্য HAL অন্যান্য স্ক্যান বার্তারও রিপোর্ট করতে পারে।TIS প্রয়োজনীয় তথ্য সংগ্রহ করতে
Frontend.getStatus
ব্যবহার করে।TIS একই ফ্রিকোয়েন্সিতে পরবর্তী সেটিং চালিয়ে যাওয়ার জন্য HAL-এর জন্য
Tuner.scan
কল করে।FrontendSettings
কাঠামো খালি থাকলে, HAL পরবর্তী উপলব্ধ সেটিং ব্যবহার করে। অন্যথায়, HAL একবারের স্ক্যানের জন্যFrontendSettings
ব্যবহার করে এবং স্ক্যান অপারেশন শেষ হয়েছে তা নির্দেশ করার জন্যEND
পাঠায়।ফ্রিকোয়েন্সির সমস্ত সেটিংস শেষ না হওয়া পর্যন্ত TIS উপরের ক্রিয়াগুলি পুনরাবৃত্তি করে৷
স্ক্যান অপারেশন শেষ হয়েছে তা নির্দেশ করার জন্য HAL
END
পাঠায়।TIS তার ফ্রিকোয়েন্সি তালিকার পরবর্তী উপলব্ধ ফ্রিকোয়েন্সিতে চলে যায়।
সমস্ত ফ্রিকোয়েন্সি শেষ না হওয়া পর্যন্ত TIS আবার Tuner.scan(AUTO_SCAN)
কল করে।
স্ক্যান করার সময়, আপনি স্ক্যানটি থামাতে বা শেষ করতে stopScan()
বা close()
কল করতে পারেন।
Tuner.scan(BLIND_SCAN)
যদি TIS-এর ফ্রিকোয়েন্সি তালিকা না থাকে এবং ফ্রন্টএন্ড রিসোর্স পেতে ভেন্ডর HAL ব্যবহারকারী-নির্দিষ্ট ফ্রন্টএন্ডের ফ্রিকোয়েন্সি অনুসন্ধান করতে পারে, তাহলে Tuner.scan(BLIND_SCAN)
সুপারিশ করা হয়।
- TIS
Tuner.scan(BLIND_SCAN)
ব্যবহার করে। স্টার্ট ফ্রিকোয়েন্সির জন্যFrontendSettings
এ একটি ফ্রিকোয়েন্সি নির্দিষ্ট করা যেতে পারে, কিন্তু TISFrontendSettings
এ অন্যান্য সেটিংস উপেক্ষা করে। - সিগন্যাল লক করা থাকলে HAL একটি স্ক্যান
LOCKED
মেসেজ রিপোর্ট করে। - TIS প্রয়োজনীয় তথ্য সংগ্রহ করতে
Frontend.getStatus
ব্যবহার করে। - TIS স্ক্যানিং চালিয়ে যেতে
Tuner.scan
আবার কল করে। (FrontendSettings
উপেক্ষা করা হয়।) - ফ্রিকোয়েন্সির সমস্ত সেটিংস শেষ না হওয়া পর্যন্ত TIS উপরের ক্রিয়াগুলি পুনরাবৃত্তি করে৷ TIS থেকে কোন কাজ করার প্রয়োজন ছাড়াই HAL ফ্রিকোয়েন্সি বৃদ্ধি করে। এইচএএল
PROGRESS
প্রতিবেদন করেছে।
সমস্ত ফ্রিকোয়েন্সি শেষ না হওয়া পর্যন্ত TIS আবার Tuner.scan(AUTO_SCAN)
কল করে। HAL রিপোর্ট করে END
স্ক্যান অপারেশন শেষ হয়েছে।
স্ক্যান করার সময়, আপনি স্ক্যানটি থামাতে বা শেষ করতে stopScan()
বা close()
কল করতে পারেন।
চিত্র 9. একটি TIS স্ক্যানের ফ্লো ডায়াগ্রাম
Android.media.tv.tuner.filter
ফিল্টার প্যাকেজ হল কনফিগারেশন, সেটিংস, কলব্যাক এবং ইভেন্ট সহ ফিল্টার অপারেশনের একটি সংগ্রহ। প্যাকেজ নীচের অপারেশন অন্তর্ভুক্ত. অপারেশনের সম্পূর্ণ তালিকার জন্য অ্যান্ড্রয়েড সোর্স কোড পড়ুন।
-
configure()
-
start()
-
stop()
-
flush()
-
read()
সম্পূর্ণ তালিকার জন্য অ্যান্ড্রয়েড সোর্স কোড পড়ুন।
FilterConfiguration
নীচের ক্লাস থেকে উদ্ভূত হয়. কনফিগারেশনগুলি প্রধান ফিল্টার প্রকারের জন্য এবং তারা নির্দিষ্ট করে যে ফিল্টারটি ডেটা বের করতে কোন প্রোটোকল ব্যবহার করে।
-
AlpFilterConfiguration
-
IpFilterConfiguration
-
MmtpFilterConfiguration
-
TlvFilterConfiguration
-
TsFilterConfiguration
সেটিংস নীচের ক্লাস থেকে প্রাপ্ত করা হয়. সেটিংস ফিল্টার সাব-টাইপের জন্য এবং তারা নির্দিষ্ট করে যে ফিল্টারটি কী ধরনের ডেটা বাদ দিতে পারে।
-
SectionSettings
-
AvSettings
-
PesSettings
-
RecordSettings
-
DownloadSettings
FilterEvent
বিভিন্ন ধরণের ডেটার জন্য ইভেন্ট রিপোর্ট করতে নীচের ক্লাসগুলি থেকে প্রাপ্ত।
-
SectionEvent
-
MediaEvent
-
PesEvent
-
TsRecordEvent
-
MmtpRecordEvent
-
TemiEvent
-
DownloadEvent
-
IpPayloadEvent
টিউনার HAL 1.1 বা উচ্চতর সহ Android 12 থেকে, নিম্নলিখিত ইভেন্টগুলি সমর্থিত।
-
IpCidChangeEvent
-
RestartEvent
-
ScramblingStatusEvent
ফিল্টার থেকে ইভেন্ট এবং ডেটা ফরম্যাট
ফিল্টার প্রকার | পতাকা | ঘটনা | ডেটা অপারেশন | ডেটা বিন্যাস |
---|---|---|---|---|
TS.SECTION MMTP.SECTION IP.SECTION TLV.SECTION ALP.SECTION | isRaw: | বাধ্যতামূলক:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW প্রস্তাবিত: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | ঘটনা এবং অভ্যন্তরীণ সময়সূচী অনুযায়ী, রানFilter.read(buffer, offset, adjustedSize) এক বা একাধিক বার।HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | একটি একত্রিত সেশন প্যাকেজ অন্য সেশন প্যাকেজ দ্বারা FMQ তে পূরণ করা হয়। |
isRaw: | বাধ্যতামূলক:DemuxFilterEvent::DemuxFilterSectionEvent[n] DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW ঐচ্ছিক: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | for i=0; i<n; i++ HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | ||
TS.PES | isRaw: | বাধ্যতামূলক:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW প্রস্তাবিত: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | ঘটনা এবং অভ্যন্তরীণ সময়সূচী অনুযায়ী, রানFilter.read(buffer, offset, adjustedSize) এক বা একাধিক বার।HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | একটি একত্রিত PES প্যাকেজ FMQ-এ অন্য PES প্যাকেজ দ্বারা পূরণ করা হয়। |
isRaw: | বাধ্যতামূলক:DemuxFilterEvent::DemuxFilterPesEvent[n] DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW ঐচ্ছিক: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | for i=0; i<n; i++ HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | ||
MMTP.PES | isRaw: | বাধ্যতামূলক:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW প্রস্তাবিত: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | ঘটনা এবং অভ্যন্তরীণ সময়সূচী অনুযায়ী, রানFilter.read(buffer, offset, adjustedSize) এক বা একাধিক বার।HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | একটি একত্রিত MFU প্যাকেজ FMQ-তে অন্য MFU প্যাকেজ দ্বারা পূরণ করা হয়। |
isRaw: | বাধ্যতামূলক:DemuxFilterEvent::DemuxFilterPesEvent[n] DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW ঐচ্ছিক: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | for i=0; i<n; i++ HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | ||
TS.TS | N/A | বাধ্যতামূলক:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW প্রস্তাবিত: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | ঘটনা এবং অভ্যন্তরীণ সময়সূচী অনুযায়ী, রানFilter.read(buffer, offset, adjustedSize) এক বা একাধিক বার।HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | ts হেডার দিয়ে ts ফিল্টার করা হয়েছেFMQ তে ভরা হয়। |
TS.Audio TS.Video MMTP.Audio MMTP.Video | isPassthrough: | ঐচ্ছিক:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW | DemuxFilterStatus::DATA_READY পাওয়ার পর ক্লায়েন্ট MediaCodec শুরু করতে পারে।DemuxFilterStatus::DATA_OVERFLOW পাওয়ার পর ক্লায়েন্ট Filter.flush কল করতে পারে। | N/A |
isPassthrough: | বাধ্যতামূলক:DemuxFilterEvent::DemuxFilterMediaEvent[n] DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW ঐচ্ছিক: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | MediaCodec ব্যবহার করতে:for i=0; i<n; i++ AudioTrack সরাসরি অডিও ব্যবহার করতে:for i=0; i<n; i++ | ION মেমরিতে ES বা আংশিক ES ডেটা। | |
TS.PCR IP.NTP ALP.PTP | N/A | বাধ্যতামূলক: N/A ঐচ্ছিক: N/A | N/A | N/A |
TS.RECORD | N/A | বাধ্যতামূলক:DemuxFilterEvent::DemuxFilterTsRecordEvent[n] RecordStatus::DATA_READY RecordStatus::DATA_OVERFLOW RecordStatus::LOW_WATER RecordStatus::HIGH_WATER ঐচ্ছিক: DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | সূচক ডেটার জন্য:for i=0; i<n; i++ রেকর্ড করা বিষয়বস্তুর জন্য , RecordStatus::* এবং অভ্যন্তরীণ সময়সূচী অনুসারে, নিম্নলিখিতগুলির মধ্যে একটি করুন:
| সূচক ডেটার জন্য: ইভেন্ট পেলোডে বহন করা হয়। রেকর্ড করা বিষয়বস্তুর জন্য: মিক্সড টিএস স্ট্রিম এফএমকিউ-তে ভরা। |
TS.TEMI | N/A | বাধ্যতামূলক:DemuxFilterEvent::DemuxFilterTemiEvent[n] ঐচ্ছিক: DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | for i=0; i<n; i++ | N/A |
MMTP.MMTP | N/A | বাধ্যতামূলক:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW প্রস্তাবিত: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | ঘটনা এবং অভ্যন্তরীণ সময়সূচী অনুযায়ী, রানFilter.read(buffer, offset, adjustedSize) এক বা একাধিক বার।HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | mmtp হেডার সহ mmtp ফিল্টার করা হয়েছেFMQ তে ভরা হয়। |
MMTP.RECORD | N/A | বাধ্যতামূলক:DemuxFilterEvent::DemuxFilterMmtpRecordEvent[n] RecordStatus::DATA_READY RecordStatus::DATA_OVERFLOW RecordStatus::LOW_WATER RecordStatus::HIGH_WATER ঐচ্ছিক: DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | সূচক ডেটার জন্য: for i=0; i<n; i++ রেকর্ড করা বিষয়বস্তুর জন্য , RecordStatus::* এবং অভ্যন্তরীণ সময়সূচী অনুসারে, নিম্নলিখিতগুলির মধ্যে একটি করুন:
| সূচক ডেটার জন্য: ইভেন্ট পেলোডে বহন করা হয়। রেকর্ড করা বিষয়বস্তুর জন্য: মিক্সড রেকর্ড করা স্ট্রীম FMQ-তে ভরা। যদি রেকর্ডিংয়ের জন্য ফিল্টার উত্সটি পাসথ্রু সহ TLV.TLV থেকে IP.IP হয় তবে রেকর্ড করা স্ট্রীমে একটি TLV এবং IP শিরোনাম রয়েছে৷ |
MMTP.DOWNLOAD | N/A | বাধ্যতামূলক:DemuxFilterEvent::DemuxFilterDownloadEvent[n] DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW ঐচ্ছিক: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | for i=0; i<n; i++ Filter.read(buffer, offset, DemuxFilterDownloadEvent[i].size) HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | ডাউনলোড প্যাকেজ এফএমকিউতে অন্য একটি আইপি ডাউনলোড প্যাকেজ দ্বারা পূরণ করা হয়। |
IP.IP_PAYLOAD | N/A | বাধ্যতামূলক:DemuxFilterEvent::DemuxFilterIpPayloadEvent[n] DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW ঐচ্ছিক: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | for i=0; i<n; i++ Filter.read(buffer, offset, DemuxFilterIpPayloadEvent[i].size) HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | IP পেলোড প্যাকেজ FMQ-তে অন্য IP পেলোড প্যাকেজ দ্বারা পূরণ করা হয়। |
IP.IP TLV.TLV ALP.ALP | isPassthrough: | ঐচ্ছিক:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW | ফিল্টার করা প্রোটোকল সাব স্ট্রীম ফিল্টার চেইনের পরবর্তী ফিল্টারকে ফিড করে। | N/A |
isPassthrough: | বাধ্যতামূলক:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW প্রস্তাবিত: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER | ঘটনা এবং অভ্যন্তরীণ সময়সূচী অনুযায়ী, রানFilter.read(buffer, offset, adjustedSize) এক বা একাধিক বার।HAL এর MQ থেকে ক্লায়েন্ট বাফারে ডেটা কপি করা হয়। | প্রোটোকল শিরোনাম সহ ফিল্টার করা প্রোটোকল সাব স্ট্রীম FMQ এ পূর্ণ হয়। | |
IP.PAYLOAD_THROUGH TLV.PAYLOAD_THROUGH ALP.PAYLOAD_THROUGH | N/A | ঐচ্ছিক:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW | ফিল্টার করা প্রোটোকল পেলোড ফিল্টার চেইনের পরবর্তী ফিল্টারকে ফিড করে। | N/A |
PSI/SI তৈরি করতে ফিল্টার ব্যবহার করার উদাহরণ প্রবাহ
চিত্র 10. PSI/SI নির্মাণের জন্য প্রবাহ
একটি ফিল্টার খুলুন।
Filter filter = tuner.openFilter( Filter.TYPE_TS, Filter.SUBTYPE_SECTION, /* bufferSize */1000, executor, filterCallback );
কনফিগার করুন এবং ফিল্টার শুরু করুন।
Settings settings = SectionSettingsWithTableInfo .builder(Filter.TYPE_TS) .setTableId(2) .setVersion(1) .setCrcEnabled(true) .setRaw(false) .setRepeat(false) .build(); FilterConfiguration config = TsFilterConfiguration .builder() .setTpid(10) .setSettings(settings) .build(); filter.configure(config); filter.start();
প্রক্রিয়া
SectionEvent
।FilterCallback filterCallback = new FilterCallback() { @Override public void onFilterEvent(Filter filter, FilterEvent[] events) { for (FilterEvent event : events) { if (event instanceof SectionEvent) { SectionEvent sectionEvent = (SectionEvent) event; int tableId = sectionEvent.getTableId(); int version = sectionEvent.getVersion(); int dataLength = sectionEvent.getDataLength(); int sectionNumber = sectionEvent.getSectionNumber(); filter.read(buffer, 0, dataLength); } } } };
ফিল্টার থেকে MediaEvent ব্যবহার করার উদাহরণ প্রবাহ
চিত্র 11. ফিল্টার থেকে মিডিয়া ইভেন্ট ব্যবহার করার জন্য প্রবাহ
- A/V ফিল্টার খুলুন, কনফিগার করুন এবং শুরু করুন।
-
MediaEvent
প্রক্রিয়া করুন। -
MediaEvent
গ্রহণ করুন। - রৈখিক ব্লককে
codec
সারিবদ্ধ করুন। - ডেটা খরচ হয়ে গেলে A/V হ্যান্ডেলটি ছেড়ে দিন।
Android.media.tv.tuner.dvr
DvrRecorder
রেকর্ডিংয়ের জন্য এই পদ্ধতিগুলি প্রদান করে।
-
configure
-
attachFilter
-
detachFilter
-
start
-
flush
-
stop
-
setFileDescriptor
-
write
DvrPlayback
প্লেব্যাকের জন্য এই পদ্ধতিগুলি প্রদান করে।
-
configure
-
start
-
flush
-
stop
-
setFileDescriptor
-
read
DvrSettings
DvrRecorder
এবং DvrPlayback
কনফিগার করতে ব্যবহৃত হয়। OnPlaybackStatusChangedListener
এবং OnRecordStatusChangedListener
একটি DVR উদাহরণের অবস্থা রিপোর্ট করতে ব্যবহার করা হয়।
একটি রেকর্ড শুরু করার জন্য উদাহরণ প্রবাহ
চিত্র 12. একটি রেকর্ড শুরু করার জন্য প্রবাহ
DvrRecorder
খুলুন, কনফিগার করুন এবং শুরু করুন।DvrRecorder recorder = openDvrRecorder(/* bufferSize */ 1000, executor, listener); DvrSettings dvrSettings = DvrSettings .builder() .setDataFormat(DvrSettings.DATA_FORMAT_TS) .setLowThreshold(100) .setHighThreshold(900) .setPacketSize(188) .build(); recorder.configure(dvrSettings); recorder.attachFilter(filter); recorder.setFileDescriptor(fd); recorder.start();
RecordEvent
গ্রহণ করুন এবং সূচক তথ্য পুনরুদ্ধার করুন.FilterCallback filterCallback = new FilterCallback() { @Override public void onFilterEvent(Filter filter, FilterEvent[] events) { for (FilterEvent event : events) { if (event instanceof TsRecordEvent) { TsRecordEvent recordEvent = (TsRecordEvent) event; int tsMask = recordEvent.getTsIndexMask(); int scMask = recordEvent.getScIndexMask(); int packetId = recordEvent.getPacketId(); long dataLength = recordEvent.getDataLength(); // handle the masks etc. } } } };
OnRecordStatusChangedListener
আরম্ভ করুন এবং রেকর্ড ডেটা সংরক্ষণ করুন।OnRecordStatusChangedListener listener = new OnRecordStatusChangedListener() { @Override public void onRecordStatusChanged(int status) { // a customized way to consume data efficiently by using status as a hint. if (status == Filter.STATUS_DATA_READY) { recorder.write(size); } } };
টিউনার এইচএএল
টিউনার HAL HIDL অনুসরণ করে এবং ফ্রেমওয়ার্ক এবং বিক্রেতা হার্ডওয়্যারের মধ্যে ইন্টারফেস সংজ্ঞায়িত করে। বিক্রেতারা টিউনার এইচএএল বাস্তবায়নের জন্য ইন্টারফেস ব্যবহার করে এবং ফ্রেমওয়ার্ক টিউনার এইচএএল বাস্তবায়নের সাথে যোগাযোগ করতে এটি ব্যবহার করে।
মডিউল
টিউনার HAL 1.0
মডিউল | মৌলিক নিয়ন্ত্রণ | মডিউল-নির্দিষ্ট নিয়ন্ত্রণ | HAL ফাইল |
---|---|---|---|
ITuner | N/A | frontend(open, getIds, getInfo) , openDemux , openDescrambler , openLnb , getDemuxCaps | ITuner.hal |
IFrontend | setCallback , getStatus , close | tune , stopTune , scan , stopScan , setLnb | IFrontend.hal IFrontendCallback.hal |
IDemux | close | setFrontendDataSource , openFilter , openDvr , getAvSyncHwId , getAvSyncTime , connect / disconnectCiCam | IDemux.hal |
IDvr | close , start , stop , configure | attach/detachFilters , flush , getQueueDesc | IDvr.hal IDvrCallback.hal |
IFilter | close , start , stop , configure , getId | flush , getQueueDesc , releaseAvHandle , setDataSource | IFilter.hal IFilterCallback.hal |
ILnb | close , setCallback | setVoltage , setTone , setSatellitePosition , sendDiseqcMessage | ILnb.hal ILnbCallback.hal |
IDescrambler | close | setDemuxSource , setKeyToken , addPid , removePid | IDescrambler.hal |
টিউনার HAL 1.1 (টিউনার HAL 1.0 থেকে প্রাপ্ত)
মডিউল | মৌলিক নিয়ন্ত্রণ | মডিউল-নির্দিষ্ট নিয়ন্ত্রণ | HAL ফাইল |
---|---|---|---|
ITuner | N/A | getFrontendDtmbCapabilities | @1.1::ITuner.hal |
IFrontend | tune_1_1 , scan_1_1 , getStatusExt1_1 | link/unlinkCiCam | @1.1::IFrontend.hal @1.1::IFrontendCallback.hal |
IFilter | getStatusExt1_1 | configureIpCid , configureAvStreamType , getAvSharedHandle , configureMonitorEvent | @1.1::IFilter.hal @1.1::IFilterCallback.hal |
চিত্র 13. টিউনার HAL মডিউলগুলির মধ্যে মিথস্ক্রিয়াগুলির চিত্র
ফিল্টার লিঙ্কেজ
টিউনার এইচএএল ফিল্টার লিঙ্কেজকে সমর্থন করে যাতে ফিল্টারগুলি একাধিক স্তরের জন্য অন্যান্য ফিল্টারের সাথে লিঙ্ক করা যায়। ফিল্টার নীচের নিয়ম অনুসরণ করে.
- ফিল্টার একটি গাছ হিসাবে লিঙ্ক করা হয়, বন্ধ পথ অনুমোদিত নয়.
- রুট নোড হল demux.
- ফিল্টার স্বাধীনভাবে কাজ করে।
- সমস্ত ফিল্টার ডেটা পেতে শুরু করে।
- ফিল্টার লিঙ্কেজ শেষ ফিল্টার উপর ফ্লাশ.
নীচের কোড ব্লক এবং চিত্র 14 একাধিক স্তর ফিল্টার করার একটি উদাহরণ চিত্রিত করে।
demuxCaps = ITuner.getDemuxCap;
If (demuxCaps[IP][MMTP] == true) {
ipFilter = ITuner.openFilter(<IP, ..>)
mmtpFilter1 = ITuner.openFilter(<MMTP ..>)
mmtpFilter2 = ITuner.openFilter(<MMTP ..>)
mmtpFilter1.setDataSource(<ipFilter>)
mmtpFilter2.setDataSource(<ipFilter>)
}
চিত্র 14. একাধিক স্তরের জন্য একটি ফিল্টার সংযোগের ফ্লো ডায়াগ্রাম
টিউনার রিসোর্স ম্যানেজার
টিউনার রিসোর্স ম্যানেজার (টিআরএম) এর আগে, দুটি অ্যাপের মধ্যে স্যুইচ করার জন্য একই টিউনার হার্ডওয়্যার প্রয়োজন। টিভি ইনপুট ফ্রেমওয়ার্ক (TIF) একটি "ফার্স্ট-টু-অ্যাকোয়ার উইন" মেকানিজম ব্যবহার করেছে, যার অর্থ যে অ্যাপটি প্রথমে রিসোর্স পায় সেটি রিসোর্স রাখে। যাইহোক, কিছু জটিল ব্যবহারের ক্ষেত্রে এই প্রক্রিয়াটি আদর্শ নাও হতে পারে।
অ্যাপগুলির জন্য টিউনার, TVInput
এবং CAS হার্ডওয়্যার সংস্থানগুলি পরিচালনা করতে TRM একটি সিস্টেম পরিষেবা হিসাবে চলে৷ TRM একটি "ফোরগ্রাউন্ড উইন" মেকানিজম ব্যবহার করে, যা অ্যাপের অগ্রভাগ বা ব্যাকগ্রাউন্ড স্ট্যাটাস এবং ব্যবহারের কেস টাইপের উপর ভিত্তি করে অ্যাপের অগ্রাধিকার গণনা করে। TRM অগ্রাধিকারের ভিত্তিতে সংস্থান মঞ্জুর করে বা প্রত্যাহার করে। TRM সম্প্রচার, OTT, এবং DVR-এর জন্য ATV সম্পদ ব্যবস্থাপনাকে কেন্দ্রীভূত করে।
TRM ইন্টারফেস
TRM টিউনার ফ্রেমওয়ার্ক, MediaCas
এবং TvInputHardwareManager
এর জন্য ITunerResourceManager.aidl
এ AIDL ইন্টারফেসগুলিকে রেজিস্টার করতে, অনুরোধ করতে বা রিলিজ করার জন্য প্রকাশ করে৷
ক্লায়েন্ট পরিচালনার জন্য ইন্টারফেস নীচে তালিকাভুক্ত করা হয়.
-
registerClientProfile(in ResourceClientProfile profile, IResourcesReclaimListener listener, out int[] clientId)
-
unregisterClientProfile(in int clientId)
রিসোর্সের অনুরোধ এবং রিলিজ করার ইন্টারফেসগুলি নীচে তালিকাভুক্ত করা হয়েছে।
-
requestFrontend(TunerFrontendRequest request, int[] frontendHandle)
/releaseFrontend
-
requestDemux(TunerDemuxRequest request, int[] demuxHandle)
/releaseDemux
-
requestDescrambler(TunerDescramblerRequest request, int[] descramblerHandle)
/releaseDescrambler
-
requestCasSession(CasSessionRequest request, int[] casSessionHandle)
/releaseCasSession
-
requestLnb(TunerLnbRequest request, int[] lnbHandle)
/releaseLnb
ক্লায়েন্ট এবং অনুরোধ ক্লাস নীচে তালিকাভুক্ত করা হয়.
-
ResourceClientProfile
-
ResourcesReclaimListener
-
TunerFrontendRequest
-
TunerDemuxRequest
-
TunerDescramblerRequest
-
CasSessionRequest
-
TunerLnbRequest
ক্লায়েন্ট অগ্রাধিকার
TRM ক্লায়েন্টের প্রোফাইল থেকে প্যারামিটার এবং কনফিগারেশন ফাইল থেকে অগ্রাধিকার মান ব্যবহার করে ক্লায়েন্টের অগ্রাধিকার গণনা করে। অগ্রাধিকারটি ক্লায়েন্টের কাছ থেকে একটি নির্বিচারে অগ্রাধিকার মান দ্বারা আপডেট করা যেতে পারে।
ক্লায়েন্টের প্রোফাইলে পরামিতি
টিআরএম mTvInputSessionId
থেকে প্রসেস আইডি পুনরুদ্ধার করে যে অ্যাপটি একটি অগ্রভাগ বা ব্যাকগ্রাউন্ড অ্যাপ কিনা তা নির্ধারণ করতে। mTvInputSessionId
তৈরি করতে, TvInputService.onCreateSession
, বা TvInputService.onCreateRecordingSession
একটি TIS সেশন শুরু করে।
mUseCase
সেশনের ব্যবহারের ক্ষেত্রে নির্দেশ করে। পূর্বনির্ধারিত ব্যবহারের ক্ষেত্রে নীচে তালিকাভুক্ত করা হয়েছে।
TvInputService.PriorityHintUseCaseType {
PRIORITY_HINT_USE_CASE_TYPE_PLAYBACK
PRIORITY_HINT_USE_CASE_TYPE_LIVE
PRIORITY_HINT_USE_CASE_TYPE_RECORD,
PRIORITY_HINT_USE_CASE_TYPE_SCAN,
PRIORITY_HINT_USE_CASE_TYPE_BACKGROUND
}
কনফিগারেশন ফাইল
ডিফল্ট কনফিগারেশন ফাইল
নীচের ডিফল্ট কনফিগারেশন ফাইল পূর্বনির্ধারিত ব্যবহারের ক্ষেত্রে অগ্রাধিকার মান প্রদান করে। ব্যবহারকারীরা একটি কাস্টমাইজড কনফিগারেশন ফাইল ব্যবহার করে মান পরিবর্তন করতে পারেন।
কেস ব্যবহার করুন | ফোরগ্রাউন্ড | পটভূমি |
---|---|---|
LIVE | 490 | 400 |
PLAYBACK | 480 | 300 |
RECORD | 600 | 500 |
SCAN | 450 | 200 |
BACKGROUND | 180 | 100 |
কাস্টমাইজড কনফিগারেশন ফাইল
বিক্রেতারা কনফিগারেশন ফাইল /vendor/etc/tunerResourceManagerUseCaseConfig.xml
কাস্টমাইজ করতে পারেন। এই ফাইলটি ব্যবহার কেস প্রকার এবং ব্যবহারের ক্ষেত্রে অগ্রাধিকার মানগুলি যোগ, অপসারণ বা আপডেট করতে ব্যবহৃত হয়। কাস্টমাইজ করা ফাইলটি টেমপ্লেট হিসেবে platform/hardware/interfaces/tv/tuner/1.0/config/tunerResourceManagerUseCaseConfigSample.xml
ব্যবহার করতে পারে।
উদাহরণস্বরূপ, একটি নতুন বিক্রেতার ব্যবহারের ক্ষেত্রে হল VENDOR_USE_CASE__[A-Z0-9]+, [0 - 1000]
। ফর্ম্যাটটি platform/hardware/interfaces/tv/tuner/1.0/config/tunerResourceManagerUseCaseConfig.xsd
অনুসরণ করা উচিত।
নির্বিচারে অগ্রাধিকার মান এবং চমৎকার মান
TRM ক্লায়েন্টকে নির্বিচারে অগ্রাধিকার মান এবং চমৎকার মান আপডেট করার জন্য updateClientPriority
প্রদান করে। স্বেচ্ছাচারী অগ্রাধিকার মানটি ব্যবহারের ক্ষেত্রের ধরন এবং সেশন আইডি থেকে গণনা করা অগ্রাধিকার মানটিকে ওভাররাইট করে।
চমৎকার মান নির্দেশ করে যে ক্লায়েন্টের আচরণ অন্য ক্লায়েন্টের সাথে সংঘর্ষে কতটা নম্র হয়। চ্যালেঞ্জিং ক্লায়েন্টের সাথে তার অগ্রাধিকার মান তুলনা করার আগে চমৎকার মানটি ক্লায়েন্টের অগ্রাধিকার মানকে হ্রাস করে।
মেকানিজম পুনরুদ্ধার করুন
নীচের চিত্রটি দেখায় যে কীভাবে সম্পদ পুনরুদ্ধার করা হয় এবং বরাদ্দ করা হয় যখন একটি সম্পদ দ্বন্দ্ব ঘটে।
চিত্র 15. টিউনার সংস্থানগুলির মধ্যে দ্বন্দ্বের জন্য পুনরুদ্ধার প্রক্রিয়ার চিত্র