ExoPlayer, डीआरएम से सुरक्षित वीडियो चलाने के लिए Android के MediaDrm
एपीआई का इस्तेमाल करता है.
इस टेबल में, काम करने वाले अलग-अलग डीआरएम स्कीम के लिए ज़रूरी Android वर्शन के साथ-साथ, उन स्ट्रीमिंग फ़ॉर्मैट के बारे में बताया गया है जिनके लिए ये स्कीम काम करती हैं:
डीआरएम स्कीम | Android संस्करण संख्या | Android एपीआई लेवल | इस्तेमाल किए जा सकने वाले फ़ॉर्मैट |
---|---|---|---|
वाइडवाइन "सेंस" | 4.4 | 19 | DASH, HLS (सिर्फ़ एफ़एमपी4) |
वाइडवाइन "सीबीसी" | 7.1 | 25 | DASH, HLS (सिर्फ़ एफ़एमपी4) |
ClearKey "cenc" | 5.0 | 21 | DASH |
PlayReady SL2000 "cenc" | Android TV | Android TV | DASH, SmoothStreaming, HLS (सिर्फ़ FMP4) |
ExoPlayer पर डीआरएम से सुरक्षित कॉन्टेंट चलाने के लिए, मीडिया आइटम बनाते समय डीआरएम सिस्टम के यूयूआईडी की जानकारी देना ज़रूरी है. इसके अलावा, अन्य प्रॉपर्टी भी दी जा सकती हैं. इसके बाद, प्लेयर इन प्रॉपर्टी का इस्तेमाल करके, 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) तक के किसी भी वर्शन पर, डीआरएम से सुरक्षित कॉन्टेंट चलाते समय वीडियो में रुकावट आ रही है, तो असाइन्सिंक्रोनस बफ़र क्वेइंग की सुविधा चालू करें.