Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

 Version History

作成日

バージョン

備考

2016.05.03

v1.0

草案作成

2017.02.09

v1.1

seekable_end, disable_playrate 追加

2017.03.09

v1.2

live.url, live.poster_url 追加

2017.03.23

v1.3

title 追加

2017.06.26

v1.4

cdn, auth_type, use_ip_validation, use_kollus_token 追加

2017.09.06

v1.5

pc_skin 追加

2017.12.19

v1.6

Live spec にて kollus 認証追加

2018.02.08

v1.7

thumbnail 追加

2018.08.20

v1.8

subtitle_policy, drm_policy 追加

live jwt payload 項目追加

2018.10.29

v1.9

video_watermarking_code_policy 追加

2018.11.06

v1.10

play_section 追加

2019.01.07

v.1.11

video_watermarking_code_policy.enable_html5_player 追加

2019.03.06

v.1.12

live chatting option 追加, live payload key 追加及びlegacy処理

2019.07.11

v.1.13

Live spec にて video_watermarking_code_policy 追加

2019.07.18

v.1.14

disable_nscreen 追加

2019.09.20

v.1.15

live jwt にて play_expt 追加

2019.12.05

v.1.16

scroll_event 追加

概要

既存のKollusではMedia tokenは顧客がVideo gatewayにコンテンツ再生を要請する時、その内容を暗号化してURLの有効期限を設定するために使用されていました。ここでMedia tokenを使用するためにKollusから提供するモジュールをのサーバーに設置する必要があり、サーバーがモジュールに対応してない場合にはKollus APIを呼び出してMedia tokenを遠隔生成して使用したり、かつMedia tokenの仕様が変わる度にサーバーにモジュールを再度設置するなど、難点がありました。従って暗号学的に安全で具現が簡単なJSON Webtokenを利用してKollus モジュールに対する依存性を減らし、更に仕様変更により柔軟に対応ができるようにします。존 Kollus 시스템에서 Media Token은 고객사가 Videogateway로 컨텐츠 재생 요청을 전달할 때 요청 내용을 은닉(암호화)하고, 직접 url에 대한 유효 기간을 설정하기 위해 사용했습니다. 하지만 Media Token을 사용하기 위해서는 Kollus에서 제공하는 모듈을 서버에 직접 설치해야 하고, 모듈이 서버를 지원하지 않는 경우엔 Kollus API를 호출하여 Media Token을 원격으로 생성해 사용해야 하거나, Media Token의 스펙이 변경될 때마다 서버에 모듈을 재 설치해야 하는 등 문제가 많았습니다. 이에 암호학적으로 안전하고 구현이 간단한 JSON Webtoken을 이용하여 Kollus 모듈에 대한 의존성을 줄이고 좀 더 유연하게 스펙 변경에 대응할 수 있도록 합니다.

