VOD Station

参考

VOD Station APIレファレンスの表示 >>
VOD Station説明書の表示 >>

概要

VOD StationはObject Storageに保存されている数多い映像ファイルを迅速かつ容易にHLS/DASHプロトコルでストリーミングできる商品です。
HTTP APIを用いてVOD Stationの全ての機能をコントロールできます。


共通設定

VOD Station API URL

https://vodstation.apigw.ntruss.com/api/v1

リクエストヘッダ

ヘッダ名 説明
x-ncp-apigw-timestamp 1970年1月1日 00:00:00 協定世界時(UTC)からの経過時間をミリセカンド(Millisecond)で表し、
API Gatewayサーバとの時間差が5分以上の場合は無効なリクエストとしてみなす。

x-ncp-apigw-timestamp:{Timestamp}
x-ncp-apigw-api-key API Gatewayで発行されたキー
x-ncp-apigw-api-key:{API Gateway API Key}
x-ncp-iam-access-key Naverクラウドプラットフォームポータルで発行されたAccess Key ID
x-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-apigw-timestamp:1505290625682" \
   -H "x-ncp-apigw-api-key:cstWXuw4wqp1EfuqDwZeMz5fh0epaTykRRRuy5Ra" \
   -H "x-ncp-iam-access-key:D78BB444D6D3C84CA38A" \
   -H "x-ncp-apigw-signature-v2:WTPItrmMIfLUk/UyUIyoQbA/z5hq9o3G8eQMolUzTEo=" \
 'https://vodstation.apigw.ntruss.com/api/v1/channels
  • Signature作成(改行文字は\nを使用)

    • リクエストにあわせてStringToSignを作成してからSecretKeyを用いてHmacSHA256アルゴリズムで暗号化した後、Base64でエンコードします。

    • この値を x-ncp-apigw-signature-v2で使います。

    リクエスト StringToSign
    GET /api/v2/jobs?limit=10
    x-ncp-apigw-timestamp={timestamp}
    x-ncp-apigw-api-key={apiKey}
    x-ncp-iam-access-key={accesskey}
    x-ncp-apigw-signature-v2={signature}
    GET /api/v2/jobs?limit=10
    {timeStamp}
    {accessKey}
  • サンプルコード

public String makeSignature() {
    String space = " ";						// 空白
    String newLine = "\n";  				// 改行
    String method = "GET";  				// HTTPメソッド
    String url = "/api/v1/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/v1/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
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-apigw-timestamp:{Timestamp}
  x-ncp-apigw-api-key:{API Gateway API Key}
  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/v1/{action}

VOD Station APIリクエストのサンプル

curl -i -s -X POST \
 -H "Content-Type:application/json" \
 -H "x-ncp-apigw-timestamp:1521787414578" \
 -H "x-ncp-apigw-api-key:6uxz1nKkcYwUjWRG5Q1V7NsW0i5jErlu2NjBXXgy" \
 -H "x-ncp-iam-access-key:6uxz1nKkcYwUjWRG5Q1V7NsW0i5jErlu2NjBXXgy" \
 -H "x-ncp-apigw-signature-v2:iJFK773KH0WwQ79PasqJ+ZGixtpDQ/abS57WGQdld2M=" \
 "https://vodstation.apigw.ntruss.com/api/v1/channles"\
 -d "{ \"cdnTypeList\": [ \"cdn+\" ], \"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を使います。

使用シナリオ


Step 1. Object Storageにストリーミングする映像をアップロード

VOD Stationを通じてストリーミングする映像をNaverクラウドプラットフォームのObject Storageにアップロードします。

VOD Stationでサポートする映像コンテナフォーマットはmp4です。

もし、サポートされない拡張子のストリーミングが必要な場合はお客様センターまでお問い合わせください。

Object Storageに対する詳しい内容についてはObject Storage使用ガイドをご参考ください。

Step 2. 認証キー作成

API認証キー作成

VOD Station APIはNaverクラウドプラットフォームのAPI Gatewayを通じて提供されるし、API Gatewayに登録されているAPIを使うためには、3つの認証キー(Access Key ID, Secret Key, API Key)を発行してもらう必要があります。

API 認証キーの発行に対する詳しい内容についてはNAVER CLOUD PLATFORM APIをご参考ください。

  • 認証キーの作成
    • Naverクラウドプラットフォームポータルの マイページ > アカウント管理 > 認証キー管理 メニューで新規API 認証キー作成をクリックしてAccess Key ID, Secret Keyを作成します。
    • もし、Access Key ID, Secret Keyがある場合は、該当キーを使います。
  • API Keyの作成
    • ConsoleのAPI GatewayメニューでAPI Key作成をクリックしてAPI Keyを作成します。

Step 3. VOD Stationチャンネル作成

VOD Stationを使うためにチャンネルを作成します。

リクエスト例示

POST https://vodstation.apigw.ntruss.com/api/v1/channels

{
  "cdnTypeList": [
    "cdn+"
  ],
  "createCdn": true,
  "name": "api-guide",
  "protocolList": [
  	"HLS", "DASH"
  ],
  "segmentDuration": 5,
  "storageBucketName": "vodstation-bucket"
}

レスポンス例示

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

{
  "content": {
    "id": "vs-20191227055342-vDVWH5l",
    "name": "api-guide",
    "channelStatus": "CREATING",
    "storageBucketName": "vodstation-bucket",
    "segmentDuration": 5,
    "protocolList": [
      "HLS",
      "DASH"
    ],
    "createTime": 1577426022,
    "cdnCreatedTime": 1577426022,
    "cdnStatus": "CREATING",
    "storageBucketStatus": "RUNNING"
  }
}

Step 4. VOD Station連携CDN作成

VOD Stationチャンネルを作成する時、CDNを一緒に作成してない場合には、VOD Station再生のために別途CDN作成が必要です。

VOD Station開始ガイドを参考にしてCDNを作成することをお願いします。

Step 5. VOD Station再生

VOD Stationチャンネルを作成する時にCDNを一緒に作成した場合は、VOD Stationチャンネル情報APIを通じて再生情報を取得できます。

リクエスト例示

GET https://vodstation.apigw.ntruss.com/api/v1/channels/vs-20191227055342-vDVWH5l

レスポンス例示

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 12 Sep 2018 10:20:21 GMT
Content-Type: application/json;charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
x-ncp-trace-id: 3cc9hcpim4c9h62oj3cgo6ccr5

{
  "content": {
    "id": "vs-20191227055342-vDVWH5l",
    "name": "apiTest",
    "channelStatus": "READY",
    "storageBucketName": "testvod",
    "segmentDuration": 5,
    "protocolList": [
      "HLS",
      "DASH"
    ],
    "createTime": 1577426022,
    "readyTime": 1577426040,
    "cdnCreatedTime": 1577426022,
    "playUrl": "https://klmawqyuoshq1111349.cdn.ntruss.com/[protocol]/[path]/[video filename]/index.m3u8",
    "cdnStatus": "RUNNING",
    "cdnDomain": "klmawqyuoshq1111349.cdn.ntruss.com",
    "cdnServiceName": "vscdn-vDVWH5l",
    "storageBucketStatus": "RUNNING",
    "originPath": "vs-k1.video.media.ntruss.com/vs-20191227055342-vDVWH5l/testvod"
  }
}

チャンネル情報APIレスポンスのprotocolList, playUrl , cdnDomain情報を活用して再生できます。

詳細な再生ガイドは VOD Station ストリーミングガイドをご参考ください。

オペレーション