मीडिया कंडिशनल ऐक्सेस सिस्टम (मीडिया सीएएस) फ़्रेमवर्क, कई तरह के डिजिटल टीवी पर शर्तों के ऐक्सेस (सीए) की सेवाएं चालू करने के लिए एपीआई हार्डवेयर, जिसमें डिजिटल केबल, सैटलाइट, टेरेस्ट्रीयल सिस्टम, और IPTV शामिल हैं सिस्टम. यह फ़्रेमवर्क, Android TV इनपुट फ़्रेमवर्क और Android TV ट्यूनर फ़्रेमवर्क, उपलब्ध कराने के लिए किया जा सकता है.
मीडिया सीएएस के मुख्य मकसद यहां दिए गए हैं.
- सार्वजनिक Java API और नेटिव प्लगिन फ़्रेमवर्क उपलब्ध कराएं, ताकि इनका इस्तेमाल किया जा सके तीसरे पक्ष के डेवलपर और OEM, Android में ब्रॉडकास्ट टीवी के लिए सीएएस की सुविधा देने के लिए काम करते हैं.
- Android में ऐसा सीएएस फ़्रेमवर्क उपलब्ध कराएं जो एटीवी ओईएम को इंटरऑपरेट करने में मदद करे के साथ-साथ कई अन्य
- नेटिव प्लगिन का इस्तेमाल करके, तीसरे पक्ष के कई सीएएस वेंडर के साथ काम करें. सीएएस प्लगिन, वेंडर के हिसाब से नेटवर्क प्रोटोकॉल और एनटाइटलमेंट का इस्तेमाल कर सकते हैं मैनेजमेंट मैसेज (ईएमएम)/एनटाइटलमेंट कंट्रोल मैसेज (ईसीएम) के फ़ॉर्मैट, और डीस्क्रैंबलर होता है.
- कुंजी की सीढ़ी जैसी हार्डवेयर सुरक्षा के लिए सहायता.
- TrustZone जैसे भरोसेमंद एक्ज़ीक्यूशन एनवायरमेंट (टीईई) के साथ काम करें.
इस्तेमाल किए जा सकने वाले कॉन्फ़िगरेशन
हार्डवेयर ट्यूनर का कॉन्फ़िगरेशन
अगर हार्डवेयर, MPEG ट्रांसपोर्ट स्ट्रीम के डीमल्टीप्लेक्सिंग के लिए ज़िम्मेदार है ट्यूनर फ़्रेमवर्क के हिसाब से, दोनों को डिकोड किया जा सकता है. कंडिशनल ऐक्सेस प्रोग्राम से जुड़ी खास जानकारी (पीएसआई) का डेटा TIS ऐप्लिकेशन को हार्डवेयर-आधारित टीवी ट्यूनर के साथ इंटरफ़ेस करने के लिए तैयार किया गया है.
कंडिशनल ऐक्सेस पीएसआई डेटा में सीए डिस्क्रिप्टर, ईसीएम, और ईएमएम शामिल होते हैं. ये स्ट्रक्चर, फ़ाइलों को डिक्रिप्ट करने के लिए ज़रूरी कुंजियां पाने के लिए CAS प्लगिन को चालू करता है कॉन्टेंट स्ट्रीम.
पहला डायग्राम. हार्डवेयर ट्यूनर का कॉन्फ़िगरेशन
हार्डवेयर कॉन्फ़िगरेशन में TEE लेयर हो सकती है, जैसे कि TrustZone, जिसे पहली इमेज में दिखाया गया है. अगर टीईई लेयर नहीं है, तो सीएएस क्लाइंट प्लगिन, हार्डवेयर कुंजी की मदद से कार खोलने या चालू करने के लिए उपलब्ध हार्डवेयर कुंजी की मदद से, प्लैटफ़ॉर्म. वेंडर के हिसाब से अलग-अलग इंटरफ़ेस होने की वजह से, मीडिया सीएएस उनका स्टैंडर्ड नहीं बनाता है.
सॉफ़्टवेयर कॉन्फ़िगरेशन
Android 11 से पहले के वर्शन में, मीडिया सीएएस फ़्रेमवर्क अब भी का इस्तेमाल सॉफ़्टवेयर-आधारित कॉन्टेंट को प्रोसेस करने के लिए किया जा सकता है. जैसे, आईपी से IPTV मल्टीकास्ट/यूनिकास्ट फ़ॉर्मैट वाले ऐप्लिकेशन. TIS ऐप्लिकेशन, इंस्टैंशिएट करने और सही तरीके से काम करने के लिए ज़िम्मेदार है मीडिया CAS Java ऑब्जेक्ट का प्रावधान किया जा रहा है.
ऐप्लिकेशन, जानकारी को एक्सट्रैक्ट करने के लिए MediaExtractor या अन्य MPEG2-TS पार्सर का इस्तेमाल कर सकता है सीए से जुड़ा पीएसआई डेटा, जैसे कि सीए डिस्क्रिप्टर, ईसीएम, और ईएमएम. अगर ऐप्लिकेशन, मीडिया एक्सट्रैक्टर फ़्रेमवर्क के साथ काम करता है, तो यह CAS सेशन को डेलिगेट कर सकता है मैनेज करना. जैसे, सेशन खोलना और ईएमएम/ईसीएम को प्रोसेस करना. MediaExtractor. इसके बाद MediaExtractor नेटिव का इस्तेमाल करके सीएएस सेशन को कॉन्फ़िगर करता है एपीआई को सीधे तौर पर इस्तेमाल किया जा सकता है.
अगर ऐसा नहीं होता है, तो सीए से जुड़ा पीएसआई डेटा निकालने की ज़िम्मेदारी ऐप्लिकेशन की होती है और मीडिया सीएएस जावा एपीआई का इस्तेमाल करके सीएएस सेशन को कॉन्फ़िगर करना उदाहरण के लिए, जब ऐप्लिकेशन खुद का MPEG2-टीएस पार्सर इस्तेमाल करता है.
दूसरा डायग्राम. IPTV इनपुट, CAS और डिस् क्रैंबलर कॉन्फ़िगरेशन फ़्रेमवर्क MediaExtractor
सॉफ़्टवेयर एक्सट्रैक्टर स्थिति में, एक्सट्रैक्टर को एक सॉफ़्टवेयर की ज़रूरत होती है या हर स्क्रैंबल किए गए ट्रैक के लिए, हार्डवेयर पर आधारित डिस् क्रैंबलर ऑब्जेक्ट, चाहे ट्रैक में सुरक्षित डिकोडर की ज़रूरत हो या नहीं. ऐसा इस वजह से होता है हैं.
- अगर ट्रैक को सुरक्षित तरीके से डिकोड नहीं करना पड़ता है, तो एक्सट्रैक्टर काम नहीं करता है
बफ़र को मिटाने और सैंपल को एक्सट्रैक्ट करने की
स्ट्रीम साफ़ करें. ऐसा होने पर,
MediaCodec
का शामिल होने की ज़रूरत नहीं है दिखना बंद हो जाएगा. अगर ट्रैक को सुरक्षित तरीके से डिकोड करने की ज़रूरत है, तो डेटा इकट्ठा करने वाला टूल ऐसा भी कर सकता है आपको डिस् क्रैंबलर की ज़रूरत है. ऐसा तब होता है, जब ट्रांसपोर्ट स्ट्रीम होती है जो ट्रांसपोर्ट पैकेट लेवल पर स्क्रैंबल किए गए हों, जहां पैकेट वाले प्राइमरी स्ट्रीम (पीईएस) हेडर साफ़ नहीं है. डेटा इकट्ठा करने वाले टूल को पीईएस ऐक्सेस करना होगा हेडर, नीचे की ओर स्क्रोल करके कुछ जानकारी (उदाहरण के लिए, प्रज़ेंटेशन टाइमस्टैंप).
एक्सट्रैक्टर, डिस्क्रैंबलर का इस्तेमाल नहीं करता है, अगर ट्रांसपोर्ट स्ट्रीम ये वीडियो, पीईएस पैकेट के लेवल पर दिखाए गए हैं. इनमें पीईएस हेडर को साफ़ तौर पर दिखाया गया है. हालांकि, यह पुष्टि नहीं हो सकती कि कब तक स्क्रैमिंग होती है असल स्क्रैंबल किए गए पैकेट आ जाते हैं. इसे आसानी से समझने के लिए, मान लें कि डिस्क्रैंबलर का इस्तेमाल किया गया है अगर ट्रैक को प्रोग्राम मैपिंग के आधार पर स्क्रैंबल किया गया हो टेबल (PMT).
सॉफ़्टवेयर कॉन्फ़िगरेशन की सीमाएं
जब ट्रैक को सुरक्षित तरीके से डिकोड करने की ज़रूरत हो, तो डिस् क्रैंबलर को किसी गड़बड़ी को ठीक से बंद करते समय चेतावनी बफ़र. अगर वीडियो डिकोड करने की ज़रूरत हो, तो असुरक्षित ऑडियो डिकोडिंग की ज़रूरत होती है सुरक्षित डिकोडर का इस्तेमाल किया जाता है, तो इसे ऑडियो के अलावा किसी दूसरे सेशन में स्क्रैंबल किया जाना चाहिए. सेशन के लिए, ईसीएम को प्लगिन को यह सिग्नल देना चाहिए कि यह एक सुरक्षित डिकोडर है आवश्यक है.
इसके अलावा, प्लगिन ऐसा होना चाहिए कि वह सुरक्षा नीति की कड़ी बनाई जाती है. ऐसा न करने पर, ऐप्लिकेशन आसानी से वीडियो ऐक्सेस कर सकता है ऑडियो डिस् क्रैंबलर वाले फ़्रेम दिखाई देते हैं.
यहां तक कि सेशन को तब भी सुरक्षित डिकोडर की ज़रूरत होती है, जब एक्सट्रैक्टर के ज़रिए बफ़र को मिटाने के लिए, डेटा का एक छोटा हिस्सा दिखाने को कहा गया ताकि PES हेडर को प्रोसेस किया जा सके. नुकसान पहुंचाने वाले ऐप्लिकेशन को प्लगिन बनाने से रोकने के लिए पूरा ऐक्सेस यूनिट दिखाता है, लेकिन प्लगिन को ट्रांसपोर्ट पेलोड पार्स करना होगा ताकि यह पक्का किया जा सके कि पेलोड, सही स्ट्रीम के पीईएस हेडर से शुरू हो टाइप करें. अगर ऐसा नहीं है, तो प्लगिन को यह अनुरोध अस्वीकार कर देना चाहिए.
सीए ट्यूनिंग सीक्वेंस
किसी नए चैनल पर ट्यून करने पर, सीए सर्टिफ़िकेट पाने के लिए टीआईएस मॉड्यूल रजिस्टर होता है डिस्क्रिप्टर, ईसीएम, और ईएमएम की जानकारी भी देख सकते है. CA डिस्क्रिप्टर इसमें सीए सिस्टम आईडी होता है, जो किसी खास सीए की पहचान करता है वेंडर और अन्य वेंडर से जुड़ा डेटा होता है. TIS क्वेरी मीडिया CAS से पता चलता है कि कोई CAS प्लगिन मौजूद है या नहीं, जो CA डिस्क्रिप्टर को हैंडल कर सकता है.
तीसरी इमेज. सीएएस कॉन्टेंट को ट्यून किया जा रहा है
अगर सीए सिस्टम आईडी काम करता है, तो मीडिया सीएएस का एक इंस्टेंस बनाया जाता है साथ ही, सीए डिस्क्रिप्टर से मिला वेंडर का निजी डेटा, प्लगिन को दिया जाता है. इसके बाद, ऑडियो और वीडियो को मैनेज करने के लिए, मीडिया सीएएस में नए सेशन खुलते हैं स्ट्रीम. नए सेशन में प्लगिन के लिए, ईसीएम और ईएमएम मिलते हैं.
सीएएस प्लगिन के फ़्लो का सैंपल
TIS, Media CAS API का इस्तेमाल करके सीएएस प्लगिन को ईसीएम डिलीवर करता है. ईसीएम
इसमें एन्क्रिप्ट (सुरक्षित) किया गया कंट्रोल शब्द है, जिसे डिक्रिप्ट करना ज़रूरी है
ईएमएम से मिली जानकारी का इस्तेमाल करके. सीएएस प्लगिन की मदद से, यह तय किया जाता है कि
वेंडर की खास जानकारी के आधार पर, ऐसेट के लिए ईएमएम
सीए डिस्क्रिप्टर, जिसे setPrivateData()
तरीके से उपलब्ध कराया जाता है.
ईएमएम को कॉन्टेंट स्ट्रीम में बैंड में या इसका इस्तेमाल करके बैंड के बाहर डिलीवर किया जा सकता है
CA प्लगिन से नेटवर्क के लिए अनुरोध किया गया. TIS, processEMM()
तरीके का इस्तेमाल करता है
सीए प्लगिन को बैंड ईएमएम में कोई भी डिलीवर करने के लिए.
अगर ईएमएम पाने के लिए नेटवर्क अनुरोध की ज़रूरत है, तो सीए प्लगिन जो लाइसेंस सर्वर के साथ नेटवर्क लेन-देन करने के लिए ज़िम्मेदार है.
चौथी इमेज. ईएमएम और ईसीएम प्रोसेसिंग के लिए सीएएस प्लगिन का उदाहरण
ईएमएम मिलने पर सीए प्लगिन, ईएमएम पाने के लिए इसे पार्स करता है का उपयोग करें. एन्क्रिप्ट (सुरक्षित) किया गया ईएमएम कुंजी और एन्क्रिप्ट (सुरक्षित) किए गए कंट्रोल शब्द को, कुंजी की सीढ़ी या भरोसेमंद बोर्ड में लोड किया जा सकता है पर्यावरण को बेहतर बनाने के लिए, दिखने लगता है.
मीडिया सीएएस जावा एपीआई
मीडिया सीएएस Java API में ये तरीके शामिल हैं.
डिवाइस पर उपलब्ध सभी CA प्लगिन की सूची बनाएं.
class MediaCas.PluginDescriptor { public String getName(); public int getSystemId(); } static PluginDescriptor[] enumeratePlugins();
बताए गए CA सिस्टम के लिए एक मीडिया CAS इंस्टेंस बनाएं. इसका मतलब है कि मीडिया सीएएस फ़्रेमवर्क एक साथ कई सीएएस सिस्टम को मैनेज कर सकता है.
MediaCas(int CA_system_id); MediaCas(@NonNull Context context, int casSystemId, @Nullable String tvInputServiceSessionId, @PriorityHintUseCaseType int priorityHint);
किसी इवेंट लिसनर को रजिस्टर करें और ऐप्लिकेशन को ऐसा हैंडलर तय करने की अनुमति दें जिसका लूपर का इस्तेमाल किया जाता है.
interface MediaCas.EventListener { void onEvent(MediaCas, int event, int arg, byte[] data); void onSessionEvent(@NonNull MediaCas mediaCas, @NonNull Session session, int event, int arg, @Nullable byte[] data); void onPluginStatusUpdate(@NonNull MediaCas mediaCas, @PluginStatus int status, int arg); void onResourceLost(@NonNull MediaCas mediaCas); } void setEventListener(MediaCas.EventListener listener, Handler handler);
सीए सिस्टम के लिए निजी डेटा भेजें. निजी डेटा आ सकता है सीए डिस्क्रिप्टर से, कंडिशनल ऐक्सेस टेबल से या सोर्स से बाहर निकाल दिया जाता है. यह किसी खास सेशन से जुड़ा हुआ नहीं है.
void setPrivateData(@NonNull byte[] data);
ईएमएम पैकेट प्रोसेस करें.
void processEmm(@NonNull byte[] data, int offset, int length);
सीए सिस्टम में इवेंट भेजें. इवेंट का फ़ॉर्मैट यह है खास तौर पर स्कीम के लिए हो और जो फ़्रेमवर्क के हिसाब से ओपेक न हो.
void sendEvent(int event, int arg, @Nullable byte[] data);
सीए के लिए, इस तरह की प्रोविज़निंग शुरू करें सिस्टम. जब कोई डिवाइस किसी सशुल्क टीवी सेवा के लिए साइन अप करता है पहली बार, इसे सीएएस सर्वर में प्रावधान करने की ज़रूरत होती है चुनें. डिवाइस के सेटअप के लिए, मिलते-जुलते पैरामीटर का एक सेट उपलब्ध कराएं.
void provision(String provisionString);
एनटाइटलमेंट को रीफ़्रेश करने के लिए ट्रिगर करें. जब कोई उपयोगकर्ता किसी नया चैनल (उदाहरण के लिए, किसी विज्ञापन का जवाब देकर) या इलेक्ट्रॉनिक प्रोग्राम गाइड (ईपीजी) पर कोई चैनल जोड़कर, ऐप्लिकेशन को CA क्लाइंट को एनटाइटलमेंट कुंजियों को रीफ़्रेश करने के बारे में बता सकेंगे.
void refreshEntitlements(int refreshType);
मीडिया CAS ऑब्जेक्ट बंद करें.
void close();
कोई सेशन खोलें.
Session openSession(); Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
पहले से खोले गए सेशन को बंद करें.
void Session#close();
पीएमटी में, सीए के डिस्क्रिप्टर से मिला सीए का निजी डेटा दें प्रोग्राम की जानकारी या ES की जानकारी वाले सेक्शन से लेकर सीएएस सेशन तक.
void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
किसी सेशन के लिए, ईसीएम पैकेट प्रोसेस करना.
void Session#processEcm(@NonNull byte[] data, int offset, int length);
सेशन आईडी पाएं.
byte[] Session#getSessionId();
सीए सिस्टम पर सेशन इवेंट भेजें. फ़ॉर्मैट इवेंट सिर्फ़ स्कीम से जुड़ा है और फ़्रेमवर्क के बारे में साफ़ तौर पर नहीं बताया गया है.
void Session#sendSessionEvent(int event, int arg, @Nullable byte[] data);