# JWT

### 概要 <a href="#jwt-gai-yao" id="jwt-gai-yao"></a>

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

### 注意事項 <a href="#jwt-zhu-yi-shi-xiang" id="jwt-zhu-yi-shi-xiang"></a>

1. JSON Webtoken(以下JWT)につきましては<http://jwt.io> ページを参考
2. JWTのPayload部分に以下の内容に記述されている、先に登録されたClaimを使用しては行けません。 (<https://tools.ietf.org/html/rfc7519#section-4>) 意図通り動作しない可能性があります。
3. 暗号化アルゴリズムは **HMAC SHA256 (HS256)** のみに対応しています。
4. 非セキュアコンテンツをKollusプレイヤーで再生する際の制約事項

   iOSの場合、全画面に切り替えるとKollusプレイヤーではなく、ネイティブプレイヤーで再生されます。
5. iOSで全画面に切り替えた際、シークの制限、再生速度の制限、再生区間の設定、ビデオウォーターマークなど、Kollusプレイヤーの機能をご利用いただくことができません。
6. MultiDRMのサービス制限事項\
   \- PlayReady DRMは、Edgeブラウザのグラフィックス アクセラレータが使用可能な場合にのみ再生されます。\
   &#x20;  \- グラフィックス アクセラレータが無効になっている場合、57208 エラーが発生します。\
   &#x20;  \- 設定→システムとパフォーマンス→使用可能な場合はグラフィックス アクセラレータを使用する→トグルボタンを有効化\
   \- Widevine DRMはハードウェア加速が使用可能な場合のみキャプチャ防止が動作します。

### JWT Request <a href="#jwt-jwtrequest" id="jwt-jwtrequest"></a>

#### **用語**

* セキュリティキー (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.jp.kollus.com/s?jwt=生成したJWT&custom_key=ユーザーキー
```

### JWT Payload Spec <a href="#jwt-jwtpayloadspec" id="jwt-jwtpayloadspec"></a>

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

```
{
	"cuid": "CLIENT_USER_ID",
    "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.jp.dev.kollus.com/public/custom/skin2.zip",
		"skin_sha1sum": "B2B688123F68BFA7DB4B1F89EC292C0835086D9B"
	},
    "playback_rates": [0.5, 0.7, 1, 1.3, 1.5, 1.7, 2],
    // "playback_rates": [[0.5, 0.7, 1, 1.3, 1.5, 1.7, 2], 2],
    "playcallback_ignore": true,
	"mc": [{
		"mckey": “MEDIA_CONTENT_KEY”,
		"mcpf": “MEDIA_CONTENT_PROFILE_KEY”,
		"title": “TITLE”,
		"intr": IS_INTRO,
        "scroll_event": SCROLL_EVENT,
		"seek": IS_SEEKABLE,
		"seekable_end": SEEKABLE_END,
		"disable_playrate": DISABLE_PLAYRATE,
        "disable_nscreen": DISABLE_NSCREEN,
        "play_section": {
                    "start_time": PLAY_SECTION_START_TIME,
                    "end_time": PLAY_SECTION_END_TIME
             }
        "thumbnail": {
                    "enable": IS_ENABLE,
                    "thread": IS_THREAD,
                    "type": TYPE
             },
        "subtitle_policy" : {
                    "filter": {
                         "name": SUBTITLE_NAME,
                         "language_code": SUBTITLE_LANGUAGE_CODE,
                      },
                    "show_by_filter" : false,
                    "is_showable": true,
              },
        "drm_policy" : {
                    "kind" : DRM_KIND,
                    "streaming_type": hls,
                    "data" : ...
          }
	}]
}
```

### Payload 項目 <a href="#jwtpayload-xiang-mu" id="jwtpayload-xiang-mu"></a>

<table data-header-hidden><thead><tr><th></th><th></th><th></th><th></th><th></th></tr></thead><tbody><tr><td>名称</td><td><p>Data</p><p>type</p></td><td><p>必須</p><p>有無</p></td><td>内容</td><td><p>Media</p><p>type</p></td></tr><tr><td><strong>cuid</strong> (CLIENT_USER_ID)</td><td>String</td><td>必須</td><td><p>コンテンツにアクセスする顧客のユーザーID: ブックマーク及びNScreenデータのKeyとして使用されます。(入力値は英語のみ対応)</p><p><strong>※英語以外の値を入力する場合、キャプチャ遮断及び重複再生ブロックなど、一部の機能で検索が制限される可能性があります。 ※Monthly Active User, Daily Active Userなどのデータ分析を希望される場合は、cuidをユーザーごとに入力してください。希望されない場合は空欄(blank)のままでも構いません</strong>。</p></td><td>VOD/LIVE</td></tr><tr><td><strong>awtc</strong> (AUDIO_WATERMARKING_CODE)</td><td>String</td><td>選択 (基本値: null)</td><td>Kollus オーディオウォーターマーキング機能を実装するとき使用すウォーターマーキングコードで、APIを呼び出して獲得します。 詳しい内容は技術担当者にお問い合わせください。 使用しない場合にはEntryを削除するか、nullを入力します。</td><td>VOD</td></tr><tr><td><strong>expt</strong> (EXPIRE_TIME)</td><td>Integer</td><td>必須</td><td>JWTの有効時間となり、Unix timestamp 形式で入力します。顧客側のサーバーとの時刻が一致しない場合があるため、有効時間が過ぎても最長1分以内まではアクセスができます。</td><td>VOD/LIVE</td></tr><tr><td><p><strong>next_episode</strong></p><p>(NEXT_EPISODE)</p></td><td>String</td><td>選択</td><td>次の動画があるコンテンツの場合、TRUEを返します。値がTUREの場合、チャンネルに設定された次の動画コールバックを呼び出します。</td><td></td></tr><tr><td><strong>pc_skin</strong> (PC_EX_PLAYER_SKIN)</td><td>Array</td><td>選択</td><td>V2 PC PlayerのSkin(デザイン)を顧客が指定することができます。設定しない場合には省略できますが、このフィールドを追加した場合には必ず下位フィールドのskin_path, skin_sha1sumの正確な値を入力してください。</td><td>V2 Player</td></tr><tr><td><strong>skin_path</strong></td><td>String</td><td>選択</td><td>V2 PC PlayerのSkin情報が入っている圧縮ファイルのURL</td><td>V2 Player</td></tr><tr><td><strong>skin_sha1sum</strong></td><td>String</td><td>選択</td><td>V2 PC PlayerのSkin情報が入っている圧縮ファイルのsha1 checksum 値</td><td>V2 Player</td></tr><tr><td><code>playback_rates</code></td><td>Array</td><td>選択</td><td>倍速リストを入力します。入力時配列は2次元配列で入力(倍速リスト、行数)します。 ex) [[0.5, 0.7, 1, 1.3, 1.5, 1.7, 2], 2]</td><td></td></tr><tr><td><strong>mc</strong></td><td>Array</td><td>必須</td><td>再生するコンテンツの再生情報が含まれたObjectタイプのEntryを配列として含まれている項目</td><td>VOD/LIVE</td></tr><tr><td><strong>mckey</strong> (MEDIA_CONTENT_KEY)</td><td>String</td><td>必須</td><td>再生するコンテンツの識別キー。拡張Media content key形式も同一に使用可能</td><td>VOD/LIVE</td></tr><tr><td><strong>mcpf</strong> (MEDIA_CONTENT_PROFILE_KEY)</td><td>String</td><td>選択 (基本値: null)</td><td>コンテンツの複数のプロファイルの中で一つのプロファイルを強制に指定して再生する場合に使用します。強制に指定するプロファイルキーを入力します。 自動検出にするにはEntryを削除するか、 nullを入力</td><td>VOD</td></tr><tr><td><strong>title</strong> (TITLE)</td><td>String</td><td>選択 (基本値: null)</td><td>コンテンツのタイトルを代替する文字列</td><td>VOD/LIVE</td></tr><tr><td><strong>intr</strong> (IS_INTRO)</td><td>Boolean</td><td>選択 (基本値: false)</td><td>Introの有無を入力します。詳しくは下段の例示を参照してください。 Introがないコンテンツの場合にはEntryを削除するかまたはfalseを入力してください。</td><td>VOD</td></tr><tr><td><strong>scroll_event</strong></td><td>Boolean</td><td>(基本値: false)</td><td><p>画面の scroll event 適用有無</p><p>true: 画面の縦を基準でvideo領域を合わせて、見えない領域はscroll可能とする</p><p>false: 既存の通りに横を基準で画面を合わせる</p></td><td>VOD</td></tr><tr><td><strong>seek</strong> (IS_SEEKABLE)</td><td>Boolean</td><td>選択 (基本値: true)</td><td>コンテンツのseek可能の有無を入力します。introコンテンツの場合にはseek不可とします。 Seek可能とする場合にはEntryを削除するかまたはtrueを入力してください。</td><td>VOD</td></tr><tr><td><strong>seekable_end</strong> (SEEKABLE_END)</td><td>Integer</td><td>選択 (基本値: -1)</td><td>Seek不可にした場合でも再生開始時点から入力した値の時点の間ではSeek可能になります。</td><td>VOD</td></tr><tr><td><strong>disable_playrate</strong> (DISABLE_PLAYRATE)</td><td>Boolean</td><td>選択 (基本値: false)</td><td>倍速調整機能のOn/Offを設定</td><td>VOD</td></tr><tr><td><p><strong>disable_nscreen</strong></p><p>(DISABLE_NSCREEN)</p></td><td>Boolean</td><td>選択 (基本値: false)</td><td>nscreen使用有無を設定</td><td>VOD</td></tr><tr><td><strong>play_section.start_time</strong></td><td>Integer</td><td>選択 (基本値: null)</td><td>リピート開始時点を設定 (単位: 秒)</td><td>VOD</td></tr><tr><td><strong>play_section.end_time</strong></td><td>integer</td><td>選択 (基本値: null)</td><td>リピート終了時点を設定 (単位: 秒)</td><td>VOD</td></tr><tr><td><strong>thumbnail.enable</strong></td><td>Boolean</td><td>選択 (基本値: true)</td><td>サムネール有効化有無を設定: Androidのみ対応</td><td>Android Player App/SDK</td></tr><tr><td><strong>thumbnail.thread</strong></td><td>Boolean</td><td>選択 (基本値: false)</td><td>スレッド方式の有無を設定: Androidのみ対応</td><td>Android Player App/SDK</td></tr><tr><td><strong>thumbnail.type</strong></td><td>String</td><td>選択 (基本値: null)</td><td>サムネールサイズを設定 (big / small): Androidのみ対応</td><td>Android Player App/SDK</td></tr><tr><td><strong>subtitle_policy.filter.name</strong></td><td>String</td><td>選択 (基本値: null)</td><td>字幕フィルターに字幕名を使用show_by_filter: trueに設定することが前提</td><td>VOD</td></tr><tr><td><strong>subtitle_policy.filter.language_code</strong></td><td>String</td><td>選択 (基本値: null)</td><td>字幕フィルターに言語コードを使用show_by_filter: trueに設定することが前提</td><td>VOD</td></tr><tr><td><strong>subtitle_policy.show_by_filter</strong></td><td>Boolean</td><td>選択 (基本値: false)</td><td>字幕ポリシーフィルターとの合致有無を識別</td><td>VOD</td></tr><tr><td><strong>subtitle_policy.is_showable</strong></td><td>Boolean</td><td>選択 (基本値: true)</td><td>字幕表示有無を識別</td><td>VOD</td></tr><tr><td><strong>drm_policy.kind</strong></td><td>String</td><td>選択 (基本値: null)</td><td>drm タイプを指定: 現状指定可能なDRMは"inka" ("inka"を使用する場合 third_party_infoの"cid"を "skb_kollus"に設定)</td><td>VOD</td></tr><tr><td><strong>drm_policy.streaming_type</strong></td><td>String</td><td>選択 (基本値: null)</td><td>ストリーミング方式をhls, dashに制限: "inka"にした場合ストリーミング方式を指定</td><td>VOD</td></tr><tr><td><strong>drm_policy.data</strong></td><td>Object</td><td>選択 (基本値: null)</td><td><p>DRM 認証データをオブジェクト(json) 方式で挿入 ex)</p><p>Copy</p><pre><code>{
  "license_url": "https://license.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"
```

}

} </code></pre></td><td>VOD</td></tr><tr><td><strong>live.url</strong> (LIVE\_URL)</td><td>String</td><td>選択 (基本値: null)</td><td>ライブストリーミングを再生するアドレスを入力</td><td>LIVE</td></tr><tr><td><strong>live.poster\_url</strong> (LIVE\_POSTER)</td><td>String</td><td>選択 (基本値: null)</td><td>ライブストリーミングのポスターイメージのアドレスを入力</td><td>LIVE</td></tr><tr><td><strong>live.cdn</strong></td><td>Object</td><td>選択</td><td>CDNを使用しない場合、JSONブロックを省略します。</td><td>LIVE</td></tr><tr><td><strong>live.cdn.type</strong></td><td>String</td><td>必須</td><td>Kollusに定義されているCDN Type (使用可能タイプ: akamai)</td><td>LIVE</td></tr><tr><td><strong>live.cdn.password</strong></td><td>Object</td><td>選択 (基本値: 空白の文字列)</td><td>CDN アクセスのパスワード　※short, long 両方とも必要</td><td>LIVE</td></tr><tr><td><strong>live.auth\_type</strong></td><td>String</td><td>選択 (基本値: user)</td><td>Edge 認証タイプ</td><td>LIVE</td></tr><tr><td><strong>live.use\_ip\_validation</strong></td><td>Boolean</td><td>選択 (基本値: false)</td><td>EdgeのMedia URLを生成する際にIP認証の使用有無</td><td>LIVE</td></tr><tr><td><strong>live.use\_kollus\_token</strong></td><td>Boolean</td><td>選択 (基本値: false)</td><td>EdgeのMedia URLを生成する際にKollus Token (ktn パラメータ)の使用有無</td><td>LIVE</td></tr><tr><td><strong>video\_watermarking\_code\_policy.code\_kind</strong></td><td>String</td><td>選択</td><td>"client\_user\_id"以外のStringの場合、そのまま表示</td><td></td></tr><tr><td><strong>video\_watermarking\_code\_policy.alpha</strong></td><td>Integer</td><td>選択 (基本値: 200)</td><td>ビデオウォーターマーキングコードのalpha値を定義 (16進数 0\~255)</td><td></td></tr><tr><td><strong>video\_watermarking\_code\_policy.font\_size</strong></td><td>Integer</td><td>選択 (基本値: 7)</td><td>ビデオウォーターマーキングコードのfont-size値を定義 (単位: px)</td><td></td></tr><tr><td><strong>video\_watermarking\_code\_policy.font\_color</strong></td><td>String</td><td>選択 (基本値; 'FFFFFF')</td><td>ビデオウォーターマーキングコードのfont-color値を定義</td><td></td></tr><tr><td><strong>video\_watermarking\_code\_policy.show\_time</strong></td><td>Integer</td><td>選択 (基本値;1)</td><td>ビデオウォーターマーキングコードの表示時間 (単位: 秒)</td><td></td></tr><tr><td><strong>video\_watermarking\_code\_policy.hide\_time</strong></td><td>Integer</td><td>選択 (基本値;60)</td><td>ビデオウォーターマーキングコードが表示されてから非表示になるまでの時間 (単位: 秒)</td><td></td></tr><tr><td><strong>video\_watermarking\_code\_policy.enable\_html5\_player</strong></td><td>Boolean</td><td>選択 (基本値: false)</td><td>ビデオウォーターマーキングコードのHTML5 Player使用有無</td><td></td></tr><tr><td><strong>playcallback\_ignore</strong></td><td>Boolean</td><td>選択 (基本値: false)</td><td>Play Callback urlが設定されている場合でもtrueで設定する時paly callbackが転送されません。</td><td>VOD</td></tr></tbody></table>

