본문 바로가기
CSP (Cloud Service Provider)/KT Cloud

[KT Cloud] CDN Standard 3.0 기능

by BTC_이지현 2022. 12. 27.
스트리밍 서비스 이용방법
 
CDN 3.0 스트리밍은 원본 미디어파일을 스트리밍 프로토콜(HLS, DASH)로 변환해서 스트리밍하는 서비스 입니다.
원본 미디어 파일
mp3와 mp4 포맷으로 만들어진 파일만 원본 미디어 파일로 사용 가능합니다.
지원 코덱
CDN 3.0 스트리밍 서비스에서 지원하는 원본 미디어 파일의 코덱은 다음과 같습니다.
  • 1) 오디오 코덱: AAC, MP3
  • 2) 비디오 코덱: H.264(AVC), H.265(HEVC)
추천 인코더
ffmpeg를 사용해서 미디어 파일을 만드는 것을 추천합니다.
다른 인코더에서 만들어진 미디어 파일로도 스트리밍 서비스가 가능합니다.
다른 인코더를 사용한 미디어파일이 스트리밍 서비스가 되지 않는 경우, ffmpeg를 사용해서 다시 인코딩 후 사용하시면 됩니다.
지원 스트리밍 프로토콜
1) HLS(Http Live Streaming)
  • Apple(iPhone, iPad 등)에서 사용하는 표준 HTTP 기반 스트리밍 프로토콜입니다.
  • 스트리밍 데이터를 m3u8의 확장자를 가진 재생목록 파일과 잘게 쪼개놓은 다수의 ts파일들을 HTTP를 통해 전송하는 방식을 사용합니다.
 
2) DASH(Dynamic Adaptive Streaming over HTTP)
  • Dynamic Adaptive Streaming over HTTP (DASH)는 ISO 표준(ISO/IEC 23009-1)으로 개발된 HTTP Adaptive Streaming의 한 종류입니다.
  • MPEG와 ISO에 의해 비준된 표준 포맷입니다.
  • Manifest가 XML로 구성되어 있어, 풍성한 표현이 가능해 다양한 정보를 한 개의 MPD로 제공할 수 있습니다.
스트리밍 서비스 이용 방법
원본 파일 업로드
  • 스트리밍에 사용될 원본 파일(mp4, mp3)을 개통되어 있는 클라우드 스토리지에 또는 사용할 별도의 원본 서버 내에 업로드 해야 합니다.
스트리밍 요청 URL
스트리밍 동작 확인
 
스트리밍 동작을 확인하기 위해서는 플레이어가 필요합니다.
HLS와 DASH를 모두 지원하는 THEOplayer를 사용해서 테스트하는 방법에 대해서 설명 드립니다.
 
1) 브라우저로 http://demo.theoplayer.com/test-your-stream-with-statistics 에 접속하시면 아래의 플레이어 화면이 보입니다.
 
  • 2) 주소 입력창(빨간색 박스)에 스트리밍 URL을 넣고 'CLICK HERE TO LOAD YOUR STREAM' 바를 누르고 나서 Play Video 버튼을 누르시면 재생이 됩니다.
  • 3) HLS나 DASH 모두 동일한 방법으로 테스트가 가능합니다.
인증 URL 사용
 
JWT를 사용한 인증 URL 기능을 제공합니다.
만료 시간(Expiration)
사용자의 요청이 만료 시간 이내일 경우에는 인증에 성공하지만, 만료 시간을 초과한 경우 인증에 실패합니다.
아래 표는 만료 시간에 따른 인증 결과에 대한 예시를 보여 줍니다.
 
만료시간(exp) 요청 시간 인증 결과
2016/01/01 12:00:00 2016/01/01 11:59:59 성공
2016/01/01 12:00:00 2016/01/01 12:00:00 성공
2016/01/01 12:00:00 2016/01/01 12:00:01 실패
 
