ट्यूनर फ़्रेमवर्क

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 को हैंडल किया जा रहा है.

चौथी इमेज. लाइव ब्रॉडकास्ट को चलाने के लिए ऑडियो/वीडियो हैंडल करना

स्क्रैंबल किए गए कॉन्टेंट को मैनेज करना

लाइव ब्रॉडकास्ट प्लेबैक के डायग्राम के लिए, स्क्रैंबल किए गए कॉन्टेंट को मैनेज करना.

पांचवी इमेज. लाइव ब्रॉडकास्ट को चलाने के लिए, स्क्रैंबल किए गए कॉन्टेंट को मैनेज करना

A/V डेटा प्रोसेस किया जा रहा है

लाइव ब्रॉडकास्ट के वीडियो चलाने के डायग्राम के लिए, ऑडियो/वीडियो डेटा प्रोसेस करें.

छठी इमेज. लाइव ब्रॉडकास्ट को चलाने के लिए ऑडियो/वीडियो को प्रोसेस किया जा रहा है

ट्यूनर SDK API

Tuner SDK API, Tuner JNI, Tuner HAL, और TunerResourceManager. TIS ऐप्लिकेशन, Tuner को ऐक्सेस करने के लिए Tuner SDK API का इस्तेमाल करता है संसाधन और सबकॉम्पोनेंट, जैसे कि फ़िल्टर और डिस् क्रैंबलर को शामिल करें. फ़्रंटएंड और demux, अंदरूनी कॉम्पोनेंट हैं.

ट्यूनर SDK टूल एपीआई का फ़्लो डायग्राम.

सातवीं इमेज. 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 पैकेज का फ़्लो डायग्राम.

आठवीं इमेज. 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:
true
ज़रूरी शर्तें:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

सुझाव:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
इवेंट और अंदरूनी शेड्यूल के मुताबिक, चलाएं
Filter.read(buffer, offset, adjustedSize) एक या एक से ज़्यादा बार.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है.
असेंबल किया गया एक सेशन पैकेज, दूसरे ने एफ़एमक्यू में भरा है सेशन पैकेज के लिए इस्तेमाल किया जा सकता है.
isRaw:
false
ज़रूरी शर्तें:
DemuxFilterEvent::DemuxFilterSectionEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

ज़रूरी नहीं:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER

for i=0; i<n; i++
Filter.read(buffer, offset, DemuxFilterSectionEven[i].size)

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है.
TS.PES isRaw:
true
ज़रूरी शर्तें:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

सुझाव:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
इवेंट और अंदरूनी शेड्यूल के मुताबिक, चलाएं
Filter.read(buffer, offset, adjustedSize) एक या एक से ज़्यादा बार.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है.
असेंबल किया गया एक पीईएस पैकेज, दूसरे ने एफ़एमक्यू से भरा है पीईएस पैकेज.
isRaw:
false
ज़रूरी शर्तें:
DemuxFilterEvent::DemuxFilterPesEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

ज़रूरी नहीं:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER

for i=0; i<n; i++
Filter.read(buffer, offset, DemuxFilterPesEven[i].size)

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है.
MMTP.PES isRaw:
true
ज़रूरी शर्तें:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

सुझाव:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
इवेंट और अंदरूनी शेड्यूल के मुताबिक, चलाएं
Filter.read(buffer, offset, adjustedSize) एक या एक से ज़्यादा बार.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है.
असेंबल किया गया एक एमएफ़यू पैकेज, दूसरे ने एफ़एमक्यू में भरा है एमएफ़यू पैकेज.
isRaw:
false
ज़रूरी शर्तें:
DemuxFilterEvent::DemuxFilterPesEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

ज़रूरी नहीं:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER

for i=0; i<n; i++
Filter.read(buffer, offset, DemuxFilterPesEven[i].size)

डेटा को 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:
true
ज़रूरी नहीं:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW
DemuxFilterStatus::DATA_READY पाने के बाद क्लाइंट, MediaCodec का इस्तेमाल शुरू कर सकता है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है DemuxFilterStatus::DATA_OVERFLOW पाने के बाद क्लाइंट, Filter.flush को कॉल कर सकता है.
लागू नहीं
isPassthrough:
false
ज़रूरी शर्तें:
DemuxFilterEvent::DemuxFilterMediaEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