### **例示** <a href="#jwt-li-shi" id="jwt-li-shi"></a>

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

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

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

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

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

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

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

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

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

```
```

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

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

```
{
	"cuid": "catenoid",
	"expt": 1462931880,
	"mc": [{
		"mckey": "vnCVPVy",
		"play_section": {
			"start_time": 0,
			"end_time": 60,
	}]
}
```

#### 視聴した部分のみSeekが可能なJWT Payload(Seek 制限） <a href="#jwt-live-invod-jwtpayloadspec" id="jwt-live-invod-jwtpayloadspec"></a>

```
{
  "mc": [
    {
      "mckey": "vnCVPVyV",
      "seek": false,
      "seekable_end": 1
    }
  ],
  "cuid": "catenoid",
  "expt": 1462931880
}
```

### **Live(in VOD) JWT Payload Spec** <a href="#jwt-live-invod-jwtpayloadspec" id="jwt-live-invod-jwtpayloadspec"></a>

#### **Payload 項目** <a href="#jwtpayload-xiang-mu-.1" id="jwtpayload-xiang-mu-.1"></a>

| 名称                               | Datatype | 必須有無             | 内容                                                                                           | cdn type                   |
| -------------------------------- | -------- | ---------------- | -------------------------------------------------------------------------------------------- | -------------------------- |
| **cuid** (CLIENT\_USER\_ID)      | String   | 必須               | コンテンツにアクセスする顧客のユーザーID: ブックマーク及びNScreenデータのKeyとして使用されます。                                      | <p>akamai</p><p>kollus</p> |
| **expt** (EXPIRE\_TIME)          | Integer  | 必須               | JWTの有効時間となり、Unix timestamp 形式で入力します。顧客側のサーバーとの時刻が一致しない場合があるため、有効時間が過ぎても最長1分以内まではアクセスができます。   | <p>akamai</p><p>kollus</p> |
| **mckey** (MEDIA\_CONTENT\_KEY)  | String   | 必須               | 再生するコンテンツの識別キー。ライブコンテンツの場合、VGマッピングに使用されます。アップロードされたコンテンツではなく、JWTのlive.urlでリターンされたコンテンツを再生する。 | <p>akamai</p><p>kollus</p> |
| **title** (TITLE)                | String   | 選択 (基本値: null)   | コンテンツのタイトルを代替する文字列                                                                           | <p>akamai</p><p>kollus</p> |
| **live.url** (LIVE\_URL)         | String   | 選択 (基本値: null)   | ライブストリーミングを再生するアドレスを入力                                                                       | <p>akamai</p><p>kollus</p> |
| **live.cdn**                     | Object   | 選択               | CDNを使用しない場合、JSONブロックを省略します。                                                                  | <p>akamai</p><p>kollus</p> |
| **live.cdn.type**                | String   | 必須               | Kollusに定義されているCDN Type (使用可能タイプ: akamai, kollus)                                             | <p>akamai</p><p>kollus</p> |
| **live.cdn.password**            | Object   | 選択 (基本値: 空白の文字列) | CDN アクセスのパスワード　※short, long 両方とも必要                                                           | akamai                     |
| **live.auth\_type**              | String   | 選択 (基本値: user)   | Edge 認証タイプ                                                                                   | akamai                     |
| **live.use\_ip\_validation**     | Boolean  | 選択 (基本値: false)  | EdgeのMedia URLを生成する際にIP認証の使用有無                                                               | <p>akamai</p><p>kollus</p> |
| **live.use\_kollus\_token**      | Boolean  | 選択 (基本値: false)  | EdgeのMedia URLを生成する際にKollus Token (ktn パラメータ)の使用有無                                           | akamai                     |
| **live.use\_duplication\_block** | Boolean  | 選択 (基本値: true)   | 重複再生遮断有無                                                                                     | kollus                     |

