ادغام ExoPlayer

این سند یک نمای کلی از صف بندی و پشتیبانی یکپارچه سازی DRM ارائه می دهد.

پیشرفت های DRM

ExoPlayer Cast Demo برای استفاده از روشی ساختاریافته برای انتقال پیکربندی DRM با استفاده از MediaInfo ExoPlayer به یک برنامه گیرنده به روز شده است. نمونه Cast همچنین از یک گیرنده نمایشی استفاده می کند که شامل همان کد در این نمای کلی است و به شما امکان می دهد پشتیبانی DRM را آزمایش کنید. با این حال، اگر می خواهید محتوای محافظت شده DRM را ارسال کنید، باید گیرنده وب خود را بسازید و میزبانی کنید.

قبل از شروع، مفید است که با مستندات مربوط به پشتیبانی DRM در Google Cast و ExoPlayer آشنا شوید. این نمای کلی به شما نشان می دهد که چگونه پیکربندی ExoPlayer DRM را به یک گیرنده وب متصل کنید. برای اطلاعات در مورد نحوه استفاده از DRM در ExoPlayer، به وب سایت رسمی ExoPlayer مراجعه کنید.

ارائه پیکربندی DRM

برنامه نمایشی ExoPlayer حاوی کد نمونه ای است که نحوه ارائه پیکربندی DRM را به عنوان بخشی از MediaItem نشان می دهد. چهار گزینه ای که می توانید پیکربندی کنید عبارتند از:

  • سرصفحه ها - فرهنگ لغت سرصفحه هایی که به درخواست HTTPS برای بازیابی مجوز DRM اعمال می شود.
  • URL مجوز - URL مورد استفاده برای دریافت مجوز.
  • سیستم حفاظت - طرح حفاظتی DRM که برای محافظت از محتوا، به عنوان مثال، Widevine استفاده می شود.

پیکربندی DRM که به 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;
  }
}

راه اندازی اولیه

بسته به راه حل DRM که استفاده می کنید، ممکن است لازم باشد یک licenseRequestHandler و یک mediaPlaybackInfoHandler را پیکربندی کنید. licenseRequestHandler به شما امکان می دهد نحوه درخواست مجوز CAF از سرور کلید مجوز خود را سفارشی کنید. mediaPlaybackInfoHandler به شما امکان می‌دهد PlaybackConfig بر اساس هر آیتم رسانه تغییر دهید، اگر، برای مثال، هر قسمت از محتوا باید از URL سرور مجوز متفاوتی استفاده کند.

برای گرفتن یک کپی از ExoPlayerConfig از هر شی درخواست بارگذاری، یک رهگیر درخواست بار در برنامه Web Receiver SDK خود ایجاد کنید.

اولین قدم این است که قبل از شروع برنامه 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});

بارگیری رهگیر درخواست

رهگیر درخواست بارگذاری یک تماس برگشتی است که به شما امکان می دهد قبل از اینکه CAF برای بارگیری یک آیتم رسانه ای تلاش کند، درخواست بارگذاری Cast را مشاهده و اصلاح کنید. نکته مهم این است که قبل از انتقال دهنده درخواست مجوز و کنترل کننده اطلاعات پخش رسانه فراخوانی می شود.

به رهگیر درخواست بارگذاری یک شی 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 ارسال می شود، شما باید یک پیکربندی پخش را برگردانید. کنترل کننده اطلاعات پخش رسانه قبل از بارگیری هر موردی که شما ارسال می کنید فراخوانی می شود. اگر نشانی‌های اینترنتی مجوز برای هر محتوا داشتید، می‌توانید آنها و سیستم حفاظتی را قبل از بارگیری تغییر دهید.

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

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

    return playbackConfig;
}

منابع بیشتر

هر پیاده سازی DRM سفارشی است و این کد فقط به صورت نمایشی ارائه می شود. شما باید با ارائه دهنده DRM خود مشورت کنید تا مطمئن شوید که DRM را به درستی در برنامه های ExoPlayer و Cast خود پیاده سازی کرده اید.

وب سایت ExoPlayer دارای اسناد و اعلامیه های به روز است. مشکلات مربوط به ExoPlayer و ادغام Cast آن را می توان در مخزن GitHub ExoPlayer گزارش کرد.