ExoPlayer इंटिग्रेशन

यह दस्तावेज़ सूची और डीआरएम इंटिग्रेशन के बारे में खास जानकारी देता है.

DRM में सुधार

ExoPlayer Cast डेमो को अपडेट किया गया है, ताकि एक्सोPlayer के MediaInfo रिसीवर ऐप्लिकेशन का इस्तेमाल करके डीआरएम कॉन्फ़िगरेशन पास करने के लिए, सही तरीके का इस्तेमाल किया जा सके. कास्ट सैंपल ऐसे डेमो रिसीवर का भी इस्तेमाल करता है जिसमें इस खास जानकारी में वही कोड शामिल है. इससे आप डीआरएम सपोर्ट की जांच कर सकते हैं. हालांकि, अगर आपको डीआरएम से सुरक्षित कॉन्टेंट कास्ट करना है, तो आपको अपना वेब रिसीवर बनाना और होस्ट करना चाहिए.

शुरुआत करने से पहले, Google Cast और ExoPlayer में डीआरएम सपोर्ट के बारे में जानकारी पाने की कोशिश करें. इस खास जानकारी में बताया गया है कि किसी वेब रिसीवर में ExoPlayer DRM कॉन्फ़िगरेशन को कैसे जोड़ें. ExoPlayer में डीआरएम का इस्तेमाल करने के तरीके की जानकारी के लिए, आधिकारिक ExoPlayer वेबसाइट देखें.

डीआरएम कॉन्फ़िगरेशन उपलब्ध कराना

ExoPlayer डेमो ऐप्लिकेशन में एक सैंपल कोड होता है, जो दिखाता है कि MediaItem के हिस्से के तौर पर DRM कॉन्फ़िगरेशन को कैसे दिया जाए. ऐसे चार विकल्प कॉन्फ़िगर किए जा सकते हैं:

  • हेडर - हेडर की ऐसी डिक्शनरी जिसे डीआरएम लाइसेंस पाने के लिए एचटीटीपीएस अनुरोध पर लागू किया जाता है.
  • लाइसेंस का यूआरएल - लाइसेंस पाने के लिए इस्तेमाल किया जाने वाला यूआरएल.
  • सुरक्षा सिस्टम - डीआरएम सुरक्षा स्कीम, जिसका इस्तेमाल कॉन्टेंट को सुरक्षित रखने के लिए किया जाता है. उदाहरण के लिए, Widevine.

ExoPlayer को दिया गया डीआरएम कॉन्फ़िगरेशन, लोड करने के अनुरोध के तौर पर, आपके रिसीवर के ऐप्लिकेशन को customData में प्रॉपर्टी के तौर पर भेजा जाता है. यह कॉन्फ़िगरेशन, लोड करने के अनुरोध के तहत, MediaInformation ऑब्जेक्ट पर होता है. डिफ़ॉल्ट रूप से, इस प्रॉपर्टी को exoPlayerConfig कहा जाता है, जो यहां दी गई परिभाषा से मेल खाता है.

/**
 * Extended configuration settings for ExoPlayer.
 */
ExoPlayerConfig class {
   constructor() {
    /**
     * Dictionary of headers to apply to the license request.
     * @type {!Object|undefined}
     */
    this.headers;

    /**
     * The URL for your DRM server.
     * @type {string|undefined}
     */
    this.licenseUrl;

    /**
     * Preferred protection system to use for decrypting content.
     * @type {!cast.framework.ContentProtection|undefined}
     */
    this.protectionSystem;

    /**
     * Indicates whether CORS Access-Control requests should be made using
     * credentials such as cookies or authorization headers.
     *
     * If withCredentials is set to true then Access-Control-Allow-Origin cannot
     * be set to '*'.
     * @type {boolean|undefined}
     */
    this.withCredentials;
  }
}

शुरुआती सेट अप

आपने जिस डीआरएम सलूशन का इस्तेमाल किया है उसके आधार पर, आपको licenseRequestHandler और mediaPlaybackInfoHandler को कॉन्फ़िगर करना पड़ सकता है. licenseRequestHandler से आपको यह तय करने की अनुमति मिलती है कि CAF आपके लाइसेंस कुंजी सर्वर से लाइसेंस का अनुरोध कैसे करे. mediaPlaybackInfoHandler आपको हर मीडिया आइटम के हिसाब से PlaybackConfig में बदलाव करने की सुविधा देता है. उदाहरण के लिए, अगर कॉन्टेंट के हर हिस्से को अलग लाइसेंस सर्वर यूआरएल का इस्तेमाल करना है, तो ऐसा किया जा सकता है.

लोड करने के अनुरोध वाले हर ऑब्जेक्ट से ExoPlayerConfig की कॉपी कैप्चर करने के लिए, अपने वेब रिसीवर SDK टूल ऐप्लिकेशन में लोड अनुरोध इंटरसेप्टर बनाएं.

