License 클라이언트 연동

Prev Next

One Click Multi DRM 상품을 통해 발행하는 라이선스를 Player 에 연동하기 위해 이해를 돕기 위해 작성된 가이드입니다.

참고

라이선스 발급 유의 사항은 다음과 같습니다.

  • 클라이언트(Player) 연동을 위해 DRM 타입별 라이선스 발급 가이드를 반드시 참고하시기 바랍니다.
  • 라이선스 발급은 플레이어 요청/구현 방안에 맞춰 맞는 타입으로 요청해야 합니다.
  • 보편적인 상용 플레이어(html5/videojs/shaka)에서는 라이선스를 json 이 아닌 original (binary) 타입을 지원합니다.
  • fairplay 라이선스 경우 ceritificateUri 및 certificateRequestHeader 헤더를 반드시 활용하여 라이선스를 요청합니다.
  • fairplay 라이선스 대한 응답이 binary로 필요한 경우, GET ​/license​/fairPlayBinary 를 통해 응답을 획득합니다.
  • NCP VPE (Video Player Enhancement) 를 통해 DRM 을 연동할 경우 VPE 콘텐츠 인증 가이드를 참고합니다
  • Video Player Enhancement를 활용하여 One Click Multi DRM 라이선스를 요청할 경우 1.1.1 이후 버전에서만 지원합니다.
  • 모든 라이선스 요청은 DRM 콘텐츠를 재생할 단말 기기 정보와 플레이어 구현을 통해 요청하셔야 합니다.

Player 연동 하기

요청 헤더

헤더명 필수 여부 설명
x-ncp-apigw-timestamp YES 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)로 나타냄
API Gateway 서버와 시간 차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주
x-ncp-apigw-timestamp:{Timestamp}
x-ncp-iam-access-key YES 네이버 클라우드 플랫폼 포털에서 발급받은 Access Key ID 값
x-ncp-iam-access-key:{Sub Account Access Key}
x-ncp-apigw-signature-v2 YES Access Key ID 값과 Secret Key로 암호화한 서명
x-ncp-apigw-signature-v2:{API Gateway Signature}
Content-Type YES Request body content type을 application/json으로 지정
Content-Type: application/json
x-ncp-region_code YES 리전 코드 (KR)
x-drm-token YES One Click Multi DRM 라이선스 발급에 필수 데이터가 포함된 암호화된 토큰값
x-drm-token:{X-DRM-TOKEN}

x-drm-token 헤더

One Click Multi DRM API 를 통해 라이선스를 발급하기 위해 X-DRM-TOKEN 헤더 인증이 필수로 필요합니다.
X-DRM-TOKEN 헤더 값 경우, 아래 JSON 데이터를 Base64 문자열로 변환한값을 입력합니다.

  • One Click Multi DRM 상품에서는 X-DRM-TOKEN 헤더를 통해 해당 콘텐츠와 사이트의 권한이 있는 사용자인지 확인하며, 요청한 사이트에 설정된 콘텐츠 보안 정책에 따라 DRM 라이선스 규칙을 설정합니다.
필드명 필수 여부 유효 값 설명
siteId YES 라이선스 발행을 위한 사이트 ID
contentId YES 재생하려는 콘텐츠의 고유 ID
DRM 패키징 시에 사용된 값으로 최소 3글자 이상 영문/숫자 또는 ‘-'(하이픈), ‘_'(언더바) 포함 최대100자 문자까지 입력 가능
drmType YES WIDEVINE
PLAYREADY
FAIRPLAY
라이선스를 요청하는 DRM 타입
responseFormat YES ORIGINAL
JSON
라이선스 요청에 대한 응답 데이터 유형. (기본값: ORIGINAL)
* ORIGINAL: 요청한 바이너리 라이선스 데이터 응답
* JSON : 라이선스 데이터와 추가 정보(클라이언트 기기 ID 등)를 포함한 JSON 형식으로 응답. 토큰 프록시 또는 클라이언트 SDK를 사용하는 경우에만 적용 가능
userId Yes String 라이선스를 요청한 사용자의 고유 ID (서비스 사이트에서 관리하는 유저 ID 혹은 DRM 컨텐츠를 재생한 사용자 계정)

x-drm-token 헤더 생성하기

x-drm-token 을 생성 하는 방법은 다음과 같습니다.

  1. 라이선스 요청을 위해 필수적인 siteId, contentId, drmType, responseFormat, userId 를 JSON으로 입력합니다.
# json
{"siteId":"drm-20231115142326-nHyNw","contentId":"my-drm-content-sample","drmType":"WIDEVINE","responseFormat":"original","userId":"d41d8cd98f00b204e9800998ecf8427e"}
  1. 입력한 JSON 데이터를 Base64 URL 로 인코딩 합니다.
# Base64 Encrypted String 
eyJzaXRlSWQiOiJkcm0tMjAyMzExMTUxNDIzMjYtbkh5TnciLCJjb250ZW50SWQiOiJteS1kcm0tY29udGVudC1zYW1wbGUiLCJkcm1UeXBlIjoiV0lERVZJTkUiLCJyZXNwb25zZUZvcm1hdCI6Im9yaWdpbmFsIiwidXNlcklkIjoiZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UifQ==
주의

Base64로 인코딩 되는 과정에 JSON의 공백값이나 엔터값을 포함하지 않도록 주의 부탁드립니다.

Player 구현 예시

x-drm-token 헤더 포함 예시