ज़रूरी नहीं:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
MediaCodec:
का इस्तेमाल करने के लिए for i=0; i<n; i++
linearblock = MediaEvent[i].getLinearBlock();
codec.startQueueLinearBlock(linearblock)
linearblock.recycle()


AudioTrack के डायरेक्ट ऑडियो का इस्तेमाल करने के लिए:
for i=0; i<n; i++
audioHandle = MediaEvent[i].getAudioHandle();
audiotrack.write(encapsulated(audiohandle))
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++
DemuxFilterTsRecordEvent[i];


रिकॉर्ड किए गए कॉन्टेंट के लिए, और आंतरिक शेड्यूल के अनुसार, RecordStatus::* के अनुसार, इनमें से एक:
  • DvrRecord.write(adustedSize) दौड़ें मेमोरी के लिए एक या ज़्यादा बार.
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डेटा को HAL के MQ से डिवाइस के स्टोरेज में ट्रांसफ़र किया जाता है.
  • DvrRecord.write(buffer, adustedSize) दौड़ें बफ़र करने के लिए एक या ज़्यादा बार.
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है.
इंडेक्स डेटा के लिए: इवेंट पेलोड में रखा जाता है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है रिकॉर्ड किए गए कॉन्टेंट के लिए: एफ़एमक्यू से भरी, म्यूट की गई टीएस स्ट्रीम.
TS.TEMI लागू नहीं ज़रूरी शर्तें:
DemuxFilterEvent::DemuxFilterTemiEvent[n]

ज़रूरी नहीं:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
for i=0; i<n; i++
DemuxFilterTemiEvent[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++
DemuxFilterMmtpRecordEvent[i];


रिकॉर्ड किए गए कॉन्टेंट के लिए, RecordStatus::* और इंटरनल शेड्यूल के हिसाब से, इनमें से कोई एक काम करें फ़ॉलो किया जा रहा है:
  • DvrRecord.write(adjustedSize) को एक या उससे ज़्यादा बार चलाएं आइटम को स्टोर करने के लिए सेट करना.
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डेटा को HAL के MQ से डिवाइस के स्टोरेज में ट्रांसफ़र किया जाता है.
  • एक DvrRecord.write(buffer, adjustedSize) चलाएँ या बफ़र करने में ज़्यादा समय लगता है.
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है.
इंडेक्स डेटा के लिए: इवेंट पेलोड में रखा जाता है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है रिकॉर्ड किए गए कॉन्टेंट के लिए: रिकॉर्ड की गई, म्यूज़िक फ़ाइल से भरी गई स्ट्रीम एफ़एमक्यू.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अगर रिकॉर्डिंग के लिए फ़िल्टर सोर्स 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:
true
ज़रूरी नहीं:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW
फ़िल्टर किए गए प्रोटोकॉल सब-स्ट्रीम फ़िल्टर में अगला फ़िल्टर फ़ीड किया जाएगा चेन. लागू नहीं
isPassthrough:
false
ज़रूरी शर्तें:
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वीं इमेज. पीएसआई/एसआई बनाने के लिए फ़्लो

  1. कोई फ़िल्टर खोलें.

    Filter filter = tuner.openFilter(
      Filter.TYPE_TS,
      Filter.SUBTYPE_SECTION,
      /* bufferSize */1000,
      executor,
      filterCallback
    );
    
  2. फ़िल्टर को कॉन्फ़िगर करना और उसे शुरू करना.

    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();
    
  3. 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 इस्तेमाल करने के फ़्लो का उदाहरण

फ़िल्टर से MediaEvent इस्तेमाल करने के फ़्लो का उदाहरण.

11वीं इमेज. फ़िल्टर से MediaEvent का इस्तेमाल करने के लिए फ़्लो

  1. ऑडियो/वीडियो फ़िल्टर खोलें, कॉन्फ़िगर करें, और शुरू करें.
  2. MediaEvent प्रोसेस करें.
  3. MediaEvent पाएं.
  4. लीनियर ब्लॉक को codec के लिए सूची में जोड़ें.
  5. डेटा खर्च हो जाने के बाद, ऑडियो/वीडियो हैंडल छोड़ दें.

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वीं इमेज. रिकॉर्ड शुरू करने के लिए फ़्लो

  1. 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();
    
  2. 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. }
          }
        }
    };
    
  3. 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वीं इमेज. ट्यूनर के बीच टकराव के लिए, फिर से दावा करने के तरीके का डायग्राम संसाधन