DRM से सुरक्षित कॉन्टेंट को चलाने के लिए, ExoPlayer, Android के MediaDrm एपीआई का इस्तेमाल करता है.
अलग-अलग DRM स्कीम के लिए ज़रूरी Android के कम से कम वर्शन और उन स्ट्रीमिंग फ़ॉर्मैट के बारे में यहां दी गई टेबल में बताया गया है जिनके लिए ये स्कीम काम करती हैं:
| डीआरएम स्कीम | Android संस्करण संख्या | Android एपीआई लेवल | इस्तेमाल किए जा सकने वाले फ़ॉर्मैट |
|---|---|---|---|
| Widevine "cenc" | 4.4 | 19 | डैश, HLS (सिर्फ़ FMP4) |
| Widevine "cbcs" | 7.1 | 25 | डैश, HLS (सिर्फ़ FMP4) |
| ClearKey "cenc" | 5.0 | 21 | DASH |
| PlayReady SL2000 "cenc" | Android TV | Android TV | DASH, SmoothStreaming, HLS (सिर्फ़ FMP4) |
ExoPlayer की मदद से DRM से सुरक्षित कॉन्टेंट चलाने के लिए, DRM सिस्टम के यूयूआईडी को मीडिया आइटम बनाते समय बताना होगा. साथ ही, अन्य प्रॉपर्टी भी दी जा सकती हैं. इसके बाद, प्लेयर इन प्रॉपर्टी का इस्तेमाल करके, DrmSessionManager का डिफ़ॉल्ट वर्शन बनाएगा. इसे DefaultDrmSessionManager कहा जाता है. यह ज़्यादातर इस्तेमाल के उदाहरणों के लिए सही होता है. कुछ मामलों में, डीआरएम की अतिरिक्त प्रॉपर्टी ज़रूरी हो सकती हैं. इनके बारे में यहां बताया गया है.
डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाना
रोटेट होने वाली कुंजियों के साथ स्ट्रीम चलाने के लिए, मीडिया आइटम बनाते समय true को MediaItem.DrmConfiguration.Builder.setMultiSession पर पास करें.
एक से ज़्यादा कीवर्ड वाला कॉन्टेंट
मल्टी-की कॉन्टेंट में कई स्ट्रीम होती हैं. इनमें से कुछ स्ट्रीम, अन्य स्ट्रीम की तुलना में अलग-अलग कुंजियों का इस्तेमाल करती हैं. एक से ज़्यादा कुंजियों वाले कॉन्टेंट को दो तरीकों से चलाया जा सकता है. यह इस बात पर निर्भर करता है कि लाइसेंस सर्वर को कैसे कॉन्फ़िगर किया गया है.
पहला मामला: लाइसेंस सर्वर, कॉन्टेंट के लिए सभी कुंजियों के साथ जवाब देता है
इस मामले में, लाइसेंस सर्वर को इस तरह से कॉन्फ़िगर किया जाता है कि जब उसे किसी एक कुंजी का अनुरोध मिलता है, तो वह कॉन्टेंट की सभी कुंजियों के साथ जवाब देता है. इस मामले को ExoPlayer हैंडल करता है. इसके लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती. अगर स्ट्रीम (जैसे, एसडी और एचडी वीडियो) अलग-अलग कुंजियों का इस्तेमाल करती हैं, तो भी उनके बीच आसानी से अडैप्ट किया जा सकता है.
हमारा सुझाव है कि अगर हो सके, तो अपने लाइसेंस सर्वर को इस तरह से कॉन्फ़िगर करें. यह एक से ज़्यादा कुंजियों वाले कॉन्टेंट को चलाने का सबसे असरदार और भरोसेमंद तरीका है. ऐसा इसलिए, क्योंकि अलग-अलग स्ट्रीम को ऐक्सेस करने के लिए, क्लाइंट को लाइसेंस के कई अनुरोध करने की ज़रूरत नहीं होती.
दूसरा मामला: लाइसेंस सर्वर सिर्फ़ अनुरोध की गई कुंजी का जवाब देता है
इस मामले में, लाइसेंस सर्वर को सिर्फ़ उस कुंजी के साथ जवाब देने के लिए कॉन्फ़िगर किया जाता है जो अनुरोध में दी गई है. इस लाइसेंस सर्वर कॉन्फ़िगरेशन की मदद से, एक से ज़्यादा कुंजियों वाला कॉन्टेंट चलाया जा सकता है. इसके लिए, मीडिया आइटम बनाते समय true को MediaItem.DrmConfiguration.Builder.setMultiSession पास करें.
हमारा सुझाव है कि आप अपने लाइसेंस सर्वर को इस तरह से कॉन्फ़िगर न करें. इसमें एक से ज़्यादा कुंजियों वाले कॉन्टेंट को चलाने के लिए, लाइसेंस के अतिरिक्त अनुरोधों की ज़रूरत होती है. यह पहले बताए गए विकल्प की तुलना में कम असरदार और कम भरोसेमंद है.
ऑफ़लाइन कुंजियां
मीडिया आइटम बनाते समय, MediaItem.DrmConfiguration.Builder.setKeySetId को कुंजी सेट आईडी पास करके, ऑफ़लाइन कुंजी सेट लोड किया जा सकता है.
इससे, ऑफ़लाइन कुंजी सेट में सेव की गई कुंजियों का इस्तेमाल करके, वीडियो को चलाया जा सकता है. इसके लिए, आपको आईडी देना होगा.
कॉन्टेंट को एन्क्रिप्ट (सुरक्षित) करने के लिए डीआरएम सेशन
प्लेसहोल्डर DrmSessions का इस्तेमाल करने से, ExoPlayer को साफ़ कॉन्टेंट के लिए उन्हीं डिकोडर का इस्तेमाल करने की अनुमति मिलती है जिनका इस्तेमाल एन्क्रिप्ट (सुरक्षित) किए गए कॉन्टेंट को चलाने के लिए किया जाता है. जब मीडिया में साफ़ तौर पर दिखने वाले और एन्क्रिप्ट (सुरक्षित) किए गए, दोनों सेक्शन शामिल हों, तो हो सकता है कि आपको प्लेसहोल्डर DrmSessions का इस्तेमाल करना पड़े. ऐसा इसलिए, ताकि साफ़ तौर पर दिखने वाले और एन्क्रिप्ट (सुरक्षित) किए गए सेक्शन के बीच ट्रांज़िशन होने पर, डिकोडर को फिर से न बनाना पड़े. मीडिया आइटम बनाते समय, ऑडियो और वीडियो ट्रैक के लिए प्लेसहोल्डर DrmSessions का इस्तेमाल किया जा सकता है. इसके लिए, true को MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks में पास करना होगा.
कस्टम DrmSessionManager का इस्तेमाल करना
अगर किसी ऐप्लिकेशन को प्लेबैक के लिए इस्तेमाल किए गए DrmSessionManager को पसंद के मुताबिक बनाना है, तो वह
DrmSessionManagerProvider लागू कर सकता है और इसे
MediaSource.Factory को पास कर सकता है. का इस्तेमाल प्लेयर बनाते समय किया जाता है. सेवा देने वाली कंपनी के पास यह विकल्प होता है कि वह हर बार नया मैनेजर इंस्टेंस बनाए या नहीं. हमेशा एक ही इंस्टेंस का इस्तेमाल करने के लिए:
Kotlin
val customDrmSessionManager: DrmSessionManager = CustomDrmSessionManager() // Pass a drm session manager provider to the media source factory. val mediaSourceFactory = DefaultMediaSourceFactory(context).setDrmSessionManagerProvider { customDrmSessionManager }
Java
DrmSessionManager customDrmSessionManager = new CustomDrmSessionManager(/* ... */ ); // Pass a drm session manager provider to the media source factory. MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDrmSessionManagerProvider(mediaItem -> customDrmSessionManager);
वीडियो चलाने की परफ़ॉर्मेंस को बेहतर बनाना
अगर आपको Android 6.0 (एपीआई लेवल 23) से लेकर Android 11 (एपीआई लेवल 30) तक के किसी भी वर्शन पर चलने वाले डिवाइस पर, DRM से सुरक्षित कॉन्टेंट चलाने के दौरान वीडियो रुक-रुककर चलने की समस्या आ रही है, तो एसिंक्रोनस बफ़र क्यूइंग की सुविधा चालू करें.