DEVELOPER

基本連係

Player

JWT

概要

既存のKollusではMedia tokenは顧客がVideo gatewayにコンテンツ再生を要請する時、その内容を暗号化してURLの有効期限を設定するために使用されていました。ここでMedia tokenを使用するためにKollusから提供するモジュールをのサーバーに設置する必要があり、サーバーがモジュールに対応してない場合にはKollus APIを呼び出してMedia tokenを遠隔生成して使用したり、かつMedia tokenの仕様が変わる度にサーバーにモジュールを再度設置するなど、難点がありました。従って暗号学的に安全で具現が簡単なJSON Webtokenを利用してKollus モジュールに対する依存性を減らし、更に仕様変更により柔軟に対応ができるようにします。

注意事項

  • JSON Webtoken(以下JWT)につきましてはhttp://jwt.io ページを参考
  • JWTのPayload部分に以下の内容に記述されている、先に登録されたClaimを使用しては行けません。 (https://tools.ietf.org/html/rfc7519#section-4) 目的通り動作しない可能性があります。
  • 暗号化アルゴリズムは 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”,
		"title": “TITLE”,
		"intr": IS_INTRO,
		"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" : "..."
                         },
                   "live": {
                       "url" : "LIVE_URL",
                       "poster_url" : "LIVE_POSTER",
                       "cdn": {
                           "type": "akamai",
                           "password": {
                               "short": "901490a9",
                               "long": "B2E2B80BCC848FB302EC55215C95E826"
                           }
                       },
                       "auth_type": "user",
                       "use_ip_validation": true,
                       "use_kollus_token": false
                   }
	}]
}

 

Payload 項目
名称 Datatype 必須有無 内容 Media type
cuid
(CLIENT_USER_ID)
String 必須 コンテンツにアクセスする顧客のユーザーID:
ブックマーク及びNScreenデータのKeyとして使用されます。
VOD
awtc
(AUDIO_WATERMARKING_CODE)
String 選択
(基本値: null)
Kollus オーディオウォーターマーキング機能を実装するとき使用すウォーターマーキングコードで、APIを呼び出して獲得します。詳しい内容は技術担当者にお問い合わせください。使用しない場合にはEntryを削除するか、nullを入力します。 VOD
expt
(EXPIRE_TIME)
Integer 必須 JWTの有効時間となり、Unix timestamp 形式で入力します。顧客側のサーバーとの時刻が一致しない場合があるため、有効時間が過ぎても最長1分以内まではアクセスができます。 VOD
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 必須 再生するコンテンツの再生情報が含まれたObjectタイプのEntryを配列として含まれている項目 VOD
mckey
(MEDIA_CONTENT_KEY)
String 必須 再生するコンテンツの識別キー。拡張Media content key形式も同一に使用可能 VOD
mcpf
(MEDIA_CONTENT_PROFILE_KEY)
String 必須
(基本値: null)
コンテンツの複数のプロファイルの中で一つのプロファイルを強制に指定して再生する場合に使用します。強制に指定するプロファイルキーを入力します。自動検出にするにはEntryを削除するか、 nullを入力 VOD
title String 必須
(基本値: null)
コンテンツのタイトルを代替する文字列 VOD
intr
(IS_INTRO)
Boolean 必須
(基本値: false)
Introの有無を入力します。詳しくは下段の例示を参照してください。Introがないコンテンツの場合にはEntryを削除するかまたは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 選択
(基本値: true)
倍速調整機能のOn/Offを設定 VOD
disable_nscreen
(DISABLE_NSCREEN)
Boolean 選択
(基本値: false)
nscreen使用有無を設定 VOD
thumbnail.enable Boolean 選択
(基本値: false)
サムネール有効化有無を設定: 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
video_watermarking_code_policy.code_kind String 選択 使用する場合、必須 “client_user_id”
video_watermarking_code_policy.alpha Integer 選択(基本値:50) ビデオウォーターマーキングコードのalpha値
video_watermarking_code_policy.font_size Integer 選択(基本値:7) ビデオウォーターマーキングコードのfont-size値
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 選択(基本値:500) ビデオウォーターマーキングコードの表示後の非表示時間
video_watermarking_code_policy.enable_html5_player Boolean 選択(基本値:false) ビデオウォーターマーキングコードのHTML5 Player使用有無
play_section.start_time Integer 選択(基本値: null) リピート区間の開始時間を設定(単位: 秒) VOD
play_section.end_time Integer 選択(基本値: null) リピート区間の終了時間を設定(単位: 秒) VOD
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"}}
 
live.url
(LIVE_URL)
String 選択
(基本値: null)
Live Streamingの再生URLを入力 LIVE
live.poster_url
(LIVE_POSTER)
String 選択
(基本値: null)
Live Streamingを再生する前に表示されるポスターイメージのURLを入力 LIVE
live.cdn Object 選択 CDNを使用しない場合JSONブロックを省略 LIVE
live.cdn.type Stiring 必須 Kollusに指定されているCDN Type: 使用可能なタイプはakamai LIVE
live.cdn.password Object 選択
(基本値: 空の文字列)
CDNアクセスのパスワード: short, long 両方必要 LIVE
live.auth_type String 選択
(基本値: user)
Edge 認証タイプ LIVE
live.use_ip_validation Boolean 選択
(基本値: false)
EdgeからMedia URLを生成する際にP認証を使用するかを設定 LIVE
live.use_kollus_token Boolean 選択
(基本値: false)
EdgeからMedia URLを生成する際にKollus Token (ktn パラメータ)を使用するかを設定 LIVE
例示
Introなしのコンテンツの再生に使用する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": 1535963209,
    "mc": [{
        "mckey": "gDV2B1ZG",
        "play_section": {
            "start_time": 0,
            "end_time": 60
        }
    }]
}

 

Live(in VOD) JWT Payload Spec
Payload項目
名称 Datatype 必須有無 内容 cdn type
cuid
(CLIENT_USER_ID)
String 必須 コンテンツにアクセスする顧客のユーザーID:
ブックマーク及びNScreenデータのKeyとして使用されます。
akamai
kollus
expt
(EXPIRE_TIME)
Integer 必須 JWTの有効時間となり、Unix timestamp 形式で入力します。顧客側のサーバーとの時刻が一致しない場合があるため、有効時間が過ぎても最長1分以内まではアクセスができます。 akamai
kollus
mckey
(MEDIA_CONTENT_KEY)
String 必須 再生するコンテンツの識別キー: Live コンテンツの場合VGマッピングに使用するキーとなり、mckeyにアップロードされたコンテンツではなくJWTのlive.urlで転送されたコンテンツを再生 akamai
kollus
title String 必須
(基本値: null)
コンテンツのタイトルを代替する文字列 akamai
kollus
live.url
(LIVE_URL)
String 選択
(基本値: null)
Live Streamingの再生URLを入力 akamai
kollus
live.poster_url
(LIVE_POSTER)
String 選択
(基本値: null)
Live Streamingを再生する前に表示されるポスターイメージのURLを入力 akamai
kollus
live.cdn Object 選択 CDNを使用しない場合JSONブロックを省略 akamai
kollus
live.cdn.type Stiring 必須 Kollusに指定されているCDN Type: 使用可能なタイプはakamai akamai
kollus
live.cdn.password Object 選択
(基本値: 空の文字列)
CDNアクセスのパスワード: short, long 両方必要 akamai
live.auth_type String 選択
(基本値: user)
Edge 認証タイプ akamai
live.use_ip_validation Boolean 選択
(基本値: false)
EdgeからMedia URLを生成する際にP認証を使用するかを設定 akamai
kollus
live.use_kollus_token Boolean 選択
(基本値: false)
EdgeからMedia URLを生成する際にKollus Token (ktn パラメータ)を使用するかを設定 akamai
live.use_duplication_block Boolean 選択
(基本値: true)
重複再生遮断有無 kollus
例示
Live Streaming jwt payload

Live Streamingで再生される場合、intro / seek / playbackRate機能が全て無効化されるため関連JWTオプションは不要

{ "cuid": “catenoid”, "expt": 1462931880, "mc": [{ "mckey": “gDV2B1ZG“, "title": “Live Sample“, "live" : { "url": "http://XXXXX/XXX.m3u8", "poster_url": "http://XXXXX/XXX.jpg" }, }] }
Live Streaming jwt payload + akamai cdn認証

Live Streamingで再生される場合、intro / seek / playbackRate機能が全て無効化されるため関連JWTオプションは不要

{
  "mc": [
    {
      "mckey": "gDV2B1ZG",
      "live": {
        "url": "http://XXXXX/XXX.m3u8",
        "poster_url": "http://XXXXX/XXX.jpg",
        "cdn": {
           "type": "akamai",
           "password": {
              "short": "000000a0",
              "long": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
           },
           "auth_type": "user",
           "use_ip_validation": true,
           "use_kollus_token": false
        }
      },
      "title": "Live Sample"
    }
  ],
  "cuid": "test",
  "expt": 1462931880
}
Live Streaming jwt payload + Kollus認証

Live Streamingで再生される場合、intro / seek / playbackRate機能が全て無効化されるため関連JWTオプションは不要

{ "mc": [ { "mckey": "gDV2B1ZG", "live": { "url": "http://XXXXX/XXX.m3u8", "poster_url": "http://XXXXX/XXX.jpg", "cdn": { "type": "kollus", "use_ip_validation": true, "use_duplication_block": false } }, "title": "Kollus Live" } ], "cuid": "test", "expt": 1462931880 }

※ expt フィールドの値はonetime URLのexpire timeとなり、同時にライブストリームのexpire timeとして使用されます。例えとして1時間分のライブを配信するためにはexpt値を1時間以上に設定する必要があります。

Live jwt payload Spec

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

{ "client_user_id": "CLIENT_USER_ID", "client_user_name": "CLIENT_USER_NAME", "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 }, "client_user_image": "CLIENT_USER_IMAGE", "expire_time": EXPIRE_TIME, "live_media_channel_key": "LIVE_MEDIA_CHANNEL_KEY", "live_media_profile_key": "LIVE_MEDIA_PROFILE_KEY", "title": "TITLE", "chatting_policy": { "is_visible": true, "is_admin": false, "position": "right" } }
Payload項目
名称 Datatype 必須有無 内容 cdn type
client_user_id (or cuid) String 必須 コンテンツにアクセスする顧客のユーザーID:
ブックマーク及びNScreenデータのKeyとして使用されます。
client_user_name String 選択 チャットを使用する場合表示される名前
client_user_image String 選択 チャットを使用する場合名前の横に表示されるイメージのURL: httpsのみ対応
expire_time(or expt) Integer 必須 JWTの有効期限: Unix timestamp形式で入力します。顧客サーバーのと時間が一致しない可能性があるため、最大1分間の差が発生することがあります。
live_media_channel_key (or lmckey) String 選択
再生されるコンテンツの識別キー: 拡張ライブメディアチャンネルキー形式も同一に使用することができます。
live_media_profile_key(or lmpf) String 選択
(基本値: null)
ライブチャンネルのプロファイルを強制に指定する場合使用: 指定するプロファイルキーを入力します。Entryを削除もしくはnullで入力する場合自動選択となり、ABR動作となります。
title
(TITLE)
String 選択
(基本値: null)
コンテンツのタイトルを代替する文字列
chatting_policy.is_visible boolean 選択
(基本値: true)
チャットウィンドウの表示有無を設定
chatting_policy.is_admin boolean 選択
(基本値: false)
チャットウィンドウの管理者を指定
chatting_policy.position String 選択
(基本値: bottom)
チャットウィンドウの位置を指定
bottom | left | right
video_watermaking_code_policy.code_kind String 選択 現在は必須: “client_user_id”
video_watermaking_code_policy.alpha Integer 選択
(基本値: 200)
Video Watermarking codeのalpha値を設定 (16進数 0~255)
video_watermaking_code_policy.font_size Integer 選択
(基本値: 7)
Video Watermarking codeのfont-size値を設定 (単位: px)
video_watermaking_code_policy.font_color String 選択
(基本値: ‘FFFFFF’)
Video Watermarking codeのfont-color値を設定
video_watermaking_code_policy.show_time Integer 選択
(基本値: 1)
Video Watermarking codeの表示時点を設定 (単位: 秒)
video_watermaking_code_policy.hide_time Integer 選択
(基本値: 1)
Video Watermarking codeの非表示時点を設定 (単位: 秒)
video_watermaking_code_policy.enable_html5_player Boolean 選択
(基本値: false)
HTML5 PlayerにVideo Watermarking codeの適用有無を設定

V/G Query String

使用方法

http://v.kr.kollus.com/[MEDIA_CONTENT_KEY]?key=value&…

query stringの場合、urlの最後に?を付けてkeyとvalueを=で結びます。data typeがnullの場合、keyのみ付けます。keyとvalueの組を複数結ぶ場合には&で区別します。

 

Player仕分

Playerは以下の名称で統一します。

  • モバイル : Mobile
    • iOS 専用Player : iOS
    • Android 専用Player : Android
  • PC
    • Flash Player : Flash
    • V2 Player (ActiveX, NPAPI Player) : V2
    • V3 専用Player (インストールタイプ、AgentタイプのPlayer) : V3e
    • V3 Player (HTML5 AgentタイプのPlayer) : V3h
    • V4 Player (HTML5 Player, 標準) : V4

 

パラメータ

key DataType 対応Player 説明
pf string All プロファイルの自動設定に関係なく指定されたプロファイルキーに該当するトランスコーディングファイルをServing。存在しない場合には自動設定。

例> ?pf=mixnut-pc-high1 (mixnut-pc-high1に該当するトランスコーディングファイルをServing)

autoplay (a) null All 自動で再生を開始。但し、モバイル専用Playerはデフォルト値が自動開始となります。 (オプションに影響されない)
mute null All ミュート状態で再生を開始。Mobile HTML5 Playerは対応不可。
download null Mobile,V3e, V3h コンテンツダウンロード機能。download optionを追加するとVideo gatewayがダウンロードモードで動作します。チャンネルからモバイル又はPC ダウンロードオプションを使用しない設定にした場合、実際ダウンロードを行おうとしてもPlayer側でダウンロードをさせません。
title string All 元タイトルを表示する代わりに強制指定したタイトルに変更する。Mobile  HTML5 Playerは対応不可
t integer All 指定された時点から再生。Nscreenデータに関係なくここで指定された時点から再生されます。(続き再生のポップアップが表示されます。)

例> ?t=10 (10秒から再生)

s integer All 指定した時点から再生。tオプションと異なってs オプションは続き再生ポップアップが表示されません。
force_exclusive_player null V2, V3e, V3h 非暗号化コンテンツをPC専用Playerで再生されるように強制指定。(モバイルは対応不可)
uservalue0~9 mixed All uservalue0~9までの値を設定
brightness integer V2 明るさレベルを設定。設定範囲は -50 <= brightness <= 50 となります。 Defaultは0
contrast integer V2 コントラストレベルを設定。設定範囲は -50 <= contrast <= 50となります。Defaultは0
saturation integer V2 カーラートーンを設定。設定範囲は -50 <= saturation <= 50となります。Defaultは0
mobile_return_url string iOS 再生中バックキーを押すかまたは再生終了した場合に指定したURLをsafari web browserで開く
mobile_folder_download string Mobile モバイルダウンロードのフォルダを指定。

例> フォルダ1/フォルダ2/フォルダ3

wmode string Flash PCの場合Flash playerのwmodeを強制指定する。指定してない場合には‘direct’になる。wmodeは以下の中で一つを指定します。

例> direct, transparent, window, opaque, gpu

pc_player_version string Desktop PCでPlayer2.0又は3.0の中で使用するバージョンを指定。指定してない場合2.0が再生不可能な環境(3.0では再生できる前提として) の場合には自動で3.0が立ち上がる。以下の中で一つを指定します。

選択可能オプション> v2, v3, v3e

 * v3eに指定した場合にはv3 専用Playerが呼出されます。

* 互換性の問題で維持中。新規使用の場合、下のplayer_versionオプションを使用するように推奨

player_version string Desktop PCで Player2.0 ~ 4.0の中で使用するバージョンを指定。指定しない場合、視聴環境に適合するPlayerが自動で起動します。以下の中で一つを指定します。

選択可能オプション> v2, v3, v3e, html5* v3eに指定した場合にはv3 専用Playerが呼出されます。

pc_folder_download string V2, V3e, V3h PCダウンロードのフォルダ名を指定。

例> フォルダ1/フォルダ2/フォルダ3

play_downloaded_file null V3e, V3h ダウンロードされたファイルを再生する。
buffer integer V2, V3e, V3h バッファリング時間を指定。2 <= buffer <= 10 の中で定数のみ指定可能。基本値の倍数として適用されます。

例> 2 → 基本値の2倍

show_controls_paused boolean Flash, V4 Trueの場合、一時停止状態からinactive 状態に変わったときcontrolbarとoverlay buttonをそのまま表示する。(Default : false)
show_poster_ended boolean Flash, V4 Trueの場合、再生が終了した後ポスターイメージを表示する。(Default : false)
overlay_button_position string Flash, V4 Overlay buttonの場所を設定する。

  • TR : Top & Right
  • TL : Top & Left
  • BR : Bottom & Right
  • BL : Bottom & Left

設定されてない場合、又は上記以外の値を入れた場合には真ん中に整列されて表示されます。

 

Sample Code

  V/G Query String – java

 

Upload

FTP

  1. Kollus FTP アクセス情報の確認

    1. WebブラウザからKollus CMSページを開きます。

    2. ログインアカウント情報を入力してログインします。

    3. ‘ファイルアップロード’をクリック

    4. ‘ファイルアップロード’ページが表示

    5. FTPアクセス情報を確認

  2. FTP Clientを実行

    FTP アップロードガイド文書は’Filezilla’をベースで説明しております。他のFTP Clinetを使用する場合名称が変わる可能性があります。

    1. Filezilla ダウンロードページに移動

    2. Filezilla をインストール

    3. Filezilla を実行

  3. FTP アクセス

    Kollus FTP アクセス情報を入力します。

    1. ホスト : FTP

    2. ユーザ名: ID

    3. パスワード: パスワード

  4. ビデオアップロード

    FTP Clientからアップロードする場合、’ファイル暗号化’, ‘カテゴリ登録’, ‘パススルー’の有無によってアップロードポリシーが決まっています。

    4-1. 一般/暗号化アップロード

    FTP Clientでアップロードする場合、暗号化を掛ける場合スクリプトを追加する必要があります。FTPフォルダーのポリシーは以下の情報を確認してください。

    暗号化有無 FTP フォルダー経路
    非暗号化 /_カテゴリ名
    暗号化 /_encrypt/_カテゴリ名

    サービスアカウントのセキュリティー機能が有効化されてない場合には暗号化アップロードができません。

    4-2. カテゴリ登録

    管理画面のライブラリに登録されているカテゴリの構成と同一な形態でポリシーを適用することで指定したカテゴリにファイルを登録することができます。カテゴリは最大 3段階まで(下位2段階)生成することができます。

    カテゴリ構造 FTP フォルダ経路
    (1段階) カテゴリ1 /_カテゴリ1
    (2段階) カテゴリ1
    ㄴ カテゴリ2
    /_カテゴリ1/_カテゴリ2
    (3段階) カテゴリ1

                      ㄴ カテゴリ2

                              ㄴ カテゴリ3

    /_カテゴリ1/_カテゴリ2/_カテゴリ3
    • ex) 管理画面から‘2018年度-スポーツ-野球’ という3段階構造のカテゴリ・フォルダーを作成した場合、FTP フォルダ経路は[/_2018年度/_スポーツ/_野球]の通りに作成します。
    • 管理画面に登録されているカテゴリ名と一致しない場合には自動で新規カテゴリを生成してファイルが登録されます。

    4-3. パススルー

    パススルー(passthrough)はトランスコーディングを掛けないで原本ファイルのままアップロードする方法となります。コンテンツのポスターイメージと再生中のサムネールイメージのみ取り出して登録されます。他のポリシーは上記のアップロードポリシーと同様となります。

    アップロード種類 FTP フォルダ経路
    パススルー非暗号化アップロード /_passthrough/_カテゴリ名
    パススルー暗号化アップロード /_passthrough_encrypt/_カテゴリ名
    • サービスアカウントのセキュリティー機能が有効化されてない場合には暗号化アップロードができません。
    • パススルーを利用するためには以下の条件が前提となります。
      • MP4 / H.264 フォーマットのファイルのみ対応
      • 原本ファイル名に ‘エンコーディングプロファイルキー’ を適用
      • サービスアカウントの ‘ソースファイル保存’が無効化になっていること

    4.4 原本ファイル名に ‘エンコーディングプロファイルキー’を入力

    パススルーでアップロードした場合トランスコーディングを掛けないため、複数の原本ファイルをユニークなファイルとして認識させるため、原本ファイルの画質に合わせてプロファイルを指定する必要があります。

    原本ファイル名 エンコーディングプロファイルキー適用
    Aaaa.mp4 Aaaa_エンコーディングプロファイルキー.mp4

    エンコーディングプロファイルキーは管理画面から確認できます。

Upload API

概要

Kollus HTTP アップロード Endpointは 顧客社がアップロードしたい時点にKollus Open APIの一回性アップロード URLを発給、APIを呼び出して獲得したアップロードURLに HTTP multipart/form-data 形式でファイルをアップロードし、以降の過程(トランスコーディング)を進めさせます。

Usecase scenario

  1. ユーザが顧客社のWeb siteに動画ファイルをアップロードするため、特定ページをリクエストします。
  2. 顧客社のアップロードページからユーザにアップロード経路をレスポンスするためKollus Apiを使ってアップロードURL生成をリクエストします。
  3. アップロードURL 生成リクエストをレスポンスするためアップロード URLとアップロード ファイルキー(Upload file key), キーの満了時間などの情報を獲得します。
  4. 3からレスポンスされたアップロードURL情報に基づいて顧客に見せるアップロード ページを生成します。
  5. 顧客社のアップロードページでアップロードをすると、実際アップロードは顧客社のWeb siteではなく、Kollusアップロードサーバーへ直接転送することになります。

注意事項

HTTP プロトコルを通したアップロードに対応するため、ユーザがアップロードするに必要な情報を生成するAPIを提供します。HTTP Upload APIは以下のような特徴があります。

  • 生成されたアップロードURL, アップロードファイルキーは一度使用されたら無効になります。
  • 生成されたアップロードファイルキーは指定した時間が経過すると自動で廃棄されます。

リクエスト規格

アップロードURLの発給をリクエストするに当たって、次のようなパラメタ-設定が可能となります。RequestはKollus APIポリシー上、HTTP(80), POSTのみ対応します。

