이 문서에서는 현재 재생목록 및 DRM 통합에 관한 개요를 제공합니다. 도움이 될 수 있습니다
DRM 개선
ExoPlayer Cast 데모
를 사용하여 DRM 구성을 전달하는 구조화된 방법을 활용하도록 업데이트되었습니다.
수신기 애플리케이션에 대한 ExoPlayer의 MediaInfo
전송 샘플
도 이 개요에 동일한 코드가 포함된 데모 수신기를 사용하므로
DRM 지원을 테스트해 보시기 바랍니다. 하지만 DRM으로 보호된 콘텐츠를 전송하려면
자체 콘텐츠를 구축하고 호스팅하여
웹 수신기.
시작하기 전에 자세한 내용은 Google Cast 및 ExoPlayer를 살펴봅니다. 이 개요에서는 ExoPlayer DRM 구성을 웹 수신기에 연결합니다. 정보 자세한 내용은 공식 ExoPlayer 웹사이트
DRM 구성 제공
ExoPlayer 데모 앱에는 DRM 제공 방법을 보여주는 샘플 코드가 포함되어 있습니다. 구성을 정의합니다. 구성할 수 있는 네 가지 옵션은 다음과 같습니다.
- Headers - HTTPS 요청에 적용되는 헤더 사전 DRM 라이선스를 검색할 수 없습니다.
- 라이선스 URL: 라이선스를 취득하는 데 사용된 URL입니다.
- 보호 시스템: 콘텐츠 보호에 사용되는 DRM 보호 스키마입니다. 예를 들어 Widevine입니다
ExoPlayer에 제공하는 DRM 구성이 수신기로 전송됩니다.
MediaInformation
의 customData
에 있는 속성으로 애플리케이션
객체를 로드해야 할 수 있습니다. 기본적으로 이 속성은
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에서 보고됨 저장소