دمج ExoPlayer

يقدم هذا المستند نظرة عامة على دعم دمج إدارة الحقوق الرقمية والإضافة إلى قائمة المحتوى التالي.

تحسينات إدارة الحقوق الرقمية

تم تحديث العرض التوضيحي لـ ExoPlayer Cast لاستخدام طريقة منظَّمة لتمرير إعدادات DRM باستخدام MediaInfo من ExoPlayer إلى تطبيق جهاز استقبال. ويستخدم نموذج Cast أيضًا جهاز استقبال تجريبي يتضمّن الرمز نفسه الوارد في هذه النظرة العامة، ما يتيح لك تجربة إمكانية استخدام نظام إدارة الحقوق الرقمية (DRM). مع ذلك، إذا أردت بث محتوى محمي بموجب إدارة الحقوق الرقمية (DRM)، يجب إنشاء واستضافة جهاز استقبال الويب الخاص بك.

قبل البدء، سيكون من المفيد أن تطّلع على الوثائق المتعلّقة بدعم DRM في Google Cast وExoPlayer. ستوضّح لك هذه النظرة العامة كيفية توصيل إعدادات ExoPlayer DRM لجهاز استقبال الويب. للحصول على معلومات حول كيفية استخدام إدارة الحقوق الرقمية في ExoPlayer، يُرجى الاطّلاع على موقع ExoPlayer الإلكتروني الرسمي.

توفير إعدادات إدارة الحقوق الرقمية

يحتوي تطبيق ExoPlayer التجريبي على رمز نموذجي يعرض كيفية توفير إعدادات DRM كجزء من MediaItem. الخيارات الأربعة التي يمكنك تهيئتها هي:

  • العناوين: قاموس للعناوين التي يتم تطبيقها على طلب HTTPS لاسترداد ترخيص DRM.
  • عنوان URL للترخيص - عنوان URL المستخدَم للحصول على الترخيص.
  • نظام الحماية - نظام حماية إدارة الحقوق الرقمية المستخدم لحماية المحتوى، على سبيل المثال، Waze.

يتم إرسال إعدادات إدارة الحقوق الرقمية التي تقدّمها إلى 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 على أساس كل عنصر من الوسائط، على سبيل المثال، إذا كان يجب على كل جزء من المحتوى استخدام عنوان URL لخادم ترخيص مختلف.

للحصول على نسخة من ExoPlayerConfig من كل كائن طلب تحميل، يمكنك إنشاء أداة اعتراض طلبات التحميل في تطبيق Web Viewr SDK.

تتمثل الخطوة الأولى في تسجيل المعالجات قبل بدء تطبيق Google Cast.

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});

تحميل أداة اعتراض الطلب

اعتراض طلب التحميل هو استدعاء يتيح لك عرض طلب تحميل Cast وتعديله قبل محاولة CAF تحميل عنصر وسائط. والأهم من ذلك، يتم استدعاءها قبل تسليم طلب الترخيص ومعالج معلومات تشغيل الوسائط.

يتم تمرير اعتراض طلب التحميل على عنصر LoadRequestData يحتوي على إعدادات Exo Player التي أرسلها تطبيقك. ويمكنك حفظ هذا العنصر كمتغيّر عمومي لاستخدامه في معالِج طلبات الترخيص ومعالج معلومات تشغيل الوسائط.

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;
}

معالج طلبات الترخيص

يسمح لك معالج طلبات الترخيص بتخصيص طلب HTTPS الذي يتم تقديمه من خلال أداة استقبال الويب على خادم الترخيص. يمرر المعالج كائن NetworkRequestInfo، ويمكنك استخدامه بعد ذلك لإضافة عناوين HTTP أو تضمين ملفات تعريف الارتباط أو حتى تعديل عنوان URL. ومن المفترض أن يعرض المعالج هذا الكائن.

على سبيل المثال، إذا كنت بحاجة إلى إضافة رؤوس مخصصة إلى طلب الترخيص، يمكنك إنشاء معالج طلب ترخيص مشابه لما يلي:

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

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

    return networkRequestInfo;
}

معالج معلومات تشغيل الوسائط

يتيح لك معالج معلومات تشغيل الوسائط إجراء تغييرات على تهيئة التشغيل على أساس كل عنصر من عناصر الوسائط. تخطى المعالِج LoadRequestData وPlaybackConfig، عليك عرض إعدادات التشغيل. وسيتم استدعاء معالج معلومات تشغيل الوسائط قبل تحميل كل عنصر تقوم ببثه. إذا كان لديك عناوين URL لترخيص لكل محتوى، يمكنك تغييرها ونظام الحماية قبل التحميل.

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

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

    return playbackConfig;
}

موارد أخرى

تكون كل عملية تنفيذ لإدارة الحقوق الرقمية مخصصة ويتم تقديم هذا الرمز كتوضيح فقط. يجب استشارة موفر إدارة الحقوق الرقمية للتأكد من تنفيذ إدارة الحقوق الرقمية بشكل صحيح في تطبيقي ExoPlayer وGoogle Cast.

يعرض موقع ExoPlayer الإلكتروني مستندات وإعلانات محدثة. يمكن الإبلاغ عن المشاكل المتعلقة بـ ExoPlayer ودمج البث في مستودع ExoPlayer GitHub.