POST key Data type 基本値 備考
expire_time integer 600 (秒) 値の範囲は0 < expire_time <= 21600 になります。空白または項目を削除した場合、基本600秒に設定されます。
category_key string (無し) アップロードしたファイルが指定されるカテゴリのキーになります。空白または項目を削除した場合、「無し」に設定されます。
title string (無し) 入力したタイトルをコンテンツのタイトルとして強制に指定します。転送しないまたは空白の場合、ファイル名がタイトルとして設定されます。
is_encryption_upload integer 0 (非暗号化) 0は非暗号化アップロード, 1は暗号化アップロードになります。暗号化アップロードした場合、ファイルが暗号化され、Kollus専用プレーヤーでしか再生できなくなります。暗号化アップロードが有効化されてないサービスアカウントにこの値を1に指定してリクエストした場合、アップロードURL生成に失敗します。
is_audio_upload integer 0 (Video) 0はビデオファイル、1はオーディオファイルアップロードになります。
is_multipart_upload integer 0 (統合) ファイルの分割アップロードを設定する項目になります。今後提供する予定で現在は対応しません。

 

レスポンス規格

JSON / UTF-8で結果をリターンします。

(# upload_urlに使用されるドメイン情報を含めた全ての情報はKollusシステムポリシーにより変更される可能性があります。)

Sample
{
    "error": 0,
    "message": "",
    "result": {
        "upload_url": "http: //upload.kr.kollus.com/api/v1/UploadMultiParts/KUS_BOHG2eTQhPSIaG2511G1jfkpWOYAOjDc/20151204-dh6o2goz",
        “progress_url”: “http: //upload.kr.kollus.com/api/v1/GetUploadingProgress/KUS_BOHG2eTQhPSIaG2511G1jfkpWOYAOjDc”,
        "upload_file_key": "20141017-y4sae7td",
        "will_be_expired_at": 1413883670
    }
}

JSON Structure Description

  • error : エラーコード、正常の場合0
  • message : エラーの場合、詳細内容が含まれます。
  • result : 正常の場合アップロードAPI呼出の結果が含まれます。
    • upload_url : アップロードするURL (HTTP)
    • progress_url : アップロード進行率の獲得ができるURL (HTTP)
    • upload_file_key : アップロードファイルキー
    • will_be_expired_at : upload_file_key 有効期限(unix timestamp)

ファイルアップロード

アップロードURL発行リクエストAPIから獲得したアップロードURL(upload_url)が、実際にファイルを転送するアップロードサーバーのアドレスになります。このアドレスにHTML multipart/form-dataの形式でファイルを転送します。

注意事項

  • 転送するファイルのinput nameはupload-fileになります。
  • 各アップロードURLは各1つのファイルのみ適用されます。(1つのアップロード URLで複数のファイルを転送する場合、1回目以降のアップロードは失敗します。)
  • アップロードはアップロードURLの有効期限内に完了しなければなりません。有効期限の判定はアップロードが終了した時点になります。

アップロードオプション

POST key Data type 基本値 備考
return_url string (無し) return_urlが設定された場合アップロード終了後に指定のurlへredirectします。ここにresultとmessage値を追加します。(*Header Protocol required )
入力値: http://www.abc.com
例> http://www.abc.com?result=S&message=…
disable_alert integer 0 基本仕様としてアップロード終了後に結果をalertで転送することになっていますが、結果転送機能を使わない場合disable_alert値を1にして転送してください。
redirection_scope string ‘outer’ アップロード完了後redirectするdomain scopeを指定します。このオプションは次の値の中、1つを持ちます。

  • outer -> window.top.locationでredirectする
  • inner -> window.locationでredirectする
  • no -> redirectしない
accept string Request Header のAccept値 アップロード完了後、転送してもらう結果のコンテンツタイプを指定します。ブランクにするとtext/html方式で送ります。この場合return_url, disable_alert, redirection_scopeオプションを適用して生成されたhtml ページが結果としてreturnされます。この値を ‘application/json’ 形式に指定すると、上記の3つのオプションは無視され、結果はJSON形式でReturnされます。

  • text/html -> 既存HTMLタイプのページ
  • application/json -> JSONタイプの結果

※application/json形式で結果を指定した場合以下のようなフォーマットで転送します。
{
"error": 0, // 0はアップロード成功 1はアップロード失敗
"message": null // errorが1の場合messageにエラー内容の説明を入力
}
この項目を入力しない場合: Request HeaderのAcceptからの確認優先順位はapplication/json→text/htmlの順で入力値を確認・使用します。application/json, text/htmlタイプではない入力値が含まれている場合、text/htmlをデフォルトとして使用します。

 

RETURN URL

  • resultはSかFで判定されます。Sはアップロード成功、Fはアップロード失敗です。
  • messageはアップロード結果を説明するメッセージとなります。 (alertに表示されるメッセージと同一です。)

Sample

<form action="http: //upload.kr.kollus.com/20141017-y4sae7td" method="post" enctype="multipart/form-data">
     <!-- redirect scope 設定 -->
     <input type=”hidden” name=”redirection_scope” value=”outer” />

     <!-- アップロード終了後にredirectするurlの設定 -->
     <input type=”hidden” name=”return_url” value=”http://www.lotte.com/upload_result.html” />

     <!-- アップロード終了後にalertを表示しない設定 (1) -->
     <input type=”hidden” name=”disable_alert” value=”1” />

     <input type=”file” name=”upload-file” />
     <input type=”submit” />
</form>

 

アップロード進行率

アップロードURL生成APIの呼出で獲得した結果からprogress_urlエントリーを参照してアップロード進行率を獲得します。(JSON形式)

レスポンス規格

JSON / UTF-8で結果をレスポンスします。

Sample

{
    "error": 0,
    "message": null,
    "result": {
        "progress": 100
    }
}

Callback

概要

Kollus OVPを利用状況は及びサービス管理は管理画面(CMS)から行うことが基本的な利用形態となりますが、顧客側の利便性向上のために指定したWeb URL (主に顧客側の管理ページなど)にCMSで行われる作業状況を転送する「Callback」に対応しております。指定したWeb URlへのCallback転送が失敗した場合には再び転送をトライしており、各リトライの度にKollus側のログを記録することでリトライが失敗した際の原因を究明・正常にCallback転送が行われるように仕組まれています。本文書にはCallback転送とリトライに対したKollus Callback転送サーバーの処理プロセスを説明します。

Callback設定

Callbackは配信チャンネル編集ページの「運用ポリシー」メニュから設定することができます。運用ポリシーメニュから設定できないCallback (Upload callback, Transcoding Callback, Contents update callback, Drop-off callback)は担当者までお問い合わせください。

チャンネルにCallback設定 (チャンネルにコンテンツ登録、削除結果の転送)

  1. 配信チャンネルに移動します。
  2. チャンネル編集ページに移動します。
  3. 運用ポリシーに移動します。
  4. Call-back使用を「利用する」にします。
  5. 必要なChannel Callbackを登録します。

その他Callbackの設定 (Upload callback, Transcoding Callback, Contents update callback, Drop-off callback)

Kollus サービス担当者にお問い合わせください。

 

Callback転送

転送方法

  1. 全てのCallbackはお客様が設定したWeb URLの80番ポートにPOST方式を利用して転送します。
  2. 全てのCallbackは転送時点になると、即時転送することを原則とします。
    (Callbackを処理するサーバーの負荷状況により遅延される可能性があります。)
  3. 顧客側のWebサーバーがCallbackを受け取った場合、200 HTTP Status Codeでレスポンスしなければなりません。レスポンス内容のHTTP body部分は確認しません。(200以外のコードでレスポンスした場合には転送失敗と見なし、指定時間後に転送をリトライします。)

注意事項

顧客側のサーバーはKollusのCallback転送リクエストに対して2秒以内にアクセスし、接続から3秒以内にレスポンスを返さなければなりません。時間内にアクセスがないまたは応答がなかった場合にはKollus Callback転送サーバーは転送失敗と見なして指定された時間後にリトライします。(Connect Time-out 2秒, Response Time-out 3秒)

Callback転送プロセス

Callback再転送

転送方法

  1. 基本的な内容は「Callback転送処理」項目と同一です。
  2. リトライは5分間隔で最大3回まで行います。

注意事項

顧客側のサーバーがKollus Callbackを正常に処理したと見なして200 HTTP Status CodeをレスポンスしてもそのレスポンスがConnect/Response Time-outが切れてから行われた場合、Kollus Callback転送サーバー側は既に転送失敗と処理されてCallbackリクエストをリトライすること可能性があります。 
 つまり、Time-outが原因で同一なCallbackが再びリクエストされる場合がありますのでCallback URLの開発時に考慮しなければなりません。

Callback リトライプロセス

Callbackパラメータ

アップロード完了 Callback

POST Data type 備考
content_provider_key string 顧客のサービスアカウントキー
filename string アップロードされたファイル名(フォルダ含む)
upload_file_key string アップロードファイルキー

 

トランスコーディング完了 Callback

POST Data type 備考
content_provider_key string 顧客のサービスアカウントキー
filename string アップロードされたファイル名(フォルダ含む)
upload_file_key string アップロードファイルキー
transcoding_result string トランスコーディング結果 (success, fail)

 

チャンネルにコンテンツ登録完了 Callback

POST Data type 備考
content_provider_key string 顧客のサービスアカウントキー
filename string アップロードされたファイル名(フォルダ含む)
upload_file_key string アップロードファイルキー
media_content_key string メディアコンテンツキー (配信チャンネルに登録されたコンテンツを識別するためのユニークキー)
channel_key string チャンネルキー(コンテンツが登録されたチャンネルを識別するキー)
channel_name string コンテンツが登録されたチャンネル名
profile_key string コンテンツがトランスコーディングされたプロファイル名(複数の場合 ‘|’で区分)
update_type string 更新種類: channel_join (チャンネルにコンテンツ登録)

 

チャンネルのコンテンツ削除完了 Callback

POST Data type 備考
content_provider_key string 顧客のサービスアカウントキー
filename string アップロードされたファイル名(フォルダ含む)
upload_file_key string アップロードファイルキー
media_content_key string メディアコンテンツキー (配信チャンネルに登録されたコンテンツを識別するためのユニークキー)
channel_key string チャンネルキー(コンテンツが登録されたチャンネルを識別するキー)
channel_name string コンテンツが登録されたチャンネル名
update_type string 更新種類: channel_leave (チャンネルからコンテンツ削除)

 

コンテンツ更新 Callback

POST Data type 備考
content_provider_key string 顧客のサービスアカウントキー
filename string アップロードされたファイル名(フォルダ含む)
upload_file_key string アップロードファイルキー
update_type

string

更新種類: 変更された結果が必要な場合にはAPIを呼び出して該当コンテンツの情報を確認してください。
API: /media/library/media_content/{upload_file_key}
content_title: タイトル変更
content_tag: タグ変更
content_category: カテゴリ変更
content_enable: コンテンツを有効化
content_disable: コンテンツを無効化
profile_add: エンコーディングプロファイルを追加
profile_delete: エンコーディングプロファイルを削除
origin_delete: 原本ファイルを削除
content_subtitle: 字幕をアップロード
content_poster: ポスターをアップロード
content_detail: コンテンツ詳細情報URLを変更
content_delete: コンテンツを削除

Player Callback

Play

概要

Kollus Security Playerで再生する際に顧客側で指定したURLを呼出す(Callback)機能を説明します。

Expire option

設定項目のdata-typeや値が範囲から外れた場合、エンドユーザーのコンテンツの利用に問題が発生する可能性があります。また、誤った設定値を訂正する方法はありませんので設定に注意してください。

  • Expire date : 再生有効期限
    • data-type : integer, unixtime stamp
    • コンテンツの有効期限(再生可能期限)
      • 終了日(日時)ex) 2014. 3. 3.  5時 45分 30秒 GMT → 1393825531
      • 0 : unlimited (無制限)
      • 最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)

Play callback

Play callbackを使用するにはチャンネル編集ページの運用ポリシー、Play Callback項目にCallbackを受け取るURLを事前に登録する必要があります。

チャンネルにPlay Callbackを指定するとこのチャンネルから再生される全てのコンテンツはCallbackに対したレスポンスが確認されてから再生されるため、Callback URLは常にレスポンスができる状態を維持する必要があります。

注意:

  1. 顧客側のユーザID(サービスに登録された会員が特定できる情報)を含むメディアトークン(Media token)を生成してリクエストするとPlay Callbackが呼出されます。
    (メディアトークンの生成は別途文書を参考にしてください。)
  2. Play Callback URLからレスポンスがないと再生されません。
  3. Play Callbackはダウンロードされたコンテンツ(DRM Callback)とは動作が異なります。ダウンロードされたコンテンツはPlay Callbackではなく、DRM Callbackが適用されます。必要に応じてPlay CallbackとDRM Callbackに同一なURLを指定する場合、ストリーミングとダウンロードに対してのレスポンスを同時に受け取ることができます。

Callback flow

  1. 配信チャンネルにPlay CallbackのURL設定します。
  2. Media tokenを生成して再生(ダウンロード)をリクエストします。
    • Kollus crypt SDKを使ってMedia tokenを生成します。
  3. Kollus Security playerがhttp://www.foo.com/auth.php に以下の情報をPOST転送します。
    • kind : 1, 3
    • client_user_id : ユーザID(サービス会員情報)
      • Media token 生成の際に含まれたID
    • player_id : ユーザのデバイスID
    • device_name : ユーザのデバイス名
    • media_content_key : 再生するコンテンツキー
      • チャンネルに登録されたコンテンツのメディアコンテンツキー(ユニーク)
      • 同じコンテンツを複数のチャンネルに登録する場合、それぞれのmedia_content_keyは全て異なります。
  4. 顧客のPlay Callbackサーバーは転送された上記の情報に基づいて以下のjson フォーマットのdataを次の方式に合わせてHttp Bodyに転送します。(顧客が認証データをPlayerに転送する全てのデータは必ずinteger型で転送しなければなりません。)
    • 対応方式
      • Kollus crypt SDKで暗号化して転送
      • JWT Encodeして転送、アルゴリズムはHS256のみ対応しており、jsonフォーマットのdataをJWTのpayloadに追加してEncodingします。ヘッダーに指定された *ユーザーキー(X-KOLLUs-USERKEY)”を共に転送します。secret keyはCallbackリクエストの際に転送するcustom_keyパラメータ値を使用します。

Response JSON spec.

Json Tag Description
expiration_date unixtime stamp (有効期限のunixtime stamp)
最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)
result 結果が正常の場合は1、異常の場合は0をリターンする。
content_expired DRM コンテンツを強制的にexpireします。

 

Callback Kind

Play Callbackが呼出される状況は以下のケースになります。

 

コンテンツのExpire情報をリクエストする場合 (kind:1)

Request
区分 Description
POST Http POSTでリクエスト (parameterではない)
kind 1
client_user_id ユーザID, media_token 生成に使用されたclient_user_idと同一です。
player_id ユーザのデバイスID
hardware_id デバイスのhardware ID (PC, 入力が必要な場合)
device_name ユーザのデバイス名
media_content_key 再生するコンテンツのメディアコンテンツキー
uservalues JSON format (VideoGatewayの呼出に使用されたuservalue0~9)
localtime デバイスのUTC Time
  • uservalues sample
    • uservalues={“uservalue0″:”商品種類コード01″,”uservalue1″:”商品名コード02″,”uservalue9″:”
      生成コード03″}
    • VideoGateway(v.kr.kollus.com)の呼出に使用されたuservalue0~9 情報が一緒にリターンされます。
Response
カテゴリ 区分 Description
Data



(int) expiration_date 有効期限のunixtime stamp
最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)
(int) result 0 (エラー), 1 (正常)
(string) message 0 (エラー)の場合、messageを追加すると状況に合うメッセージが表示されます。
(int) vmcheck 0 (使用しない), 1 (使用する, default) virtual machineの確認有無、PC(v3)のみ使用可能
(array)
play_section{
start_time,
end_time
}
プレビュー区間、秒単位で区分(end_timeをstart_timeより大きく指定)
(int) disable_tvout 0 (tvout 遮断なし), 1 (tvout 遮断) ここで指定しなかった場合、チャンネルポリシーのdisable_tvoutポリシーが適用されます。
(int)
expiration_playtime
空白または0の場合、再生時間が適用されません。0より大きい場合該当秒だけ再生後に終了します。
(int) expiration_playtime_type
1: playが実際に起動した時間となり再生後終了します。
(int) cpcheck 0: 使用しない 1: 使用する(default) キャプチャソフトのチェック有無、PCのみ対応
(int) processblock 0: 使用しない 1: 使用する(default) blockプロセスチェック有無、PCのみ対応
exp (int) 使用可能期限 unixtime stamp(オプション)
Example
{
    “data” : {
        "expiration_date": 1402444800,
        "vmcheck": 1,
        "play_section": [
            “start_time”: 0,
            “end_time” : 60
        ],
        "disable_tvout": 1,
        "expiration_playtime": 1800,
        "result": 1
    },
    “exp” : 1477558242
}

 

コンテンツを再生する場合 (kind:3)

注意) Play Callbackに対したレスポンスが確認されてから再生が始まります。レスポンスがなければ再生できません。

Request
区分 Description
POST Http POSTでリクエスト (parameterではない)
kind 3
client_user_id ユーザID, media_token 生成に使用されたclient_user_idと同一です。
player_id ユーザのデバイスID
device_name ユーザのデバイス名
media_content_key 再生するコンテンツのメディアコンテンツキー
uservalues JSON format (VideoGatewayの呼出に使用されたuservalue0~9)
localtime デバイスのUTC Time
Response
カテゴリ 区分 Description
data (int) content_expired 0 (再生可能), 1 (再生不可)
再生を遮断します。DRM Callbackと同一な仕様を維持するため同一項目で管理されます。
(int) result 0 (エラー), 1 (正常)
0の場合再生されません。たとえconent_expiredが1になっていてもexpireが適用されません。
(string) message 0 (エラー)の場合、またはcontent_expiredが1(再生不可)の場合にmessageを追加すると内容に合わせてメッセージが表示されます。
exp (int) expiration_date 使用可能期限 unixtime stamp(オプション)
最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)
Example
{
    “data” : {
        "content_expired": 1,
        "result": 1
    },
    "exp" : 1477558242
}	

Sample

  • Play callback url
  • コンテンツ有効期限 : 2014年 6月 10日 24:00まで
    • DATE (M/D/Y @ h : m : s): 6 / 10 / 2014 @ 24:0:0 UTC
    • Unix time stamp : 1402444800
    • http://www.epochconverter.com から1402444800値を変更することができます。※UTC基準(GMTではない)
kind1 : request expire option
request
  • URL : http://www.foo.com/auth.php
  • post data
    • kind=1
    • client_user_id=guest1
    • media_content_key=VXBW1VdY
    • uservalues={“uservalue0″:”商品種類コード01″,”uservalue1″:”商品名コード02″,”uservalue9″:”
      生成コード03″}
response
{
    “data” : {
        "expiration_date": 1402444800,
        "result": 1
    },
    "exp" : 1477558242
}

 

kind3 : play content (expire content)
request
  • URL : http://www.foo.com/auth.php
  • post data
    • kind=3
    • client_user_id=guest1
    • media_content_key=VXBW1VdY
    • uservalues={“uservalue0″:”商品種類コード01″,”uservalue1″:”商品名コード02″,”uservalue9″:”
      生成コード03″}
response
{
    “data” : {
        "content_expired": 1,
        "result": 1
    },
    "exp" : 1477558242
}

 

Code sample

顧客のDBが以下のような構成になっていると想定した場合のサンプルコードになります。

 

 

PHP sample
<?php
    /**
    * PHP Version : 5.4 above
    * by yupmin
    */
    include "./config.php";
    
    // 注意 : kindが1の場合、自動的にexpiration_dateが生成されるサンプルページとなります。
    // 再生回数の制限
    $_default_expiration_count = 3;
    $_expired_duration = 60 * 60 * 24; // 1 day
    // DB Connection
    $_db_conn = mysql_connect($_hostname, $_username, $_password);
    if (!$_db_conn) {
   		die('Could not connect: ' . mysql_error());
    }
    $_db_selected = mysql_select_db($_database, $_db_conn);
    if (!$_db_selected) {
    	die ('Can\'t use database : ' . mysql_error());
    }
    $_kind = isset($_POST['kind']) ? ((int) $_POST['kind']) : NULL;
    $_media_content_key = isset($_POST['media_content_key']) ? $_POST['media_content_key'] : 		NULL;
    $_client_user_id = isset($_POST['client_user_id']) ? $_POST['client_user_id'] : NULL;
    
    $channel = NULL;
    $_query = sprintf("SELECT * FROM `channels` WHERE `media_content_key` = '%s'",
   		mysql_real_escape_string($_media_content_key, $_db_conn));
    $_result = mysql_query($_query, $_db_conn);
    if ($_result) {
   		$channel = mysql_fetch_array($_result, MYSQL_ASSOC);
    	if ($channel === FALSE) $channel = NULL;
    } else {
    	die('Invalid query: ' . mysql_error());
    }
    
    $user = NULL;
    $_query = sprintf("SELECT * FROM `users` WHERE `client_user_id` = '%s'",
    	mysql_real_escape_string($_client_user_id, $_db_conn));
    $_result = mysql_query($_query, $_db_conn);
    if ($_result) {
    	$channel = mysql_fetch_array($_result, MYSQL_ASSOC);
    	if ($channel === FALSE) $channel = NULL;
    } else {
    	die('Invalid query: ' . mysql_error());
    }
    
    $channel_user = NULL;
    if (!is_null($_media_content_key) && !is_null($_client_user_id)) {
    	$_query = sprintf("SELECT * FROM `channel_users` WHERE `user_id` = '%s', `channel_id` = 			'%s'",
    	$user['id'], $channel['id']);
    	$_result = mysql_query($_query, $_db_conn);
        if ($_result) {
        	$channel_user = mysql_fetch_array($_result, MYSQL_ASSOC);
            if ($channel_user === FALSE) $channel_user = NULL;
        } else {
        	die('Invalid query: ' . mysql_error());
        }
   	}
    $_json_result = array('result' => 0);
    switch($_kind) {
    case 1:
        if (is_null($channel_user)){
            $_expiration_date = time() + $_expired_duration;
            $_expiration_count = $_default_expiration_count;
            $_query = sprintf("INSERT INTO `channel_users`(`user_id`, `channel_id`, 						`expiration_date`
                ,`expiration_count` , `created_at`, `updated_at`) VALUES('%s', '%s', '%s', '%s', 			 UNIX_TIMESTAMP(),
                UNIX_TIMESTAMP())", $user['id'], $channel['id'], $_expiration_date, 						$_expiration_count);

            $_result = mysql_query($_query, $_db_conn);
             if (!$_result) {
                die('Invalid query: ' . mysql_error());
            }
        } else {
            $_expiration_date = $channel_user['expiration_date'];
            $_expiration_count = $channel_user['$expiration_count'];
        }
        $_json_result['expiration_date'] = (int) $_expiration_date;
        $_json_result['expiration_count'] = (int) $_expiration_count;
        break;
    case 3:
    	if (!is_null($channel_user) && $channel_user['is_expired']) {
    		$_json_result['content_expired'] = 1;
    	}
    	break;
    }
    
    // DB Close
    mysql_close($_db_conn);
    
    // json_encodeされた結果をkollus_encryptで暗号化
    echo kollus_encrypt(json_encode($_json_encode));
}

 