注意事項

  1. JSON Webtoken(以下JWT)につきましてはhttp://jwt.io ページを参考
  2. JWTのPayload部分に以下の内容に記述されている、先に登録されたClaimを使用しては行けません。 (https://tools.ietf.org/html/rfc7519#section-4) 意図通り動作しない可能性があります。
  3. 暗号化アルゴリズムは HMAC SHA256 (HS256) のみに対応しています。

JWT Request

用語

  • セキュリティキー (Security Key)
    • セキュリティキーは JWTをsigning するためにKollusと顧客だけが共有する秘密キーとなります。セキュリティキーは “設定 > サービスアカウント” ページから確認できます。この値は顧客の要望に応じて変更が可能であり、変更と同時に使用していたセキュリティキーは無効になります。従ってセキュリティキーは顧客のメンテナンス時間中などを利用して変更した方が好ましいです。
  • ユーザーキー (Custom Key)
    • ユーザーキーは平文セキュリティキーを暗号化したものになります。JWTを使用して Videogatewayに要請する場合JWTと共に転送されなければなりません。

JWT生成方法

暗号化アルゴリズムはHMAC SHA256 (HS256)にして、Secret keyはセキュリティキー、Payloadには以下のPayload Specに合わせたJSON Stringを追加してJWTを生成します。

生成したJWTを使用してVideo gatewayに要請する方法

生成したJWTと使用者キーを以下のような形式のurlで生成して呼び出します。

http://v.kr.kollus.com/s?jwt=生成したJWT&custom_key=ユーザーキー

JWT Payload Spec

JWT Payload形式は以下のようなJSON文字列となります。

{
	"cuid": "CLIENT_USER_ID",
	"awtc": “AUDIO_WATERMARKING_CODE”,
            "video_watermarking_code_policy": {
                       "code_kind":"client_user_id",
                       "font_size":7,
                      "font_color":"FFFFFF",
                      "show_time":1,
                      "hide_time":500,
                     "alpha":50,
                     "enable_html5_player": false,
            },
	"expt": EXPIRE_TIME,
	"pc_skin": {
		"skin_path": "http://file.kr.dev.kollus.com/public/custom/skin2.zip",
		"skin_sha1sum": "B2B688123F68BFA7DB4B1F89EC292C0835086D9B"
	},
	"mc": [{
		"mckey": “MEDIA_CONTENT_KEY”,
		"mcpf": “MEDIA_CONTENT_PROFILE_KEY”,
		"tilte": “TITLE”,
		"intr": IS_INTRO,
                   “scroll_event”: SCROLL_EVENT,
		"seek": IS_SEEKABLE,
		"seekable_end": SEEKABLE_END,
		"disable_playrate": DISABLE_PLAYRATE,
                   “disable_nscreen”: DISABLE_NSCREEN,
                   "play_section": {
                              "start_time": PLAY_SECTION_START_TIME,
                              "end_time": PLAY_SECTION_END_TIME
                         }
                         "thumbnail": {
                             "enable": IS_ENABLE,
                             "thread": IS_THREAD,
                             "type": "TYPE"
                         },
                         "subtitle_policy" : {
                             "filter": {
                                 "name": "SUBTITLE_NAME",
                                 "language_code": "SUBTITLE_LANGUAGE_CODE",
                             },
                            "show_by_filter" : false,
                            "is_showable": true,
                         },
                         "drm_policy" : {
                             "kind" : "DRM_KIND",
                             "streaming_type": "hls",
                             "data" : "..."
                         }
	}]
}


Payload 項目

名称

Datatype

必須有無

内容

Mediatype

cuid
(CLIENT_USER_ID)

String

必須

コンテンツにアクセスする顧客のユーザーID: 
ブックマーク及びNScreenデータのKeyとして使用されます。

VOD/LIVE

awtc
(AUDIO_WATERMARKING_CODE)

String

選択 (基本値: null)

Kollus オーディオウォーターマーキング機能を実装するとき使用すウォーターマーキングコードで、APIを呼び出して獲得します。
詳しい内容は技術担当者にお問い合わせください。
使用しない場合にはEntryを削除するか、nullを入力します。

VOD

expt
(EXPIRE_TIME)

Integer

必須

JWTの有効時間となり、Unix timestamp 形式で入力します。顧客側のサーバーとの時刻が一致しない場合があるため、有効時間が過ぎても最長1分以内まではアクセスができます。

VOD/LIVE

pc_skin
(PC_EX_PLAYER_SKIN)

Array

選択

V2 PC PlayerのSkin(デザイン)を顧客が指定することができます。設定しない場合には省略できますが、このフィールドを追加した場合には必ず下位フィールドのskin_path, skin_sha1sumの正確な値を入力してください。

V2 Player

skin_path

String

選択

V2 PC PlayerのSkin情報が入っている圧縮ファイルのURL

V2 Player

skin_sha1sum

String

選択

V2 PC PlayerのSkin情報が入っている圧縮ファイルのsha1 checksum 値

V2 Player

mc

Array

必須

再生するコンテンツの再生情報が含まれたObjectタイプのEntryを配列として含まれている項目

VOD/LIVE

mckey
(MEDIA_CONTENT_KEY)

String

必須

再生するコンテンツの識別キー。拡張Media content key形式も同一に使用可能

VOD/LIVE

mcpf
(MEDIA_CONTENT_PROFILE_KEY)

String

選択 (基本値: null)

コンテンツの複数のプロファイルの中で一つのプロファイルを強制に指定して再生する場合に使用します。強制に指定するプロファイルキーを入力します。
自動検出にするにはEntryを削除するか、 nullを入力

VOD

title
(TITLE)

String

選択 (基本値: null)

コンテンツのタイトルを代替する文字列

VOD/LIVE

intr
(IS_INTRO)

Boolean

選択 (基本値: false)

Introの有無を入力します。詳しくは下段の例示を参照してください。
Introがないコンテンツの場合にはEntryを削除するかまたはfalseを入力してください。

VOD

scroll_event

Boolean

(基本値: false)

画面の scroll event 適用有無

true: 画面の縦を基準でvideo領域を合わせて、見えない領域はscroll可能とする

false: 既存の通りに横を基準で画面を合わせる

VOD

seek
(IS_SEEKABLE)

Boolean

選択 (基本値: true)

コンテンツのseek可能の有無を入力します。一般的にintroコンテンツの場合にはseek不可とします。
Seek可能とする場合にはEntryを削除するかまたはtrueを入力してください。

VOD

seekable_end
(SEEKABLE_END)

Integer

選択 (基本値: -1)

Seek不可にした場合でも再生開始時点から入力した値の時点の間ではSeek可能になります。

VOD

disable_playrate
(DISABLE_PLAYRATE)

Boolean

選択 (基本値: false)

倍速調整機能のOn/Offを設定

VOD

disable_nscreen

(DISABLE_NSCREEN)

Boolean

選択 (基本値: false)

nscreen使用有無を設定

VOD

play_section.start_time

Integer

選択 (基本値: null)

リピート開始時点を設定 (単位: 秒)

VOD

play_section.end_time

integer

選択 (基本値: null)

リピート終了時点を設定 (単位: 秒)

VOD

thumbnail.enable

Boolean

選択 (基本値: true)

サムネール有効化有無を設定: Androidのみ対応

Android Player App/SDK

thumbnail.thread

Boolean

選択 (基本値: false)

スレッド方式の有無を設定: Androidのみ対応

Android Player App/SDK

thumbnail.type

String

選択 (基本値: null)

サムネールサイズを設定 (big / small): Androidのみ対応

Android Player App/SDK

subtitle_policy.filter.name

String

選択 (基本値: null)

字幕フィルターに字幕名を使用show_by_filter: trueに設定することが前提

VOD

subtitle_policy.filter.language_code

String

選択 (基本値: null)

字幕フィルターに言語コードを使用show_by_filter: trueに設定することが前提

VOD

subtitle_policy.show_by_filter

Boolean

選択 (基本値: false)

字幕ポリシーフィルターとの合致有無を識別

VOD

subtitle_policy.is_showable

Boolean

選択 (基本値: true)

字幕表示有無を識別

VOD

drm_policy.kind

String

選択 (基本値: null)

drm タイプを指定: 現状指定可能なDRMは"inka" ("inka"を使用する場合 third_party_infoの"cid"を "skb_kollus"に設定)

VOD

drm_policy.streaming_type

String

選択 (基本値: null)

ストリーミング方式をhls, dashに制限: "inka"にした場合ストリーミング方式を指定

VOD

drm_policy.data

Object

選択 (基本値: null)

DRM 認証データをオブジェクト(json) 方式で挿入
ex)

