VOD Station 개요
- 인쇄
- PDF
VOD Station 개요
- 인쇄
- PDF
기사 요약
이 요약이 도움이 되었나요?
의견을 보내 주셔서 감사합니다.
개요
VOD Station은 Object Storage에 저장된 수많은 영상 파일을 다양한 화질로 쉽게 인코딩 할 수 있고, HLS/DASH 프로토콜로 스트리밍할 수 있는 서비스입니다. HTTP API를 이용하여 VOD Station의 모든 기능을 제어할 수 있습니다.
공통 설정
VOD Station API URL
https://vodstation.apigw.ntruss.com/api/v2
요청 헤더
헤더명 | 설명 |
---|---|
x-ncp-region_code | 네이버 클라우드 플랫폼 region code (GET 요청에 포함하지 않음) x-ncp_region_code:{Region Code} |
x-ncp-apigw-timestamp | 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)로 나타내며 API Gateway 서버와 시간 차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주 x-ncp-apigw-timestamp:{Timestamp} |
x-ncp-iam-access-key | 네이버 클라우드 플랫폼 포털에서 발급받은 Access Key IDx-ncp-iam-access-key:{Sub Account Access Key} |
x-ncp-apigw-signature-v2 | Access Key ID와 맵핑되는 Secret Key로 암호화한 서명 HMAC 암호화 알고리즘은 HmacSHA256 사용 x-ncp-apigw-signature-v2:{API Gateway Signature} |
Content-Type | Request body가 포함된 요청의 경우 Content type을 application/json으로 요청Content-Type: application/json |
인증 헤더
VOD Station API를 사용하기 위해서는 API Gateway 인증이 필요합니다.
상세한 API Gateway 인증 관련 설명은 NAVER Cloud Platform API를 참고해 주십시오.
AUTHPARAMS 생성하기
- AUTHPARAMS 요청 예시
curl -i -X GET \
-H "x-ncp-region_code:KR" \
-H "x-ncp-apigw-timestamp:1505290625682" \
-H "x-ncp-iam-access-key:D78BB444D6D3C84CA38A" \
-H "x-ncp-apigw-signature-v2:WTPItrmMIfLUk/UyUIyoQbA/z5hq9o3G8eQMolUzTEo=" \
'https://vodstation.apigw.ntruss.com/api/v2/channels'
Signature 생성(개행 문자는 \n을 사용)
요청에 맞게 StringToSign을 생성하고 SecretKey로 HmacSHA256 알고리즘으로 암호화한 후 Base64로 인코딩합니다.
이 값을
x-ncp-apigw-signature-v2
로 사용합니다.요청 StringToSign GET /api/v2/channels?limit=10
x-ncp-apigw-timestamp={timestamp}
x-ncp-iam-access-key={accesskey}
x-ncp-apigw-signature-v2={signature}GET /api/v2/channels?limit=10
{timeStamp}
{accessKey}
샘플 코드
public String makeSignature() {
String space = " "; // 공백
String newLine = "\n"; // 줄바꿈
String method = "GET"; // HTTP 메서드
String url = "/api/v2/channels?isPage=true"; // 도메인을 제외한 "/" 아래 전체 url (쿼리스트링 포함)
String accessKey = "{accessKey}"; // access key id (from portal or Sub Account)
String secretKey = "{secretKey}"; // secret key (from portal or Sub Account)
String timestamp = String.valueOf(System.currentTimeMillis()); // 현재 타임스탬프 (epoch, millisecond)
String message = new StringBuilder()
.append(method)
.append(space)
.append(url)
.append(newLine)
.append(timestamp)
.append(newLine)
.append(accessKey)
.toString();
SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(message.getBytes("UTF-8"));
String encodeBase64String = Base64.encodeBase64String(rawHmac);
return encodeBase64String;
}
/*
https://code.google.com/archive/p/crypto-js/
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/crypto-js/CryptoJS%20v3.1.2.zip
*/
/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
<script type="text/javascript" src="./CryptoJS/rollups/hmac-sha256.js"></script>
<script type="text/javascript" src="./CryptoJS/components/enc-base64.js"></script>
function makeSignature(secretKey, method, url, timestamp, accessKey) {
var space = " ";
var newLine = "\n";
var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey); // secret key
hmac.update(method); // HTTP 메서드
hmac.update(space); // 공백
hmac.update(url); // 도메인을 제외한 "/" 아래 전체 url (쿼리스트링 포함)
hmac.update(newLine); // 줄바꿈
hmac.update(timestamp); // 현재 타임스탬프 (epoch, millisecond)
hmac.update(newLine); // 줄바꿈
hmac.update(accessKey); // access key (from portal or iam)
var hash = hmac.finalize();
return hash.toString(CryptoJS.enc.Base64);
}
import sys
import os
import hashlib
import hmac
import base64
import requests
import time
def make_signature():
timestamp = int(time.time() * 1000)
timestamp = str(timestamp) # 현재 타임스탬프 (epoch, millisecond)
access_key = "{accessKey}" # access key id (from portal or Sub Account)
secret_key = "{secretKey}" # secret key (from portal or Sub Account)
secret_key = bytes(secret_key, 'UTF-8')
method = "GET" # HTTP 메서드
uri = "/api/v2/channels?isPage=true" # 도메인을 제외한 "/" 아래 전체 url (쿼리스트링 포함)
message = method + " " + uri + "\n" + timestamp + "\n"
+ access_key
message = bytes(message, 'UTF-8')
signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest())
return signingKey
<?php
$access_key = "{accessKey}";
$secret_key = "{secretKey}";
$url = "/api/v2/channels";
$timestamp = getMillisecond();
$message = "GET";
$message .= " ";
$message .= $url;
$message .= "\n";
$message .= $timestamp;
$message .= "\n";
$message .= $access_key;
$signature = base64_encode(hash_hmac('sha256', $message, $secret_key, true));
$headers = array(
"Content-Type: application/json;",
"x-ncp-apigw-timestamp: ".$timestamp."",
"x-ncp-iam-access-key: ".$access_key."",
"x-ncp-apigw-signature-v2: ".$signature.""
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://vodstation.apigw.ntruss.com".$url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo $response;
function getMillisecond()
{
list($microtime, $timestamp) = explode(' ', microtime());
$time = $timestamp.substr($microtime, 2, 3);
return $time;
}
?>
function makeSignature() {
nl=$'\\n'
TIMESTAMP=$(echo $(($(date +%s%N)/1000000))) # 현재 타임스탬프 (epoch, millisecond)
ACCESSKEY="{accessKey}" # access key id (from portal or Sub Account)
SECRETKEY="{secretKey}" # secret key (from portal or Sub Account)
METHOD="GET" # HTTP 메서드
URI="/api/v2/channels?isPage=true" # 도메인을 제외한 "/" 아래 전체 url (쿼리스트링 포함)
SIG="$METHOD"' '"$URI"${nl}
SIG+="$TIMESTAMP"${nl}
SIG+="$ACCESSKEY"
SIGNATURE=$(echo -n -e "$SIG"|iconv -t utf8 |openssl dgst -sha256 -hmac $SECRETKEY -binary|openssl enc -base64)
}
VOD Station API 요청 구성
Header
x-ncp-region_code:{Region Code}
x-ncp-apigw-timestamp:{Timestamp}
x-ncp-iam-access-key:{Sub Account Access Key}
x-ncp-apigw-signature-v2:{API Gateway Signature}
Content-Type:application/json
Body
Json Object
URL
https://vodstation.apigw.ntruss.com/api/v2/{action}
VOD Station API 요청 샘플
curl -i -s -X POST \
-H "Content-Type:application/json" \
-H "x-ncp-region_code:KR" \
-H "x-ncp-apigw-timestamp:1521787414578" \
-H "x-ncp-iam-access-key:6uxz1nKkcYwUjWRG5Q1V7NsW0i5jErlu2NjBXXgy" \
-H "x-ncp-apigw-signature-v2:iJFK773KH0WwQ79PasqJ+ZGixtpDQ/abS57WGQdld2M=" \
"https://vodstation.apigw.ntruss.com/api/v2/channles"\
-d "{ \"cdn\": {\"profileId\": 1111, \"type\":\"GLOBAL_EDGE\", \"regionType\":\"KOREA\"}, \"createCdn\": true, \"name\": \"api-guide\", \"protocolList\": [ \"HLS\", \"DASH\" ], \"segmentDuration\": 5, \"storageBucketName\": \"guide\"}"
VOD Station API Content-Type
VOD Station API HTTP Request와 Response Body를 통해 전달되는 모든 데이터의 Content-type은 application/json
을 사용합니다.
이 문서가 도움이 되었습니까?