JSP ​sample
<%@page import="org.codehaus.jettison.json.JSONObject"%>
<%@page import="java.util.Locale"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.ArrayList"%>
<%@page import="org.codehaus.jackson.map.ObjectMapper"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.sql.*"%>
<%@ page import="test.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    String kind_str = request.getParameter("kind");
    String media_content_key = request.getParameter("media_content_key");
    String client_user_id = request.getParameter("client_user_id");
    int kind = Integer.parseInt(kind_str);
    int _default_expiration_count = 3;
    int _expired_duration = 60 * 60 * 24; //one day
    int channel_id = 0;
    int user_id = 0;
    int channel_user_id = 0;
    int expiration_count = 0;
    int is_expired = 0;
    int download_times = 0;

    Long expiration_date = 0l;
    Connection conn = null; // nullで初期化
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    JSONObject jsonobj = new JSONObject();
	try {
        String url = "jdbc:mysql://localcost:3306/kollus_base";
        String id = "test"; // ユーザアカウントID
        String pw = "test"; // ユーザアカウントパスワード
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        conn = DriverManager.getConnection(url, id, pw);
        String sql = "SELECT * FROM `channels` WHERE `media_content_key` = ? ";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1,media_content_key);
        rs = pstmt.executeQuery();
		while(rs.next()){
			channel_id = rs.getInt("id");
		}
        rs.close();
        pstmt.close();
        sql = "SELECT * FROM `users` WHERE `client_user_id` = ?";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1,client_user_id);
        rs = pstmt.executeQuery();
        while(rs.next()){
        	user_id = rs.getInt("id");
        }
		rs.close();
		pstmt.close();
		if (channel_id > 0 && user_id > 0) {
            sql = "SELECT * FROM `channel_users` WHERE `user_id` = ?, `channel_id` = ? ";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, channel_id);
            pstmt.setInt(2, user_id);
            rs = pstmt.executeQuery();
		   while(rs.next()){
                channel_user_id = rs.getInt("id");
                expiration_date = rs.getLong("expiration_date");
                expiration_count = rs.getInt("expiration_date");
                is_expired = rs.getInt("is_expired");
                download_times = rs.getInt("download_times");
	       }	
           rs.close();
           pstmt.close();
	    }
		jsonobj.put("result", "0");
        switch(kind) {
            case 1:
                if (channel_user_id == 0) {
                    Long starttime = System.currentTimeMillis()/1000;
                    expiration_date = starttime + _expired_duration;
                    expiration_count = _default_expiration_count;
                    sql = "INSERT INTO `channel_users`(`user_id`, `channel_id`,
                    `expiration_date` ,`expiration_count` , `created_at`, `updated_at`) VALUES 						(?,?,?,?,?,?)"; // sql クエリ
                    pstmt = conn.prepareStatement(sql); // prepareStatementから該当sqlを先にコンパイルする。

                    pstmt.setInt(1, user_id);
                    pstmt.setInt(2, channel_id);
                    pstmt.setLong(3, expiration_date);
                    pstmt.setInt(4, expiration_count);
                    pstmt.setLong(5, starttime); // 現在日付と時刻
                    pstmt.setLong(6, starttime); // 現在日付と時刻
                    pstmt.executeUpdate();
                    pstmt.close();
                 }
                 jsonobj.put("expiration_date", expiration_date);
                 jsonobj.put("expiration_count", expiration_count);
                 break;
            case 3:
                 if (channel_user_id > 0 && is_expired > 0) {
                    jsonobj.put("expiration_date", expiration_date);
                }
        }
		break;
		conn.close();
	} catch (Exception e) { // 例外が発生した場合例外状況を処理する。
		e.printStackTrace();
	}
	String sendMsg = jsonobj.toString();
	// System.out.println(sendMsg);
%>
<%= kollus_encrypt(sendMsg)%>

 

サンプルコード

 Playcallback – dotnet

 Playcallback – jsp

JWT対応

PlayCallbackポリシーをJWTでリターンすることができます。Tokenを生成・リターンする際にはJWT Web Site (https://jwt.io)から公認しているライブラリを使用してください。
JWT TokenでPlayerにリターンする場合、指定されたヘッダーにユーザーキーを含めて転送しなければなりません。


HTTP/1.1 200 OK
Date: Fri, 14 Oct 2016 04:12:46 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Kollus-UserKey: 0993d76eb424a72f2005b874ac49405d44a6c
Content-Encoding: gzip

指定(X-Kollus-Userkey)されたヘッダーに転送されたユーザーキーが一致すると正常に動作します。

JWT Secret, JWT user key

既存ユーザーキー(2)をヘッダーに追加する他に、既存のJWT specから指定している secret keyにはセキュリティキー(1)も入力しなければなりません。関連情報はKollus VOD CMSから確認することができます。

設定→サービスアカウント設定

JWT payload

各CallbackのレスポンスをJWT payloadに入れて転送します。

Sample

https://jwt.ioから提供する言語とライブラリを使用してください。JWT specと同一ではありますが、必ずリターンされるhttpヘッダーにX-Kollus-Userkeyを使ってユーザーキーを入力してください。
例示) php

define('KOLLUS_KEY', '**ユーザーキー**'); // X-Kollus-UserKey
define('JWT_KEY', '**セキュリティキー**'); // JWT セキュリティキー

function encode_jwt($payload, $key, $alg = 'HS256') {
$header = array('alg' => $alg, 'typ' => 'JWT' );
$unsignedToken = base64_encode(json_encode($header)).'.'.
base64_encode(json_encode($payload));
$signature = hash_hmac('sha256', $unsignedToken, $key, TRUE);
return $unsignedToken.'.'.base64_encode($signature);
}

$payload = array(
'data' => array(
'result' =>1,
'expiration_date' => time()+3600,
),
);

$result = encode_jwt($payload, JWT_KEY);

//header('Content-Type: application/jwt');
header('X-Kollus-UserKey: '.KOLLUS_KEY);
echo $result;

 

DRM

概要

KollusモバイルダウンロードDRMを利用してダウンロードしたコンテンツの「再生回数」、「再生有効期限」、「再生時間」を設定してコンテンツの再生を制御する機能について説明する文書です。サービス提供形態によって重複制限の設定として使用されることもあります。v1.8.8 – 190826

Expire option

設定項目のdata-typeや値が範囲から外れた場合、エンドユーザーのコンテンツの利用に問題が発生する可能性があります。また、誤った設定値を訂正する方法はありませんので設定に注意してください。

  • Expire count : 再生回数の制限
    • data-type : integer
    • range : 0 ~ 1000
    • 0 : unlimited (無制限)
  • Expire date : 再生有効期限
    • data-type : integer, unixtime stamp
    • コンテンツの有効期限(再生可能期限)
      • 終了日(日時)
        • 2014. 3. 3.  5時 45分 30秒 GMT → 1393825531
      • 0 : unlimited (無制限)
      • 最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)
  • Expire playtime : 再生時間(倍速再生の場合は倍速が適用された時間で計算)
    • data-type : integer
    • range : 0, 60 ~ 604800 (単位 : 秒、min : 60秒、max:1週間)
    • 0 : unlimited (無制限)

DRM callback

DRM ポリシーを適用するためには、チャンネルにDRM Callback URLを設定する必要があります。

チャンネルにDRM Callback URLを設定すると、コンテンツをダウンロードする時点にDRM Callback URLを呼び出して、リターン値をDRMポリシーとして使用します。ダウンロードされるDRMポリシー情報はJWT EncodeされてHttp Bodyにリターンしなければなりません。

注意:

  1. DRM Callback URLがレスポンスしないとダウンロードできません。
  2. アルゴリズムはHS256のみ対応しており、Httpヘッダに指定された(X-KOLLUS-USERKEY)ヘッダに“ユーザーキー”を共に転送しなければなりません。

Callback ​flow

 

  1. 配信チャンネルに DRM CallbackURLを設定します。
  2. JSONデータを生成してJWTでエンコードする
  3. Kollus mobile playerがhttp://www.foo.com/auth.php に以下の情報をPOST転送します。
    • session_key : Playerが生成したリクエスト確認用のセッションキー
      • kind3のcontent_expire_resetの場合、リクエストしたsession_keyを確認します。
      • Callback v2が適用されるv1.6以降から使用可能です。
    • kind : 1 – 3
    • client_user_id : ユーザID(サービス会員情報)
      • Media token 生成の際に含まれたID
    • player_id : ユーザのデバイスID
    • device_name : ユーザのデバイス名
      • Android, iOS別に転送される端末名が異なります。
      • iOS:事前にApple社が定義した文字列で転送されます。
      • Android:デバイス名、モデル名が転送されます。※該当する情報がない場合NULLで転送
    • media_content_key : ダウンロードするコンテンツキー
      • チャンネルに登録されたコンテンツのメディアコンテンツキー(ユニーク)
      • 同じコンテンツを複数のチャンネルに登録する場合、それぞれのmedia_content_keyは全て異なります。
  4. 顧客のDRM認証サーバーは転送された上記の情報に基づいて以下のjson フォーマットのdataをJWT payloadに追加してEncoding します。ヘッダーに指定された“ユーザキー(X-KOLLUS-USERKEY)”を一緒に転送します。(顧客が認証データをPlayerに転送する全てのデータは必ずinteger型で転送しなければなりません。)

Response JSON spec.

Json Tag Description
expiration_date unixtime stamp (有効期限のunixtime stamp)
最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)
expiration_count 再生回数を制限
expiration_playtime 再生時間を制限
result 結果が正常の場合1, エラーの場合0をリターンします。
content_expired DRM  コンテンツを強制的にexpireします。
content_delete DRM コンテンツを強制的に削除します。
content_expire_reset Expireされたコンテンツを復旧します。
session_key * v1.6以降のCallback v2のみ使用可能です。
kind3のリクエストでcontent_expire_resetをする際に、リクエストに含まれているsession_keyをレスポンスに入れなければなりません。
media_content_key コンテンツのメディアコンテンツキー
kind リクエストの区分
localtime デバイスの時刻 (UTC)

device_name 補足説明

  • Andoidアプリ開発に使用されるBuild.DEVICE, Build.MODELは “/”で区分します。
    • Build.DEVICE+”/”+Build.MODEL
    • デバイスによってNULLで表示される可能性があります。
  • iOSの場合iOSが設定したdevice-nameを使用します。
@"i386" on 32-bit Simulator
@"x86_64" on 64-bit Simulator
@"iPod1,1" on iPod Touch
@"iPod2,1" on iPod Touch Second Generation
@"iPod3,1" on iPod Touch Third Generation
@"iPod4,1" on iPod Touch Fourth Generation
@"iPhone1,1" on iPhone
@"iPhone1,2" on iPhone 3G
@"iPhone2,1" on iPhone 3GS
@"iPad1,1" on iPad
@"iPad2,1" on iPad 2
@"iPad3,1" on 3rd Generation iPad
@"iPhone3,1" on iPhone 4
@"iPhone4,1" on iPhone 4S
@"iPhone5,1" on iPhone 5 (model A1428, AT&T/Canada)
@"iPhone5,2" on iPhone 5 (model A1429, everything else)
@"iPad3,4" on 4th Generation iPad
@"iPad2,5" on iPad Mini
@"iPhone5,3" on iPhone 5c (model A1456, A1532 | GSM)
@"iPhone5,4" on iPhone 5c (model A1507, A1516, A1526 (China), A1529 | Global)
@"iPhone6,1" on iPhone 5s (model A1433, A1533 | GSM)
@"iPhone6,2" on iPhone 5s (model A1457, A1518, A1528 (China), A1530 | Global)
@"iPad4,1" on 5th Generation iPad (iPad Air) - Wifi
@"iPad4,2" on 5th Generation iPad (iPad Air) - Cellular
@"iPad4,4" on 2nd Generation iPad Mini - Wifi
@"iPad4,5" on 2nd Generation iPad Mini - Cellular
@"iPhone7,1" on iPhone 6 Plus
@"iPhone7,2" on iPhone 6

 

Callback ​kind

DRM callbackが呼出される状況は以下のケースとなります。

DRM コンテンツのExpire情報をリクエストする場合 (kind:1)
Request
区分 Description
POST Http POSTでリクエスト (parameterではない)
kind 1
client_user_id ユーザID, media_token 生成に使用されたclient_user_idと同一です。
player_id ユーザのデバイスID
device_name ユーザのデバイス名
media_content_key コンテンツのメディアコンテンツキー
uservalues JSON format (VideoGatewayの呼出に使用されたuservalue0~9)
localtime デバイスの時刻 (UTC)
  • uservalues sample
    • uservalues={“uservalue0″:”商品種類コード01″,”uservalue1″:”商品名コード02″,”uservalue9″:”
      生成コード03″}
    • VideoGateway(v.kr.kollus.com)の呼出に使用されたuservalue0~9 情報が一緒にリターンされます。
Response
カテゴリ 区分 Description
data (int) expiration_date 有効期限のunixtime stamp
最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)
(int) expiration_count 再生回数制限 例) 10 ← 10回まで再生可能
(int) result 0 (エラー), 1 (正常)
0の場合ダウンロードできません。
0の場合リトライしません。
(string) message 0 (エラー)の場合、messageを追加すると状況に合うメッセージが表示されます。
(int) expiration_refresh_popup 期限終了後、ポリシー更新表示の有無
0の場合表示しない (基本値)
1の場合DRM期限終了後にユーザの確認を求めるメッセージを表示します。
(int) disable_tvout 0 (tvout 遮断なし), 1 (tvout 遮断) ここで指定しなかった場合、チャンネルポリシーのdisable_tvoutポリシーが適用されます。

 

Example
{
    “data” : {
        "expiration_date": 1402444800,
        "expiration_count": 10,
   		"result": 1
    }
}

 

DRMコンテンツのDownloadが100%完了された場合 (kind:2)

注意) 必ずレスポンスしなければなりません。Block状態で通信します。

Request
区分 Description
POST Http POSTでリクエスト (parameterではない)
kind 2
client_user_id ユーザID, media_token 生成に使用されたclient_user_idと同一です。
player_id ユーザのデバイスID
device_name ユーザのデバイス名
media_content_key コンテンツのメディアコンテンツキー
uservalues JSON format (VideoGatewayの呼出に使用されたuservalue0~9)
localtime デバイスの時刻 (UTC)
Response
カテゴリ 区分 Descriptsion
data (int) expiration_date 有効期限のunixtime stamp
入力されている場合kind1の値を代替します。
最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)
(int) content_delete 0 (削除しない)、1 (ダウンロードしたファイルを削除)
ダウンロードしたコンテンツを削除するオプションです。
(int) result 0 (エラー)、1 (正常)
0の場合、追加作業はありません。
0の場合、追加オプションは無視されます。
0の場合、再度リクエストされません。
(string) message 0 (エラー)の場合、またはcontent_deleteが1(ダウンロードしたファイルを削除)の場合にmessageを追加すると状況によるメッセージが表示されます。(内容編集可能)
Example
{
    “data” : {
        "content_delete": 1,
        "result": 1
	}
}

 

DRMコンテンツを再生する場合 (kind:3)

注意) v1.6以降は再生の際にネットワーク通信が可能な場合は直ぐに転送されます。リクエストに失敗した場合ネットワーク通信が可能になった時に再度転送します。

Request
区分 Description
POST Http POSTでリクエスト (parameterではない)
kind 3
client_user_id ユーザID, media_token 生成に使用されたclient_user_idと同一です。
player_id ユーザのデバイスID
device_name ユーザのデバイス名
media_content_key 再生するコンテンツのメディアコンテンツキー
start_at unixtimestamp (localtime)
– 転送をリクエストした時刻
uservalues JSON format (VideoGatewayの呼出に使用されたuservalue0~9)
localtime デバイスの時刻 (UTC)
Response
カテゴリ 区分 Description
data (int) content_expired 0 (再生可能), 1 (再生不可)
ダウンロードしたコンテンツを強制的にexpireします。
content_expire_resetオプションで復旧することができます。* expiredコンテンツは 0(再生可能)でレスポンスしても再生できません。
(int) result 0 (エラー)、1 (正常)
0の場合、追加作業はありません。
0の場合、追加オプションは無視されます。
0の場合、再度リクエストされません。
(string) message 0 (エラー)の場合、またはcontent_expiredが1(再生不可)の場合にmessageを追加すると状況によるメッセージが表示されます。
Example
{
    “data: {
        "content_expired" : 1,
        "result": 1
	}
}

Sample

  • DRM callback url
  • コンテンツ有効期限 : 2014年 6月 10日 24:00まで
    • DATE (M/D/Y @ h : m : s): 6 / 10 / 2014 @ 24:0:0 UTC
    • Unix time stamp : 1402444800
    • http://www.epochconverter.com から1402444800値を変更することができます。※UTC基準(GMTではない)
  • コンテンツ再生回数の制限 : 10回まで
kind1 : request expire option
request
  • URL : http://www.foo.com/auth.php
  • post data
    • kind=1
    • client_user_id=guest1
    • media_content_key=VXBW1VdY
    • uservalues={“uservalue0″:”商品種類コード01″,”uservalue1″:”商品名コード02″,”uservalue9″:”
      生成コード03″}
response
{
    “data” : {
        "expiration_date": 1402444800,
        "expiration_count": 10,
        "result": 1
	}
}

 

kind2 ​:​ ​download​ ​complete
request
  • URL : http://www.foo.com/auth.php
  • post data
    • kind=2
    • client_user_id=guest1
    • media_content_key=VXBW1VdY
    • uservalues={“uservalue0″:”商品種類コード01″,”uservalue1″:”商品名コード02″,”uservalue9″:”
      生成コード03″}
response
{
    “data” : {
    	"result": 1
    }
}
kind3 ​:​ play content(expire content)
request
  • URL : http://www.foo.com/auth.php
  • post data
    • kind=3
    • client_user_id=guest1
    • media_content_key=VXBW1VdY
    • uservalues={“uservalue0″:”商品種類コード01″,”uservalue1″:”商品名コード02″,”uservalue9″:”
      生成コード03″}
response
{
    “data” : {
        "content_expired": 1,
        "result": 1
	}
}

DRM Callback 新規バージョン(Callback v2, v1.6)

v1.4まで提供されたkind1、kind2、kind3を一つに統合して一度に呼び出せる仕様に変更されました。以前のバージョンではユーザーの頻繁な呼び出しに対応が難しいというお客様からの声に応じて修正しました。新規ノバージョンをv2、以前のバージョンをv1とします。

Reuest

区分 Description
POST Http POSTでリクエスト (parameterではない)
items JsonArrayで構成されたstring

items 項目の呼出にkind1、kind2、kind3全てのデータが含まれることがあります。

 

items (JsonArray)
kind1, kind2
区分 Description
kind 1,2
client_user_id ユーザID, media_token 生成に使用されたclient_user_idと同一です。
player_id ユーザのデバイスID
hardware_id デバイスのhardware ID (PC, 入力が必要な場合)
device_name ユーザのデバイス名
media_content_key コンテンツのメディアコンテンツキー
uservalues JSON format (VideoGatewayの呼出に使用されたuservalue0~9)
localtime デバイスの時刻 (UTC)
kind3
区分 Description
kind 3
session_key content_expire_resetをリクエストする際に同一のsession_keyを確認します。
client_user_id ユーザID, media_token 生成に使用されたclient_user_idと同一です。
player_id ユーザのデバイスID
hardware_id デバイスのhardware ID (PC, 入力が必要な場合)
device_name ユーザのデバイス名
media_content_key コンテンツのメディアコンテンツキー
start_at unixtimestamp (localtime)
– 転送をリクエストした時刻
uservalues JSON format (VideoGatewayの呼出に使用されたuservalue0~9)
content_expired コンテンツの有効期限を確認 flag( 1 : 終了, 0 : 再生可能)
check_expired 有効期限が切れているコンテンツの確認 flag (1: 期限切れ 2: 再生可能)
reset_req リクエスト内容が一括更新なのかを確認( 0 (default), 1 : 一括更新)
expiration_date 有効期限の終了日 (unixtimestamp)
localtime デバイスの時刻 (UTC)
Items Sample
[
    {
        "kind": 1,
        "media_content_key" : "XXX-MEDIA_CONTENTKEY-XXX",
        "client_user_id": "XXXXXXX",
        "player_id": "xxxxxxxxxxxxxxxx",
        "device_name": "XXXXX",
        "uservalues": {
            "uservalue0": "value0"
        }
    },
    {
        "kind": 2,
        "media_content_key" : "XXX-MEDIA_CONTENTKEY-XXX",
        "client_user_id": "XXXXXXX",
        "player_id": "xxxxxxxxxxxxxxxx",
        "device_name": "XXXXX",
        "uservalues": {
            "uservalue0": "value0"
        }
    },
    {
        "kind": 3,
        "session_key" : "XXX-SESSION_KEY-XXX", ← content_expire_reset リクエストする際に確認します。
        "media_content_key" : "XXX-MEDIA_CONTENTKEY-XXX",
        "client_user_id": "XXXXXXX",
        "player_id": "xxxxxxxxxxxxxxxx",
        "device_name": "XXXXX",
        "uservalues": {
       		"uservalue1": "value1"
        }
    }
]

 

Response

Arrayは“data”フィールドにリターンされる。

