Android 11 या उसके बाद के वर्शन के लिए, Android 11 या इसके बाद के वर्शन ऑडियो/वीडियो कॉन्टेंट डिलीवर करने के लिए ट्यूनर फ़्रेमवर्क. यह फ़्रेमवर्क, हार्डवेयर का इस्तेमाल करता है बेहतर और लो-एंड SoC, दोनों के लिए सही रहेगा. यह फ़्रेमवर्क, ऐसे ऑडियो/वीडियो कॉन्टेंट को डिलीवर करने का सुरक्षित तरीका उपलब्ध कराता है जो ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) और सिक्योर मीडिया पाथ (एसएमपी), इसकी मदद से जिनका इस्तेमाल बहुत ज़्यादा प्रतिबंधित और कॉन्टेंट की सुरक्षा के लिए किया जाना चाहिए.
ट्यूनर और Android CAS के बीच के स्टैंडर्ड इंटरफ़ेस को इस्तेमाल करने से, ज़्यादा तेज़ नतीजे मिलते हैं
ट्यूनर वेंडर और सीएएस वेंडर के बीच इंटिग्रेशन. ट्यूनर इंटरफ़ेस काम करता है
हमने MediaCodec
और AudioTrack
के साथ मिलकर, Android TV के लिए एक ही प्लैटफ़ॉर्म पर सभी सुविधाएं उपलब्ध कराई हैं.
ट्यूनर इंटरफ़ेस, डिजिटल टीवी और ऐनालॉग टीवी, दोनों के साथ काम करता है
ब्रॉडकास्ट के लिए स्टैंडर्ड तय करना.
Components
Android 11 के लिए, खास तौर पर तीन कॉम्पोनेंट Android TV के लिए डिज़ाइन किया गया है.
- ट्यूनर एचएएल: फ़्रेमवर्क और वेंडर के बीच का इंटरफ़ेस
- Tuner SDK API: फ़्रेमवर्क और ऐप्लिकेशन के बीच का इंटरफ़ेस
- ट्यूनर रिसोर्स मैनेजर (टीआरएम): निर्देशांक ट्यूनर HW संसाधन
Android 11 के लिए, नीचे दिए गए कॉम्पोनेंट बेहतर बनाया गया.
- सीएएस V2
TvInputService
या टीवी इनपुट सेवा (टीआईएस)TvInputManagerService
या TV इनपुट मैनेजर सेवा (टीआईएमएस)MediaCodec
या मीडिया कोडेकAudioTrack
या ऑडियो ट्रैकMediaResourceManager
या मीडिया रिसॉर्स मैनेजर (एमआरएम)
पहला डायग्राम. Android TV के कॉम्पोनेंट के बीच इंटरैक्शन
सुविधाएं
Frontend, नीचे दिए गए DTV मानकों के साथ काम करता है.
- एटीएससी
- एटीएससी3
- डीवीबी सी/एस/टी
- आईएसडीबी एस/एस3/टी
- ऐनालॉग
Android 12 में, Tuner HAL 1.1 या उसके बाद के वर्शन वाला फ़्रंटएंड, यहां दिए गए DTV स्टैंडर्ड के साथ काम करता है.
- डीटीएमबी
Demux, नीचे दिए गए स्ट्रीम प्रोटोकॉल के साथ काम करता है.
- ट्रांसपोर्ट स्ट्रीम (TS)
- MPEG मीडिया ट्रांसपोर्ट प्रोटोकॉल (एमएमटीपी)
- इंटरनेट प्रोटोकॉल (आईपी)
- टाइप की लंबाई की वैल्यू (टीएलवी)
- एटीएससी लिंक-लेयर प्रोटोकॉल (एएलपी)
डिस्क्रैंबलर, कॉन्टेंट की सुरक्षा के लिए नीचे दी गई सुविधाएं देता है.
- सुरक्षित मीडिया पाथ
- मीडिया पाथ मिटाएं
- स्थानीय रिकॉर्ड सुरक्षित करें
- सुरक्षित डिवाइस प्लेबैक
ट्यूनर एपीआई नीचे दिए गए इस्तेमाल के उदाहरण के साथ काम करते हैं.
- स्कैन करें
- लाइव
- वीडियो चलाएं
- रिकॉर्ड करें
ट्यूनर, MediaCodec
, और AudioTrack
नीचे दिए गए डेटा फ़्लो मोड के साथ काम करते हैं.
- साफ़ मेमोरी बफ़र के साथ ES पेलोड
- सुरक्षित मेमोरी हैंडल वाला ES पेलोड
- पास-थ्रू
ओवरऑल डिज़ाइन
ट्यूनर एचएएल को Android फ़्रेमवर्क और वेंडर के हार्डवेयर.
- यह बताता है कि फ़्रेमवर्क, वेंडर से क्या उम्मीद करता है और वेंडर कैसे करते हैं.
- फ़्रंटएंड, डीमक्स, और डीस्क्रैंबलर की सुविधाओं को
IFrontend
,IDemux
,IDescrambler
,IFilter
,IDvr
, के ज़रिए फ़्रेमवर्क औरILnb
इंटरफ़ेस शामिल हैं. - इसमें ट्यूनर एचएएल को अन्य फ़्रेमवर्क के साथ इंटिग्रेट करने वाले फ़ंक्शन शामिल हैं
कॉम्पोनेंट, जैसे कि
MediaCodec
औरAudioTrack
.
एक ट्यूनर Java क्लास और नेटिव क्लास बनाई गई.
- Tuner Java API, ऐप्लिकेशन को सार्वजनिक एपीआई के ज़रिए, Tuner HAL को ऐक्सेस करने की अनुमति देता है.
- नेटिव क्लास, बड़ी संख्या में कॉन्टेंट की अनुमति को कंट्रोल और मैनेज करने की अनुमति देती है ट्यूनर एचएएल के साथ रिकॉर्डिंग या प्लेबैक डेटा को कनेक्ट करता है.
- नेटिव ट्यूनर मॉड्यूल, ट्यूनर की Java क्लास और ट्यूनर के बीच पुल है हैल.
एक TRM क्लास बनाई गई.
- यह सीमित ट्यूनर संसाधनों, जैसे कि Frontend, LNB, CAS सेशन और टीवी इनपुट एचएएल से एक टीवी इनपुट डिवाइस.
- इससे कम संसाधनों पर फिर से दावा करने के लिए, नियम लागू होते हैं दिखाई देता है. फ़ोरग्राउंड जीत डिफ़ॉल्ट नियम है.
मीडिया सीएएस और सीएएस एचएएल को नीचे दी गई सुविधाओं के साथ बेहतर बनाया गया है.
- अलग-अलग इस्तेमाल और एल्गोरिदम के लिए सीएएस सेशन खोलता है.
- डाइनैमिक सीएएस सिस्टम के साथ काम करता है, जैसे कि सीआईसीएएम को हटाना और जोड़ना.
- कुंजी टोकन उपलब्ध कराकर, इसे Tuner HAL के साथ इंटिग्रेट किया जा सकता है.
MediaCodec
और AudioTrack
को नीचे दी गई सुविधाओं के साथ बेहतर बनाया गया है.
- कॉन्टेंट इनपुट के तौर पर सुरक्षित A/V मेमोरी का इस्तेमाल करता है.
- टनल किए गए प्लेबैक में हार्डवेयर ए/वी सिंक करने के लिए कॉन्फ़िगर किया गया है.
ES_payload
और पासथ्रू मोड के लिए सहायता कॉन्फ़िगर की गई.
दूसरा डायग्राम. ट्यूनर एचएएल के कॉम्पोनेंट का डायग्राम
पूरा वर्कफ़्लो
नीचे दिए गए डायग्राम में, लाइव ब्रॉडकास्ट चलाने के लिए कॉल सीक्वेंस दिखाए गए हैं.
सेटअप
तीसरी इमेज. लाइव ब्रॉडकास्ट को चलाने के लिए, क्रम सेट अप करें
ऑडियो/वीडियो को हैंडल करना
चौथी इमेज. लाइव ब्रॉडकास्ट को चलाने के लिए ऑडियो/वीडियो हैंडल करना
स्क्रैंबल किए गए कॉन्टेंट को मैनेज करना
पांचवी इमेज. लाइव ब्रॉडकास्ट को चलाने के लिए, स्क्रैंबल किए गए कॉन्टेंट को मैनेज करना
A/V डेटा प्रोसेस किया जा रहा है
छठी इमेज. लाइव ब्रॉडकास्ट को चलाने के लिए ऑडियो/वीडियो को प्रोसेस किया जा रहा है
ट्यूनर SDK API
Tuner SDK API, Tuner JNI, Tuner HAL,
और TunerResourceManager
. TIS ऐप्लिकेशन, Tuner को ऐक्सेस करने के लिए Tuner SDK API का इस्तेमाल करता है
संसाधन और सबकॉम्पोनेंट, जैसे कि फ़िल्टर और डिस् क्रैंबलर को शामिल करें. फ़्रंटएंड और
demux, अंदरूनी कॉम्पोनेंट हैं.
सातवीं इमेज. Tuner SDK API के साथ इंटरैक्शन
वर्शन
Android 12 से, Tuner SDK API, Tuner HAL 1.1 की नई सुविधा के साथ काम करता है. यह सुविधा, ट्यूनर 1.0 का पुराने सिस्टम के साथ काम करने वाला वर्शन अपग्रेड है.
मौजूदा एचएएल वर्शन की जांच करने के लिए, नीचे दिए गए एपीआई का इस्तेमाल करें.
android.media.tv.tuner.TunerVersionChecker.getTunerVersion()
नए Android 12 एपीआई के दस्तावेज़ में, HAL के ज़रूरी वर्शन की जानकारी मिल सकती है.
पैकेज
Tuner SDK API नीचे दिए गए चार पैकेज उपलब्ध कराता है.
android.media.tv.tuner
android.media.tv.tuner.frontend
android.media.tv.tuner.filter
android.media.tv.tuner.dvr
आठवीं इमेज. Tuner SDK API के पैकेज
Android.media.tv.tuner
ट्यूनर पैकेज, ट्यूनर फ़्रेमवर्क का इस्तेमाल करने का एंट्री पॉइंट है. टीआईएस ऐप्लिकेशन यह तय करके, संसाधन इंस्टेंस को शुरू करने और पाने के लिए पैकेज का इस्तेमाल करता है शुरुआती सेटिंग और कॉलबैक को लागू किया जाता है.
tuner()
:useCase
औरsessionId
पैरामीटर.tune()
: फ़्रंटएंड संसाधन हासिल करता है औरFrontendSetting
पैरामीटर.openFilter()
: फ़िल्टर टाइप तय करके, फ़िल्टर इंस्टेंस हासिल करता है.openDvrRecorder()
: बफ़र तय करके रिकॉर्डिंग इंस्टेंस हासिल करता है साइज़.openDvrPlayback()
: बफ़र तय करके वीडियो चलाने का इंस्टेंस हासिल करता है साइज़.openDescrambler()
: डिस् क्रैंबलर इंस्टेंस बनाता है.openLnb()
: इंटरनल एलएनबी इंस्टेंस हासिल करता है.openLnbByName()
: इससे बाहरी एलएनबी इंस्टेंस मिलता है.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 वाले ट्यूनर HAL 1.1 या उसके बाद के वर्शन पर, ये DTV स्टैंडर्ड काम करते हैं.
DtmbFrontendSettings
FrontendCapabilities
को अलग-अलग DTV मानकों के हिसाब से क्लास के हिसाब से बनाया गया है
देखें.
AnalogFrontendCapabilities
Atsc3FrontendCapabilities
AtscFrontendCapabilities
DvbcFrontendCapabilities
DvbsFrontendCapabilities
DvbtFrontendCapabilities
Isdbs3FrontendCapabilities
IsdbsFrontendCapabilities
IsdbtFrontendCapabilities
Android 12 वाले ट्यूनर HAL 1.1 या उसके बाद के वर्शन पर, ये DTV स्टैंडर्ड काम करते हैं.
DtmbFrontendCapabilities
FrontendInfo
, फ़्रंटएंड की जानकारी हासिल करता है.
FrontendStatus
, फ़्रंटएंड की मौजूदा स्थिति की जानकारी हासिल करता है.
OnTuneEventListener
फ़्रंटएंड पर इवेंट सुन रहा है.
TIS ऐप्लिकेशन, फ़्रंटएंड से स्कैन करने के लिए ScanCallback
का इस्तेमाल करता है.
चैनल स्कैन करें
टीवी सेट अप करने के लिए यह ऐप्लिकेशन, फ़्रीक्वेंसी को स्कैन करता है और एक चैनल बनाता है
उपयोगकर्ताओं के ऐक्सेस के लिए लाइनअप. TIS Tuner.tune
का इस्तेमाल कर सकती है,
चैनल पूरा करने के लिए, Tuner.scan(BLIND_SCAN)
या Tuner.scan(AUTO_SCAN)
स्कैन करना.
अगर टीआईएस के पास सिग्नल के लिए, डिलीवरी की सटीक जानकारी है, जैसे कि फ़्रीक्वेंसी,
स्टैंडर्ड (उदाहरण के लिए, T/T2, S/S2) और अन्य ज़रूरी जानकारी
(उदाहरण के लिए, पीडीडी आईडी) के बाद,
Tuner.tune
को ज़्यादा तेज़ विकल्प के रूप में सुझाया गया है.
जब उपयोगकर्ता Tuner.tune
को कॉल करता है, तो ये कार्रवाइयां होती हैं:
- टीआईएस,
Tuner.tune
का इस्तेमाल करकेFrontendSettings
को ज़रूरी जानकारी से भर देता है. - सिग्नल लॉक होने पर, एचएएल रिपोर्ट
LOCKED
मैसेज को ट्यून करती है. - TIS ज़रूरी जानकारी इकट्ठा करने के लिए,
Frontend.getStatus
का इस्तेमाल करता है. - TIS अपनी फ़्रीक्वेंसी सूची में अगली उपलब्ध फ़्रीक्वेंसी पर चला जाता है.
जब तक सभी फ़्रीक्वेंसी पूरी नहीं हो जाती, तब तक टीआईएस Tuner.tune
को फिर से कॉल करेगा.
ट्यूनिंग के दौरान, इन्हें रोकने या खत्म करने के लिए, stopTune()
या close()
को कॉल किया जा सकता है
Tuner.tune
कॉल.
ट्यूनर.स्कैन(AUTO_SCAN)
अगर टीआईएस के पास Tuner.tune
का इस्तेमाल करने के लिए ज़रूरी जानकारी नहीं है, लेकिन इसकी फ़्रीक्वेंसी तय की गई है
सूची और स्टैंडर्ड टाइप (उदाहरण के लिए, DVB T/C/S),
तो Tuner.scan(AUTO_SCAN)
का सुझाव दिया जाता है.
जब उपयोगकर्ता Tuner.scan(AUTO_SCAN)
को कॉल करता है, तो ये कार्रवाइयां होती हैं:
TIS,
Tuner.scan(AUTO_SCAN)
का इस्तेमाल करता है. इसमेंFrontendSettings
फ़्रीक्वेंसी होती है.सिग्नल लॉक होने पर, एचएएल रिपोर्ट
LOCKED
मैसेज को स्कैन करती है. एचएएल यह कर सकता था अन्य स्कैन मैसेज की शिकायत भी करें, की ज़रूरत नहीं है.TIS ज़रूरी जानकारी इकट्ठा करने के लिए,
Frontend.getStatus
का इस्तेमाल करता है.टीआईएस, एचएएल के लिए
Tuner.scan
को कॉल करता है, ताकि वह उसी सेटिंग पर अगली सेटिंग जारी रख सके फ़्रीक्वेंसी. अगरFrontendSettings
स्ट्रक्चर खाली है, तो एचएएल अगले टेंप्लेट का इस्तेमाल करता है उपलब्ध सेटिंग. अगर ऐसा नहीं है, तो एचएएल एक बार के लिएFrontendSettings
का इस्तेमाल करता है स्कैन करता है औरEND
भेजता है, ताकि यह पता चल सके कि स्कैन की कार्रवाई खत्म हो गई है.TIS, ऊपर दी गई कार्रवाइयों को तब तक दोहराता है, जब तक फ़्रीक्वेंसी पर सभी सेटिंग चालू नहीं हो जातीं खत्म हो गया.
एचएएल यह बताने के लिए
END
भेजता है कि स्कैन की कार्रवाई पूरी हो गई है.TIS अपनी फ़्रीक्वेंसी सूची में अगली उपलब्ध फ़्रीक्वेंसी पर चला जाता है.
जब तक सभी फ़्रीक्वेंसी पूरी नहीं हो जाती, तब तक टीआईएस Tuner.scan(AUTO_SCAN)
को फिर से कॉल करेगा.
स्कैन करने के दौरान, स्कैन करने की प्रोसेस को रोकने या खत्म करने के लिए, stopScan()
या close()
को कॉल किया जा सकता है
स्कैन करें.
Tuner.scan(BLIND_SCAN)
अगर टीआईएस के पास फ़्रीक्वेंसी सूची नहीं है और वेंडर एचएएल
इस्तेमाल करने वाले व्यक्ति के बताए गए फ़्रंटएंड की फ़्रीक्वेंसी पर क्लिक करके फ़्रंटएंड रिसॉर्स पाएं, फिर
Tuner.scan(BLIND_SCAN)
का सुझाव दिया जाता है.
- TIS
Tuner.scan(BLIND_SCAN)
का इस्तेमाल करता है. फ़्रीक्वेंसी को शुरू करने की फ़्रीक्वेंसी के लिएFrontendSettings
, लेकिन TIS दूसरी सेटिंग को अनदेखा कर देता हैFrontendSettings
में. - सिग्नल लॉक होने पर, एचएएल
LOCKED
मैसेज स्कैन करता है. - TIS ज़रूरी जानकारी इकट्ठा करने के लिए,
Frontend.getStatus
का इस्तेमाल करता है. - स्कैन करना जारी रखने के लिए, टीआईएस
Tuner.scan
को फिर से कॉल करता है. (FrontendSettings
यह है अनदेखा किया गया.) - TIS, ऊपर दी गई कार्रवाइयों को तब तक दोहराता है, जब तक फ़्रीक्वेंसी पर सभी सेटिंग चालू नहीं हो जातीं
खत्म हो गया. एचएएल, फ़्रीक्वेंसी को बढ़ाता है. इसके लिए, टीआईएस को कुछ करने की ज़रूरत नहीं होती.
एचएएल ने
PROGRESS
की रिपोर्ट दी है.
जब तक सभी फ़्रीक्वेंसी पूरी नहीं हो जाती, तब तक टीआईएस Tuner.scan(AUTO_SCAN)
को फिर से कॉल करेगा.
एचएएल, END
को रिपोर्ट करता है कि स्कैन पूरा हो गया है.
स्कैन करने के दौरान, स्कैन को रोकने या बंद करने के लिए, stopScan()
या close()
को कॉल किया जा सकता है.
नौवीं इमेज. टीआईएस स्कैन का फ़्लो डायग्राम
Android.media.tv.tuner.filter
फ़िल्टर पैकेज में कॉन्फ़िगरेशन के साथ-साथ फ़िल्टर ऑपरेशन का कलेक्शन होता है, सेटिंग, कॉलबैक, और इवेंट. पैकेज में नीचे दी गई कार्रवाइयां शामिल हैं. कार्रवाइयों की पूरी सूची के लिए Android सोर्स कोड देखें.
configure()
start()
stop()
flush()
read()
पूरी सूची के लिए Android सोर्स कोड देखें.
FilterConfiguration
को नीचे दी गई क्लास से लिया गया है. कॉन्फ़िगरेशन ये हैं
फ़िल्टर भी कर सकते हैं. साथ ही, इनसे यह तय होता है कि फ़िल्टर किस प्रोटोकॉल का इस्तेमाल करेगा
डेटा एक्सट्रैक्ट करने की सुविधा मिलती है.
AlpFilterConfiguration
IpFilterConfiguration
MmtpFilterConfiguration
TlvFilterConfiguration
TsFilterConfiguration
ये सेटिंग, नीचे दी गई क्लास से ली गई हैं. ये सेटिंग फ़िल्टर के लिए हैं सब-टाइप तय करते हैं. साथ ही, इनसे यह भी पता चलता है कि फ़िल्टर किस तरह का डेटा बाहर रख सकता है.
SectionSettings
AvSettings
PesSettings
RecordSettings
DownloadSettings
अलग-अलग इवेंट की रिपोर्ट करने के लिए, FilterEvent
को नीचे दी गई क्लास से लिया गया है
किस तरह का डेटा है.
SectionEvent
MediaEvent
PesEvent
TsRecordEvent
MmtpRecordEvent
TemiEvent
DownloadEvent
IpPayloadEvent
Android 12 वाले, Tuner HAL 1.1 या उसके बाद के वर्शन वाले फ़ोन में, ये इवेंट काम करते हैं.
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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
असेंबल किया गया एक सेशन पैकेज, दूसरे ने एफ़एमक्यू में भरा है सेशन पैकेज के लिए इस्तेमाल किया जा सकता है. |
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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
असेंबल किया गया एक पीईएस पैकेज, दूसरे ने एफ़एमक्यू से भरा है पीईएस पैकेज. |
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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
असेंबल किया गया एक एमएफ़यू पैकेज, दूसरे ने एफ़एमक्यू में भरा है एमएफ़यू पैकेज. |
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 |
लागू नहीं | ज़रूरी शर्तें: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 को कॉल कर सकता है. |
लागू नहीं |
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 |
लागू नहीं | ज़रूरी जानकारी: लागू नहीं
ज़रूरी नहीं: लागू नहीं |
लागू नहीं | लागू नहीं |
TS.RECORD |
लागू नहीं | ज़रूरी शर्तें: 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 |
लागू नहीं | ज़रूरी शर्तें:DemuxFilterEvent::DemuxFilterTemiEvent[n] ज़रूरी नहीं: DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER |
for i=0; i<n; i++ |
लागू नहीं |
MMTP.MMTP |
लागू नहीं | ज़रूरी शर्तें:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW सुझाव: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER |
इवेंट और अंदरूनी शेड्यूल के मुताबिक, चलाएंFilter.read(buffer, offset, adjustedSize) एक या एक से ज़्यादा
बार.अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है. |
mmtp हेडरवाले mmtp को फ़िल्टर किया गया
FMQ से भरा हुआ है. |
MMTP.RECORD |
लागू नहीं | ज़रूरी शर्तें: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::* और इंटरनल शेड्यूल के हिसाब से, इनमें से कोई एक काम करें
फ़ॉलो किया जा रहा है:
|
इंडेक्स डेटा के लिए: इवेंट पेलोड में रखा जाता है. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है रिकॉर्ड किए गए कॉन्टेंट के लिए: रिकॉर्ड की गई, म्यूज़िक फ़ाइल से भरी गई स्ट्रीम एफ़एमक्यू. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अगर रिकॉर्डिंग के लिए फ़िल्टर सोर्स TLV.TLV है, तो
IP.IP पासथ्रू के साथ, रिकॉर्ड की गई स्ट्रीम में
टीएलवी और आईपी हेडर. |
MMTP.DOWNLOAD |
लागू नहीं | ज़रूरी शर्तें: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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
डाउनलोड पैकेज में, किसी दूसरे आईपी डाउनलोड पैकेज की मदद से FMQ डाला गया है. |
IP.IP_PAYLOAD |
लागू नहीं | ज़रूरी शर्तें: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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
आईपी पेलोड पैकेज को किसी दूसरे आईपी पेलोड पैकेज के ज़रिए FMQ से भरा गया है. |
IP.IP TLV.TLV ALP.ALP |
isPassthrough: |
ज़रूरी नहीं:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW |
फ़िल्टर किए गए प्रोटोकॉल सब-स्ट्रीम फ़िल्टर में अगला फ़िल्टर फ़ीड किया जाएगा चेन. | लागू नहीं |
isPassthrough: |
ज़रूरी शर्तें:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW सुझाव: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER |
इवेंट और अंदरूनी शेड्यूल के मुताबिक, चलाएंFilter.read(buffer, offset, adjustedSize) एक या एक से ज़्यादा
बार.अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है. |
फ़िल्टर की गई प्रोटोकॉल सब-स्ट्रीम में प्रोटोकॉल हेडर भरा गया है एफ़एमक्यू. | |
IP.PAYLOAD_THROUGH TLV.PAYLOAD_THROUGH ALP.PAYLOAD_THROUGH |
लागू नहीं | ज़रूरी नहीं:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW |
फ़िल्टर किया गया प्रोटोकॉल पेलोड, फ़िल्टर में अगला फ़िल्टर फ़ीड करता है चेन. | लागू नहीं |
पीएसआई/एसआई बनाने के लिए फ़िल्टर का इस्तेमाल करने के फ़्लो का उदाहरण
10वीं इमेज. पीएसआई/एसआई बनाने के लिए फ़्लो
कोई फ़िल्टर खोलें.
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वीं इमेज. फ़िल्टर से MediaEvent का इस्तेमाल करने के लिए फ़्लो
- ऑडियो/वीडियो फ़िल्टर खोलें, कॉन्फ़िगर करें, और शुरू करें.
MediaEvent
प्रोसेस करें.MediaEvent
पाएं.- लीनियर ब्लॉक को
codec
के लिए सूची में जोड़ें. - डेटा खर्च हो जाने के बाद, ऑडियो/वीडियो हैंडल छोड़ दें.
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
का इस्तेमाल किया गया है
डीवीआर इंस्टेंस की स्थिति के बारे में रिपोर्ट करने के लिए.
रिकॉर्ड शुरू करने के फ़्लो का उदाहरण
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); } } };
ट्यूनर एचएएल
ट्यूनर एचएएल, HIDL का पालन करता है और फ़्रेमवर्क और वेंडर हार्डवेयर. वेंडर इंटरफ़ेस का इस्तेमाल, ट्यूनर एचएएल और फ़्रेमवर्क इसका इस्तेमाल, ट्यूनर एचएएल लागू करने के बारे में बताने के लिए करता है.
मॉड्यूल
ट्यूनर एचएएल 1.0
मॉड्यूल | सामान्य कंट्रोल | मॉड्यूल के हिसाब से कंट्रोल | HAL फ़ाइलें |
---|---|---|---|
ITuner |
लागू नहीं | 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 (Tuner HAL 1.0 से लिया गया)
मॉड्यूल | सामान्य कंट्रोल | मॉड्यूल के हिसाब से कंट्रोल | HAL फ़ाइलें |
---|---|---|---|
ITuner |
लागू नहीं | 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वीं इमेज. ट्यूनर एचएएल मॉड्यूल के बीच के इंटरैक्शन का डायग्राम
फ़िल्टर लिंकेज
ट्यूनर एचएएल, फ़िल्टर लिंक करने की सुविधा देता है. इसका मतलब है कि फ़िल्टर को दूसरे कई लेयर के लिए फ़िल्टर का इस्तेमाल करती है. फ़िल्टर नीचे दिए गए नियमों का पालन करते हैं.
- फ़िल्टर एक ट्री के रूप में लिंक किए जाते हैं, क्लोज़ पाथ की अनुमति नहीं है.
- रूट नोड डीमक्स है.
- फ़िल्टर अलग-अलग काम करते हैं.
- सभी फ़िल्टर को डेटा मिलने लगता है.
- फ़िल्टर लिंकेज, आखिरी फ़िल्टर पर फ़्लश हो जाता है.
नीचे दिए गए कोड ब्लॉक और इमेज 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वीं इमेज. एक से ज़्यादा लेयर के लिए फ़िल्टर लिंकेज का फ़्लो डायग्राम
ट्यूनर संसाधन मैनेजर
ट्यूनर रिसोर्स मैनेजर (टीआरएम) से पहले, दो ऐप्लिकेशन के बीच स्विच करने के लिए एक ही ट्यूनर हार्डवेयर है. टीवी इनपुट फ़्रेमवर्क (टीआईएफ़) ने "फ़र्स्ट-टू-अक्वेरी" का इस्तेमाल किया का मतलब है कि जिस ऐप्लिकेशन को संसाधन पहले मिलता है वह संसाधन को बनाए रखता है. हालांकि, इस्तेमाल के कुछ मुश्किल उदाहरणों के लिए, यह तरीका शायद सही न हो.
ट्यूनर, TVInput
, और सीएएस हार्डवेयर को मैनेज करने के लिए, TRM, सिस्टम सेवा के तौर पर काम करता है
संसाधन खोजें. TRM, "फ़ोरग्राउंड जीत" का इस्तेमाल करता है मैकेनिज़्म होता है.
ऐप्लिकेशन के फ़ोरग्राउंड या बैकग्राउंड के आधार पर ऐप्लिकेशन की प्राथमिकता कैलकुलेट करता है
स्टेटस और इस्तेमाल का उदाहरण किस तरह का है, इसकी जानकारी शामिल होती है. TRM इसके आधार पर संसाधन को अनुमति देता है या निरस्त करता है
प्राथमिकता तय की गई है. TRM, ब्रॉडकास्ट, OTT, और
और डीवीआर.
TRM इंटरफ़ेस
TRM, ट्यूनर के लिए ITunerResourceManager.aidl
में एआईडीएल इंटरफ़ेस दिखाता है
फ़्रेमवर्क, MediaCas
, और TvInputHardwareManager
को रजिस्टर करने, अनुरोध करने या
संसाधन रिलीज़ करें.
क्लाइंट मैनेजमेंट के लिए इंटरफ़ेस नीचे दिए गए हैं.
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, क्लाइंट के पैरामीटर का इस्तेमाल करके, क्लाइंट की प्राथमिकता कैलकुलेट करता है प्रोफ़ाइल और कॉन्फ़िगरेशन फ़ाइल की प्राथमिकता मान है. प्राथमिकता ये हो सकती है: इन्हें क्लाइंट की आर्बिट्रेरी प्राथमिकता वैल्यू से भी अपडेट किया जा सकता है.
क्लाइंट की प्रोफ़ाइल में मौजूद पैरामीटर
TRM, mTvInputSessionId
से प्रोसेस आईडी को लेता है, ताकि यह तय किया जा सके कि कोई ऐप्लिकेशन
फ़ोरग्राउंड या बैकग्राउंड ऐप्लिकेशन हो. mTvInputSessionId
बनाने के लिए,
TvInputService.onCreateSession
या TvInputService.onCreateRecordingSession
टीआईएस सेशन शुरू करता है.
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वीं इमेज. ट्यूनर के बीच टकराव के लिए, फिर से दावा करने के तरीके का डायग्राम संसाधन