डिजिटल राइट मैनेजमेंट

DRM से सुरक्षित कॉन्टेंट चलाने के लिए, ExoPlayer, Android के MediaDrm API का इस्तेमाल करता है. अलग-अलग DRM स्कीम के लिए ज़रूरी Android के कम से कम वर्शन और उन स्ट्रीमिंग फ़ॉर्मैट के बारे में यहां दी गई टेबल में बताया गया है जिनके साथ ये स्कीम काम करती हैं:

डीआरएम स्कीम Android संस्‍करण संख्‍या Android एपीआई लेवल इस्तेमाल किए जा सकने वाले फ़ॉर्मैट
Widevine "cenc" 4.4 19 DASH, HLS (सिर्फ़ FMP4)
Widevine "cbcs" 7.1 25 DASH, HLS (सिर्फ़ FMP4)
ClearKey "cenc" 5.0 21 DASH
PlayReady SL2000 "cenc" Android TV Android TV DASH, SmoothStreaming, HLS (सिर्फ़ FMP4)

DRM से सुरक्षित कॉन्टेंट को ExoPlayer के साथ चलाने के लिए, DRM सिस्टम के UUID की जानकारी देनी होगी. यह जानकारी मीडिया आइटम बनाते समय देनी होगी. साथ ही, अन्य प्रॉपर्टी की जानकारी भी दी जा सकती है. इसके बाद, प्लेयर इन प्रॉपर्टी का इस्तेमाल करके DrmSessionManager का डिफ़ॉल्ट वर्शन बनाएगा. इसे DefaultDrmSessionManager कहा जाता है. यह ज़्यादातर इस्तेमाल के मामलों के लिए सही होता है. कुछ इस्तेमाल के मामलों में, DRM की अतिरिक्त प्रॉपर्टी ज़रूरी हो सकती हैं. इनके बारे में यहां बताया गया है.

डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाना

रोटेट होने वाली कुंजियों के साथ स्ट्रीम चलाने के लिए, मीडिया आइटम बनाते समय 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 को पास कर सकता है. 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 से सुरक्षित कॉन्टेंट चलाने के दौरान वीडियो रुक-रुककर चल रहा है, तो एसिंक्रोनस बफ़र क्यूइंग की सुविधा चालू करें.