kind1
区分 必須 Description
(int) kind O 1
(string) media_content_key O コンテンツのメディアコンテンツキー
(int) expiration_date 有効期限のunixtime stamp
最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)
(int) expiration_count 再生回数の制限、例) 10 ← 10回まで再生可能
(int) expiration_playtime 再生時間の制限、例) 3600 ← 1時間(3600秒)再生可能 
(int) expiration_playtime_time   1の場合Play状態なら起動時間として制限
(int) result O 0 (エラー)、 1 (正常)
0の場合、ダウンロードできません。
0の場合、再度リクエストされません。
(string) message 0 (エラー)の場合、messageを追加すると状況に合うメッセージが表示されます。
(int)
expiration_refresh_popup
期限終了後、ポリシー更新表示の有無
0の場合表示しない (基本値)
1の場合DRM期限終了後にユーザの確認を求めるメッセージを表示します。
(int) vmcheck virtual machineの確認有無、PCのみ使用可能
0 (使用しない), 1 (使用する, default)
(int) check_abuse DRM kind3を毎回確認
0: 使用しない(default), 1: 使用する
(int) offline_bookmark.download オフライン状態で既存ブックマークのダウンロード実行有無
コンテンツをダウンロードする時点のデータがダウンロードされ、以降サーバーと更新は行いません。
0: しない (default)
1: index ブックマークのみダウンロード
2: index, user ブックマーク全てダウンロード
(int) offline_bookmark.readonly オフライン状態でブックマークの追加・削除適用有無 (0: 使用する(default), 1: 使用しない)
kind2
区分 必須 Description
(int) kind O 2
(string) media_content_key O コンテンツのメディアコンテンツキー
(int) content_delete 0 (削除しない)、1 (ダウンロードしたファイルを削除)
ダウンロードしたコンテンツを削除するオプションです。
(string) message 0 (エラー)の場合、またはcontent_deleteが1(ダウンロードしたファイルを削除)の場合にmessageを追加すると状況によるメッセージが表示されます。
(int) check_expiration_date 0 (使用しない) 有効期限が終了する時刻のunixtime stampのチェック
(int) result O 0 (エラー)、1 (正常)
0の場合、追加作業はありません。
0の場合、追加オプションは無視されます。
0の場合、再度リクエストされません。
kind3
区分 必須 Description
(int) kind O 3
(string) session_key * content_expire_resetをリクエストする際に同一のsession_keyを確認します。
(string) media_content_key O コンテンツのメディアコンテンツキー (Unique Key)
(int) start_at O Requestに含まれたstart_at
(int) content_expired 0 (再生可能), 1 (再生不可)
ダウンロードしたコンテンツを強制的にexpireします。
content_expire_resetオプションで復旧することができます。* expiredコンテンツは 0(再生可能)でレスポンスしても再生できません。* 1の場合content_expire_resetは無視されます。
(int) content_delete 0 (削除しない), 1 (削除)
ダウンロードしたファイルをリクエストがあった場合削除するオプションとなります。* 1の場合content_expired オプションを無視して削除します。
(int) content_expire_reset 0 (追加作業なし), 1 (expiredされたコンテンツの権限をReset)
expiredされたコンテンツの権限をResetするオプションです。
(int) expiration_date 有効期限のunixtime stamp
最大値 : 2029年 12月 31日 23時 59分 59秒 (1893455999)
* content_expire_reset オプションが1の場合、再設定されます。
(int) expiration_count 再生回数の制限、例) 10 ← 10回まで再生可能
* content_expire_reset オプションが1の場合、再設定されます。
(int) expiration_playtime 再生時間の制限、例) 3600 ← 1時間(3600秒)再生可能 
* content_expire_reset オプションが1の場合、再設定されます。
(int) expiration_playtime_type 1の場合Play状態なら起動時間として制限
* content_expire_reset オプションが1の場合、再設定されます。
(int) result O 0 (エラー)、1 (正常)
0の場合、追加作業はありません。
0の場合、追加オプションは無視されます。
0の場合、再度リクエストされません。
(string) message 0 (エラー)の場合、またはcontent_expiredが1(再生不可)の場合、または content_delete이 1(ダウンロードしたファイルを削除)の場合にmessageを追加すると状況によるメッセージが表示されます。 
(int) check_abuse DRM kind3を毎回確認
0: 使用しない(default), 1: 使用する
(int) check_expiration_date 0 (使用しない) 有効期限が終了する時刻のunixtime stampのチェック
* content_expire_reset オプションが1の場合、再設定されます。
Response ​Example
{
    “data” : [
        {
            "kind": 1,
            "media_content_key": "XXX-MEDIA_CONTENT_KEY-XXX",
            "expiration_date": 1402444800,
            "expiration_count": 10,
            "expiration_playtime": 60,
            "result": 1
        },
        {
            "kind": 2,
            "media_content_key": "XXX-MEDIA_CONTENT_KEY-XXX",
            "content_delete": 1,
            "result": 1
        },
        {
            "kind": 3,
            "session_key" : "XXX-SESSION_KEY-XXX",
            "media_content_key": "XXX-MEDIA_CONTENT_KEY-XXX",
            "start_at": 140000000,
            "content_expired": 1,
            "content_delete": 1,
            "content_expire_reset": 1,
            "expiration_date": 1402444800,
            "expiration_count": 10,
            "expiration_playtime": 3600,
            "result": 1
        }
    ]
}

JWT 対応

DRMポリシーをJWTでレスポンスすることができます。JWT ウェブサイト(https://jwt.io) から公認されたライブラリーを使用して生成されたTokenに変更してレスポンスする機能が追加されました。

PlayerにJWT Tokenで返還する場合には指定されたヘッダにユーザーキーを含めて転送しなければなりません。

HTTP/1.1 200 OK
Date: Fri, 14 Oct 2016 04:12:46 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Kollus-UserKey: 0993d76eb424a72f2005b874ac49405d44a6c
Content-Encoding: gzip

​指定した(X-Kollus-UserKey) ヘッダに転送されたユーザーキーの情報が一致しない場合、Player側で正常に動作しません。

JWT ​Secret,​ ​JWT​ ​ユーザーキー

既存ユーザーキー(2)キーをheaderに追加することと共に、既存のJWT scpecにあるsecret keyにはセキュリティキー(1)を入力しなければなりません。Kollus CMSで以下のように関連情報を確認することができます。

設定 > サービスアカウント→ユーザーキー

JWT payload

各callbackのresponseをJWT payloadに入れて転送します。

Sample

 http://jwt.io から提供している様々な言語で具現されたライブラリーとサンプルを使用してください。JWT スペックと同じですが、レスポンスされるhttpヘッダに X-Kollus-UserKeyでユーザーキーを一緒に転送しなければなりません。

 

(サンプル) php

define('KOLLUS_KEY', '**ユーザーキー**'); // X-Kollus-UserKey
define('JWT_KEY', '**セキュリティーキー**'); // JWT セキュリティーキー

function encode_jwt($payload, $key, $alg = 'HS256') {
    $header = array('alg' => $alg, 'typ' => 'JWT' );
    $unsignedToken = base64_encode(json_encode($header)).'.'.
    base64_encode(json_encode($payload));
    $signature = hash_hmac('sha256', $unsignedToken, $key, TRUE);
    return $unsignedToken.'.'.base64_encode($signature);
}

$payload = array(
    'data' => array(
        array(
            'kind' => 1,
            'result' =>1,
            'expiration_date' => time()+3600,
            'expiration_playtime' => 30,
            'vmcheck' => 1,
        ),
        array(
            'kind' => 2,
            'result' =>1,
            'expiration_date' => time()+3600,
            'expiration_playtime' => 30,
            'vmcheck' => 1,
        ),
        array(
            'kind' => 3,
            'result' =>1,
            'expiration_date' => time()+3600,
            'expiration_playtime' => 30,
            'vmcheck' => 1,
        ),
    ),
);

$result = encode_jwt($payload, JWT_KEY);

//header('Content-Type: application/jwt');
header('X-Kollus-UserKey: '.KOLLUS_KEY);
echo $result;

 

Code sample (v1.4 基準)

顧客のDBが以下のような構成になっていると想定した場合のサンプルコードになります。

PHP ​sample

<?php
/**
* PHP Version : 5.4 above
*/

function get_jwt($payload, $key, $alg = 'HS256')
{
	$header = array('alg' => $alg, 'typ' => 'JWT' );
	$unsignedToken = base64_encode(json_encode($header)).'.'.base64_encode(json_encode($payload));
	$signature = hash_hmac('sha256', $unsignedToken, $key, TRUE);
	return $unsignedToken.'.'.base64_encode($signature);
}

function print_kollus_jwt($data)
{
    define('KOLLUS_KEY', '**ユーザーキー**'); // X-Kollus-UserKey
    define('JWT_KEY', '**セキュリティーキー**'); // JWT セキュリティーキー
    $payload = array( ‘data’ => $data );
    $result = encode_jwt($payload, JWT_KEY);
    //header('Content-Type: application/jwt');
    header('X-Kollus-UserKey: '.KOLLUS_KEY);
    echo $result;
}


/////////////////////////////////////////////////

include "./config.php";
// 注意 : kindが1の場合、自動でexpiration_dateが生成されるサンプルページとなります。

// 再生回数制限
$_default_expiration_count = 3;
$_expired_duration = 60 * 60 * 24; // 1 day

// DB Connection
$_db_conn = mysqli_connect($_hostname, $_username, $_password);
if (!$_db_conn) {
	die('Could not connect: ' . mysql_error());
}

$_db_selected = mysqli_select_db($_database, $_db_conn);
if (!$_db_selected) {
	die ('Can\'t use database : ' . mysqli_error());
}

$_kind = isset($_POST['kind']) ? ((int) $_POST['kind']) : NULL;
$_media_content_key = isset($_POST['media_content_key']) ? $_POST['media_content_key'] : NULL;
$_client_user_id = isset($_POST['client_user_id']) ? $_POST['client_user_id'] : NULL;

$channel = NULL;
$_query = sprintf("SELECT * FROM `channels` WHERE `media_content_key` = '%s'",
mysqli_real_escape_string($_media_content_key, $_db_conn));
$_result = mysqli_query($_query, $_db_conn);
if ($_result) {
	$channel = mysqli_fetch_array($_result, MYSQL_ASSOC);
	if ($channel === FALSE) $channel = NULL;
} else {
	die('Invalid query: ' . mysqli_error());
}

$user = NULL;
$_query = sprintf("SELECT * FROM `users` WHERE `client_user_id` = '%s'",
mysqli_real_escape_string($_client_user_id, $_db_conn));
$_result = mysqli_query($_query, $_db_conn);
if ($_result) {
	$user = mysqli_fetch_array($_result, MYSQL_ASSOC);
	if ($user === FALSE) $user = NULL;
} else {
	die('Invalid query: ' . mysqli_error());
}


$channel_user = NULL;
if (!is_null($_media_content_key) && !is_null($_client_user_id)) {
	$_query = sprintf("SELECT * FROM `channel_users` WHERE `user_id` = '%s', `channel_id` = '%s'", $user['id'], $channel['id']);
	$_result = mysqli_query($_query, $_db_conn);
	if ($_result) {
		$channel_user = mysqli_fetch_array($_result, MYSQL_ASSOC);
		if ($channel_user === FALSE) $channel_user = NULL;
	} else {
		die('Invalid query: ' . mysqli_error());
	}
}

$_jwt_result = array('result' => 0);
switch($_kind) {
case 1:
	if (is_null($channel_user)){
		$_expiration_date = time() + $_expired_duration;
        $_expiration_count = $_default_expiration_count;
        $_query = sprintf("INSERT INTO `channel_users`(`user_id`, `channel_id`, `expiration_date`
        ,`expiration_count` , `created_at`, `updated_at`) VALUES('%s', '%s', '%s', '%s', UNIX_TIMESTAMP(),
        UNIX_TIMESTAMP())", $user['id'], $channel['id'], $_expiration_date, $_expiration_count);
        $_result = mysqli_query($_query, $_db_conn);
		if (!$_result) {
			die('Invalid query: ' . mysqli_error());
		}
	} else {
        $_expiration_date = $channel_user['expiration_date'];
        $_expiration_count = $channel_user['$expiration_count'];
	}
    $_jwt_result['expiration_date'] = (int) $_expiration_date;
    $_jwt_result['expiration_count'] = (int) $_expiration_count;
	break;
case 2:
    if (!is_null($channel_user)){
        $_download_times = ++((int) $channel_user['download_times']);
        $_query = sprintf("UPDATE `channel_users` SET `download_times` = '%s', `updated_at` =
        UNIX_TIMESTAMP() WHERE id = %s", $_download_times, $channel_user['id']);
        $_result = mysqli_query($_query, $_db_conn);
  	    if (!$_result) {
    		die('Invalid query: ' . mysql_error());
   		}
        $_jwt_result['result'] = 1;
    }
	break;
case 3:
    if (!is_null($channel_user) && $channel_user['is_expired']) {
    	$_jwt_result['content_expired'] = 1;
    }
    break;
}

// DB Close
mysqli_close($_db_conn);

// 結果のdata arrayをJWTに変換して出力
print_kollus_jwt($_jwt_result);

 

Sample Code

 DRM – dotnet

 DRM – jsp

 DRM – php

LMS

Kollusで提供するCallback情報はプラットフォームから転送する内容とPlayerから転送する内容があります。Playerから転送する内容はユーザーの視聴傾向など「動画視聴関連情報」を指定されたURLに転送する機能です。視聴率(視聴時間)情報をcallbackする際にはレスポンスの確認を行いません。但し、ネットワークエラーの場合は一旦データを保存して再転送可能になったらcallbackします。この機能を使用するためには、Kollusに接続して関連情報を設定してください。設定後Video-gatewayを通して設定内容が転送されて再生と関連する情報をcallbackします。

Callback process

再生情報の転送するプロセスを説明します。

  1. Kollus OVP側に再生関連情報のリクエストを設定します。
    • 配信チャンネル別に指定した種別のデータを獲得することができます。
  2. コンテンツを再生するVideo-gatewayが呼出されるとコンテンツ再生に必要な情報をPlayer側に転送します。ここで再生に関わるデータを転送するための設定情報(1で設定したCallback設定情報)が含まれた状態で転送されます。
  3. 再生関連情報を顧客が指定したURLに転送します。
  4. Kollus OVP側にコンテンツ再生に関わる情報をリターンします。
    • Mac Address, IP Addressなど個人情報に関わる情報をリターンしません。

Customer Requirement

Kollus OVPから転送する再生関連情報は以下のようになります。

  • 再生終了時点
  • 区間別の再生情報
  • ユーザ情報 (ユーザが識別できるID)
  • コンテンツ情報
  • デバイス情報 (視聴環境)
  • コンテンツ全体を按分して各ブロック別の情報を収集

Plugin option

  • {MAC}
    • Mac Address
    • ユーザの個人情報を収集しないでください。
    • ユーザの理解度によってMac Addressが任意変更できるケースがあり、Mobile Playerの場合にApp登録制限のため対応していません。
  • {IP} – RemoteAddressの問題のため対応していません。(サーバー側で確認することができます。)
    • コンテンツを再生するデバイスのIP Address
    • ユーザの個人情報を収集しないでください。
    • ルーターを使用する環境で収集されたIP AddressはPrivate IP Addressになります。正確なIPを集計する場合CallbackがリターンされるWebサーバー側でRemote_Addressを確認する必要があります。
  • {CLIENT_USER_ID}
    • ユーザ(サービス会員)のUser ID
    • MediaTokenを生成する際にパラメータとして入力されたユーザID情報と同一です。入力されたユーザIDはKollus OVP側で保存・管理しません。ユーザのユニーク性を識別する用途で使用されます。
  • {START_AT}
    • Video-gatewayをリクエストした時点のUnixtimestamp
    • コンテンツ再生中に複数の再生情報が転送される可能性があります。同一リクエストに同一{START_AT} 値が付与されるため、同時間に多数の再生件数が発生する場合Unixtimestampが重複されることがあります。
    • ダウンロードしたコンテンツの場合、start_atはコンテンツを再生したデバイスのunixtimestampが適用されます。
  • {BLOCK_CNT}
    • Kollus OVP側で設定したブロックの数
    • 再生情報を指定したブロック数に分けて管理し、データを転送する際に追加することが可能です。
  • {PLAY_TIME}
    • 全体再生時間 (単位 : 秒):累計
    • 倍速が適用された場合、倍速時間も計上されます。
    • 10秒間 2倍速で再生した場合、Play Timeは20秒
    • 全ての再生時間が計上されます。(リピート、倍速再生など全ての再生時間含まれます。)
  • {PLAYTIME_PERCENT}
    • DURATION対比全体再生比率 (単位:%, 定数:小数点以下切り捨て)
    • コンテンツを2回見た場合には200%に計算されます。
  • {DURATION}
    • コンテンツの長さ (単位: 秒)
  • {MEDIA_CONTENT_KEY}
    • Kollus media_content_key
  • {ENCODING_PROFILE_KEY}
    • Kollus encoding profile key
  • {PLAY_BLOCK_JSON}
    • データのフォーマット: JSON
    • ブロックの再生情報
  • {BLOCK_PLAY_1}~{BLOCK_PLAY_##{BLOCK_CNT}}
    • ブロックの再生有無
    • 0 : 再生しないでSkip
    • 1 : 該当ブロックを再生(0秒以上再生すると1に設定されます。)
  • {BLOCK_TIME_1} ~{BLOCK_TIME_##{BLOCK_CNT}}
    • 該当ブロックを再生した時間 (単位:秒)
    • Playerの倍速再生機能が動作した場合、倍速を適用した再生時間に計算されます。
    • ブロック単位が3秒にした場合、ブロックが2回再生されたらブロックの再生時間は6秒に計算されます。
    • {DURATION}が{BLOCK_CNT}より少ない場合、{BLOCK_TIME#}の合計は{DURATION}を超過することになります。(各ブロックの再生時間がミリ秒になった場合、切り上げて1秒に計算されます。)
  • {LAST_PLAY_AT}
    • 最終再生時点 (単位: 秒)
  • {HOST_NAME}
    • Video Gatewayリクエストドメイン名
    • ex) catenoid.video.kr.kollus.com
  • {PLAYER_ID}
    • Kollus PlayerのユニークID
    • Kollus Security Playerをインストールした際に生成されたID
    • HTML5, Flash Playerの場合kfp文字列を転送します。(ユニーク値)
  • {PLAYLIST_SKIP}
    • Playリストで再生する際に再生をSkipした場合
    • 0 : 全て再生
    • 1 : Skip
  • {PLAY_STATUS}
    • Kollus Security Playerのみ対応
    • play: 再生中
    • pause: 再生停止 (一時停止)
    • stop: Playerを閉じたとき
  • {RUN_TIME}
    • Playerの実起動時間 (単位: 秒)
  • {DEVICE}
    • デバイス名(windwosは ‘pc’で表示)
  • {REAL_PLAYTIME}
    • JSON_DATAのreal_playtimeと同一
  • {USERVALUE0}~{USERVALUE9}
    • Video-gateway呼出の際に追加された付加情報
    • ex) LCD={USERVALUE0}&UCD={USERVALUE4}
    • 英文、数字以外のひらがななどの文字列を転送する場合UTF-8で転送してください。
      (転送する文字列はUrlEncodeして転送してください。)
  • {JSON_DATA}
    • データのフォーマット: JSON
    • 全ての再生情報が含まれたデータ

{PLAY_BLOCK_JSON}

  • {JSON_DATA}のblock_info項目と同一
  • block_info Objectのサブノードが含まれます。

{JSON_DATA}

  • user_info
    • content_provider_key : 顧客 key
    • client_user_id : ユーザ(視聴者) ID
    • player_id : player ID
    • hardware_id : player hardware ID, 顧客確認用 (*Windowsのみ使用)
    • host_name : Video Linkリクエストとメイン名
    • device : デバイス名
  • content_info
    • duration : コンテンツの長さ
    • encoding_profile : エンコーディングプロファイル
    • media_content_key : メディアコンテンツキー
    • channel_key : チャンネルキー
    • real_playtime : 実際の全体再生時間(単位:秒)
      • 倍速が適用された場合、倍速時間も計上されます。
      • 10秒間 2倍速で再生した場合、Play Timeは20秒
      • 全ての再生時間が計上されます。(リピート再生は集計されません。)
    • playtime : コンテンツの再生時間
    • playtime_percent : duration対比全体再生比率
    • start_at : Video-gatewayをリクエストした時点のUnixtimestampとなります。ダウンロードしたコンテンツの場合、start_atはコンテンツを再生したデバイスのunixtimestampが適用されます。
    • last_play_at : 最終再生時点 (単位: 秒)
    • runtime : Playerの実際稼働時間 (単位:秒)
    • showtime: Playerが実際に再生動作を行った時間 (単位:秒)
  • block_info
    • block_count : ブロック回数
    • blocks: マイルストーン (再生時間 単位: 秒)
      • b0 : ブロックの再生有無 (0:再生しない, 1:該当ブロック再生)
      • b1 : 0 ~ (int)
      • b2 : block_period 分だけ繰り返されます….
      • t0 : ブロック再生時間 (単位: 秒)
      • t1 : 0 ~ (int)
      • t2 : block_period 分だけ繰り返されます….
      • p0 : ブロックの再生比率 (単位: %)
      • p1 : 0~ (int) , ブロックを繰り返して再生する場合、100%以上に表示されます。
      • p2 : block_period 分だけ繰り返されます
    • sessions : ブロック再生を時間別に管理する項目 (配列)
      セッションデータは以前のデータまで累積されて転送されます。

      • block : ブロックインデックス (0から開始)
      • start_time : 該当ブロックを開始した時刻 (unixtimestamp-localtime)
      • play_time : 該当ブロックの再生時間
  • uservalues : ユーザ定義条件、全ての条件の合計用量は1KB未満に設定してください。
    • uservalue0
    • uservalue1
    • ….
    • uservalue9

Support options

Player別の対応オプションを確認してください。
{MAC}, {IP}は個人情報になるため必要な場合別途ご相談ください。

Option FlashPlayer KollusPlayer(PC) KollusPlayer(Monlie)
{MAC} X X X
{IP} X X X
{CLIENT_USER_ID} O O O
{START_AT} O O O
{BLOCK_CNT} O O O
{PLAY_TIME} O O O
{PLAYTIME_PERCENT} O O O
{DURATION} O O O
{MEDIA_CONTENT_KEY} O O O
{ENCODING_PROFILE_KEY} O O O
{PLAY_BLOCK_JSON} O O O
{BLOCK_PLAY_1} ~ O O O
{BLOCK_TIME_1} ~ O O O
{LAST_PLAY_AT} O O O
{HOST_NAME} O O O
{PLAYER_ID} X(kfp) O O
{PLAYLIST_SKIP} X O O
{PLAY_STATUS} X O O
{RUN_TIME} X O O
{DEVICE} X O O
{REAL_PLAYTIME} X O O
{USERVALUE0} ~ O O O
{JSON_DATA} O O O

 

暗号化(Kollus Security Player)/非暗号化(Kollus HTML Player V4)別

Option 暗号化 非暗号化 備考
content_provider_key O O
client_user_id O O
player_id O 非暗号化の場合 khpで表記(Kollus html5 player)
hardware_id O
host_name O O
os O O
device O O
version O O
duration O O
encoding_profile O O
media_content_key O O
channel_key O O
real_playtime O O
showtime O
playtime O O
runtime O O
playtime_percent O O
start_at O O
last_play_at O O
serial O O

Settings

Callback設定はチャンネル編集ページから行えます。Callbackはチャンネル別に設定します。

  • Callback URLs: 캐キャリッジリターン(\n)を使用してそれぞれの置換値を含むURLを登録します。
    • 複数のシステムに再生情報を転送する場合はキャリッジリターンを使用して複数のcall_back_urlの登録します。
    • Kollus VODの状況によって設定できるURLの数を制限する可能性があります。
  • Format: [block_count]:[peroid]:[enable_sessions]:[callback_url]
    • 区切り文字 : (コロン)
    • block_count
      • コンテンツの再生区間を分けるブロックの数です。コンテンツの長さが300秒の場合、10に設定すると各ブロックの長さは30秒になります。
    • peroid
      • データ(Callback)転送周期
      • 指定されたperiod(単位:秒) 毎に呼び出されて最後にプレーヤーが終了する際にもう一度呼出されます。※HTML5, Flash Playerは終了時には呼出されません。
      • 再生を一時停止または中止した際にもう一度呼出されます。
      • 単位: 秒
    • enable_blocks
      • 1の場合、block_info項目にblocks情報が含まれます。
      • 0の場合、block_info項目にblocks情報は含まれません。
    • enable_sessions
      • 1の場合、block_info項目にsessions 情報が含まれます。
      • 0の場合、block_info項目にsessions 情報は含まれません。
    • callback_url
      • Callback URL: コンテンツを再生する視聴者環境によってファイアウォールが適用されている条件を想定し、http, 80ポートを使用することを推奨します。

 

Callback URLs

10:30:1:0:http://domain.com/check.asp?ip={IP}&id={CLIENT_USER_ID}&start={START_AT}&lms={
PLAY_BLOCK_JSON}&uservalue0={USERVALUE0}
20:180:0:1:http://another_domain.com/anohter_check.php?ip={IP}&id={CLIENT_USER_ID}&start={
START_AT}&lms={JSON_DATA}&uservalue0={USERVALUE0}

 

Plugin options

再生情報を転送するオプションはJSONフォーマットのArrayで転送されます。

  • progress_plugin (array)
    • http://domain.com/check.asp?block_period=10&ip={IP}&id={CLIENT_USER_ID}&start={START_AT}&json_data={JSON_DATA}&uservalue0={USERVALUE0}
    • http://another_domain.com/anohter_check.php?block_period=20&ip={IP}&id={CLIENT_USER_ID}&start={START_AT}&lms={PLAY_BLOCK_JSON}&uservalue0={USERVALUE0}

 

Callback data sample

● URL: http://lms.servicedomain.com/lms/register
● Method: POST
● Params:
    ● ID={CLIENT_USER_ID}
    ● MAC={MAC}
    ● LRN={USERVALUE0}
    ● LHF={USERVALUE1}
    ● IP={IP}
    ● LCD={USERVALUE2}
    ● TM={START_AT}
    ● PT={PLAY_TIME}
    ● ET={LAST_PLAT_AT}
    ● B1={BLOCK_PLAY_1}
    ● T1={BLOCK_TIME_1}
    ● ...
    ● SKIP={PLAYLIST_SKIP}

● http://lms.servicedomain.com/lms/register?ID=pobi&MAC=123456789ABCDEF&LRN=
123456789ABCDEF&LHF=1&IP=192.168.0.118&LCD=L123&UCD=U123&TM=12345678
9&PT=123456789&E T=123456789&SKIP=0&B1=1&B2=1&B3=1&B4=1&B5=1&B6=1&B7
=1&B8=1&B9=1&B10=1&T 1=123456789&T2=123456789&T3=123456789&T4=12345678
9&T5=123456789&T6=123456789&T7=123456789&T8=123456789&T9=123456789&T10
=123456789

 

 

Etc.

ブロック数制限 (Limit the number of blocks)

  • 最大100個まで設定できます。 (range: 1~100)
    • 100を超えるデータが入力された場合、100で処理します。
    • 0に入力された場合は1で処理します。
  • {BLOCK_CNT}はコンテンツ全体の{DURATION}より少なくなるよう設定してください。{BLOCK_CNT}が{DURATION}より多くなると以下のように処理されます。
    • {BLOCK_CNT}値が100、{DURATION}値が 30の場合:転送されるブロック情報は30個を超えません。

Callback呼出周期 (Callback period)

  • Callbackはシステムから設定したCallback URL情報のperiod設定値の通りに呼出されます。
  • Playerが一時停止・中止される場合にもCallbackが呼出されます。
  • 周期的に呼出される同一ユーザの情報は{START_AT}, {CLIENT_USER_ID}値で区分して最新の情報が確認できます。
  • HTML5, Flash Playerの場合、Playerが終了される時点にCallbackが呼出されません。

USERVALUE0 ~ USERVALUE9 適用時の注意事項

  • 英文、数字以外のひらがななどの文字列を転送する場合UTF-8で転送してください。
    (転送する文字列はUrlEncodeして転送してください。)

crossdomain.xml

  • Flash Playerの場合、callbackを受け取る側(顧客側サーバー)にcrossdomain.xmlファイルが必要となります。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <site-control permitted-cross-domain-policies="master-only" />
    <allow-access-from domain="*" to-ports="*" />
    <allow-http-request-headers-from domain="*" headers="*" to-ports="*" />
</cross-domain-policy>

 

データセキュリティー

  • LMS callbackデータの変更・偽造防止のためPOSTで転送される全ての情報に対してHashを生成し、転送されたHash値と一致することを確認します。※ Hash 生成方式に漏洩の可能性があるFlash Player, HTML5 Playerは対象外となります。
  • Hash生成規則は以下の通りになります。
    hash_1 = md5 ( post-data )
    hash_2 = md5 ( hash_1 + service_account ) ← +  文字含め
    hash_2値をpost dataのhashパラメータの値として転送します。
  • 転送されるPostデータの例示
    ID=pobi&MAC=123456789ABCDEF&LRN=123456789ABCDEF&LHF=1&IP=192.16
    8.0.118&LCD=L123&UCD=U123&TM=123456789&PT=123456789&ET=123456789
    &SKIP=0&B1=1&B2=1&B3=1&B4=1&B5=1&B6=1&B7=1&B8=1&B9=1&B10=1&T1=
    123456789&T2=123456789&T3=123456789&T4=123456789&T5=123456789&T6=1
    23456789&T7=123456789&T8=123456789&T9=123456789&T10=123456789&hash
    =7dec341ff384574f24c6c441b46bc9b1

 

 

Live streaming

JWT Payload Spec (Live)

Kollus Liveのjwt specとなります。

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

{
    "cuid": "CLIENT_USER_ID",
    "expt": EXPIRE_TIME,
    "lmckey": "LIVE_MEDIA_CHANNEL_KEY",
    "lmcpf": "LIVE_MEDIA_CONTENT_PROFILE_KEY",
    "title": "TITLE",
    "seek": IS_SEEKABLE
}

 

Live iframe sample

Kollus Liveのiframeサンプルコードとなります。
{livesample url}領域に”Video Gateway Link”を入力してください。

1. Liveチャンネルを選択

2. チャンネルのVideo Gateway Link URLをコピー

{
 <iframe src="{livesample url}" width="420" height="236"></iframe> } 

 

Payload 項目
名称 Datatype 必須有無 内容 Mediatype
cuid
(CLIENT_USER_ID)
String 必須 コンテンツにアクセスする顧客のユーザID:ブックマーク・NScreenデータのKeyとして使用されます。 LIVE
expt

(EXPIRE_TIME)

Integer 必須 JWTの有効期限:Unix timestamp形式で入力します。顧客のサーバーとの時間が正確に一致しない可能性があるため有効期限が切れても最大1分間はアクセスできる可能性があります。 LIVE
lmckey

(MEDIA_CONTENT_KEY)

String 必須 コンテンツのメディアコンテンツキー:ライブのメディアチャンネルキー形式も同一に使用可能 LIVE
lmcpf

(MEDIA_CONTENT_PROFILE_KEY)

String 選択

(基本値: null)

コンテンツのプロファイルを強制に指定します。指定するプロファイルキーを入力します。

Entryを削除またはnullを入力した場合自動でABRで動作します。

LIVE
title

(TITLE)

String 選択

(基本値: null)

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

(IS_SEEKABLE)

Boolean 選択

(基本値: true)

コンテンツのseek可能有無を入力します。

seek可能にする場合Entryを削除またはtrueを入力してください。

LIVE

Kollus CMS API

How to Use

API Interface URI 規則

Kollus APIは以下のような規則で構成されます。APIの更新に伴って古いバージョンの対応のためAPIパスにバージョン情報が含まれます。なお、API更新の際には以前バージョンの内容に対応が制限されない限り基本的に古いバージョンの対応は持続的に行います。

 

http://[api_domain]/[major_version]/{path:[container]/[controller]/[action]}?[parameters]

 

  • api_domain : api.kr.kollus.com, api.jp.kollus.com ドメインはサービス地域によって変更される可能性があります。
  • major_version : APIのMajorバージョン:現在0となります。
  • path : api経路:各経路は以下の規則が付与されます。
    • container : controller以前までのpath
    • controller : actionのグルーピング単位
    • action : 行為(action)を意味する機能(method):例) create, edit, delete, read, index(=list)
    • parameters : ex) api_key=443ede01f6bc021514233cea82a09aee&content_provider_key=kollus

 