कास्ट ऐप्लिकेशन शुरू करने से पहले, सबसे पहले अपने हैंडलर रजिस्टर करें.

const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();

playbackConfig.licenseRequestHandler =
    licenseRequestHandler;
context.getPlayerManager().setMediaPlaybackInfoHandler(
    mediaPlaybackInfoHandler);
context.getPlayerManager().setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    loadInterceptor);

// starts the Cast application
context.start({playbackConfig: playbackConfig});

रिक्वेस्ट इंटरसेप्टर लोड करें

लोड के लिए अनुरोध करने वाला इंटरसेप्टर एक कॉलबैक है. इसकी मदद से, सीएएफ़ किसी मीडिया आइटम को लोड करने की कोशिश करने से पहले, कास्ट लोड करने के अनुरोध को देख सकता है और उसमें बदलाव कर सकता है. खास तौर पर, इसे लाइसेंस अनुरोध हैंडर और मीडिया प्लेबैक जानकारी हैंडलर से पहले कहा जाता है.

लोड रिक्वेस्ट इंटरसेप्टर को एक LoadRequestData ऑब्जेक्ट मिला है, जिसमें आपके ऐप्लिकेशन से भेजा गया Exo प्लेयर कॉन्फ़िगरेशन शामिल है. अपने लाइसेंस अनुरोध हैंडलर और मीडिया प्लेबैक जानकारी हैंडलर में इस्तेमाल करने के लिए इस ऑब्जेक्ट को ग्लोबल वैरिएबल के तौर पर सेव किया जा सकता है.

loadInterceptor(loadRequestData) {
    // not every load request will have a customData object
    if (loadRequestData.media && loadRequestData.media.customData &&
            loadRequestData.media.customData['exoPlayerConfig']) {
        // exoPlayerConfig is a global variable here
        exoPlayerConfig =
                loadRequestData.media.customData['exoPlayerConfig'];
    }

    // you must return the loadRequestData object
    return loadRequestData;
}

लाइसेंस के अनुरोध को हैंडल करने वाला टूल

लाइसेंस के अनुरोध को हैंडल करने वाले टूल की मदद से, वेब रिसीवर के लिए आपके लाइसेंस सर्वर पर किए जाने वाले एचटीटीपीएस अनुरोध को पसंद के मुताबिक बनाया जा सकता है. हैंडलर को एक NetworkRequestInfo ऑब्जेक्ट पास किया जाता है. इसके बाद, इसका इस्तेमाल एचटीटीपी हेडर जोड़ने, कुकी शामिल करने या यूआरएल में बदलाव करने के लिए किया जा सकता है. हैंडलर को यह ऑब्जेक्ट मिलना चाहिए.

उदाहरण के लिए, अगर आपको अपने लाइसेंस अनुरोध में कस्टम हेडर जोड़ने की ज़रूरत पड़ती है, तो लाइसेंस अनुरोध हैंडलर बनाने का तरीका नीचे दिया गया है:

licenseRequestHandler(networkRequestInfo) {
    if (!exoPlayerConfig) {
        return networkRequestInfo;
    }

    networkRequestInfo.headers =
            exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;

    return networkRequestInfo;
}

मीडिया प्लेबैक जानकारी हैंडलर

मीडिया प्लेबैक जानकारी हैंडलर से आपको अपने प्लेबैक कॉन्फ़िगरेशन में हर मीडिया आइटम के हिसाब से बदलाव करने की सुविधा मिलती है. हैंडलर को LoadRequestData और PlaybackConfig पास किया गया है. आपको प्लेबैक कॉन्फ़िगरेशन दिखाना होगा. कास्ट किए जाने वाले हर आइटम के लोड होने से पहले, मीडिया प्लेबैक जानकारी हैंडलर को कॉल किया जाएगा. अगर आपके पास हर कॉन्टेंट के लाइसेंस के लिए यूआरएल हैं, तो लोड होने से पहले उन्हें और सुरक्षा सिस्टम को बदला जा सकता है.

mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
    if (!exoPlayerConfig) {
        return;
    }

    playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
            exoPlayerConfig.licenseUrl :
            undefined;
    playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
            exoPlayerConfig.protectionSystem :
            undefined;

    return playbackConfig;
}

अतिरिक्त संसाधन

हर डीआरएम लागू करने का तरीका कस्टम होता है और यह कोड सिर्फ़ डेमो के तौर पर दिया गया है. आपने अपने ExoPlayer और कास्ट ऐप्लिकेशन में DRM को सही तरीके से लागू किया है या नहीं, यह पक्का करने के लिए आपको अपने डीआरएम प्रोवाइडर से संपर्क करना चाहिए.

ExoPlayer की वेबसाइट पर, अप-टू-डेट दस्तावेज़ और ज़रूरी सूचनाएं हैं. ExoPlayer और इसके कास्ट इंटिग्रेशन से जुड़ी समस्याओं की शिकायत, ExoPlayer के GitHub डेटा स्टोर करने की जगह पर की जा सकती है.