{
  "license_url": "https://tokyo.pallycon.com/ri/licenseManager.do",

  "certificate_url": "https://license.pallycon.com/ri/fpsKeyManager.do?siteId=XXXX",

  "custom_header": {

    "key": "pallycon-customdata-v2",

    "value": "eyJ0aW1lc3RhbXAiOiI5OTk5LTEyLTMxVDIzOjU5....cl9pZCI6bnVsbCwiY2lkIjoidGVzdCJ9"

  }

}


video_watermarking_code_policy.code_kind

String

選択

"client_user_id"以外のStringの場合、そのまま表示


video_watermarking_code_policy.alpha

Integer

選択 (基本値: 200)

ビデオウォーターマーキングコードのalpha値を定義 (16進数 0~255)


video_watermarking_code_policy.font_size

Integer

選択 (基本値: 7)

ビデオウォーターマーキングコードのfont-size値を定義 (単位: px)


video_watermarking_code_policy.font_color

String

選択 (基本値; 'FFFFFF')

ビデオウォーターマーキングコードのfont-color値を定義


video_watermarking_code_policy.show_time

Integer

選択 (基本値;1)

ビデオウォーターマーキングコードの表示時間 (単位: 秒)


video_watermarking_code_policy.hide_time

Integer

選択 (基本値;60)