API Message

API 規格

json, utf8

各APIのDefault結果文字列はUTF8でエンコードされていて、jsonフォーマットを採用しています。

 

API response structure

メッセージノード

  • error : エラーコード:0以外はエラー判定 (必須)
  • message : API呼出後の成功結果の文字列を表示
  • result : API呼出に成功した結果値

Success Message

{
	"error" : 0
	, "message" : "Sucessfully created."
	, "result" : {
		"key" : "test_key"
	}
}

Fail Message

{
	"error" : 1
	, "message" : "Failed to create."
}

 

API 認証方法

Kollus APIを使用するためにはKollusシステムのAPI認証方式の中で1つの認証段階を通す必要があります。

Kollus API認証は以下の順番で認証レベル (level)が構成されます。以下の3つの認証方式からAPI認証が可能です。

 

  1. anonymous access該当URIがanonymous accessの場合、自動で認証を通します。 anonymous accessに対応するapiは制限されます。
  2. ip base accessKollusシステムにip base認証を登録して認証を通します。Kollusシステム側で設定します。
  3. access_token accessサービスアカウント別に発行されるaccess_token (アクセストークン)で認証を通します。

Kollus サービスアカウントの認証方法

  • サービスアカウントに発行されたaccess_token (アクセストークン)を確認します。
  • アクセスが必要な全てのapiにGET or POSTでaccess_tokenを含めて転送するとサービスアカウントに関するAPIを使用することができます。 

その他

  • Restful APIとしてGET, POSTのみ使用可能です。

 

追加連係

V/G Controller

VG Controller ダウンロード

Kollus VG ControllerはVideogatewayで提供されるメディアの一部機能を外部から制御するためのJavascript libraryとなります。Kollus VG Controllerは以下の特性があります。

  • Playerの種類に関わらず同一コードで制御することが可能
  • インストール ・使用が比較的に簡単
  • Playerの感知・実行が不要 (Videogatewayから自動で感知・呼出)
  • 3rd party Javascript libraryが不要
メソッドとイベントリスト名に表記するFlash, V2, V3, V4 Playerは対応しているPlayerの種類となります。

Flash: 非暗号化ファイルの場合、HTML5 Playerが起動しない環境ではFlash Playerが起動します。[^1]
V2: 暗号化されたファイルの場合、IE(ActiveX), Chrome・Firefox(NPAPI)環境でV2 Playerが起動します。[^2]
V3: 暗号化されたファイルの場合、Edge・Chrome 45以降のブラウザ環境でV3 Player(HTML5基盤暗号化Player)が起動します。
V4: 非暗号化ファイルの場合、基本的にV4 Player(標準 HTML5 Player)が起動します。

メソッド・イベントにPlayerバージョンの表記がないものは全てのPlayerが対応

[^1]: Adobe社から2020年以降にFlash Playerの対応中止を公表しています。

https://blogs.adobe.com/conversations/2017/07/adobe-flash-update.html

[^2]: Chrome 42+ / Firefox 52+ バージョンではNPAPI対応を中止しました。

セットアップ

Vg Controller Client

(顧客のhtml pageに挿入)

...
<script src="/path/to/vg-controller-client.1.1.4.min.js"></script>
<script>
window.onload = function() {
 try {
 var controller = new VgControllerClient({
 target_window: document.getElementById('child').contentWindow
 });
 // ここからイベントリスナーを登録したり、ウェブページElementにメソッドをbindしてください。
 } catch(e) {
 // Videogateweay Controller Libraryは window.postMessage APIを使用するため、
 // 該当機能に対応していないブラウザでは動作しません。
 // ここに適切なfail-overコードを追加してください。
 console.error(e);
 }
};
</script>
<body>
 <iframe id="child" src="http://v.kr..."></iframe>
</body>
...
  • VgControllerClient 生成の際にパラメータで転送するtarget_windowには、Webページに添付しているKollus Videogateway iframeのHTMLElementにcontentWindow属性を入力します。
  • このスクリプトはwindow.postMessage API を使ってPlayerとの通信を行うため、該当機能に対応していないブラウザでは動作しません。
  • Web Page内部に複数のiframeをembedしている場合、制御するiframe毎にVgControllerClient を生成する必要があります。
  • 以前バージョンとの互換性を考慮して(v0.5以前) new VgControllerClient()の代わりにnew
    Kollus.VideogatewayController()を使用しても正常に動作します。
  • try-catch文のException code listは以下のようになります。
code message description
-1 * PostMessage API exception code
-99 player type is not defined Player typeが定義されてない。
-99 player type must be one of v2, v3, v4 and flash. Player typeが正常なデータではない。
-99 this browser does not support postMessage PostMessage APIに対応しないブラウザ
-99 listener is not callable. イベントリスナーが関数形ではない

Vg Controller Server

(Kollus VG view html pageに挿入)