//widevine license request sample
'com.widevine.alpha': {
    src: 'https://uz1urqjj2471.beta-edge.naverncp.com/live/video/ls-20231031105925-YvxnQ/live.mpd', //DRM Encryption 이 적용된 DRM 콘텐츠 재생 경로
    licenseUri: 'https://multi-drm.apigw.gov-ntruss.com/api/v1/license', //DRM license 발급을 위한 경로
    licenseRequestHeader: {
        'X-NCP-REGION_CODE': 'KR',
        'X-ncp-apigw-timestamp': 1698832564997,
        'X-ncp-iam-access-key': 'ft1GKEpjSc53lHuqtAxE',
        'x-ncp-apigw-signature-v2': 'Z0LjTbqFjWtxlRskM8vDj5Uha1FGhE4fzdds2ZO8FrQ=',
        'X-DRM-TOKEN': 'eyJyZXNwb25zZUZvcm1hdCI6Im9yaWdpbmFsIiwic2l0ZUlkIjoiZHJtLTIwMjMxMTAxMDgyMzE2LWRKREdhIiwiY29udGVudElkIjoidGVzdENvbnRlbnRJZCIsImRybVR5cGUiOiJXSURFVklORSJ9'
    } //One Click Multi DRM 상품 활용을 위한 apigw 필수 인증 및 X-DRM-TOKEN 헤더값
},

//playready license request sample
'com.microsoft.playready': {
    src: 'https://uz1urqjj2471.beta-edge.naverncp.com/live/video/ls-20231031105925-YvxnQ/live.mpd',  //DRM Encryption 이 적용된 DRM 콘텐츠 재생 경로
    licenseUri: 'https://multi-drm.apigw.gov-ntruss.com/api/v1/license',   //DRM license 발급을 위한 경로
    licenseRequestHeader: {
        'X-NCP-REGION_CODE': 'KR',
        'X-ncp-apigw-timestamp': 1698832564997,
        'X-ncp-iam-access-key': 'ft1GKEpjSc53lHuqtAxE',
        'x-ncp-apigw-signature-v2': 'Z0LjTbqFjWtxlRskM8vDj5Uha1FGhE4fzdds2ZO8FrQ=',
        'X-DRM-TOKEN': 'eyJyZXNwb25zZUZvcm1hdCI6Im9yaWdpbmFsIiwic2l0ZUlkIjoiZHJtLTIwMjMxMTAxMDgyMzE2LWRKREdhIiwiY29udGVudElkIjoidGVzdENvbnRlbnRJZCIsImRybVR5cGUiOiJXSURFVklORSJ9'
    }      //One Click Multi DRM 상품 활용을 위한 apigw 필수 인증 및 X-DRM-TOKEN 헤더값
},

//fairplay streaming license request sample
'com.apple.fps': {
    src: 'https://uz1urqjj2471.beta-edge.naverncp.com/live/video/ls-20231031105925-YvxnQ/playlist.m3u8', //DRM Encryption 이 적용된 DRM 콘텐츠 재생 경로
    certificateUri: 'https://multi-drm.apigw.gov-ntruss.com/api/v1/license/fairPlay',  //DRM license 발급을 위해 필요한 인증서 요청 경로
    certificateRequestHeader: {
        'X-NCP-REGION_CODE': 'KR',
        'X-ncp-apigw-timestamp': 1698832564997,
        'X-ncp-iam-access-key': 'ft1GKEpjSc53lHuqtAxE',
        'x-ncp-apigw-signature-v2': 'Z0LjTbqFjWtxlRskM8vDj5Uha1FGhE4fzdds2ZO8FrQ=',
        'X-DRM-TOKEN': 'eyJyZXNwb25zZUZvcm1hdCI6Im9yaWdpbmFsIiwic2l0ZUlkIjoiZHJtLTIwMjMxMTAxMDgyMzE2LWRKREdhIiwiY29udGVudElkIjoidGVzdENvbnRlbnRJZCIsImRybVR5cGUiOiJXSURFVklORSJ9' 
    }, //One Click Multi DRM 상품 활용을 위한 apigw 필수 인증 및 X-DRM-TOKEN 헤더값
    licenseUri: 'https://multi-drm.apigw.gov-ntruss.com/api/v1/license', //DRM license 발급을 위한 경로
    licenseRequestHeader: {
        'X-NCP-REGION_CODE': 'KR',
        'X-ncp-apigw-timestamp': 1698832564997,
        'X-ncp-iam-access-key': 'ft1GKEpjSc53lHuqtAxE',
        'x-ncp-apigw-signature-v2': 'Z0LjTbqFjWtxlRskM8vDj5Uha1FGhE4fzdds2ZO8FrQ=',
        'X-DRM-TOKEN': 'eyJyZXNwb25zZUZvcm1hdCI6Im9yaWdpbmFsIiwic2l0ZUlkIjoiZHJtLTIwMjMxMTAxMDgyMzE2LWRKREdhIiwiY29udGVudElkIjoidGVzdENvbnRlbnRJZCIsImRybVR5cGUiOiJXSURFVklORSJ9'  
    } //One Click Multi DRM 상품 활용을 위한 apigw 필수 인증 및 X-DRM-TOKEN 헤더값
}

응답

응답 예시

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 20 Nov 2023 20:53:32 GMT
Content-Type: application/json;charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
x-ncp-trace-id: 36c9k60om4p3238cpmc9gm4cj4