-
URLLoader 객체를 사용하여 보호된 내용의 메타데이터 파일 바이트를 로드합니다. 이 객체를
metadata_bytes
와 같은 변수로 설정합니다.
Adobe Access로 제어되는 모든 내용에는 Adobe Access 메타데이터가 있습니다. 내용을 패키지화하는 경우 내용과 함께 이 메타데이터를 별도의 메타데이터 파일(.metadata)로 저장할 수 있습니다. 자세한 내용은 Adobe Access 설명서를 참조하십시오.
-
DRMContentData 인스턴스를 만듭니다. 다음 코드를 try-catch 블록에 넣습니다.
new DRMContentData(
metadata_bytes
)
여기서
metadata_bytes
는 1단계에서 가져온 URLLoader 객체입니다.
-
(Flash Player에만 해당) 런타임에서 Adobe Access 모듈이 있는지 여부를 확인합니다. 찾을 수 없는 경우 DRMErrorEvent 오류 코드 3344 또는 DRMErrorEvent 오류 코드 3343과 함께 IllegalOperationError가 발생합니다.
이 오류를 처리하려면 SystemUpdater API를 사용하여 Adobe Access 모듈을 다운로드합니다. 이 모듈이 다운로드되면 SystemUpdater 객체에서 COMPLETE 이벤트를 전달합니다. 여기에는 이 이벤트에 대한 이벤트 리스너도 포함되어 이 이벤트 전달 시 2단계로 돌아갑니다. 다음 코드는 이러한 단계를 보여 줍니다.
flash.system.SystemUpdater.addEventListener(Event.COMPLETE, updateCompleteHandler);
flash.system.SystemUpdater.update(flash.system.SystemUpdaterType.DRM)
private function updateCompleteHandler (event:Event):void {
/*redo step 2*/
drmContentData = new DRMContentData(metadata_bytes);
}
플레이어 자체를 업데이트해야 하는 경우 상태 이벤트가 전달됩니다. 이 이벤트 처리에 대한 자세한 내용은
업데이트 이벤트 수신
을 참조하십시오.
참고:
AIR 응용 프로그램의 경우 AIR 설치 프로그램에서 Adobe Access 모듈 업데이트 및 필요한 런타임 업데이트를 처리합니다.
-
DRMManager 객체에서 전달된 DRMStatusEvent 및 DRMErrorEvent를 수신하기 위한 리스너를 만듭니다.
DRMManager.addEventListener(DRMStatusEvent.DRM_STATUS, onDRMStatus);
DRMManager.addEventListener(DRMErrorEvent.DRM_ERROR, onDRMError);
DRMStatusEvent 리스너에서는 바우처가 유효한지(null이 아닌지) 확인하고 DRMErrorEvent 리스너에서는 DRMErrorEvents를 처리합니다. 자세한 내용은
DRMStatusEvent 클래스 사용
및
DRMErrorEvent 클래스 사용
을 참조하십시오.
-
내용을 재생하는 데 필요한 바우처(라이센스)를 로드합니다.
먼저, 로컬에 저장된 내용 재생용 라이센스를 로드하려고 시도합니다.
DRMManager.loadvoucher(drmContentData, LoadVoucherSetting.LOCAL_ONLY)
로드가 완료되면 DRMManager 객체에서
DRMStatusEvent.DRM_Status
를 전달합니다.
-
DRMVoucher 객체가 null이 아닌 경우 해당 바우처는 유효합니다. 13단계로 건너뜁니다.
-
DRMVoucher 객체가 null인 경우 이 내용에 대한 정책에서 요구하는 인증 메서드를 확인합니다.
DRMContentData.authenticationMethod
속성을 사용합니다.
-
인증 메서드가
ANONYMOUS
인 경우 13단계로 이동합니다.
-
인증 메서드가
USERNAME_AND_PASSWORD
인 경우 응용 프로그램에서 사용자가 자격 증명을 입력할 수 있도록 하는 메커니즘을 제공해야 합니다. 사용자를 인증하도록 이러한 자격 증명을 라이센스 서버로 전달합니다.
DRMManager.authenticate(metadata.serverURL, metadata.domain, username, password)
인증이 실패하는 경우
DRMAuthenticationErrorEvent
, 인증이 성공하는 경우
DRMAuthenticationCompleteEvent
를 DRMManager에서 전달합니다. 이러한 이벤트에 대한 리스너를 생성합니다.
-
인증 방법이
UNKNOWN
인 경우 사용자 정의 인증 방법을 사용해야 합니다. 이 경우 ActionScript 3.0 API를 사용하지 않고 오프라인 방식으로 수행되는 인증을 내용 공급자가 준비해 둡니다. 사용자 정의 인증 절차에서는
DRMManager.setAuthenticationToken()
메서드에 전달할 수 있는 인증 토큰을 생성해야 합니다.
-
인증이 실패하면 응용 프로그램에서 9단계로 돌아가야 합니다. 응용 프로그램에 반복되는 인증 실패를 처리 및 제한하기 위한 메커니즘이 있어야 합니다. 예를 들어 세 번의 시도 후에 사용자에게 인증이 실패하여 내용을 재생할 수 없다는 메시지를 표시합니다.
-
사용자에게 자격 증명을 입력하라는 메시지를 표시하지 않고 저장된 토큰을 사용하려면
DRMManager.setAuthenticationToken()
메서드로 토큰을 설정합니다. 그러면 라이센스 서버에서 라이센스를 다운로드하여 8단계와 같이 내용을 재생할 수 있습니다.
-
(선택 사항) 인증이 성공하면 메모리에 캐시된 바이트 배열인 인증 토큰을 캡처할 수 있습니다. 이 토큰을 가져오는 데는
DRMAuthenticationCompleteEvent.token
속성을 사용합니다. 인증 토큰을 저장하여 사용하면 사용자가 이 내용에 대한 자격 증명을 매번 입력할 필요가 없습니다. 라이센스 서버에서 인증 토큰의 유효 기간을 확인합니다.
-
인증이 성공하면 라이센스 서버에서 라이센스를 다운로드합니다.
DRMManager.loadvoucher(drmContentData, LoadVoucherSetting.FORCE_REFRESH)
로드가 완료되면 DRMManager 객체에서 DRMStatusEvent.DRM_STATUS를 전달합니다. 이 이벤트를 수신하고 전달된 후에 내용을 재생할 수 있습니다.
-
NetStream 객체를 만든 다음 해당
play()
메서드를 호출하여 비디오를 재생합니다.
stream = new NetStream(connection);
stream.addEventListener(DRMStatusEvent.DRM _STATUS, drmStatusHandler);
stream.addEventListener(DRMErrorEvent.DRM_ERROR, drmErrorHandler);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.client = new CustomClient();
video.attachNetStream(stream);
stream.play(videoURL);