ビデオウォーターマーキングコードが表示されてから非表示になるまでの時間 (単位: 秒)


video_watermarking_code_policy.enable_html5_player

Boolean

選択 (基本値: false)

ビデオウォーターマーキングコードのHTML5 Player使用有無


live.url
(LIVE_URL)
String選択 (基本値: null)Live Streamingの再生URLを入力LIVE
live.poster_url
(LIVE_POSTER)
String選択 (基本値: null)Live Streamingを再生する前に表示されるポスターイメージのURLを入力LIVE
live.cdnObject選択CDNを使用しない場合JSONブロックを省略LIVE
live.cdn.passwordObject選択 (基本値: 空の文字列)CDNアクセスのパスワード: short, long 両方必要LIVE
live.auth_typeString選択 (基本値: user)Edge 認証タイプLIVE
live.use_ip_validationBoolean選択 (基本値: false)EdgeからMedia URLを生成する際にP認証を使用するかを設定LIVE
live.use_kollus_tokenBoolean選択 (基本値: false)EdgeからMedia URLを生成する際にKollus Token (ktn パラメータ)を使用するかを設定LIVE

例示

コンテンツの再生に使用するJWT Payload

catenoid というIDを持つユーザーがMedia content key “vnCVPVyV”を再生する場合

{
	"cuid": “catenoid”,
	"expt": 1462931880,
	"mc": [{
		"mckey": “vnCVPVyV“
	}]
}

introありのコンテンツの再生に使用するJWT Payload

catenoid というIDを持つユーザーがintroでMedia content key “gDV2B1ZG”をseek 不可の状態で、本コンテンツは “vnCVPVyV”を再生する場合

{
	"cuid": “catenoid”,
	"expt": 1462931880,
	"mc": [{
		"mckey": “gDV2B1ZG“,
		"intr": true,
		"seek": false,
	},{
		"mckey": “vnCVPVyV“
	}]
}

Skip無効のコンテンツを再生するとき指定した時点まではSkipを許可するためのJWT Payload

catenoid というIDの使用者がintroでMedia contents key 「gDV2B1ZG」をseek 無効になっている状態で、開始から30秒まではSkipを許可する場合

{
	"cuid": “catenoid”,
	"expt": 1462931880,
	"mc": [{
		"mckey": “gDV2B1ZG“,
		"intr": true,
		"seek": false,
		"seekable_end": 30,
	}]
}

コンテンツの一部だけを再生させるためのJWT Payload

catenoid というIDの使用者がMedia contents key「vnCVPVyV」を60秒間再生をさせる場合

{
	"cuid": “catenoid”,
	"expt": 1462931880,
	"mc": [{
		"mckey": “vnCVPVyV“,
		"play_section": {
			"start_time": 0,
			"end_time": 60,
	}]
}

サンプルコード

 Json Web Tokens – Java

 Json Web Tokens – ruby

 Json Web Tokens – php

Download


サンプルコード

 Download – jsp

 Download – php

 Download – dotnet


  • No labels