Classic/VPC 환경에서 이용 가능합니다.
CPIX API를 통해 콘텐츠에 DRM 암호화를 적용할 수 있습니다. CPIX API는 DASH 산업 포럼에서 정의한 Content Protection Information Exchange Format(CPIX) 표준을 기반으로 구현된 API로, 미디어 콘텐츠의 패키징 과정에서 멀티 DRM을 적용하는 데 필요한 키의 연동 규격을 정의합니다. CPIX API를 이용하여 CPIX 기반의 키 연동을 지원하는 인코더·트랜스코더 솔루션과 DoveRunner(구 PallyCon) 멀티 DRM을 쉽게 연동할 수 있습니다.
Live Station 서비스 연동 방법은 Live Station 채널 생성을 참조해 주십시오.
CPIX API 기반 DRM 콘텐츠 암호화
CPIX API를 활용하여 DRM 콘텐츠 암호화를 적용하는 방법은 다음과 같습니다.
| 구분 | 경로 | 설명 |
|---|---|---|
| DoveRunner CPIX API | DoveRunner CPIX API 연동 가이드 | DoveRunner(구 PallyCon)에서 구현한 CPIX API로, 인코더/트랜스코더 솔루션과 연동하여 멀티 DRM 적용. Flussonic Media Server 연동에도 활용 |
| SPEKE API | SPEKE 가이드 | AWS Elemental에서 구현한 CPIX API로, DoveRunner와 사전 연동되어 AWS Elemental MediaPackage 및 MediaConvert에서 멀티 DRM 적용 |
| ATEME NEA-DVR CPIX API | ATEME NEA-DVR 가이드 | Anevia(현재 ATEME에 인수됨)에서 구현한 CPIX API로, NEA-DVR 솔루션과 사전 연동되어 멀티 DRM 적용 |
- DoveRunner(구 PallyCon) CPIX API 클라이언트는 주요 개발 언어별로 사전 구현된 CPIX 클라이언트 모듈을 제공합니다.
- 각 모듈은 KMS 서버와의 통신을 위해 XML 형식의 요청 데이터를 생성하고, 응답 데이터를 해석하는 기능을 제공합니다.
DoveRunner CPIX API 사양
DoveRunner(구 PallyCon) CPIX API 클라이언트는 다음의 사양을 지원합니다.
| 항목 | 지원 사양 | 설명 |
|---|---|---|
| 개발 언어 | C++, C#, Java, Python | DRM 패키징 연동 개발 환경에 맞는 언어별 샘플 코드 제공 |
| DRM 타입 | Widevine, PlayReady, FairPlay, NCG, HLS_NCG |
|
| 암호화 방식 | CENC, CBC1, CENS, CBCS | 클라이언트 플랫폼에서 지원하는 AES 암호화 방식에 따라 일반적으로 CENC 또는 CBCS를 지정 |
| 트랙 유형 | ALL_TRACKS, AUDIO, SD, HD, UHD1, UHD2 | 멀티 키 패키징 환경에서 트랙별로 다른 암호화 키를 적용할 때 사용 |
멀티 DRM 암호화 방식
DRM 콘텐츠의 암호화 방식은 다음과 같습니다.
| 암호화 방식 | 프로토콜 | DRM 타입 | 암호화 알고리즘 | 지원 단말 |
|---|---|---|---|---|
| DRM | HLS |
|
AES-CBC | Mac/iOS Safari 브라우저, iOS/iPadOS/tvOS 앱, HLS HTML5 |
| DRM | DASH |
|
CENC (Common Encryption) | MS Edge, IE11, Chrome, Firefox, Opera DASH HTML5 |
One Click Multi DRM 이용 시나리오
One Click Multi DRM 서비스의 이용 시나리오는 다음과 같습니다.
- DRM 콘텐츠를 암호화합니다.
- 클라이언트(플레이어)에서 DRM 라이선스를 요청합니다. 요청 시
contentId,drmType등의 콘텐츠 설정 정보가 필요합니다. - 클라이언트가 발급받은 라이선스로 DRM 콘텐츠를 재생합니다.
One Click Multi DRM 서비스에서는 사이트에 설정된 정책에 따라 재생·보안 규칙이 적용된 라이선스를 발행합니다. 따라서 요청한 라이선스 정보와 암호화된 DRM 콘텐츠 정보가 일치하지 않으면 재생이 제한되거나 실패할 수 있습니다.
Live 콘텐츠 DRM 암호화
Live 콘텐츠의 DRM 암호화 방법은 다음과 같습니다.
Live Station을 사용할 경우
Live Station을 사용할 경우의 Live 콘텐츠 DRM 암호화 방법은 다음과 같습니다.
- One Click Multi DRM을 통해 사이트를 생성해 주십시오.
- Live Station > Channel Management 메뉴에서 채널을 생성해 주십시오.
- 생성 시 Multi DRM 항목에 1.에서 생성한 사이트를 선택해 주십시오.
Live Station을 사용하지 않을 경우
Live Station을 사용하지 않을 경우의 Live 콘텐츠 DRM 암호화 방법은 다음과 같습니다.
- 다음 항목을 조합하여 콘텐츠 DRM 암호화 API를 호출해 주십시오.
- URL: DoveRunner(구 PallyCon) CPIX API 또는 SPEKE API 등 API별 키 요청 URL
- 추가 URI: One Click Multi DRM 사이트 상세 정보를 통해 획득한 KMS 토큰
- API 응답을 통해 콘텐츠 암호화를 위한 암호화 데이터를 획득해 주십시오.
- 획득한 DRM 암호화 정보를 서드파티 인코더·트랜스코더·패키저 연동 솔루션에 적용해 주십시오.
CPIX API 응답에서 획득하는 DRM 암호화 정보는 다음과 같습니다.
| 필드 | 설명 |
|---|---|
key_id_hex, key_id_b64, key_hex, key_b64, iv_hex, iv_b64 |
16진수 또는 Base64 형태의 Key ID, Key, IV 값 |
pssh |
PlayReady 또는 Widevine에서 사용되는 PSSH 데이터(헤더 포함) |
pssh_payload_only |
PSSH 데이터에서 헤더를 제외한 Payload 부분 |
key_uri |
FairPlay DRM이 적용된 HLS m3u8 파일의 #EXT-X-Key 태그에 포함되는 URI 파라미터 값 |
VOD 콘텐츠 DRM 암호화
VOD 콘텐츠의 DRM 암호화 방법은 다음과 같습니다.
VOD Station을 사용할 경우
VOD Station을 사용할 경우의 VOD 콘텐츠 DRM 암호화 방법은 다음과 같습니다.
- One Click Multi DRM을 통해 사이트를 생성해 주십시오.
- 외부 DRM 서비스를 사용할 경우, 이 단계를 건너뛸 수 있습니다.
- VOD Station > Channel 메뉴에서 채널을 생성해 주십시오.
- 생성 시 Multi DRM 항목에 다음 중 하나를 적용해 주십시오.
- One Click Multi DRM
- DRM Site: 활성화 상태의 DRM 사이트 선택
- Content ID: 재생하려는 콘텐츠의 고유 식별자(DRM 패키징 시 활용)
- <예시>
drm-contents
- <예시>
- 외부 DRM
- DRM 유형: 사용할 DRM 유형 선택
- Content ID: 재생하려는 콘텐츠의 고유 식별자(CPIX API 요청 바디(XML)에 포함)
- <예시>
drm-contents
- <예시>
- DRM System ID: DRM 시스템의 고유 식별자(CPIX API 요청 바디(XML)에 포함)
- 선택한 DRM 유형에 따라 1개 또는 2개의 System ID가 필요하며, 반드시 한 줄에 하나씩 입력
- <예시>
9A04F079-9840-4286-AB92-E65BE0885F95,EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED
- DRM Key URL: CPIX API 요청 URL
- DRM 공급사의 암호화 키 요청 형식에 맞게 입력
- <예시>
https://kms.example.com/cpix/v1/key/ujllldopmquy==
- One Click Multi DRM
- 생성 시 Multi DRM 항목에 다음 중 하나를 적용해 주십시오.
VOD Station을 통한 DRM 암호화는 CPIX v1만 지원합니다.
VOD Station을 사용하지 않을 경우
VOD Station을 사용하지 않을 경우의 VOD 콘텐츠 DRM 암호화 방법은 다음과 같습니다.
- 다음 항목을 조합하여 콘텐츠 DRM 암호화 API를 호출해 주십시오.
- URL: DoveRunner(구 PallyCon) CPIX API 또는 SPEKE API 등 API별 키 요청 URL
- 추가 URI: One Click Multi DRM 사이트 상세 정보를 통해 획득한 KMS 토큰
- API 응답을 통해 콘텐츠 암호화를 위한 암호화 데이터를 획득해 주십시오.
- 획득한 DRM 암호화 정보를 서드파티 인코더·트랜스코더·패키저 연동 솔루션에 적용해 주십시오.
요청
DoveRunner(구 PallyCon) CPIX API를 활용한 요청 형식은 다음과 같습니다.
- 요청 URL
POST https://kms.pallycon.com/v1/cpix/pallycon/getKey/{kmsToken}
- 요청 헤더
- 요청 바디
필드 타입 필수 여부 설명 cpix:CPIXObject Required 콘텐츠 키와 DRM 시스템 정보를 포함하는 CPIX 문서의 루트 요소 └ cpix:ContentKeyListObject Required 콘텐츠 키 목록을 정의하는 컨테이너 요소 └ cpix:ContentKeyObject Required kid(Key ID) 속성을 가진 개별 콘텐츠 키 정보└ cpix:DRMSystemListObject Required DRM 시스템 목록을 정의하는 컨테이너 요소 └ cpix:DRMSystemObject Required kid(Key ID)와systemId(DRM 시스템 식별자) 속성을 가진 각 DRM 시스템 정보 - 요청 예시
curl --location --request POST 'https://kms.pallycon.com/v1/cpix/pallycon/getKey/{kmsToken}' \ --header 'x-ncp-apigw-timestamp: {Timestamp}' \ --header 'x-ncp-iam-access-key: {Access Key}' \ --header 'x-ncp-apigw-signature-v2: {API Gateway Signature}' \ --header 'Content-Type: application/xml' \ --header 'x-ncp-region_code: KR' \ --data '<?xml version="1.0" encoding="UTF-8"?> <cpix:CPIX id="your-content-id" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke"> <cpix:ContentKeyList> <cpix:ContentKey kid="681e5b39-49f2-4dfa-b744-86573c22e6fb"></cpix:ContentKey> </cpix:ContentKeyList> <cpix:DRMSystemList> <!-- Common encryption / MSS (Playready) --> <cpix:DRMSystem kid="681e5b39-49f2-4dfa-b744-86573c22e6fb" systemId="9a04f079-9840-4286-ab92-e65be0885f95" /> <!-- Common encryption (Widevine)--> <cpix:DRMSystem kid="681e5b39-49f2-4dfa-b744-86573c22e6fb" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" /> </cpix:DRMSystemList> </cpix:CPIX>'
응답
DoveRunner(구 PallyCon) CPIX API 요청에 대한 응답 형식은 다음과 같습니다.
- 응답 바디
필드 타입 필수 여부 설명 cpix:CPIXObject - 콘텐츠 아이디(CID) 키와 DRM 시스템 정보를 포함하는 CPIX 문서의 루트 요소 └ cpix:ContentKeyListObject - 콘텐츠 키 목록을 정의하는 컨테이너 요소 └ cpix:ContentKeyObject - kid(Key ID)와explicitIV(초기화 벡터) 속성을 가진 개별 콘텐츠 키 정보kid값은 요청 데이터에 입력된 값과 별개로KMS에서 새로 생성된 값이 적용되며, 키와 IV는 Base64 인코딩된 형태로 리턴됨
└ cpix:DataObject - 콘텐츠 키 데이터를 포함하는 요소 └ pskc:SecretObject - 콘텐츠 키의 비밀 데이터를 포함하는 요소 └ pskc:PlainValueString - Base64로 인코딩된 콘텐츠 키 값 └ cpix:DRMSystemListObject - DRM 시스템 목록을 정의하는 컨테이너 요소 └ cpix:DRMSystemObject - kid(Key ID)와systemId(DRM 시스템 식별자) 속성을 가진 각 DRM 시스템 정보└ cpix:ContentProtectionDataString - Base64로 인코딩된 PSSH 데이터에서 헤더가 제거된 Payload 부분 └ cpix:PSSHString - Base64로 인코딩된 PSSH 데이터(헤더 포함) - 응답 예시
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <cpix:CPIX id="cpix-test-cid" xmlns:cpix="urn:dashif:org:cpix" xmlns:speke="urn:aws:amazon:com:speke" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" > <cpix:ContentKeyList> <cpix:ContentKey explicitIV="MDEyMzQ1Njc4OWFiY2RlZg==" kid="12ea753c-23e7-bc02-4474-b2b976c43beb"> <cpix:Data> <pskc:Secret> <pskc:PlainValue>SzC1qc1cEpyFU6t/lL7Byw==</pskc:PlainValue> </pskc:Secret> </cpix:Data> </cpix:ContentKey> </cpix:ContentKeyList> <cpix:DRMSystemList> <!-- Common encryption / MSS (Playready) --> <cpix:DRMSystem kid="12ea753c-23e7-bc02-4474-b2b976c43beb" systemId="9a04f079-9840-4286-ab92-e65be0885f95"> <cpix:ContentProtectionData>qAUAAAEAAQCeB...A=</cpix:ContentProtectionData><!-- V2에 추가됨 --> <cpix:PSSH>AAACwnBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAqKiAgAAAQABAJgCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBQAEgAWABxAEUAdQBjAGoAQQByAHgARQBkAEwASwA1AGQAcwBRADcANgB3AD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AC8ARgA3AEIAMQBmAEgAMgBlADAAYwA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAHQAZQBzAHQAdABvAGsAeQBvAC4AcABhAGwAbAB5AGMAbwBuAC4AYwBvAG0ALwByAGkALwBwAGwAYQB5AHIAZQBhAGQAeQAvAGwAaQBjAGUAbgBzAGUATQBhAG4AYQBnAGUAcgAuAGQAbwA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</cpix:PSSH> </cpix:DRMSystem> <!-- Common encryption (Widevine)--> <cpix:DRMSystem kid="12ea753c-23e7-bc02-4474-b2b976c43beb" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"> <cpix:ContentProtectionData>qAUAAAEAAQCeB...A=</cpix:ContentProtectionData><!-- V2에 추가됨 --> <cpix:PSSH>AAAAVXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADUIARIQEup1PCPnvAJEdLK5dsQ76xoMaW5rYWVudHdvcmtzIg1jcGl4LXRlc3QtY2lkKgJIRA==</cpix:PSSH> </cpix:DRMSystem> </cpix:DRMSystemList> </cpix:CPIX>