* 첫번째 BYTE 요청 만료 시간(expfirst)
컨텐츠에서 가장 첫 BYTE에 대한 요청 만료 시간입니다. 전체 파일에 대한 요청 또는 부분 요청 시, 첫 BYTE가 포함되어 있을 경우에만 적용되는 항목으로, 만료 시간 이내일 경우에는 인증에 성공하지만, 만료 시간을 초과한 경우 인증에 실패합니다.
이 항목의 데이터 형식은 exp와 동일합니다.
expfirst 클레임 사용 가능 여부는 서비스 환경 및 설정과 관련이 있으므로 사용을 원할 경우, 사전확인이 필요합니다.
인증 경로(Path)
사용자가 요청한 콘텐츠 경로에 대해 접근 권한을 가지고 있는지 확인하는 과정입니다. 실제 콘텐츠 파일경로와 인증경로가
일치하거나 하위 경로에 포함되어 있는 경우에는 인증에 성공하지만, 그렇지 않을 경우에는 인증에 실패합니다.
 
아래 표는 인증 경로에 따른 인증 결과에 대한 예시를 보여줍니다.
제공되는 서비스 방식에 따라 인증 경로가 실제 요청 경로의 sub path에 해당하는 경우 허용됩니다.
 
인증 경로 (path) 사용자 요청 인증 결과
/foo/sample.stream http://live.ktcdn.com/foo/sample.stream 성공
/foo/sample.stream http://live.ktcdn.com/foo/sample2.stream 실패
/foo/sample.mp4 http://vod.ktcdn.com/foo/sample.mp4 성공
/foo/sample.mp4 http://vod.ktcdn.com/foo/sample2.mp4 실패
/foo/sample.mp4 http://vod.ktcdn.com/foo/foo/sample.mp4 실패(성공)
/foo/sample.mp4 http://vod.ktcdn.com/foo/bar/sample.mp4 성공
/foo/sample.mp4 http://vod.ktcdn.com/foo/bar/sample2.mp4 성공
/foo/bar http://vod.ktcdn.com/foo/bar/sample.mp4 성공
/foo/bar http://vod.ktcdn.com/foo/bar/sample2.mp4 성공
/foo/bar http://vod.ktcdn.com/foo/bar/foo2/sample.mp4 성공
/foo/bar http://vod.ktcdn.com/foo/foo2/sample.mp4 실패
무결성 (Integrity)
사용자의 요청이 위조 또는 변조되었는지 확인이 필요합니다. KT CDN 3.0에서는 서명(Signature)이 일치하는지 검사하여 무결성을 보장할 수 있습니다.
자세한 서명 방법은, 다음 "서명" 절에 기술되어 있습니다.
보안 토큰(Secure Token)
 
KT CDN Standard 3.0에서는 인증 방법으로 보안 토큰을 사용합니다. 본 매뉴얼에서는 클레임(Claim)기반의 JWT를 사용하여 보안 토큰을 생성하고, 전달하는 방법에 대해 설명합니다.
 
* 클레임: 보안 토큰에 정의되어 있는 개별 정보를 클레임(Claim)이라고 부르며, 클레임 이름(Claim Name)과 클레임 값(Claim Value)이 key-value쌍으로 구성되어 있습니다.
JWT(Json Web Token)
JWT는 JSON형식으로 기술한 클레임 기반의 데이터 전송 표준 규약입니다. 자세한 설명은 아래 사이트를 참고하시길 바랍니다.
* 참고사이트: https://jwt.io 에서는 웹 페이지에서 토큰을 생성·검증할 수 있고, 개발 언어 별 라이브러리 정보를 제공합니다.
전달 방법
보안 토큰은 HTTP 쿼리 파라미터로 전달되고, 만료 시간(exp), 인증 경로(path) 등의 정보를 포함하고 있습니다. 아래는 인증 URL에 대한 예시입니다.
기본적인 인증 URL의 예
  • - 콘텐츠 경로: /foo/sample.mp4
  • - 보안 토큰:
  • eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxMjM0NTY3ODkwIiwicGF0aCI6Ii9mb28vc2FtcGxlLm1wNCJ9.Y-wjQcqU7H4Jm4MI-m7p9zX5YJPYPGGzhK_EhDmZXhI
  • * 만료시간(exp): 1234567890
  • * 인증 경로(path): /foo/sample.mp4