...  <script src="/path/to/vg-controller-server.1.1.0.min.js"></script> <script>  window.onload = function() {      try {          var player = [PLAYER オブジェクト Element (v2, v3, v4, flash player)];          var controller = VgControllerServer(player, {              player_type: 'v4', //[v2, v3, v4, flash]              target_window: window.parent 
            media_info: {media_info_object} //1.1.4バージョンで字幕関連のメソッドをを使用する際に必要です。          });          //playerオブジェクトの生成・初期化が完了されてからイベントを登録します。          //playerオブジェクトが初期化されてない状態でsetEventListenersメソッドを呼び出す場合、          //VG-Controllerが正常に動作しない可能性があります。         controller.setEventListeners();      } catch(e) {          // Videogateweay Controller Libraryは window.postMessage APIを使用するため          // 該当機能に対応していないWebブラウザでは動作しません。          // ここに適切な fail-over コードを追加してください。      }  };  </script>  ...

CDN

Vg-Controller Client LibraryをCDNで提供します。最新バージョンのライブラリを使用するには以下のリンクを挿入してください。

http://file.kollus.com/vgcontroller/vg-controller-client.latest.min.js

以前バージョンのライブラリを使用するにはlatestの代わりにバージョン名を入力してください。

http://file.kollus.com/vgcontroller/vg-controller-client.1.1.4.min.js

VR Contents (mobile device)

iframe 内部で呼び出す360 VR コンテンツの場合、Android・iOS デバイスで再生する際に正常に動作しません。
Androidの場合にはOrientation値が正常に適用されないため左/右の方向が逆になることがあり、
iOSの場合にはiOS 13以降からGyroscopeを正常に動作させるためにはDeviceMotion権限を取得する必要がありますが、
この権限がiframe内部では取得することができないため正常に動作しません。(iOS 13 未満のバージョンではsafari設定から’動作と方向へのアクセス’オプションを変更しなければなりません。)
上記Android・iOSの動作問題を解決するためにはVG-Controller 1.1.10+ を設置する必要があり、VG-Controller ClientからDeviceMotion イベントを自動で登録してVG-Controller Serverとの通信を行います。
(周期的にiframe 外部のイベントをiframe内部に転送します。)
iOSの場合には上記の内容の上、更にController.set_vr_overlay() メソッドを実行させる必要があります。
詳しい内容は以下のメソッド項目からset_vr_overlayメソッドを参考にしてください。

イベントリスニング

Playerのイベントが発生した際に使用者が定義したcallback関数を実行するためのイベントリスナー(EventListener)を登録する方法となります。

controller.on('event_name', function(param) {
// イベントリスナー
});

単一イベントに複数のリスナーを登録することができます。この場合、イベントが発生すると登録されている全てのリスナーが実行されます。

controller.on('event_name', function(param) {
	// 1番目のリスナー
});
controller.on('event_name', function(param) {
	// 2番目のリスナー
});
// イベント発生の際に1番目、2番目リスナーが全て実行
// 但し、JAVA Scriptイベントループとcallback関数の実行方式によってリスナーが順番通りに実行されない可能性があります。

イベントリスナーを登録する関数であるon」 はメソッドチェイニング(Method chaining)に対応しています。

controller.on('event_name_1', function(param) {
	// 1番目のリスナー
}).on('event_name_2', function(param) {
	// 2番目のリスナー
});

 

メソッド使用

Videogateway Controller Libraryが対応するメソッドを呼び出す方法となります。

controller.play();

場合によってはパラメーターが必要なメソッドもあります。

controller.set_volume(90);

 

参考事項

メソッドリスト

on(event_name, callback_function)

イベントリスナーを登録します。

controller.on('event_name', function(param) {
	// event_nameに該当するイベントが発生したとき、2番目の因子であるcallback functionを実行
});

Parameters:

  • event_name String callback functionをbindするイベント名
  • callback_function Function イベント発生する際に実行されるcallback functionとなります。場合によってcallback functionにはパラメーターが付与されることがあります。

Return:

  • Object VG-Controller Client オブジェクトをリターンします。

off(event_name)

登録されたイベントリスナーを削除します。

controller.off('event_name');

Parameters:

  • event_name String callback functionでbindされたイベント名

Return:

  • Object VG-Controller Client オブジェクトをリターンします。

get_progress()

再生進行中の位置情報をリターンします。

Parameters:

  • No parameter

Return:

  • Object percent, position, durationをpropertyとして持つobjectをリターンします。各入力値の説明はprogressイベントを参考にしてください。

play([start_at])

コンテンツを再生します。

controller.play();

特定時点から再生する場合、以下のように再生する位置をパラメーターで入力してください。

controller.play(10); // 10秒時点から再生

Parameters:

  • start_at Integer (Optional) 再生を開始する時点:省略した場合最初から再生開始

Return:

  • No return

pause()

コンテンツ再生を一時停止します。

Parameters:

  • No parameter

Return:

  • No return

set_volume(volume)

音量を変更します。
音量は 0 <= volume <= 100 の間のIntegerタイプの値を入力します。範囲外の値は0か100に調整されます。

Parameters:

  • volume Integer 変更する音量

Return:

  • No return

get_volume()

現在設定された音量の値をリターンします。

Parameters:

  • No parameter

Return:

  • Integer 現在設定されている音量

mute()

ミュートをOn/Offにします。On/Offはスイッチ方式で作動します。(呼出す度に状態が変更)

Parameters:

  • No parameter

Return:

  • No return

ff()

set_jumpstep メソッドで設定された入力値の通りに現在の再生位置から後ろに移動します。初期値は10秒です。

Parameters:

  • No parameter

Return:

  • No return

rw()

set_jumpstep メソッドで設定された入力値の通りに現在の再生位置から前に移動します。初期値は10秒です。

Parameters:

  • No parameter

Return:

  • No return

set_current_time(current_time)

current_time 位置に移動します。 play(start_at) メソッドは該当位置に移動後即時に再生を開始しますが、set_current_time(current_time) メソッドは現在のplaying/paused状態を維持します。

Parameters:

  • current_time Integer 移動する時間

Return:

  • No return

get_current_time()

現在の位置をリターン

Parameters:

  • No parameter

Return:

  • Number 現在の位置 (小数点5桁まで)

set_screen() V2 V3 V4

全体画面をOn/Offします。On/Offはスイッチ方式で作動します。(呼出す度に状態が変更)

  • Flash Player対応不可
  • IE, Firefox対応不可

Parameters:

  • No parameter

Return:

  • No return

get_screen()

現在画面モードをリターン:set_screenの対応有無(V2, V3, V4 Player)に関係なくget_screen関数は全てのPlayerから画面モードをリターンします。

  • 全体画面Off : windowed
  • 全体画面On : fullscreen

Parameters:

  • No parameter

Return:

  • String リターンされる現在の画面モード:windowed, fullscreenのいずれかの値

set_jumpstep(jumpstep)

ff メソッド、または rw メソッドで移動する位置を設定します。位置は「秒単位の定数」で入力します。

Parameters:

  • jumpstep Integer  移動する時間値

Return:

  • No return

get_jumpstep()

現在設定されている移動する時間値をリターン

Parameters:

  • No parameter

Return:

  • Integer リターンされる時間値

set_control_visibility(visibility)

Player Control panelの表示・非表示を設定:trueは表示、falseは非表示

Parameters:

  • visibility Boolean Control panelの表示有無

Return:

  • No return

get_control_visibility()

layer Control panelの表示・非表示設定をリターン

Parameters:

  • No parameter

Return:

  • Boolean Control panelの表示有無

set_video_visibility(visibility) V3 V4

Video 画面の表示・非表示を設定 (Audioには影響なし)
パラメータ:trueは表示 falseは非表示

Parameters:

  • visibility Boolean Video 表示設定

Return:

  • No return

get_video_visibility() V3 V4

設定されている Video 表示設定をリターン

Parameters:

  • No parameter

Return:

  • Boolean Video 表示設定

set_scalemode(scalemode) Flash

Flash PlayerのScalemodeを変更します。
Scalemodeは次の項目の中で指定します。(他の値を入力した場合適用されません。)

  • letterbox, stretch, zoom, none

Parameters:

  • scalemode String 設定するScalemodeの項目

Return:

  • No return

get_scalemode() Flash

Flash PlayerのScalemode設定をリターン

Parameters:

  • No parameter

Return:

  • String Scalemode設定内容

set_speed(speed) V2 V3 V4

倍速範囲を設定します。(0.5 <= speed <= 4) 最大倍速はPlayerの設定により変更することがあります。倍速は0.1刻みで調整することができます。範囲外の値を入力する場合範囲の最低、最大値(0.5と4)で固定されます。

Parameters:

  • speed Integer 設定する倍速値

Return:

  • No return

get_speed() V2 V3 V4

設定された倍速値をリターン
Javascriptには明確なFloatタイプがないため、小数点を表現するためにStringタイプでリターンします。

Parameters:

  • No parameter

Return:

  • String 設定された倍速値。定数(1, 2, 3, 4)の場合、小数点を表示します。(1.0, 2.0, 3.0, 4.0)

set_playback_rates(playback_rates) V3 V4

倍速値のグループを設定:Array typeとなり順番は無視されます。(Player側で整列してUIを構成)
二重配列形態で表示される場合、UIから見られる倍速値グループの行数を設定することができます。この場合、最初の因子は倍速値の配列となり2番目の因子は行数を意味します。ex) [[0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4], 2]

Parameters:

  • playback_rates Array 設定する倍速値グループの配列

Return:

  • No return

get_playback_rates() V3 V4

倍速値グループの配列をリターン

Parameters:

  • No parameter

Return:

  • Array 設定された倍速値グループの配列

set_topmost(topmost) V2

ウィンドウの最上位配置を設定
最上位に設定した場合、閲覧中のブラウザがバックグラウンドに入っても他のウィンドウより前面に表示されます。

Parameters:

  • topmost Boolean trueは最前面配置にする falseは最前面配置にしない

Return:

  • No return

get_topmost() V2

ウィンドウの最上位配置設定をリターン
V2 Player以外のPlayerから呼出された場合falseをリターンします。

Parameters:

  • No parameter

Return:

  • Boolean ウィンドウ最前面配置設定

set_brightness(brightness) V2

映像の明るさを設定します。
この設定はV2 Playerのみ対応します。映像の明るさは -50 <= brightness <= 50となります。
範囲外の値を入力する場合範囲の最低、最大値(-50と50)で固定されます。

Parameters:

  • brightness Integer 明るさ設定値

Return:

  • No return

get_brightness() V2

明るさ設定値をリターン: V2 Player以外の場合常に0をリターンします。

Parameters:

  • No parameter

Return:

  • Integer 明るさ設定値

set_contrast(contrast) V2

映像のコントラストを設定します。
この設定はV2 Playerのみ対応します。映像のコントラストは -50 <= contrast <= 50となります。
範囲外の値を入力する場合範囲の最低、最大値(-50と50)で固定されます。

Parameters:

  • contrast Integer コントラスト設定値

Return:

  • No return

get_contrast() V2

コントラスト設定値をリターン:V2 Player以外には常に0をリターンします。

Parameters:

  • No parameterReturn:
  • Integer コントラスト設定値

set_saturation(saturation) V2

映像の色調を設定します。
この設定はV2 Playerのみ対応します。映像の色調は -50 <= saturation <= 50となります。
範囲外の値を入力する場合範囲の最低、最大値(-50と50)で固定されます。

Parameters:

  • saturation Integer 色調設定値

Return:

  • No return

get_saturation() V2

色調設定値をリターン: V2 Player以外には常に0をリターンします。

Parameters:

  • No parameter

Return:

  • Integer 色調設定値

set_repeat_start([position])

リピート再生の開始位置を設定します。因子なしで呼び出す場合現在の位置を開始位置として設定します。

controller.set_repeat_start();

因子で位置(秒)値を入力すると指定した位置をリピート再生の開始位置として設定します。

controller.set_repeat_start(10); // 10秒時点を開始位置に設定

設定されている終了位置より開始位置が後になる場合、終了位置が解除されます。

Parameters:

  • position Integer (Optional) 開始位置値

Return:

  • No return

set_repeat_end([position])

リピート再生の終了位置を設定します。因子なしで呼び出す場合現在の位置を終了位置として設定します。

controller.set_repeat_end();

因子で位置(秒)値を入力すると指定した位置をリピート再生の終了位置として設定します。

controller.set_repeat_end(20); // 20秒時点を開始位置に設定

設定されている開始位置より終了位置が前になる場合、開始位置が解除されます。

Parameters:

  • position Integer (Optional) 終了位置値

Return:

  • No return

unset_repeat()

リピート再生設定を解除

Parameters:

  • No parameter

Return:

  • No return

GET_repeat()V2V3 V4

リピート再生設定状態をリターン
V3, V4 Playerは状態の文字列と時間がリターンします。V2 Playerの場合状態の文字列のみリターンします。状態文字列はcancel, start, endの3種類となります。

  • {status:(String), start:(Number), end:(Number)}

Parameters:

  • No parameter

Return:

  • Object 設定されたリピート状態情報

refresh_bookmark()

Playerのbookmarkリストを更新

Parameters:

  • No parameter

Return:

  • No return

enable_fullscreen_button() V3 V4

Playerの全体画面ボタンを有効にします。
(IE バージョン10 以前のバージョンはfullscreen 機能に対応していないためfullscreen buttonは自動で無効になります。)

Parameters:

  • No parameter

Return:

  • No return

get_player_id() V2 V3

PlayerのユニークIDをリターンします。この関数は「ready」イベントが呼出されるまでにはnullをリターンします。

Parameters:

  • No parameter

Return:

  • String PlayerのユニークID

get_hardware_id() V2 V3

ハードウェアユニークIDをリターンします。この関数は「ready」イベントが呼出されるまでにはnullをリターンします。

Parameters:

  • No parameter

Return:

  • String ハードウェアユニークID

get_player_type ()

現在のPlayer Typeをリターン:Flash, V2, V3, V4

Parameters:

  • No parameter

Return:

  • String Player Type

set_subtitle_visibility(visibility)

字幕表示を設定

Parameters:

  • visibility Boolean 表示設定

Return:

  • No return

set_subtitle_shadow_rect(is_rect)

字幕の背景スタイルを設定:パラメータがtrueならblock形の不透明背景となり、falseなら文字の陰影として設定されます。

Parameters:

  • is_rect Boolean 字幕の背景スタイルがBlock形であるかの有無

Return:

  • No return

get_subtitle_shadow_rect()

字幕の背景スタイルがBlock形であるかの有無をリターン

Parameters:

  • No parameter

Return:

  • Boolean 字幕の背景スタイルがBlock形であるかの有無

get_video_info() Flash V4

コンテンツのwidth, height, bitrate 値をリターンします。この関数は「ready」イベントが呼出されるまでにはnullをリターンします。

Parameters:

  • No parameter

Return:

  • Object width, height, bitrateがpropertyになるObjectをリターン

set_lms_check() V2

Playerが終了またはブラウザを閉じた場合LMSデータが転送されたことを確認してから削除されるように設定します。

Parameters:

  • No parameter

Return:

  • No parameter

set_keyframe_seek_default(is_default) V2

Seekする際にKeyframe移動をdefaultにするかを設定

Parameters:

  • is_default Boolean default 設定有無

Return:

  • No parameter

set_short_key(enable) V2

ショートカットキーのOn/Off設定

Parameters:

  • enable Boolean ショートカットキー設定

Return:

  • No parameter

set_enable_close_event()

close callback 関数の使用有無を設定

Parameters:

  • No parameter

Return:

  • No parameter

get_enable_close_event()

close callback 関数の使用設定をリターン

Parameters:

  • No parameter

Return:

  • Boolean 使用設定をリターン

set_close_callback_fn(fn)

ブラウザを閉じた際に実行する関数を登録します。

Parameters:

  • fn Function 閉じた際に実行する関数

Return:

  • No parameter

get_lms_data() V4

現在まで保存されたLMS dataをリターンします。

Parameters:

  • No parameter

Return:

  • Object LMS data

get_hls_frag_data() V4

hlsのfrag dataを呼出す

Parameters:

  • No parameter

Return:

  • base_url String M3U8 ファイルの呼出URL

  • url String TS ファイル(media file)の呼出URL

  • duration Integer TS ファイルの全体時間

  • auto_level Boolean ABR 有無

  • level Integer 現在ビットレートレベル値

  • media_sequence Integer メディアシーケンスナンバー

  • program_date_time Integer Program Date Time

  • tag_list Array Tags [key, value]

  • encrypted Boolean Encrypt 有無

set_controls_inactive_time (time) V2 V3 V4

コントロールバーが非表示になる時間を設定します。0の場合固定 (V3, V4 のみ)

Parameters:

  • time Integer コントロールバーが非表示になる時間

Return:

  • No parameter

get_controls_inactive_time () V2 V3 V4

設定されているコントロールバーの非表示時間をリターン

Parameters:

  • No parameter

Return:

  • Integer コントロールバーの非表示時間

set_controls_activity (activity) V3 V4

コントローラー(ControlBar, BigPlayButton)の有効・無効を設定

Parameters:

  • activity Boolean コントローラーの有効・無効設定

Return:

  • No parameter

get_controls_activity () V3 V4

コントローラー設定をリターン

Parameters:

  • No parameter

Return:

  • Boolean コントローラー設定

set_controlbar_progress_only (enable) V2 V3 V4

コントロールバーのProgressBarのみ表示する設定

Parameters:

  • enable Boolean ProgressBar Only設定

Return:

  • No parameter

get_controlbar_progress_only () V2 V3 V4

ProgressBar Only設定をリターン

Parameters:

  • No parameter

Return:

  • Boolean ProgressBar Only設定

set_controlbar_hide_playing (enable) V4

再生中にコントロールバーとプログレスバーまで非表示にする設定

Parameters:

  • enable Boolean 再生中にプログレスバーまで非表示にする設定

Return:

  • No return

GET_controlbar_hide_playing () V4

再生中にコントロールバーとプログレスバーまで非表示にする設定をリターン

Parameters:

  • No parameter

Return:

  • Boolean 再生中にプログレスバーまで非表示にする設定

set_subtitle_activity (activity) V2 V3 V4

字幕の位置を変更

Parameters:

  • activity Boolean trueの場合コントロールバー領域分だけ上に位置が上がり、falseの場合下がる

Return:

  • No return

GET_subtitle_activity () V3 V4

字幕の位置をリターン

Parameters:

  • No parameter

Return:

  • Boolean tコントロールバー領域分だけ上に位置が上がっているかをリターン

GET_subtitles_LIST () V2 V3 V4

VGから字幕の順番を変更してPlayer側にリターンする場合があるため、APIを呼出して取得する字幕リストではなく、
VGのMediaInfoオブジェクト内部の字幕属性をリターンします。

Parameters:

  • No parameter

Return:

  • Array 字幕リストの配列オブジェクト

sET_Current_subtitle (index) V2 V3 V4

字幕を変更

Parameters:

  • index Number get_subtitles_list()メソッドでリターンされた字幕配列のindex値

Return:

  • No return

sET_Ratio (Type) V2 V3 V4

画面拡大モードを変更

Parameters:

  • type String contain, fill, enlargementの中一つを適用することが可能

    • contain: 比率に合わせて埋める
    • fill: 画面全体に埋める
    • enlargement: 縦幅に合わせて埋める(左右にスクロール可能)

Return:

  • No return

GET_error_detail () V2 V3 V4

Errorが発生した場合、code, message, param値をオブジェクトでリターンする。param値はmessage以外にも追加で情報を転送する必要がある場合含まれます。

Parameters:

  • No parameter

Return:

  • Object Errorの詳細値をリターン {code, message, param}

dispose () V3 V4

Playerオブジェクトを削除

Parameters:

  • No parameter

Return:

  • No return

set_vr_overlay (options) V3 V4

iOSデバイスはDeviceMotion権限を取得するためNative CodeであるDeviceMotionEvent.requestPermissionメソッドを呼び出す必要があります。
User Action (Touch)を必要とするため、iframeオブジェクト上にTouch Eventを受け取るための任意のオブジェクトが必要になります。
VG-Controller Client初期化してから該当メソッドを呼出すとVG-Controller Client 内部から自動でTouch Eventオブジェクトを生成し、権限を受け取る準備をします。

※iOS 13.4バージョンでは権限を取得してもDeviceMotionのrotationRate値が正常に適用されないエラーが判明されています。

  var controller = new VgControllerClient({
       target_window: player.contentWindow
  });
  controller.set_vr_overlay({
      target_element: document.getElementById('player').parentElement,
      permission_request_help_message: 'Custom Info Message'
  });

Parameters:

  • options object

    • target_element (必須)
      • 任意のTouch Eventオブジェクトを生成するDom Elementです。ifrmaeオブジェクトの親Elementを指定してください。
      • 重要:iframeオブジェクトの親Elementはposition値がrelativeにならなければなりません。
    • permission_request_help_message
      • 既にDeviceMotion Permissionを実行している場合にはブラウザデータ保存所に該当値が保存されます。Permissionをキャンセルした場合、キャンセル状態で保存されるため、requestPermissionを実行することができません。実行できない状況に対した説明文を設定してください。説明文を設定していない場合、以下のデフォルト内容が表示されます。
        • “動作と方向”へのアクセス権限がないためジャイロスコープが動作しません。設定 > Safari > 詳細 > Webサイトデータからデータを削除して再度お試しください。

Return:

  • No return


イベントリスト

loaded

Playerの読込が終わってからイベントが発生します。

ready

Playerの読込が終わってから再生情報をサーバーから獲得して再生準備が完了された時点

play

再生開始の時に発生:一時停止状態から再度再生した際にも発生します。

progress

再生中に毎秒発生

controller.on('progress', function(percent, position, duration) {
	// 因子の順番は上記の通りになります。
});

V3, V4 Playerの場合、HTML5 Video Playerの構造上の都合のためprogressイベントが正確に1秒毎に発生しない可能性があります。 (0.1秒から最大0.5秒まで差が発生する可能性があります。)
V3, V4 Playerにprogressイベントで作業する場合上記の内容に注意してください。

Parameters:

  • percent Integer 進行率のパーセントとなります。範囲は 0 <=percent <=100となります。
  • position Integer 現在再生中の位置値となります。単位:秒
  • duration Integer コンテンツの長さとなります。 単位:秒

pause

一時停止した場合に発生

done

再生を完了した場合に発生:再生完了はdurationの最後の時点に判別

muted Flash V3 V4

ミュート状態が変更された際に発生 (ミュートOn/Off 何れも発生)

controller.on('muted', function(is_muted) {
	// is_mutedがtrueはミュートOn, falseはミュートOff
});

V2 Playerの場合には現状mutedイベントは対応していません。ミュート状態になる場合volumechangeイベントが発生し、変更された音量を0で転送します。

Parameters:

  • is_muted Boolean trueはミュートOn, falseはミュートOff

close V2

Playerが終了またはブラウザを閉じると発生

seeking V4

シークが始まると発生

seeked V4

シークが終わると発生

scalemodechange Flash

スケールモードが変更された際に発生します。

controller.on('scalemodechange', function(scalemode) {
// ...
});

Flash Playerのみ対応:パラメータは以下の中で決まります。

  • letterbox, stretch, zoom, none

Parameters:

  • scalemode String letterbox, stretch, zoom, none の中で一つ

topmostchange V2

ウィンドウの最上位配置設定が変更した際に発生

controller.on('topmostchange', function(is_topmost) {
	// is_topmostがtrueは最上位設定On, falseは最上位設定Off
});

V2 Player以外のPlayerではイベントが発生しません。

Parameters:

  • is_topmost Boolean trueは最上位設定On, falseは最上位設定Off

screenchange

全体画面のOn/Offの際に発生

  • IE10 以前のバージョンでenable_fullscreen_button()が有効化されている場合、fullscreen ボタンをクリックしても実際の動作はしませんがscreenchangeイベントはリターンされます。
controller.on('screenchange', function(screen) {
	// ...
});

screen パラメータは2つの文字列を転送します。
screen: windowed, fullscreen

Parameters:

  • screen String windowedは全体画面Off, fullscreenは全体画面On

volumechange

音量変更の際に発生

controller.on('volumechange', function(volume) {
	// volumeの範囲は 0 <= volume <= 100
});

Parameters:

  • volume Integer 変更された音量:範囲は 0 <= volume <= 100

speedchange V2 V3 V4

倍速変更の際に発生:倍速最大値はPlayerの設定により変更

controller.on('speedchange', function(speed) {
	// speed範囲は 0.5 <= speed <= 4
});

Parameters:

  • speed String 変更された倍速:範囲は 0.5 <= speed <= 4となります。Javascriptの特性で2.0は2に表記されるため、Integerタイプの代わりにStringタイプで転送

playbackrateschange V3 V4

倍速値グループが変更されると発生

controller.on('playbackrateschange', function(playback_rates) { // playback_ratesは配列の文字列となり、単一または二重配列でリターン });

Parameters:

  • playback_rates String 変更された倍速値グループの文字列

  • 単一配列 : 倍速値リストが1列で表示 ex) [1, 2, 3]

  • 二重配列 : 倍速値リストが複数列で表示 ex) [[0.5, 1, 1.5, 2], 2]

videosettingchange V2

映像設定変更の際に発生

controller.on('videosettingchange', function(videosetting) {
    // videosetting パラメータは次のObjectタイプ
    //
    // {
        // "brightness": 0,
        // "contrast": 0,
        // "saturation": 0
    // }
});	

映像設定変更はV2 Playerのみ対応しています。他のPlayerではイベントが発生しません。範囲は全て -50 <= value <= 50となります。別途指定がなかった場合defaultは0となります。

Parameters:

  • videosetting Object brightness(明るさ), contrast(コントラスト), saturation(色調)がpropertyになるobject

jumpstepchange

ff, rw メソッドから移動時間値が変更された際に発生

controller.on('jumpstepchange', function(jumpstep) {
	// jumpstep 単位:秒
});	

Parameters:

  • jumpstep Integer 変更された移動時間値 (単位:秒)

subtitlevisibilitychange V2 V3 V4

字幕表示状態が変更されると発生

hlsfragchange V4

hlsのfragが変更されると発生

html5_video_supported V3 V4

V3, V4 Playerのみ発生します。
PlayerがHTML5 Video 再生機能が使用できる環境だと判断してV4(HTML5 Video Player)を読み込んだ場合にはtrue, V3を読み込む場合にはfalseをリターンします。 (http://caniuse.com/#feat=video 参考)

Parameters:

  • html5_video_supported Boolean PlayerがV4(HTML5 Player)で読み込む場合true, V3を読み込む場合falseがリターン

error

Playerが再生エラーをリターンした際に発生

controller.on('error', function(error_code) {
	// ...
});

Parameters:

  • error_code Integer Kollus Playerのエラーコード

disconnected

VG-Controller ClientとServerの通信が断絶された際に発生
登録されたイベントリスナーを全て削除します。

device_orientation_changed v4

mobile deviceの縦/横が回転された際に発生

Parameters:

  • orientation String 縦: Portrait 横: Landscape

Bookmark

Requirement (v1.0)

  • オフライン状態でのブックマーク・続き再生(N-screen)データはデバイスがオンライン状態になった際に転送してデータを同期化する必要があります。
  • 続き再生(N-screen)はアプリ(Player)が終了する時点に転送されます。PCの場合、終了する際にjavascriptで終了確認が取れるメッセージを転送すると一回だけで続き再生情報を転送することで済みます。
    • Flash Playerの場合、一定の周期に転送します。
  • SDKに累積されたブックマーク・続き再生(N-screen)データリストを獲得またはClearする機能について
    • SDK更新に合わせて適用される予定です。
  • SDK – bookmark, n-screenデータ転送結果の処理callback
    • SDK更新に合わせて適用される予定です。
  • ブックマーク・続き再生(N-screen)に時間情報追加
    • 時間情報は視聴者のデバイスのlocaltimeによる時間の同期化問題が出る可能性があるため、使用する際には注意してください。

Kollus側の設定

ブックマーク・続き再生(N-screen)連係はサービスアカウント全体に一つのURLのみ指定できます。
他のCallbackのようなチャンネル別設定ができません。

  • Kollusシステム側での設定が必要なため、使用する際には担当者にお問い合わせください。

Bookmark API

ブックマークデータを使用するKollus Playerと顧客DBのブックマーク情報を連係する際に使用します。

API Params

Name Type Note
upload_file_key string コンテンツのアップロードファイルキー (Unique)
media_content_key string
client_user_id string ユーザID(顧客のサービス会員)
position integer ブックマーク位置
localtime integer ブックマーク生成時刻 (参照: ユーザ system time,
value string ブックマークタイトル
label string ブックマークリストタイトル
uservalue(0~9) string User Value

ブックマークリスト獲得Api (List Url)

ブックマークリストを獲得するために呼出すURLとなります。ブックマークデータはJSON形態のUTF-8でリターンしてください。

Request

  • インデックスブックマーク
    • method : GET
    • params:
      • (string) upload_file_key
      • (string) media_content_key : 存在しない場合もある
  • インデックス+ユーザブックマーク
    • method : GET
    • params :
      • (string) media_content_key
      • (string) client_user_id
  • ブックマークURLの因子に{USERVALUE0~9}項目がある場合にはuservalue0(~9)で置換してリクエストします。

Response

  • error : 正常の場合0 (必ず0でなければなりません。)
  • bookmark_labels : リスト項目に表示するリストタイトル
    • kind 0 : Bookmark
    • kind 1 : Index
  • result : 全ての結果はresult項目の下位に表示させます。
    • bookmark_positions : ブックマークデータリスト
      • poistion : ブックマーク位置
      • value : ブックマークタイトル
      • kind
        • 0 : ユーザブックマーク
        • 1 : インデックスブックマーク
      • label : インデックスブックマークタイトル (ユーザブックマークはこの値を無視)
      • localtime : ブックマーク生成リクエスト時刻 (ユーザ local
      • time – 参考データに使用 unixtimestamp 形式)

Sample data

{
    "error" : 0,
    "result" : {
   		“bookmark_labels” : [
            "Bookmark",
            “Index”
        ],
        "bookmark_positions" : [
            {
                "position" : 3,
                "value" : "",
                "kind" : 0,
                "label" : "",
                "localtime" : 1417568260 },
            {
                "position" : 5,
                "value" : "開始",
                "kind" : 0,
                "label" : "",
                "localtime": 1417568265 },
            {
                "position": 7,
                "value" : "",
                "kind" : 1,
                "label" : "Aさんのブックマーク",
                "localtime" : 1417538260 },
            {
                "position" : 12,
                "value" : "",
                "localtime" : 1417568270 },
            {
                "position" : 13,
                "value" : "",
                "kind" : 1,
                "label" : "Bさんのブックマーク",
                "localtime" : 1417538260 }
      	  ]
    }
}

 

ブックマークデータ一括編集API (UPDATE URL)

複数のブックマークを一括で処理するためのURLとなります。actionはregister, removeとなり、それぞれがregister, removeの機能を順番通りに処理します。順番通りに処理します。

Update URLが呼出される場合、Register/Remove URLは呼出されません。

Request

  • method : POST
  • params:
    • (string) bookmarks : {action block}がarrayで構成されたJSONフォーマットの文字列
  • {action block}
    • action : ‘register’ or ‘remove’
    • インデックスブックマーク
      • (string) upload_file_key
      • (integer) position
      • (string) label
      • (string) value : removeでは含まれない
      • (integer) localtime
    • ユーザブックマーク
      • (string) media_content_key
      • (string) client_user_id
      • (integer) position
      • (string) value : removeでは含まれない
      • (integer) localtime
    • user_value
      • ブックマークURLの因子に{USERVALUE0~9}項目がある場合にはuservalue0(~9)で置換してリクエストします。
  • bookmarksの例示)
[
    {
        "action" : "register"
        , "media_content_key" : "x53gaH3a"
        , "client_user_id" : "test_user_id"
        , "position" : 45
        , "localtime" : 1414538260
        , "LC" : “LC001”
        , "device" : “mobile”
     },
     {
        "action" : "remove"
        , "media_content_key" : "x53gaH3a"
        , "client_user_id" : "test_user_id"
        , "position" : 67
        , "localtime" : 1417538260
        , "LC" : “LC001”
        , "device" : “mobile”
    }
]

N-Screen API

続き再生情報を使用する際にKollus Playerと顧客のDBを連係するためのAPIとなります。続き再生更新API, 更新の際にLocaltime情報を含めて転送します。(Sampleのように構成されたURLを呼出すことで続き再生情報を更新します。)

API Params

Name Type Note
uid string ユーザーID
mck string media_content_key
wts integer 現在の再生位置 (単位: 秒)
localtime integer N-Screenリクエスト時刻 (参照値: ユーザー system time, unixtimestamp形式)

Kollus Security player (pc, mobile)

UPDATE URL

Request

  • method: GET
  • params:
    • (string) uid
    • (string) mck
    • (integer) wts (現在の再生位置 単位: 秒)
    • (integer) localtime

Sample

http://[NSCREEN_DOMAIN]/nscreen/timestamp?uid=[CLIENT_USER_ID]&mck=[MEDIA_CONTENT_KEY]&wts=[POSITION]&localtime=[LOCAL_TIME] 
http://foobar.com/user-nscreen/nscreen-position.asp?uid=foo&mck=C54Kfyi4&wts=10&localtime=1417538260

 

Scheme Option

Mobile Security Player (Android, iOS)

Android, iOSでKollus Security Playerを呼出すscheme呼出オプションを説明します。既にKollus Security Playerがインストールされている場合、scheme(kollus://)を使用して一般的なMoible WebからKollus Security Playerが自動で起動されます。

 

kollus://path – ストリーミング(Streaming)

コンテンツをストリーミング再生する際に使用します。

Params Datatype Description
url URL(http://~) コンテンツ再生に使用するリンクを指定します。
folder path 保存される仮想フォルダとなり、階層は/で区分します。 例:media/movie/video

 

kollus://download – ダウンロード(Download)

コンテンツをダウンロードする際に使用します。保存される仮想フォルダを指定することができます。フォルダはmedia/movie/videoのようにmulti-depthに対応します。

ダウンロードするためには事前にコンテンツダウンロードポリシーを設定する必要があります。Kollus OVP CMSのチャンネル編集ページから設定してください。 

Params Datatype Description
url http://~ コンテンツ再生に使用するリンクを指定します。同時に複数をダウンロードする場合、重複される可能性があります。
folder Movie ダウンロードフォルダを指定します。フォルダはダウンロード機能を提供するPlayerの中の仮想フォルダになります。同時に複数をダウンロードする場合、重複される可能性があります。

 

kollus://download_play – ダウンロードコンテンツ再生**

ダウンロードされたコンテンツを再生する際に使用されます。コンテンツが削除された場合動作しません。

Params Datatype Description
url http://~ コンテンツ再生に使用するリンクを指定します。

 

kollus://list – ダウンロードリスト (List)

Playerアプリを実行した際にダウンロードリストページにすぐ移動させる場合には以下の通りに指定してください。特定位置のリストを表示する場合にはfolderパラメータを使用します。

Params Datatype Description
folder String Kollus Security Playerのダウンロードリストページにすぐ移動します。指定したフォルダがなかった場合、Root folderのリストが表示されます。

 

KollusPlayer for Mac

kollus://path – ストリーミング(Streaming)

コンテンツをストリーミング再生する際に使用します。

Parmas Datatype Description
url URL(http://~) コンテンツ再生に使用するリンクを指定します。*URL Encodingされた文字列を使用してください。

 

KollusPlayer V3 (for Windows)

ダウンロード (POST)

  • 団体/複数ファイルのダウンロードに使用します。
http://127.0.0.1:8388/download

Post パラメータ

Params Datatype Description
download Json ダウンロードファイルの情報をJSONで構成された形式で入力します。別途エンコードは行いません。
JSON
result ダウンロードファイルオブジェクトの配列
title ダウンロードリストに表示するタイトル
url メディア経路
dir ファイルがダウンロードされた後登録される経路

Example

{
    "result": [
        {
            "title": "東京の夜景",
            "url": "http://v.kr.kollus.com/JSAPHzuT?a",
            "dir": "/"
        },
        {
            "title": "スカイツリー",
            "url": "http://v.kr.kollus.com/JSAPHzuT?a",
            "dir": "/Skytree"
        }
    ]
}

 

Custom Log

概要

ユーザ(視聴者)がKollus Videogatewayにアクセスする際に記録するアクセスログに付加情報を追加してKollusのユーザアクセスログにデータを保存・分析ができる機能を提供することができます。※別途サービスとなります。

 

Videogateway リクエスト方式

アクセスログに以下の通りにユーザ定義ログキーを追加することが出来ます。

http://v.kr.kollus.com/MEDIA_CONTENT_KEY?custom_log_key0=...&custom_log_key9=...

 

Custom log key

  • ユーザ定義ログキーはcustom_log_key0 ~ custom_log_key9の範囲で最大10個まで使用することができます。
  • 各フィールドの長さが10Byteを超える場合別途ご相談ください。
  • custom_log_keyはURL encodeして使用してください。

 

Media Content Key 拡張機能

概要

メディアコンテンツキー(media_content_key)に顧客が指定するCustom ID(以下、CID)を追加して新しいコンテンツ(ダウンロードのみ該当)として認識させる機能となります。但し、コンテンツの再生に必要な情報はCIDが付与されてないメディアコンテンツキー(media_content_key)から呼び出します。

 

より分かりやすく説明するため、似ている概念のGoogleのメールAlias機能を例示として説明します。

メールアカウント : support@kollus.com
メール発送情報 : support+cid@kollus.com 
メール受信 : support@kollus.com 

support@kollus.com, support+cid@kollus.comのように上記の2つのメールアドレスに発送した場合、いずれも support@kollus.comに転送されます。

 

形式

非暗号化リクエスト

http://v.kr.kollus.com/[MEDIA_CONTENT_KEY]-[CUSTOM_ID]

  1. メディアコンテンツキーとCIDは -(ハイフン)で区分
  2. メディアコンテンツキーと -, CIDを含む長さの制限は最大64bytes.
  3. CIDにはなるべくmulti bytes characterを使用しないこと(UTF-8の場合、byteが可変するため求めていた長さと相違が発生する可能性があります。)
  4. 例示 http://v.kr.kollus.com/vnCVPVyV-new-custom-id

 

暗号化リクエスト

  1. kollus_crypt 必須 (ver 1.6.1 以降)
    • 必要な場合別途提供します。
  2. メディアコンテンツキーの入力因子に上記の形式でCIDを追加した拡張メディアコンテンツキーを入力

 

注意事項

  • メディアコンテンツキーが基準となるKollus OVPの機能 (N-screen, 重複再生遮断など)は元のメディアコンテンツキーと拡張メディアコンテンツキーを区別(異なるコンテンツとして認識)します。以下の機能はCIDを追加してもmedia_content_keyを基準で判別します。
    • DRM callback
    • LMS callback
    • 続き再生(N-screen)
    • ブックマーク
  • CID(custom-id)に使用可能な文字列
    • ローマ字, 数字のみ対応(半角)
      • a-z,A-Z,0-9
    • 例外として -(ハイフン)は使用可能

Mobile連係

Kollus Mobile Player SDK

顧客のサービスアプリ(iOS, Android)にKollus Security Player機能を適用するためのSDKを提供しています。SDKの提供、SDKキーの発行、SDK サンプルコードにつきましては担当までお問い合わせください。

Hybrid Player

アプリ開発が難しい顧客にはWebページとKollus Playerアプリを組み合わせて顧客アプリとしてサービス提供が可能なHybrid Playerを提供します。アプリの申請からメンテナンス・更新なども対応しています。詳しくは担当までお問い合わせください。

エラーコード

Type Code Case Descript Message_JP
Security Player NO_INIT -19 初期かされてない状態で呼出された場合
Security Player BAD_VALUE -22 URLがNULL または MediaContentKeyでダウンロードされたコンテンツがない場合
Security Player INVALID_OPERATION -38 因子エラー
Android ERROR_CODEC_TIMED_OUT -110 H/W Codec(OMX)動作エラー
Security Player ERROR_IO -1004 データ使用エラー
Security Player ERROR_MALFORMED -1007 URLが http://もしくは https://から始まらない倍 コンテンツの読み込みに失敗しました。
Security Player ERROR_UNSUPPORTED -1010 コンテンツ非対応 サポートできないコンテンツです。
Security Player ERROR_UNSUPPORTED_DEVICE -1015 デバイス非対応 サポートされていない端末です。
Android ERROR_CODEC_INIT -1102 HW Codec 連係に失敗した際にエラー収集のため存在、UI上にNotifyしない コーデックの初期化に失敗しました。再度お試しください。
Security Player ERROR_CODEC_DECODE -1103 Decoding失敗 システム初期化により再起動が必要です。
OTT ERROR_SERVER_BLACK_OUT -1105 Black out 放送時間外または放送信号が正常に受信されていません。再度お試しください。
OTT ERROR_DRM_NO_LICENSE -2001 DRM proxy server addressが存在しない、または認証に失敗
OTT ERROR_NETWORK_CON_BASE -4000 “ネットワーク接続エラー:基本値下にないコードはCurlエラーに基本値を+したコード”
OTT ERROR_NETWORK_CON_SOCKET_IO -4103 ネットワーク接続の際に ERROR_NETWORK_CON_TIMEOUT以外のエラー
OTT ERROR_NETWORK_CON_TIMEOUT -4105 ネットワーク接続Time out
OTT ERROR_NETWORK_SEND_BASE -5000 ネットワーク書き込みエラー:基本値
OTT ERROR_NETWORK_SEND_SOCKET_IO -5005 ネットワーク書き込みエラー
OTT ERROR_NETWORK_RECV_BASE -6000 ネットワーク読込エラー:基本値
OTT ERROR_NETWORK_RECV_SOCKET_IO -6005 ネットワーク読込エラー
Security Player UNKNOWN_ERROR 0x80000000 その他エラー
Security Player ERROR_UNDEFINED_CODE その他 その他エラーを統合して表示するメッセージ 一時的なエラーが起きました。しばらくしてから再度お試しください。

 

V3-Agent Error (-1001 ~ -2001)

Type Code Case Descript Message_JP
ERROR_NOT_RESPONSE_AGENT -1000 Kollus Agentへのリクエストに3秒以上レスポンスがない場合 Kollus Agentが実行されていません。しばらくしてから再度お試しください。
ERROR_UNSUPPORTED_HTML5_VIDEO -1001 HTML5非対応 現在ご利用中のブラウザーでは再生が出来ません。Internet Explorer 9 バージョン以上にアップデートするか、もしくはChrome, Firefoxなどのブラウザーでお試しください。
ERROR_CAPUTRE -1002 キャプチャソフト感知 録画または画面キャプチャソフトが検知されました。関連プログラムを終了してからお試しください。
ERROR_TVOUT -1003 TV OUT 感知(HDMI感知またはDevice確認) 外部デバイスへの送出が感知されて再生を中断します。HDMIなどの外部接続を解除してからお試しください。
ERROR_SCRIPT -1011 security scriptエラー 認証エラーが起きました。しばらくしてページを更新してから再生してください。
ERROR_DUPLICATE_APP -1012 複数のPlayerが感知された場合 複数のプレーヤーを同時に実行できません。再生中のプレーヤーを終了します。
ERROR_CONTENTRAGE -1013 サーバーからのレスポンスが遅延された場合、許可されてない方法でダウンロードリクエストされた場合 HTML5プレーヤーの再生環境がよくありません。下の確認ボタンをクリックし、専用プレーヤーで再生してください。
ERROR_USERAGENT -1014 user-agentが異なる場合
ERROR_WATERMARK_PLAY -1015 ウォターマーキングが挿入されたコンテンツはSecurity Playerから呼出 専用プレーヤーのみ再生可能なコンテンツです。
ERROR_HTML5_VIDEO_PLAY -1016 HTML5Player非対応環境 このコンテンツは専用プレーヤーで再生されます。しばらくお待ちください。
ERROR_USER_CLOSE -1016 ユーザがAgentを終了
ERROR_DATA_READ -1017 データ読込エラー データの読込にエラーが起きました。しばらくしてページを更新してから再生してください。
ERROR_NETWORK_DISCONNECTED -1018 再生途中Networkが切断されてSessionが切れた場合 ネットワークタイムアウトです。ブラウザを更新してください。
ERROR_VIRTUALMACHINE -1019 VM環境で再生 仮想マシンでは再生できません。
ERROR_BUFFERING_CONTENT -1020 最初再生にバッファリングが続いて再生できない場合 ご利用中のブラウザ環境では再生が円滑にできない可能性があります。他のブラウザで再生することをお勧めします。
ERROR_SCRIPT_FIRST -1021 script send 呼出がない状態でデータをリクエスト First Security script エラー
ERROR_SCRIPT_REF -1022 connect countが2つ以上で15秒間同時に接続を維持した場合 正常なダウンロード方法ではありません。

 

IOS SDK Error (-2100~)

Type Code Case Descript Message_JP
ERROR_DISABLED_BOOKMARK_CONTENT -2100 ブックマークなしのコンテンツにブックマーク操作が実行された場合 ブックマークが含まれていないコンテンツです。
ERROR_CONTENT_NOT_PREPARED -2101 コンテンツの再生準備が完了してない状態で再生が実行された場合 コンテンツ再生準備が完了していません。
ERROR_COULD_NOT_SCROLL_MODE -2102 画面移動ができるモードではない 現在のモードでは画面の移動ができません。
ERROR_INCORRECT_BUNDLE_ID -2103 Bundle-IDが一致しない Bundle IDが正しくありません。
ERROR_EXPIRED_AUTH_DATE -2104 SDK有効期限終了 SDK有効期限が切れました。
ERROR_INCORRECT_AUTH_DATE -2105 SDK有効期限の入力フォーマットが一致しない SDK有効期限が正しくありません。
ERROR_INCORRECT_AUTH_KEY -2106 SDK認証キーが一致しない SDK認証キーが正しくありません。
ERROR_NOT_ENOUGH_AUTH_INFO -2107 SDK認証情報項目に未入力あり SDK認証に必要な全ての情報が入力されていません。
ERROR_KOLLUS_STORAGE_IS_EMPTY -2108 PlayerにKollusStorageが設定されてない状態で再生 KollusStorageが設定されていません。
ERROR_CONTENT_URL_IS_EMPTY -2109 コンテンツのURLまたはindexが設定されてない状態で再生 再生するコンテンツのURLが設定されていません。
ERROR_CONTENT_IS_MIRRORING -2110
ERROR_DISCONNECT_PLAY_SESSION -2111 Proxy Serverとのセッションが切断 再生できません。再度実行してください。
ERROR_ALREADY_DOWNLOADED -9000 ダウンロード完了状態のファイルをダウンロード ダウンロードされたコンテンツです。

 

Kollus Player V4 (3000~ )

Type Code Case Descript Message_JP
ERROR_API_CONNECTION 3000 API呼出に失敗 APIの呼出に失敗しました。サービス提供業者にお問い合わせください。
MEDIA_ERR_ABORTED 3001 再生を中止 動画再生を中止しました。
MEDIA_ERR_NETWORK 3002 ネットワークエラー ネットワークエラーにより動画のダウンロードが途中で失敗しました。
MEDIA_ERR_DECODE 3003 非対応メディアのリクエスト サーバーまたはネットワークのエラー、またはフォーマットがサポートされていないため動画を読み込むことができませんでした。
MEDIA_ERR_SRC_NOT_SUPPORTED 3004 非対応ブラウザ 破損の問題、またはお使いのブラウザがサポートしていない機能が動画に使用されていたため、動画の再生が中止されました。
MEDIA_ERR_SRC_NOT_SUPPORTED 3005 非対応ブラウザ この動画に対して互換性のあるソースが見つかりませんでした。
MEDIA_ERR_LIVE_NOT_BROADCASTING 3012 LIVE再生に失敗 放送時間外または放送信号が正常に受信されていません。再度お試しください。
ERROR_UNAUTHORIZED 3013 認証に失敗 認証情報確認中にエラーが発生しました。コンテンツ提供会社へお問い合わせください。

 

Video Gateway (4000~ )

Type Code Case Descript Message_JP
ERROR_INVALID_MEDIA_CONTENT_KEY -4001 正しくないメディアコンテンツキー コンテンツの読込中エラーが起きました。
ERROR_INVALID_SECURITY_KEY -4002 正しくないセキュリティーキー コンテンツの読込中エラーが起きました。
ERROR_INVALID_CHANNEL_KEY -4003 正しくないチャンネルキー コンテンツの読込中エラーが起きました。
ERROR_INVALID_USER_KEY -4004 正しくないユーザキー コンテンツの読込中エラーが起きました。
ERROR_INVALID_TRANSCODING_FILE_PATH -4005 正しくないファイル経路 コンテンツの読込中エラーが起きました。
ERROR_INVALID_ALIAS_KEY -4006 正しくないAliasキー コンテンツの読込中エラーが起きました。
ERROR_INVALID_JWT -4007 正しくないJSONトークン コンテンツの読込中エラーが起きました。
ERROR_INVALID_MEDIA_TOKEN -4008 正しくないメディアトークン コンテンツの読込中エラーが起きました。
ERROR_NO_TRANSCODING_FILE -4011 存在しないファイル コンテンツの読込中エラーが起きました。
ERROR_NO_MEDIA_CONTENT -4012 存在しないファイル コンテンツの読込中エラーが起きました。
ERROR_NO_CONTENT_OWNER -4013 存在しないコンテンツホルダー コンテンツの読込中エラーが起きました。
ERROR_NO_CONTENT_DISTRIBUTOR -4014 存在しないコンテンツホルダー コンテンツの読込中エラーが起きました。
ERROR_NO_CHANNEL -4015 存在しないチャンネル コンテンツの読込中エラーが起きました。
ERROR_NO_PAYMENT -4016 支払情報なし コンテンツの読込中エラーが起きました。
ERROR_NO_DEFAULT_MAIN_SITE -4019 サービス提供者設定エラー コンテンツの読込中エラーが起きました。
ERROR_NO_MAIN_MEDIA_CONTENT -4020 イントロリクエストの中に本コンテンツが存在しない コンテンツの読込中エラーが起きました。
ERROR_UNAVAILABLE_TRANSCODING_FILE -4021 サービス中止されたファイル コンテンツの読込中エラーが起きました。
ERROR_UNAVAILABLE_MEDIA_CONTENT -4022 サービス中止されたファイル コンテンツの読込中エラーが起きました。
ERROR_UNAVAILABLE_CONTENT_OWNER -4023 サービス中止されたコンテンツホルダー コンテンツの読込中エラーが起きました。
ERROR_UNAVAILABLE_CONTENT_DISTRIBUTOR -4024 サービス中止されたコンテンツホルダー コンテンツの読込中エラーが起きました。
ERROR_UNAVAILABLE_CHANNEL -4025 サービス中止されたチャンネル コンテンツの読込中エラーが起きました。
ERROR_UNAVAILABLE_CHANNEL_DISTRIBUTION -4026 委任されたチャンネルがサービス中止 コンテンツの読込中エラーが起きました。
ERROR_NOT_ALLOWED_REFERER -4031 ドメイン制限されたコンテンツ 許可されていないドメインでの再生は出来ません。
ERROR_NOT_ALLOWED_ACCESS_FOR_BLOCKING_CAPTURE -4032 キャプチャを試したためアクセス遮断 画面キャプチャーを感知したため、コンテンツへのアクセスを遮断します。サービス提供業者にお問い合わせください。
ERROR_NOT_PUBLIC_SHARED_CHANNEL -4081 非公開チャンネル コンテンツの読込中エラーが起きました。
ERROR_MISMATCH_USER_KEY -4082 ユーザキーが一致しない コンテンツの読込中エラーが起きました。
ERROR_ACCESS_WITHOUT_MEDIA_CONTENT_KEY -4083 正しくない再生リクエスト コンテンツの読込中エラーが起きました。
ERROR_NOT_SUPPORT_DEVICE -4084 非対応デバイス このデバイスには対応していません。サービス提供業者にお問い合わせください
ERROR_TOKEN_EXPIRED -4085 再生トークンの有効期限切れ 再生有効時間が過ぎています。再度アクセスしてください。

 

Flash Error (4100~ )

Type Code Case Descript Message_JP
ERROR_LOAD_SKIN_TEMPLETE 4100 SkinTemplete SWF 読込エラー SkinTemplateの読み込みに失敗しました。
ERROR_LOAD_SETTING_PANNEL 4101 SettingPannel SWF 読込エラー Setting Pannelの読み込みに失敗しました。
4012 VOD再生に失敗 サーバーにエラーが発生しました。しばらくしてから再度アクセスしてください。
4013 LIVE再生に失敗 放送時間外または放送信号が正常に受信されていません。再度お試しください。

 

Curl エラー (-8001 ~ -8099)

Type Code Case Descript Message_JP
ERROR_CURLE_COULDNT_RESOLVE_HOST -8006 サーバーHOST Resolvingに失敗 サーバーに接続できません。インターネット接続状況を確認してください。
ERROR_CURLE_COULDNT_CONNECT -8007 サーバーへアクセスに失敗 サーバーに接続できません。インターネット接続状況を確認してください。
ERROR_CURLE_PARTIAL_FILE -8018 サーバーにリクエストしたデータのサイズとレスポンスされたデータのサイズが一致しない ネットワーク環境の不安定のためデータ受信に失敗しました。
ERROR_CURLE_WRITE_ERROR -8023 サーバーからレスポンスされたデータをファイルで保存に失敗
ERROR_CURLE_OPERATION_TIMEDOUT -8028 一定時間サーバーとのネットワークからレスポンスがない ネットワーク環境の不安定のためサーバーとの通信が正常に行われていません。しばらくしてから再度アクセスしてください。
ERROR_CURLE_RECV_ERROR -8056 サーバーにアクセスしてレスポンスされる途中に失敗 インターネット接続状況を確認してください。

 

  • その他curlエラー
    • -80XX エラーコードの最後の2桁はCurl Errorとなります。
    • Curl Errorは以下のURLから確認することができます。
https://curl.haxx.se/libcurl/c/libcurl-errors.html

 

 

標準HTTPサーバーエラー (-8400~-8505)

Type Code Case Descript Message_JP
ERROR_BAD_REQUEST -8400 コンテンツの読込中エラーが起きました。
ERROR_UNAUTHORIZED_1 -8401 コンテンツの読込中エラーが起きました。
ERROR_UNAUTHORIZED_2 -8402 コンテンツの読込中エラーが起きました。
ERROR_NOT_EXIST_FILE -8404 コンテンツの読込中エラーが起きました。
ERROR_INTERNAL_SERVER -8500 コンテンツの読込中エラーが起きました。
ERROR_NOT_IMPLEMENTED -8501 コンテンツの読込中エラーが起きました。
ERROR_BAD_GATEWAY -8502 コンテンツの読込中エラーが起きました。
ERROR_SERVICE_UNAVAILABLE -8503 サーバーメンテナンス中です。しばらくしてから再度アクセスしてください。
ERROR_GATEWAY_TIMEOUT -8504 サーバーメンテナンス中です。しばらくしてから再度アクセスしてください。
ERROR_HTTP_VERSION_NOT_SUPPORTED -8505 ブラウザにHttp1.1が設定されているかを確認 コンテンツの読込中エラーが起きました。

 

Edge(認証)サーバーエラー (-8461~-8482)

Type Code Case Descript Message_JP
ERROR_REQUEST_URL -8461 URLが正しくありません。
ERROR_GET_USER_IP -8462 ユーザーIPの確認ができません。
ERROR_ACCESS_DENIED_FOLDER -8463 このコンテンツ/フォルダへのアクセス権限がありません。
ERROR_DUPLICATION_BLOCK_PROCESS -8464 使用可能台数制限のため再生できません。管理者にお問い合わせください
ERROR_VERIFY_MEDIA_KEY -8465 メディア キーのエラーが発生しました。
ERROR_REQEST_URL_BLOCK -8466 リクエストしたコンテンツがブロックされました。
ERROR_MEDIA_KEY_TIME_EXPIRE -8467 メディアキーの有効期限が切れました。
ERROR_MEDIA_DOMAIN_VALIDATE -8468 メディアのURLが正しくありません。
ERROR_HEAVY_REQUEST -8469 サーバの負荷が高いです。しばらくしてから再度アクセスしてください。
ERROR_PLYMENT -8470 課金エラーが起きました。
ERROR_GEO_RESTRICTION -8471 この国では再生が制限されているコンテンツです。
ERROR_PREVIEW_ERROR -8472 プレビューに失敗しました。
ERROR_USER_KEY -8473 ユーザー キーのエラーが発生しました。
ERROR_CONTENT_NOT_PUBLIC_CHANNEL -8474 非公開コンテンツです。
ERROR_USED_MEDIA_KEY -8475 使用中のメディア キーです。
ERROR_MAX_REQUEST_SIZE -8476 認証確認リクエストの長さ制限を超過しました。
ERROR_DIFFERENT_ES_KEY -8477 正常なリクエストではありません。
ERROR_ACCESS_DENIED_MEMCACHE_SERVER -8478 サーバーに接続できません。しばらくしてから再度アクセスしてください。
ERROR_DUPLICATION_BLOCK_MEDIA_KEY -8479 現在ログインしているIDの新しいログイン情報が確認されたため、再生を中断します。
ERROR_NOT_NORMAL_REQUEST_VIDEO_GATEWAY -8480 正常なアクセスではありません。
ERROR_EDGE_RADIS_WRITING -8481 サーバーエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_EDGE_RADIS_READING -8482 サーバーエラーが起きました。しばらくしてから再度アクセスしてください。

 

Storage Managerエラー (-8600 ~ -8900)

Type Code Case Descript Message_JP
ERROR_CREATE_DIRECTORY -8600 デバイスにファイルを保存するフォルダ生成に失敗 ファイルへのアクセスに失敗しました。設定画面にて保存場所を確認してください。
ERROR_CREATE_FILE -8601 ファイル生成に失敗 ファイルへのアクセスに失敗しました。設定画面にて保存場所を確認してください。
ERROR_SAVE_DATA -8602 ファイルのデータ保存に失敗 ファイルへのアクセスに失敗しました。設定画面にて保存場所を確認してください。
ERROR_OPEN_DB -8603 DBファイル開きに失敗 データベースのエラーが発生しました。設定画面にて保存場所を確認してください。
ERROR_CREATE_TABLE -8604 DBテーブル生成に失敗 データベースのエラーが発生しました。設定画面にて保存場所を確認してください。
ERROR_SELECT_TABLE -8605 DBテーブル選択に失敗 データベースのエラーが発生しました。設定画面にて保存場所を確認してください。
ERROR_DELETE_RECORD -8606 DBレコード削除に失敗 データベースのエラーが発生しました。設定画面にて保存場所を確認してください。
ERROR_INSERT_RECORD -8607 DBレコード追加に失敗 データベースのエラーが発生しました。設定画面にて保存場所を確認してください。
ERROR_OPEN_FILE -8608 ファイル開きに失敗 ファイルへのアクセスに失敗しました。設定画面にて保存場所を確認してください。
ERROR_OUT_OF_MEMORY -8609 メモリ不足 メモリー容量が不足しています。使用しないアプリを終了してから再度試してください。
ERROR_READ_FILE -8610 ファイル読み込みに失敗 ファイルへのアクセスに失敗しました。設定画面にて保存場所を確認してください。
ERROR_WRITE_FILE -8611 ファイル書き込みに失敗 ファイルへのアクセスに失敗しました。設定画面にて保存場所を確認してください。
ERROR_ABNORMAL_GATEWAY_INFO -8612
ERROR_PARAM_VALUE -8613 “Edgeサーバーからレスポンスされたコンテンツの長さがマイナスの場合 V3 HTML5 Playerに対応してないブラウザから再生 コンテンツ情報確認中にエラーが起きました。
ERROR_NOT_LOAD -8614 コンテンツのload関数を呼出後に使用するAPIをloadする前にリクエストした場合 コンテンツ情報確認中にエラーが起きました。
ERROR_CANCEL_DOWNLOAD -8615 ファイルダウンロード途中で取消 一時的なエラーが起きました。しばらくしてから再度お試しください。
ERROR_NETWORK -8616
ERROR_GET_CONTENTS_LENGTH -8617 Edgeサーバーからレスポンスされたコンテンツの長さがマイナスの場合 コンテンツ情報確認中にエラーが起きました。
ERROR_GET_ENCODE_LEVEL -8618 Edgeサーバーからレスポンスされたコンテンツのエンコードレベル情報が無効 コンテンツ情報確認中にエラーが起きました。
ERROR_GET_MEDIA_URL -8619 Edgeサーバーへのリクエストに対したレスポンス結果が HTTP 302コードの際にLOCATION ヘッダでMedia urlの獲得に失敗 存在しないコンテンツです。
ERROR_NOT_FOUND_DATA -8620
ERROR_NOT_FOUND_ID -8621 存在しないコンテンツIDをStorage Manager APIでリクエストした場合 コンテンツ情報確認中にエラーが起きました。
ERROR_DECODE_HEADER -8622 Edgeサーバーへのリクエストに対したレスポンス結果がXHTTP_ENC_DATA ヘッダでデータの復号化に失敗 コンテンツ情報確認中にエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_STORAGE_FULL -8623 デバイスの空き容量不足 空き容量が不足しています。容量を確保してから再度試してください。
ERROR_UPDATE_RECORD -8624 DBレコード更新に失敗 データベースのエラーが発生しました。設定画面にて保存場所を確認してください。
ERROR_REMOVE_CACHE -8625
ERROR_NOT_FOUND_SNAPSHOT_FILENAME -8626 VideogatewayからMedia infoを獲得して後スナップショットurl文字列 からファイル名の確認に失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_NOT_FOUND_THUMBNAIL_FILENAME -8627 VideogatewayからMedia info を獲得して後サムネールurl文字列 からファイル名の確認に失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_NOT_FOUND_RECORD -8628 DBレコード確認に失敗 データベースのエラーが発生しました。設定画面にて保存場所を確認してください。
ERROR_NOT_DOWNLOAD_COMPLETE_ALL -8629 ダウンロード完了されてない状態で再生 コンテンツのダウンロードが完了していません。
ERROR_NOT_DOWNLOAD_TYPE -8630 ストリーミングコンテンツIDでダウンロードStorage Manager APIを呼出した場合 ダウンロードできないコンテンツです。
ERROR_ALREADY_DOWNLOADING -8631 ダウンロード途中にダウンロードリクエストapiを呼出 既にダウンロード中です。
ERROR_DECRYPT_CONTENT_INFO_LINK -8632 VideogatewayからMedia info を獲得して後レスポンスされたデータの復号化に失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_PARSE_CONTENT_INFO_LINK -8633 VideogatewayからMedia info を獲得して後JSONパーシングに失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_DECRYPT_COMPANY_AUTH_INFO -8634 DRM Callback呼出後レスポンスされたデータの復号化に失敗 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_PARSE_COMPANY_AUTH_INFO -8635 DRM Callback呼出後レスポンスされたデータのJSONパーシングに失敗 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_NOT_VAILD_COMPANY_AUTH_INFO -8636 DRM Callback呼出後(Kind 1)レスポンスされた有効期限データが正しくない 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_NO_USE_CONTENT_URL -8637 “/i”または “/si”リンクではないurlでコンテンツを読み込む 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_NOT_EXIST_DOWNLOADED_CONTENTS -8638 ダウンロード完了前に呼出または存在しない場合 ダウンロードしたコンテンツがありません。ストリーミング再生に変更しますか?
ERROR_NOT_EXIST_DOWNLOADED_CONTENTS -8638 ダウンロード完了前に呼出または存在しない場合 コンテンツがダウンロードされていません。コンテンツをダウンロードしてから再生してください。
Unknown Error -8639 デバイスタイプの設定値が無効 原因不明のエラーが起きました。
ERROR_NOT_VAILD_DEVICE_LEVEL -8640 デバイスレベルの設定値が無効 原因不明のエラーが起きました。
ERROR_DOWNLOADED_EXTRA_BLOCK -8641 原因不明のエラーが起きました。
ERROR_INIT_NETWORK_LIBRARY -8642 ネットワークライブラリの初期化に失敗 原因不明のエラーが起きました。
ERROR_EXPIRATION_DATE -8643 有効期限切れのDRMダウンロードコンテンツを再生 再生期限(%s)が過ぎました。
ERROR_EXPIRATION_COUNT -8644 有効回数切れのDRMダウンロードコンテンツを再生 再生回数(%d回)が残っていません。コンテンツを削除して再度ダウンロードしてください。
ERROR_REQUEST_CONTENT_URL -8645 ダウンロード完了前コンテンツをindexで読み込んだ場合 ダウンロードが完了していません。コンテンツ提供ページにてレジューム ダウンロードができます。
ERROR_NOT_VAILD_CONTENTS_INFO -8646 コンテンツ情報の確認に失敗 ファイルへのアクセスに失敗しました。設定画面にて保存場所を確認してください。
ERROR_CREATE_NO_MEDIA_FILE -8647 .nomediaファイルの生成に失敗 ファイルへのアクセスに失敗しました。設定画面にて保存場所を確認してください。
ERROR_NOT_REMOVE_TYPE -8648 削除不可能なコンテンツ このコンテンツは削除できません。
ERROR_DECRYPT -8649 kollus暗号化文字列の復号化に失敗 サーバーエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_NOT_ALLOW_DOWNLOAD -8650 ダウンロードを許容しないコンテンツURL このコンテンツはダウンロードできません。
ERROR_EMPTY_COMPANY_AUTH_INFO -8651 DRM Callbackリクエスト後のレスポンスに受信したデータが存在しない 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_EMPTY_CONTEMT_INFO -8652 VideogatewayへMedia infoリクエスト後のレスポンスに受信したデータが存在しない コンテンツ情報確認中にエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_NOT_FOUND_DOMAIN -8653 Edgeサーバーにリクエストする際に使用したURLドメインがEdgeサーバーからのレスポンスの中で一致するドメインがない場合 コンテンツ情報確認中にエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_NOT_RECEIVE_DOMAIN -8654 Edgeサーバーへドメインリスト情報が転送されてない場合 コンテンツ情報確認中にエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_ABNORMAL_DRM_INFO -8655 “DRM コンテンツをダウンロードする前にDRM Callbackを呼出(Kind 1)してレスポンスされた結果値が0(エラー)の場合 (顧客側で指定したメッセージ表示可能” 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_ABNORMAL_DRM_COMPLETE -8656 “DRM コンテンツをダウンロードする前にDRM Callbackを呼出(Kind 2)してレスポンスされた結果値が0(エラー)の場合 (顧客側で指定したメッセージ表示可能” 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_ABNORMAL_DRM_PLAY -8657 “DRM コンテンツをダウンロードする前にDRM Callbackを呼出(Kind 3)してレスポンスされた結果値が0(エラー)の場合 (顧客側で指定したメッセージ表示可能” 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_FORCE_EXPIRED -8658 DRM Callbackサーバーから強制終了させたコンテンツを再生 コンテンツの使用が制限されました。
ERROR_NOT_RECEIVE_ENC_DATA -8659 EdgeサーバーにXHTTP_ENC_DATA情報が転送されていない 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_NOT_FOUND_MOBILE_LOGO_FILENAME -8660 VideogatewayからMedia info を獲得して後モバイルロゴurl文字列 からファイル名の確認に失敗 コンテンツ情報確認中にエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_CANNOT_CALL_API -8661 Storage Manager APIが呼出せない(内部オブジェクトを終了する時点) APIを呼び出すことができません。(内部オブジェクトを終了する時点)
ERROR_NOT_FOUND_THUMBNAIL_URL -8662 Videogateway獲得したMedia infoの中にサムネール urlが存在しない コンテンツ情報確認中にエラーが起きました。
ERROR_ALTER_TABLE -8663 DBテーブル変更エラー データベースのエラーが発生しました。設定画面にて保存場所を確認してください。
ERROR_DIFFERENT_TIME -8664 デバイスとサーバーとの時刻が一致しない システムの時間設定が正しくありません。時間設定を確認してください。
ERROR_EMPTY_POSTER_UPLOAD_FILE_INFO -8665 ポスター登録後、サーバーからのレスポンスに受信したデータがない場合 サーバーエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_PARSE_POSTER_UPLOAD_FILE_INFO -8666 ポスター登録後、サーバーからのレスポンスのJSONパーシングに失敗 サーバーエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_NOT_FOUND_POSTER_URL -8667 Videogateway獲得したMedia infoの中にposter urlが存在しない ポスターurlがありません。
ERROR_GET_MEDIA_ID -8668 EdgeサーバーからMedia IDの獲得に失敗 サーバーエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_NOT_FOUND_SUBTITLE_FILENAME -8669 VideogatewayからMedia info を獲得して後字幕url文字列 からファイル名の確認に失敗 サーバーエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_EMPTY_PLAY_CALLBACK_INFO -8670 Play Callback 呼出後のレスポンスにデータがない場合 サーバーエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_DECRYPT_PLAY_CALLBACK_INFO -8671 Play Callback 呼出後のレスポンスデータの復号化に失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_PARSE_PLAY_CALLBACK_INFO -8672 Play Callback 呼出後のレスポンスデータのJSONパーシングに失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_ABNORMAL_PLAY_CALLBACK_INFO -8673 “Play Callbackを呼出(Kind 1)してレスポンスされた結果値が0(エラー)の場合 (顧客側で指定したメッセージ表示可能” サーバーエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_PLAY_CALLBACK_EXPIRED -8674 Play Callbackを呼出(Kind 3)してレスポンスされた内容のexpire値が1(強制無効)の場合 コンテンツの使用が制限されました。
ERROR_ABNORMAL_PLAY_CALLBACK_INFO_PLAY -8675 “Play Callbackを呼出(Kind 3)してレスポンスされた結果値が0(エラー)の場合 (顧客側で指定したメッセージ表示可能” サーバーエラーが起きました。しばらくしてから再度アクセスしてください。
ERROR_ABNORMAL_UPLOAD_POSTER_INFO -8676 ポスター登録後、サーバーからのレスポンス内容のerror値がtrueの場合 コンテンツ情報確認中にエラーが起きました。
ERROR_GET_CONTENT_TYPE -8677 EdgeサーバーからコンテンツのCONTENT-TYPE 情報の獲得に失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_GET_CONTENT_LAST_MODIFIED -8678 EdgeサーバーからコンテンツのLAST-MODIFIED情報の獲得に失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_ENCRYPT_KEY -8679 DBに保存されるデータを暗号化するオブジェクトの生成に失敗 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_FORCE_DELETE -8680 DRM Callback呼出後のレスポンスがコンテンツ削除の場合 ご利用できないコンテンツのためダウンロードされたファイルを削除します。
ERROR_DIFFERENT_EXPIRE_RESET -8681 DRM Callback呼出後のレスポンスが強制リセットになっているけど呼出の際に転送したsession_keyとレスポンスのsession_keyが一致しない 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_NOT_FOUND_DRM_KIND -8682 DRM Callback呼出の際にサーバーに転送した項目に対してレスポンスがなかった場合 認証情報確認中にエラーが起きました。コンテンツ提供会社へお問い合わせください。
ERROR_EXPIRATION_PLAY_TIME -8683 DRM ダウンロードコンテンツの有効再生時間を全て消耗した場合 ご利用できる再生時間(%s)が残っていません。コンテンツを削除して再度ダウンロードしてください。
ERROR_PLAY_CALLBACK_RESPONSE -8684 Play Callbackからネットワークエラーが発生(HTTP 200 以外のエラー) ネットワーク環境の不安定のためサーバーとの通信が正常に行われていません。しばらくしてから再度アクセスしてください。
ERROR_DRM_CALLBACK_RESPONSE -8685 DRM Callbackからネットワークエラーが発生(HTTP 200 以外のエラー) ネットワーク環境の不安定のためサーバーとの通信が正常に行われていません。しばらくしてから再度アクセスしてください。
ERROR_PLAY_CALLBACK_EXPIRATION_PLAY_TIME -8686 Play Callbackからレスポンスされた再生有効期限が切れた場合(再生終了処理) 許容された再生時間が切れており、再生を終了します。
ERROR_CHECK_EXPIRATION_DATE -8687 DRM ダウンロードコンテンツの再生有効時間を消耗する前にネットワークに接続して有効時間を再度確認 再生有効時間チェックが必要です。ネットワーク接続して再生してください。
ERROR_NOT_FOUND_COMMON_INFO -8800 コンテンツリストから共通情報の確認に失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_NOT_FOUND_ITEM_IN_PLAYLIST -8801 コンテンツリストから該当項目の確認に失敗 コンテンツ情報確認中にエラーが起きました。
ERROR_EMPTY_PLAYLIST_INFO -8802 Playリストのリクエスト後のレスポンスにデータがない場合 コンテンツ情報確認中にエラーが起きました。
ERROR_INTRO_CANNOT_DOWNLOAD -8803 Introコンテンツはダウンロード不可 イントロファイルはダウンロードできません。
ERROR_DUPLICATION_NETWORK_ERR -8804 ネットワークが不安定のため重複遮断の確認に失敗 ネットワーク環境の不安定のためサーバーとの通信が正常に行われていません。しばらくしてから再度アクセスしてください。
INFO_NETWORK_TIMEOUT -8899
ERROR_VIDEO_GATEWAY_ABNORMAL_RESPONSE -8900 VideogatewayにMedia infoをリクエストした際のerror値がtrueの場合(正常に再生できない状況) コンテンツ情報確認中にエラーが起きました。しばらくしてから再度アクセスしてください。

 

DRM Callback エラー (-9001 ~ )

Type Code Case Descript Message_JP
ERROR_CURLE_COULDNT_RESOLVE_HOST -9006 Server HOST Resolvingに失敗 サーバーに接続できません。インターネット接続状況を確認してください。
ERROR_CURLE_COULDNT_CONNECT -9007 サーバー接続に失敗 サーバーに接続できません。インターネット接続状況を確認してください。
ERROR_CURLE_PARTIAL_FILE -9018 サーバーにリクエストしたサイズとレスポンスされたデータのサイズが一致しない ネットワーク環境の不安定のためデータ受信に失敗しました。
ERROR_CURLE_OPERATION_TIMEDOUT -9028 サーバー接続中に一定時間以上レスポンスがない場合 ネットワーク環境の不安定のためサーバーとの通信が正常に行われていません。しばらくしてから再度アクセスしてください。
ERROR_CURLE_RECV_ERROR -9056 サーバー接続後レスポンスの受信が途中で失敗 インターネット接続状況を確認してください。
HTTP SEVER ERROR “-94XX , -95XX” エラーコードの最後の3桁はDRM Callback サーバーからレスポンスコードとしてリターンしたコードとなります。

 

  • その他curlエラー
    • -90XX エラーコードの最後の2桁はCurl Errorとなります。
    • Curl Errorは以下のURLから確認することができます。
https://curl.haxx.se/libcurl/c/libcurl-errors.html

 

Play Callback エラー (-10001 ~ )

Type Code Case Descript Message_JP
ERROR_CURLE_COULDNT_RESOLVE_HOST -10006 Server HOST Resolvingに失敗 サーバーに接続できません。インターネット接続状況を確認してください。
ERROR_CURLE_COULDNT_CONNECT -10007 サーバー接続に失敗 サーバーに接続できません。インターネット接続状況を確認してください。
ERROR_CURLE_PARTIAL_FILE -10018 サーバーにリクエストしたサイズとレスポンスされたデータのサイズが一致しない ネットワーク環境の不安定のためデータ受信に失敗しました。
ERROR_CURLE_OPERATION_TIMEDOUT -10028 サーバー接続中に一定時間以上レスポンスがない場合 ネットワーク環境の不安定のためサーバーとの通信が正常に行われていません。しばらくしてから再度アクセスしてください。
ERROR_CURLE_RECV_ERROR -10056 サーバー接続後レスポンスの受信が途中で失敗 インターネット接続状況を確認してください。
HTTP SERVER ERROR “-104XX , -105XX” エラーコードの最後の3桁はDRM Callback サーバーからレスポンスコードとしてリターンしたコードとなります。
  • その他curlエラー
    • -100XX エラーコードの最後の2桁はCurl Errorとなります。
    • Curl Errorは以下のURLから確認することができます。
https://curl.haxx.se/libcurl/c/libcurl-errors.html

 

Suggest Edit