Android 11 या उसके बाद के वर्शन के लिए, A/V कॉन्टेंट डिलीवर करने के लिए, Android Tuner फ़्रेमवर्क का इस्तेमाल किया जा सकता है. यह फ़्रेमवर्क, वेंडर की हार्डवेयर पाइपलाइन का इस्तेमाल करता है. इससे यह लो-एंड और हाई-एंड, दोनों तरह के SoC के लिए सही होता है. यह फ़्रेमवर्क, ए/वी कॉन्टेंट को डिलीवर करने का एक सुरक्षित तरीका उपलब्ध कराता है. यह कॉन्टेंट, भरोसेमंद एक्सीक्यूशन एनवायरमेंट (टीईई) और सुरक्षित मीडिया पाथ (एसएमपी) से सुरक्षित होता है. इसकी मदद से, कॉन्टेंट को सुरक्षा से जुड़ी पाबंदियों वाले माहौल में डिलीवर किया जा सकता है.
ट्यूनर और Android CAS के बीच स्टैंडर्ड इंटरफ़ेस की वजह से, ट्यूनर वेंडर और CAS वेंडर के बीच तेज़ी से इंटिग्रेशन होता है. ट्यूनर इंटरफ़ेस, Android TV के लिए एक ही वर्ल्ड सलूशन बनाने के लिए, MediaCodec
और AudioTrack
के साथ काम करता है.
ट्यूनर इंटरफ़ेस, मुख्य ब्रॉडकास्ट स्टैंडर्ड के आधार पर, डिजिटल टीवी और एनालॉग टीवी, दोनों के साथ काम करता है.
Components
Android 11 के लिए, तीन कॉम्पोनेंट खास तौर पर TV प्लैटफ़ॉर्म के लिए डिज़ाइन किए गए हैं.
- Tuner HAL: यह फ़्रेमवर्क और वेंडर के बीच का इंटरफ़ेस है
- Tuner SDK टूल का एपीआई: यह फ़्रेमवर्क और ऐप्लिकेशन के बीच इंटरफ़ेस की तरह काम करता है
- ट्यूनर रिसॉर्स मैनेजर (TRM): ट्यूनर के हार्डवेयर संसाधनों को मैनेज करता है
Android 11 के लिए, इन कॉम्पोनेंट को बेहतर बनाया गया है.
- सीएएस V2
TvInputService
या टीवी इनपुट सेवा (TIS)TvInputManagerService
या टीवी इनपुट मैनेजर सेवा (TIMS)MediaCodec
या मीडिया कोडेकAudioTrack
या ऑडियो ट्रैकMediaResourceManager
या मीडिया रिसॉर्स मैनेजर (एमआरएम)
पहली इमेज. Android TV के कॉम्पोनेंट के बीच इंटरैक्शन
सुविधाएं
फ़्रंटएंड, यहां दिए गए डीटीवी स्टैंडर्ड के साथ काम करता है.
- एटीएससी
- ATSC3
- डीवीबी सी/एस/टी
- ISDB S/S3/T
- ऐनालॉग
Android 12 में, ट्यूनर एचएएल 1.1 या इसके बाद के वर्शन वाला फ़्रंटएंड, नीचे दिए गए डीटीवी स्टैंडर्ड के साथ काम करता है.
- डीटीएमबी
डिम्यूक्स, यहां दिए गए स्ट्रीम प्रोटोकॉल के साथ काम करता है.
- ट्रांसपोर्ट स्ट्रीम (टीएस)
- एमपीईजी मीडिया ट्रांसपोर्ट प्रोटोकॉल (एमएमटीपी)
- इंटरनेट प्रोटोकॉल (आईपी)
- टाइप की लंबाई की वैल्यू (TLV)
- एटीएससी लिंक-लेयर प्रोटोकॉल (एएलपी)
डिक्रैम्बलर, कॉन्टेंट को सुरक्षित रखने के लिए इस्तेमाल होने वाली इन सुविधाओं के साथ काम करता है.
- मीडिया पाथ को सुरक्षित करना
- मीडिया पाथ मिटाना
- स्थानीय रिकॉर्ड को सुरक्षित करना
- डिवाइस में वीडियो सुरक्षित तरीके से चलाना
Tuner API, यहां दिए गए इस्तेमाल के उदाहरणों के साथ काम करते हैं.
- स्कैन करें
- लाइव
- वीडियो चलाएं
- कॉन्टेंट रिकॉर्ड करने का बटन
ट्यूनर, MediaCodec
, और AudioTrack
, यहां दिए गए डेटा फ़्लो मोड के साथ काम करते हैं.
- क्लियर मेमोरी बफ़र वाला ईएस पेलोड
- सुरक्षित मेमोरी हैंडल वाला ईएस पेलोड
- पास-थ्रू
पूरा डिज़ाइन
Tuner HAL, Android फ़्रेमवर्क और वेंडर के हार्डवेयर के बीच तय किया जाता है.
- इसमें बताया गया है कि फ़्रेमवर्क, वेंडर से क्या उम्मीद करता है और वेंडर इसे कैसे कर सकता है.
- यह
IFrontend
,IDemux
,IDescrambler
,IFilter
,IDvr
, औरILnb
इंटरफ़ेस की मदद से, फ़्रंटएंड, डिम्यूक्स, और डिस्क्रैम्बलर की सुविधाओं को फ़्रेमवर्क में एक्सपोर्ट करता है. - इसमें Tuner HAL को फ़्रेमवर्क के अन्य कॉम्पोनेंट, जैसे कि
MediaCodec
औरAudioTrack
के साथ इंटिग्रेट करने के फ़ंक्शन शामिल हैं.
Tuner Java क्लास और नेटिव क्लास बनाई जाती है.
- Tuner Java API की मदद से, ऐप्लिकेशन सार्वजनिक एपीआई के ज़रिए Tuner HAL को ऐक्सेस कर सकते हैं.
- नेटिव क्लास की मदद से, Tuner HAL की मदद से रिकॉर्डिंग या प्लेबैक के बड़े डेटा को मैनेज किया जा सकता है. साथ ही, अनुमतियों को कंट्रोल भी किया जा सकता है.
- नेटिव ट्यूनर मॉड्यूल, ट्यूनर Java क्लास और ट्यूनर एचएएल के बीच एक ब्रिज है.
एक टीआरएम क्लास बनाई गई है.
- यह टीवी इनपुट एचएएल से, सीमित ट्यूनर संसाधनों को मैनेज करता है. जैसे, फ़्रंटएंड, एलएनबी, सीएएस सेशन, और टीवी इनपुट डिवाइस.
- ऐप्लिकेशन से, कम संसाधनों को वापस पाने के लिए नियम लागू करता है. डिफ़ॉल्ट नियम के तहत, फ़ोरग्राउंड विंडो को प्राथमिकता दी जाती है.
Media CAS और CAS HAL को इन सुविधाओं के साथ बेहतर बनाया गया है.
- अलग-अलग इस्तेमाल और एल्गोरिदम के लिए सीएएस सेशन खोलता है.
- यह डाइनैमिक सीएएस सिस्टम के साथ काम करता है. जैसे, सीआईसीएएम को हटाना और डालना.
- मुख्य टोकन उपलब्ध कराकर, Tuner HAL के साथ इंटिग्रेट करता है.
MediaCodec
और AudioTrack
को बेहतर बनाने के लिए, इन सुविधाओं को जोड़ा गया है.
- कॉन्टेंट इनपुट के तौर पर, सुरक्षित A/V मेमोरी का इस्तेमाल करता है.
- टनल किए गए वीडियो चलाने के दौरान, हार्डवेयर के ज़रिए ऑडियो और वीडियो को सिंक करने के लिए कॉन्फ़िगर किया गया.
ES_payload
और पासथ्रू मोड के लिए, कॉन्फ़िगर की गई सहायता.
दूसरी इमेज. Tuner HAL में मौजूद कॉम्पोनेंट का डायग्राम
पूरा वर्कफ़्लो
नीचे दिए गए डायग्राम में, लाइव ब्रॉडकास्ट चलाने के लिए कॉल के क्रम के बारे में बताया गया है.
सेटअप
तीसरी इमेज. लाइव ब्रॉडकास्ट के प्लेबैक के लिए सेटअप का क्रम
ऑडियो/वीडियो मैनेज करना
चौथी इमेज. लाइव ब्रॉडकास्ट चलाने के लिए ऑडियो/वीडियो मैनेज करना
स्क्रैम्बल किए गए कॉन्टेंट को मैनेज करना
पांचवीं इमेज. लाइव ब्रॉडकास्ट चलाने के लिए, स्क्रैम्बल किए गए कॉन्टेंट को मैनेज करना
ऑडियो/विज़ुअल डेटा प्रोसेस करना
छठी इमेज. लाइव ब्रॉडकास्ट चलाने के लिए ऑडियो/वीडियो को प्रोसेस किया जा रहा है
Tuner SDK API
Tuner SDK API, Tuner JNI, Tuner HAL, और TunerResourceManager
के साथ इंटरैक्शन को मैनेज करता है. TIS ऐप्लिकेशन, Tuner SDK API का इस्तेमाल करके, फ़िल्टर और डिस्क्रैम्बलर जैसे ट्यूनर के संसाधनों और सब-कॉम्पोनेंट को ऐक्सेस करता है. फ़्रंटएंड और डिम्यूक्स, इंटरनल कॉम्पोनेंट हैं.
सातवीं इमेज. Tuner SDK API के साथ इंटरैक्शन
वर्शन
Android 12 से, Tuner SDK API, Tuner HAL 1.1 में नई सुविधा के साथ काम करता है. यह Tuner 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 टूल के एपीआई पैकेज
Android.media.tv.tuner
Tuner पैकेज, Tuner फ़्रेमवर्क का इस्तेमाल करने के लिए एंट्री पॉइंट है. TIS ऐप्लिकेशन, पैकेज का इस्तेमाल करके संसाधन इंस्टेंस को शुरू करता है और हासिल करता है. इसके लिए, वह शुरुआती सेटिंग और कॉलबैक तय करता है.
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
को अलग-अलग डीटीवी स्टैंडर्ड के लिए, यहां दी गई क्लास के हिसाब से बनाया जाता है.
AnalogFrontendSettings
Atsc3FrontendSettings
AtscFrontendSettings
DvbcFrontendSettings
DvbsFrontendSettings
DvbtFrontendSettings
Isdbs3FrontendSettings
IsdbsFrontendSettings
IsdbtFrontendSettings
Android 12 और Tuner HAL 1.1 या इसके बाद के वर्शन के साथ, यह डीटीवी स्टैंडर्ड काम करता है.
DtmbFrontendSettings
FrontendCapabilities
को अलग-अलग डीटीवी स्टैंडर्ड के लिए, यहां दी गई क्लास के हिसाब से तय किया जाता है.
AnalogFrontendCapabilities
Atsc3FrontendCapabilities
AtscFrontendCapabilities
DvbcFrontendCapabilities
DvbsFrontendCapabilities
DvbtFrontendCapabilities
Isdbs3FrontendCapabilities
IsdbsFrontendCapabilities
IsdbtFrontendCapabilities
Android 12 के साथ ट्यूनर एचएएल 1.1 या इसके बाद के वर्शन में, यह डीटीवी स्टैंडर्ड काम करता है.
DtmbFrontendCapabilities
FrontendInfo
, फ़्रंटएंड की जानकारी को फ़ेच करता है.
FrontendStatus
, फ़्रंटएंड की मौजूदा स्थिति को वापस लाता है.
OnTuneEventListener
, फ़्रंटएंड पर होने वाले इवेंट को सुनता है.
TIS ऐप्लिकेशन, फ़्रंटएंड से स्कैन किए गए मैसेज प्रोसेस करने के लिए ScanCallback
का इस्तेमाल करता है.
चैनल स्कैन करना
टीवी सेट अप करने के लिए, ऐप्लिकेशन संभावित फ़्रीक्वेंसी को स्कैन करता है और उपयोगकर्ताओं के ऐक्सेस के लिए चैनल की सूची बनाता है. चैनल की स्कैनिंग पूरी करने के लिए, टीआईएस Tuner.tune
, Tuner.scan(BLIND_SCAN)
या Tuner.scan(AUTO_SCAN)
का इस्तेमाल कर सकता है.
अगर टीआईएस में सिग्नल की डिलीवरी की सटीक जानकारी है, जैसे कि फ़्रीक्वेंसी, स्टैंडर्ड (उदाहरण के लिए, T/T2, S/S2), और ज़रूरी जानकारी (उदाहरण के लिए, PLD आईडी), तो तेज़ विकल्प के तौर पर Tuner.tune
का सुझाव दिया जाता है.
जब उपयोगकर्ता Tuner.tune
को कॉल करता है, तो ये कार्रवाइयां होती हैं:
- टीआईएस,
Tuner.tune
का इस्तेमाल करकेFrontendSettings
में ज़रूरी जानकारी भरता है. - अगर सिग्नल लॉक है, तो HAL, ट्यून
LOCKED
मैसेज की रिपोर्ट करता है. - ज़रूरी जानकारी इकट्ठा करने के लिए, टीआईएस
Frontend.getStatus
का इस्तेमाल करता है. - इसके बाद, टीआईएस अपनी फ़्रीक्वेंसी सूची में अगली उपलब्ध फ़्रीक्वेंसी पर स्विच कर देता है.
टीआईएस, Tuner.tune
को तब तक फिर से कॉल करता है, जब तक सभी फ़्रीक्वेंसी खत्म नहीं हो जातीं.
ट्यूनिंग के दौरान, Tuner.tune
कॉल को रोकने या खत्म करने के लिए, stopTune()
या close()
को दबाया जा सकता है.
Tuner.scan(AUTO_SCAN)
अगर TIS में Tuner.tune
का इस्तेमाल करने के लिए ज़रूरत के मुताबिक जानकारी नहीं है, लेकिन फ़्रीक्वेंसी सूची और स्टैंडर्ड टाइप (उदाहरण के लिए, DVB T/C/S) है, तो हमारा सुझाव है कि Tuner.scan(AUTO_SCAN)
का इस्तेमाल करें.
जब उपयोगकर्ता Tuner.scan(AUTO_SCAN)
को कॉल करता है, तो ये कार्रवाइयां होती हैं:
टीआईएस, फ़्रीक्वेंसी से भरे
FrontendSettings
के साथTuner.scan(AUTO_SCAN)
का इस्तेमाल करता है.अगर सिग्नल लॉक है, तो HAL रिपोर्ट में
LOCKED
मैसेज स्कैन किए जाते हैं. सिग्नल के बारे में ज़्यादा जानकारी देने के लिए, एचएएल अन्य स्कैन मैसेज की भी रिपोर्ट कर सकता है.ज़रूरी जानकारी इकट्ठा करने के लिए, टीआईएस
Frontend.getStatus
का इस्तेमाल करता है.TIS, HAL को उसी फ़्रीक्वेंसी पर अगली सेटिंग पर जाने के लिए
Tuner.scan
कॉल करता है. अगरFrontendSettings
स्ट्रक्चर खाली है, तो HAL अगली उपलब्ध सेटिंग का इस्तेमाल करता है. इसके अलावा, HAL एक बार स्कैन करने के लिएFrontendSettings
का इस्तेमाल करता है और स्कैन की प्रोसेस पूरी होने का एलान करने के लिएEND
भेजता है.टीआईएस, ऊपर दी गई कार्रवाइयों को तब तक दोहराता है, जब तक फ़्रीक्वेंसी की सभी सेटिंग इस्तेमाल नहीं हो जातीं.
स्कैन की प्रोसेस पूरी होने का पता चलने पर, HAL
END
भेजता है.इसके बाद, टीआईएस अपनी फ़्रीक्वेंसी सूची में अगली उपलब्ध फ़्रीक्वेंसी पर स्विच कर देता है.
टीआईएस, Tuner.scan(AUTO_SCAN)
को तब तक फिर से कॉल करता है, जब तक सभी फ़्रीक्वेंसी खत्म नहीं हो जातीं.
स्कैनिंग के दौरान, स्कैन को रोकने या खत्म करने के लिए, stopScan()
या close()
बोलें.
Tuner.scan(BLIND_SCAN)
अगर TIS में फ़्रीक्वेंसी की सूची नहीं है और वेंडर एचएएल, फ़्रंटएंड संसाधन पाने के लिए, उपयोगकर्ता के तय किए गए फ़्रंटएंड की फ़्रीक्वेंसी खोज सकता है, तो Tuner.scan(BLIND_SCAN)
का सुझाव दिया जाता है.
- TIS,
Tuner.scan(BLIND_SCAN)
का इस्तेमाल करता है.FrontendSettings
में, शुरू होने की फ़्रीक्वेंसी के लिए कोई फ़्रीक्वेंसी तय की जा सकती है. हालांकि, टीआईएसFrontendSettings
में मौजूद अन्य सेटिंग को अनदेखा करता है. - अगर सिग्नल लॉक है, तो HAL स्कैन
LOCKED
मैसेज की रिपोर्ट करता है. - ज़रूरी जानकारी इकट्ठा करने के लिए, टीआईएस
Frontend.getStatus
का इस्तेमाल करता है. - स्कैनिंग जारी रखने के लिए, टीआईएस फिर से
Tuner.scan
को कॉल करता है. (FrontendSettings
को ignored किया जाता है.) - टीआईएस, ऊपर दी गई कार्रवाइयों को तब तक दोहराता है, जब तक फ़्रीक्वेंसी की सभी सेटिंग इस्तेमाल नहीं हो जातीं. एचएएल, TIS की किसी कार्रवाई के बिना ही फ़्रीक्वेंसी बढ़ाता है.
एचएएल की रिपोर्ट
PROGRESS
.
टीआईएस, Tuner.scan(AUTO_SCAN)
को तब तक फिर से कॉल करता है, जब तक सभी फ़्रीक्वेंसी खत्म नहीं हो जातीं.
स्कैन की प्रोसेस पूरी होने की जानकारी देने के लिए, HAL 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
Tuner 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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
एसेम्बल किए गए एक सेशन पैकेज को, एफ़एमक्यू में किसी दूसरे सेशन पैकेज से भरा जाता है. |
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 पैकेज, एफ़एमक्यू में किसी दूसरे 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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
एक असेंबल किए गए एमएफ़यू पैकेज को, किसी दूसरे एमएफ़यू पैकेज से एफ़एमक्यू में भरा जाता है. |
isRaw: |
ज़रूरी है:DemuxFilterEvent::DemuxFilterPesEvent[n] DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW ज़रूरी नहीं है: DemuxFilterStatus::LOW_WATER DemuxFilterStatus::HIGH_WATER |
for i=0; i<n; i++ डेटा को HAL के एमक्यू से क्लाइंट बफ़र में कॉपी किया जाता है. |
||
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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
डाउनलोड पैकेज, किसी दूसरे आईपी डाउनलोड पैकेज से एफ़एमक्यू में भरा गया है. |
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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
किसी दूसरे आईपी पेलोड पैकेज से, एफएमक्यू में आईपी पेलोड पैकेज भरा जाता है. |
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 से क्लाइंट बफ़र में कॉपी किया जाता है. |
प्रोटोकॉल हेडर के साथ फ़िल्टर की गई प्रोटोकॉल सब स्ट्रीम, FMQ में भरी जाती है. | |
IP.PAYLOAD_THROUGH TLV.PAYLOAD_THROUGH ALP.PAYLOAD_THROUGH |
लागू नहीं | ज़रूरी नहीं:DemuxFilterStatus::DATA_READY DemuxFilterStatus::DATA_OVERFLOW |
फ़िल्टर किया गया प्रोटोकॉल पेलोड, फ़िल्टर की चेन में अगले फ़िल्टर को फ़ीड करता है. | लागू नहीं |
पीएसआई/एसआई बनाने के लिए फ़िल्टर का इस्तेमाल करने के फ़्लो का उदाहरण
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वीं इमेज. फ़िल्टर से MediaEvent का इस्तेमाल करने का फ़्लो
- 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
का इस्तेमाल, डीवीआर इंस्टेंस की स्थिति की जानकारी देने के लिए किया जाता है.
रिकॉर्डिंग शुरू करने के फ़्लो का उदाहरण
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); } } };
ट्यूनर एचएएल
ट्यूनर एचएएल, एचआईडीएल का पालन करता है और फ़्रेमवर्क और वेंडर हार्डवेयर के बीच इंटरफ़ेस तय करता है. वेंडर, Tuner HAL को लागू करने के लिए इंटरफ़ेस का इस्तेमाल करते हैं. साथ ही, फ़्रेमवर्क इसका इस्तेमाल, Tuner HAL को लागू करने के लिए करता है.
मॉड्यूल
Tuner HAL 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 |
Tuner 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वीं इमेज. Tuner HAL मॉड्यूल के बीच इंटरैक्शन का डायग्राम
फ़िल्टर लिंकेज
Tuner 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वीं इमेज. कई लेयर के लिए फ़िल्टर लिंकेज का फ़्लो डायग्राम
Tuner Resource Manager
Tuner Resource Manager (TRM) से पहले, दो ऐप्लिकेशन के बीच स्विच करने के लिए, एक ही ट्यूनर हार्डवेयर की ज़रूरत होती थी. टीवी इनपुट फ़्रेमवर्क (TIF) में, "पहले हासिल करने वाले को मिलता है" मशीन का इस्तेमाल किया जाता है. इसका मतलब है कि जो ऐप्लिकेशन पहले रिसॉर्स हासिल करता है वह उसे अपने पास रखता है. हालांकि, हो सकता है कि यह तरीका, कुछ जटिल इस्तेमाल के उदाहरणों के लिए सही न हो.
TRM, सिस्टम सेवा के तौर पर काम करता है. इससे ऐप्लिकेशन के लिए ट्यूनर, TVInput
, और सीएएस हार्डवेयर के संसाधनों को मैनेज किया जाता है. टीआरएम, "फ़ोरग्राउंड में ऐप्लिकेशन के चालू होने पर प्राथमिकता" वाले तरीके का इस्तेमाल करता है. यह तरीका, ऐप्लिकेशन के फ़ोरग्राउंड या बैकग्राउंड में होने की स्थिति और इस्तेमाल के उदाहरण के टाइप के आधार पर, ऐप्लिकेशन की प्राथमिकता का हिसाब लगाता है. प्राथमिकता के आधार पर, टीआरएम संसाधन को अनुमति देता है या रद्द करता है. टीआरएम, ब्रॉडकास्ट, ओटीटी, और डीवीआर के लिए, एटीवी के रिसॉर्स मैनेजमेंट को एक ही जगह पर उपलब्ध कराता है.
TRM इंटरफ़ेस
TRM, संसाधनों को रजिस्टर करने, अनुरोध करने या रिलीज़ करने के लिए, Tuner फ़्रेमवर्क, 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
के हिसाब से होना चाहिए.
मनमुताबिक प्राथमिकता वाली वैल्यू और अच्छी वैल्यू
टीआरएम, क्लाइंट के लिए updateClientPriority
उपलब्ध कराता है, ताकि वह अपनी पसंद के मुताबिक प्राथमिकता की वैल्यू और अच्छी वैल्यू को अपडेट कर सके.
मनमुताबिक प्राथमिकता वाली वैल्यू, इस्तेमाल के उदाहरण के टाइप और सेशन आईडी से कैलकुलेट की गई प्राथमिकता वाली वैल्यू को बदल देती है.
nice वैल्यू से पता चलता है कि किसी दूसरे क्लाइंट के साथ टकराव होने पर, क्लाइंट का व्यवहार कितना'निस्संदेह' है. अच्छी वैल्यू, क्लाइंट की प्राथमिकता वाली वैल्यू को कम कर देती है. इसके बाद, इसकी तुलना चुनौती वाले क्लाइंट की प्राथमिकता वाली वैल्यू से की जाती है.
फिर से दावा करने का तरीका
नीचे दिए गए डायग्राम में दिखाया गया है कि रिसॉर्स का कोई विरोध होने पर, रिसॉर्स को फिर से कैसे हासिल किया जाता है और उन्हें कैसे असाइन किया जाता है.
15वीं इमेज. ट्यूनर के संसाधनों के बीच होने वाले संघर्ष के लिए, फिर से दावा करने के तरीके का डायग्राम