ExoPlayer 통합

이 문서에서는 현재 재생목록 및 DRM 통합에 관한 개요를 제공합니다. 도움이 될 수 있습니다

DRM 개선

ExoPlayer Cast 데모 를 사용하여 DRM 구성을 전달하는 구조화된 방법을 활용하도록 업데이트되었습니다. 수신기 애플리케이션에 대한 ExoPlayer의 MediaInfo 전송 샘플 도 이 개요에 동일한 코드가 포함된 데모 수신기를 사용하므로 DRM 지원을 테스트해 보시기 바랍니다. 하지만 DRM으로 보호된 콘텐츠를 전송하려면 자체 콘텐츠를 구축하고 호스팅하여 웹 수신기.

시작하기 전에 자세한 내용은 Google CastExoPlayer를 살펴봅니다. 이 개요에서는 ExoPlayer DRM 구성을 웹 수신기에 연결합니다. 정보 자세한 내용은 공식 ExoPlayer 웹사이트

DRM 구성 제공

ExoPlayer 데모 앱에는 DRM 제공 방법을 보여주는 샘플 코드가 포함되어 있습니다. 구성을 정의합니다. 구성할 수 있는 네 가지 옵션은 다음과 같습니다.

  • Headers - HTTPS 요청에 적용되는 헤더 사전 DRM 라이선스를 검색할 수 없습니다.
  • 라이선스 URL: 라이선스를 취득하는 데 사용된 URL입니다.
  • 보호 시스템: 콘텐츠 보호에 사용되는 DRM 보호 스키마입니다. 예를 들어 Widevine입니다

ExoPlayer에 제공하는 DRM 구성이 수신기로 전송됩니다. MediaInformationcustomData에 있는 속성으로 애플리케이션 객체를 로드해야 할 수 있습니다. 기본적으로 이 속성은 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 미디어 항목별로 하나씩 사용해야 하는 경우, 예를 들어 지정할 수 있습니다.

각 로드 요청 객체에서 ExoPlayerConfig의 사본을 캡처하려면 다음을 만듭니다. 로드 요청 인터셉터를 구현합니다.

첫 번째 단계는 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가 미디어 항목 로드를 시도하기 전에 로드 요청을 전송합니다. 중요한 점은 라이선스 요청 핸들러와 미디어 재생 정보 핸들러 전에 호출됩니다.

로드 요청 인터셉터에 LoadRequestData이 전달됩니다. 객체입니다. 다음과 같은 작업을 할 수 있습니다. 이 객체를 라이선스 요청 핸들러에서 사용할 전역 변수로 저장합니다. 및 미디어 재생 정보 핸들러를 추가합니다.

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

추가 자료

각 DRM 구현은 맞춤이며 이 코드는 데모로 제공됩니다. 전용입니다. DRM 제공업체에 문의하여 ExoPlayer 및 Cast 애플리케이션에 DRM을 구현했습니다.

ExoPlayer 웹사이트에 최신 문서 제공 공지사항입니다. ExoPlayer 및 Cast 통합 관련 문제는 ExoPlayer의 GitHub에서 보고됨 저장소