### **例示** <a href="#jwt-li-shi-.1" id="jwt-li-shi-.1"></a>

#### **Live Streaming JWT Payload**

ライブストリーミングの場合、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 認証**

ライブストリーミングの場合、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 認証**

ライブストリーミングの場合、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 Streaming JWT Payload + Kollus 認証**

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,
    "play_expt": PLAY_EXPT_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 項目** <a href="#jwtpayload-xiang-mu-.2" id="jwtpayload-xiang-mu-.2"></a>

| 名称                                                         | Datatype | 必須有無                          | 内容                                                                                                                         | 備考   |           |   |
| ---------------------------------------------------------- | -------- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ---- | --------- | - |
| **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分以内まではアクセスができます。                                 |      |           |   |
| **play\_expt**                                             | Integer  | 選択 (基本値: 原罪時刻 + 48時間)         | edgeにリクエストしたときにリターンされるexpire time                                                                                          |      |           |   |
| **live\_media\_channel\_key (or lmckey)**                  | String   | 必須                            | 再生するコンテンツの識別キー、拡張ライブメディアチャンネルキー形式も同様に使用可能                                                                                  |      |           |   |
| **live\_media\_profile\_key(or lmpf)**                     | String   | 選択 (基本値: null)                | <p>ライブチャンネルのプロファイルの中で一つを指定して再生する場合に使用します。指定するプロファイルキーを入力します。</p><p>自動選択するには該当Entryを削除するか、nullを入力します。指定がない場合、ABRで動作します。</p> |      |           |   |
| <p><strong>title</strong></p><p>(TITLE)</p>                | String   | <p>選択</p><p>(基本値: null)</p>   | コンテンツのタイトルを代替する文字列                                                                                                         |      |           |   |
| **chatting\_policy.is\_visible**                           | boolean  | <p>選択</p><p>(基本値: true)</p>   | チャットウィンドウの表示有無を指定                                                                                                          |      |           |   |
| **chatting\_policy.is\_admin**                             | boolean  | <p>選択</p><p>(基本値: false)</p>  | チャットウィンドウの管理者かどうかを指定                                                                                                       |      |           |   |
| **chatting\_policy.position**                              | string   | <p>選択</p><p>(基本値: bottom)</p> | <p>チャットウィンドウの位置を指定</p><p>bottom                                                                                            | left | right</p> |   |
| **video\_watermaking\_code\_policy.code\_kind**            | String   | 選択                            | 現在の仕様では使用する場合必須入力 "client\_user\_id"                                                                                       |      |           |   |
| **video\_watermaking\_code\_policy.alpha**                 | Integer  | 選択(基本値: 200)                  | ビデオウォーターマーキングコードのalpha値を定義します。 (16陣数 0\~255)                                                                               |      |           |   |
| **video\_watermaking\_code\_policy.font\_size**            | Integer  | 選択(基本値: 7)                    | ビデオウォーターマーキングコードのfont-size値を定義 (単位: px)                                                                                    |      |           |   |
| **video\_watermaking\_code\_policy.font\_color**           | String   | 選択(基本値; 'FFFFFF')             | ビデオウォーターマーキングコードのfont-color値を定義                                                                                            |      |           |   |
| **video\_watermaking\_code\_policy.show\_time**            | Integer  | 選択(基本値;1)                     | ビデオウォーターマーキングコードの表示時間 (単位: 秒)                                                                                              |      |           |   |
| **video\_watermaking\_code\_policy.hide\_time**            | Integer  | 選択(基本値;60)                    | ビデオウォーターマーキングコードが表示されてから非表示になるまでの時間 (単位: 秒)                                                                                |      |           |   |
| **video\_watermaking\_code\_policy.enable\_html5\_player** | Boolean  | 選択(基本値:false)                 | ビデオウォーターマーキングコードのHTML5 Player使用有無                                                                                          |      |           |   |

### **サービスサポート**

> サンプルコードについてのお問い合わせは担当までご連絡ください。
>
> E-mail お問い合わせ > <jp_team@catenoid.net>
>
> 電話番号 > 03-4405-8462