http://vod.ktcdn.com/foo/sample.mp4?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxMjM0NTY3ODkwIiwicGF0aCI6Ii9mb28vc2FtcGxlLm1wNCJ9.Y-wjQcqU7H4Jm4MI-m7p9zX5YJPYPGGzhK_EhDmZXhI
보안토큰의 구조와 생성
보안 토큰의 구조는 헤더(Header), 페이로드(Payload), 서명(Signature) 세 부분으로 구성되어 있습니다.
JOSE(JSON Object Signing and Encryption) 헤더
헤더는 토큰을 어떻게 해석해야 하는지 명시한 부분으로 알고리즘과 데이터 타입을 정의합니다.
{
   "alg":"HS256",
   "typ":"JWT"
}
- alg: 서명(signature) 생성 시에 사용한 알고리즘을 정의. (현재 SHA-256 알고리즘만 지원)
- typ: 클레임의 표현 형식을 정의 (현재 JWT형식만 지원)
페이로드(Payload)
페이로드가 포함하고 있는 모든 클레임을 클레임 셋(Claim Set)이라고 부릅니다.
{
   "exp":1434290400000,
   "path":"/foo/sample.mp4",
   "playstart":0,
   "duration":180
}
- exp: 만료시간(Expiration Time)
- path: 인증 경로(Path)는 상대 경로(/)를 포함한 디렉터리 또는 콘텐츠 파일의 실제 경로를 의미합니다. 인증 경로가 디렉터리일 경우에는 하위 경로에 대한 접근 권한도 포함합니다.
- playstart: 재생 시작 시간(초)으로 VOD 서비스에서만 지원합니다. 사용을 위해서는 사전에 설정이 필요할 수 있으며, 서비스에 따라 일부 제약이 있을 수 있습니다.
- duration: 재생 시간(초)으로 라이브, VOD 서비스에서 지원합니다. 사용을 위해서는 사전에 설정이 필요할 수 있으며, 서비스에 따라 일부 제약이 있을 수 있습니다
서명 (Signature)
토큰은 헤더와 페이로드를 위·변조할 수 없도록 반드시 보안-키(Secure Key)를 사용하여 SHA-256 알고리즘으로 서명해야 합니다.
 
1) 서명에 대한 예시
아래는 서명 방법을 예시를 통해 설명합니다.
헤더와 페이로드를 각각 BASE64로 인코딩(Encoding)합니다.
 
데이터 문자열 BASE64 인코딩
헤더 { "alg":"SHA256", "typ":"JWT" } eyJhbGciOiJIUzI1NiTsInR5cCI6IkpXVCJ9
페이로드 { "exp":"1434290400000", "path":/foo/sample.mp4 } eyJleHAiOiITxNDMOMjkwNDAwMDAwIiwicGF0aCI6Ii9mb28vc2FtcGxlLm1wNC
 
마침표(.)를 구분자로 사용하여 헤더와 페이로드를 연결합니다.
eyJhbGciOiJIUzI1NiTsInR5cCI6IkpXVCJ9.
eyJleHAiOiITxNDMOMjkwNDAwMDAwIiwicGF0aCI6Ii9mb28vc2FtcGxlLm1wNC
마지막으로 위의 문자열을 보안-키(Secure key)와 함께 SHA-256 알고리즘으로 해시 값을 추출합니다.
HMACSHA256(
 "eyJhbGciOiJIUzI1NiTsInR5cCI6IkpXVCJ9.
 eyJleHAiOiITxNDMOMjkwNDAwMDAwIiwicGF0aCI6Ii9mb28vc2FtcGxlLm1wNC",
Secure Key
)

댓글