メインコンテンツまでスキップ

DRM Download Callback

お知らせ

このドキュメントは機械翻訳で作成された下書きであり、現在レビュー中です。機械翻訳の特性上、一部の内容が不正確であったり、韓国語の原文と異なる場合があります。より正確な情報については、韓国語のドキュメントをご参照ください。

Kollus VOD は、ユーザーがコンテンツをデバイスにダウンロードしたり、保存されたファイルをオフライン状態で再生する際にセキュリティ権限を検証する DRM Download Callback 機能をサポートしています。 これにより、ダウンロードの許可可否、再生可能回数、有効期限などの精緻な DRM ポリシーをリアルタイムで制御できます。


注意事項

  • データ整合性: レスポンスデータのタイプが一致しない場合や範囲外の場合、ダウンロードおよび再生が即座にブロックされます。
  • 設定の取り消し不可: 誤って送信された有効期限日時(expiration_date)などの設定値は Kollus システム内で任意に修正またはキャンセルできないため、正確な値を送信する必要があります。
  • サーバーの可用性: Callback サーバーのレスポンス遅延や障害発生時にサービス利用が制限されるため、安定したサーバー環境の構成を推奨します。

Callback の設定方法

Callback URL は Kollus VOD コンソールで設定できます。


Callback フロー

注意
  • レスポンス仕様: Callback サーバーのレスポンスデータは必ず**JWT(JSON Web Token)**形式で返却される必要があります。
  • ヘッダー認証: HTTP レスポンスヘッダーにX-KOLLUS-USERKEY: {CUSTOM_KEY}を必ず含める必要があります。
  • データタイプ: JSON 内のすべての整数型フィールド(expiration_dateresultcontent_expiredなど)はinteger型で渡す必要があります。("1"のように string 型で送信すると処理に失敗します)

Callback の種類

DRM Download Callback は処理目的に応じて 3 種類に分類されます。

  • kind1(ダウンロード承認): ユーザーがダウンロードボタンをクリックした際にサーバーで権限および DRM ポリシーを割り当てます。
  • kind2(ダウンロード完了通知): デバイスへのファイル保存が 100%完了した時点で結果データを送信します。
  • kind3(オフライン再生権限確認): 保存されたコンテンツを再生するたびに再生権限および有効期限の確認を行います。

リクエスト仕様

送信方式

  • Method: POST
  • Content-Type: application/x-www-form-urlencoded
  • Data Format: itemsパラメーターにJSONArray形式の JSON 文字列を含めて送信

kind1、kind2 リクエストパラメーター

items

パラメータータイプ必須説明
kindintegerDRM Download Callback の種類
  • 1: ダウンロード承認
  • 2: ダウンロード完了通知
client_user_idstringユーザー ID(JWT 生成時に入力したclient_user_id
player_idstringKollus Player 固有 ID
hardware_idstring-ハードウェア ID(Windows 環境など識別可能な値が存在する場合に提供)
device_namestring-デバイスのモデル名
media_content_keystringメディアコンテンツキー
localtimeinteger-リクエスト時点のデバイス時刻(Unix timestamp)
uservaluesJSON string-カスタム変数(uservalue0uservalue99

kind1、kind2 items の例

[
{
"kind": 1,
"media_content_key" : "{MEDIA_CONTENT_KEY}",
"client_user_id": "{END_USER_ID}",
"player_id": "{PLAYER_ID}",
"device_name": "{DEVICE_NAME}",
"uservalues": {
"uservalue0": "value0"
}
}
]

kind3 リクエストパラメーター

items

パラメータータイプ必須説明
kindintegerDRM Download Callback の種類
  • 3: オフライン再生権限確認
session_keystring有効期限更新(Renewal)のためのセッションキー(content_expire_resetリクエスト時の整合性検証に使用)
client_user_idstringユーザー ID(JWT 生成時に入力したclient_user_id
player_idstringKollus Player 固有 ID
hardware_idstring-ハードウェア ID(Windows 環境など識別可能な値が存在する場合に提供)
device_namestring-デバイスのモデル名
media_content_keystringメディアコンテンツキー
start_atinteger送信リクエスト時点のローカル時刻
uservaluesJSON string-カスタム変数(uservalue0uservalue99
content_expiredinteger-再生有効期限状態
  • 0: 再生可能
  • 1: 再生ブロック(有効期限切れ)
check_expiredinteger-検証有効期間の期限切れ状態
  • 0: 正常
  • 1: 期限切れ
reset_reqinteger-一括更新リクエスト状態
  • 0(デフォルト値): 通常更新
  • 1: 一括更新
expiration_dateinteger-再生有効期限日時(Unix timestamp)
localtimeinteger-リクエスト時点のデバイス時刻(Unix timestamp)

kind3 items の例

[
{
"kind": 3,
"session_key" : "{SESSION_KEY}",
"media_content_key" : "{MEDIA_CONTENT_KEY}",
"client_user_id": "{END_USER_ID}",
"player_id": "{PLAYER_ID}",
"device_name": "{DEVICE_NAME}",
"uservalues": {
"uservalue1": "value1"
}
}
]

uservalues の例

{
"uservalue0": "class_code_01",
"uservalue1": "product_code_02",
"uservalue99": "custom_code_03"
}

レスポンス仕様

送信方式

DRM Download Callback のレスポンスは、データのセキュリティと整合性のために必ず JWT(JSON Web Token)形式にエンコードして返却する必要があります。

  • Header: X-KOLLUS-USERKEY: {CUSTOM_KEY}
  • Content-Type: text/plain
  • Payload 構造: dataフィールド内に個別コンテンツのレスポンスオブジェクトを含む配列構造
    {
    "data": [
    { "kind": 1, "media_content_key": "...", "result": 1, ... },
    { "kind": 1, "media_content_key": "...", "result": 1, ... }
    ]
    }

DRM 有効期限オプション仕様

注意

有効期限オプションは Kollus システムに記録された後、修正または取り消しができません。必ず正確な Unix timestamp 値を設定してください。

オプションタイプ許容範囲説明
expiration_countinteger0(制限なし)〜 1000再生許可回数
expiration_dateinteger0(制限なし)〜 2145916799(2037-12-31 23:59:59)再生有効期限日時(Unix timestamp)
expiration_playtimeinteger0(制限なし)、60(60 秒)〜 604800(7 日)再生制限時間(sec)

kind1 レスポンスフィールド

ユーザーのダウンロードリクエストに対してサーバーが承認可否を決定し、該当デバイスに保存されるコンテンツの DRM ポリシーを割り当てます。

data の項目

フィールドタイプ必須デフォルト値説明
kindinteger-DRM Download Callback の種類
  • 1: ダウンロード承認
media_content_keystring-メディアコンテンツキー
expiration_dateinteger--再生有効期限日時(Unix timestamp)
expiration_countinteger--再生許可回数(例: 10 → 10 回再生可能)
expiration_playtimeinteger--再生制限時間(例: 60 → 60 秒、3600 → 1 時間再生可能)
expiration_playtime_typeinteger--再生時間の差し引き方式
  • 1: 実際の再生時間基準で差し引き
resultinteger-承認結果
  • 0: 失敗/ブロック
  • 1: 成功/許可
messagestring--再生ブロック(result: 0)時にプレイヤー画面に表示する案内メッセージ(未入力時は Kollus デフォルトエラーメッセージを表示)
expiration_refresh_popupinteger-0有効期限切れ時の更新(Renewal)通知の表示可否
  • 0: 非表示
  • 1: 表示
vmcheckinteger-1(HTML5 Player for PC 専用) 仮想マシン(VM)環境での再生許可可否
  • 0: 許可
  • 1(デフォルト値): 仮想マシン環境の検知およびブロック
check_abuseinteger-0オフライン再生時のkind3呼び出し可否
  • 0: 呼び出さない
  • 1: 常に呼び出す
offline_bookmark.downloadinteger-0ブックマークデータの同時ダウンロード可否
  • 0: ダウンロードしない
  • 1: ダウンロードする
offline_bookmark.readonlyinteger-0オフライン状態でのブックマーク編集権限
  • 0: 編集可能
  • 1: 読み取り専用

kind1 レスポンス例

{
"data" : [
{
"kind": 1,
"media_content_key": "{MEDIA_CONTENT_KEY}",
"expiration_date": 1402444800,
"expiration_playtime": 1800,
"result": 1
}
]
}

kind2 レスポンスフィールド

コンテンツのダウンロードプロセスが正常に完了したことをサーバーに通知し、サーバーはレスポンスを通じて該当コンテンツの有効性を最終確定します。

data の項目

フィールドタイプ必須デフォルト値説明
kindinteger-DRM Download Callback の種類
  • 2: ダウンロード完了通知
media_content_keystring-メディアコンテンツキー
content_deleteinteger-0ダウンロード完了直後のファイル削除可否
  • 0: 削除しない
  • 1: 削除する
messagestring--再生ブロック(result: 0またはcontent_expired: 1)時にプレイヤーに表示する案内メッセージ(未入力時は Kollus デフォルトエラーメッセージを表示)
check_expiration_dateinteger-0検証有効期間(Unix timestamp)
  • 0入力時は制限なしとして処理
resultinteger-処理結果
  • 0: 異常(オプション無視)
  • 1: 正常

kind2 レスポンス例

{
"data" : [
{
"kind": 2,
"media_content_key": "{MEDIA_CONTENT_KEY}",
"content_delete": 1,
"result": 1
}
]
}

kind3 レスポンスフィールド

data の項目

フィールドタイプ必須デフォルト値説明
kindinteger-DRM Download Callback の種類
  • 3: オフライン再生権限確認
session_keystring--有効期限日時更新(Renewal)のためのセッションキー(content_expire_resetリクエスト時の整合性検証に使用)
media_content_keystring-メディアコンテンツキー
start_atinteger-リクエスト時に受信したstart_at値をそのまま返却
content_expiredinteger-0コンテンツ強制有効期限処理
  • 0: 再生可能
  • 1: 再生ブロック
content_deleteinteger-0ダウンロード完了直後のファイル削除可否
  • 0: 削除しない
  • 1: 削除する
content_expire_resetinteger-0既存の有効期限ポリシーの初期化
  • 0: 初期化しない
  • 1: 初期化する
expiration_dateinteger--再生有効期限日時(Unix timestamp)
expiration_countinteger--再生許可回数(例: 10 → 10 回再生可能)
expiration_playtimeinteger--再生制限時間(例: 60 → 60 秒、3600 → 1 時間再生可能)
resultinteger-処理結果
  • 0: 異常(オプション無視)
  • 1: 正常
messagestring--再生ブロック(result: 0またはcontent_delete: 1またはcontent_expired: 1)時にプレイヤーに表示する案内メッセージ(未入力時は Kollus デフォルトエラーメッセージを表示)
check_abuseinteger-0オフライン再生時のkind3呼び出し可否
  • 0: 呼び出さない
  • 1: 常に呼び出す
check_expiration_dateinteger-0検証有効期間(Unix timestamp)
  • 0: 制限なし
初期化オプション
  • 初期化可能なオプションcontent_expire_reset: 1を設定した場合)
    • expiration_date(再生有効期限日時)
    • expiration_count(再生許可回数)
    • expiration_playtime(再生制限時間)
    • check_expiration_date(検証有効期間)
  • 初期化が無視される条件: content_expiredの値が1の場合、content_expire_reset1に設定しても初期化ロジックは無視され、再生がブロックされます。

kind3 レスポンス例

{
"data": [
{
"kind": 3,
"session_key": "{SESSION_KEY}",
"media_content_key": "{MEDIA_CONTENT_KEY}",
"start_at": 140000000,
"result": 1,
"content_expired": 1,
"content_delete": 1,
"content_expire_reset": 1,
"expiration_date": 1402444800,
"expiration_count": 10,
"expiration_playtime": 3600
}
]
}

デバイス識別情報(device_name)の詳細

device_nameはプレイヤー呼び出し時にデバイスを識別するために渡される情報です。オペレーティングシステム環境に応じて以下の仕様で送信されます。

Android

Android アプリでは、デバイスのBuild.DEVICEBuild.MODEL/(スラッシュ)で組み合わせた文字列を使用します。

  • 仕様: Build.DEVICE/Build.MODEL
  • : samsung/SM-G991Ngoogle/Pixel_6

iOS

iOS アプリでは、Apple が提供するdevice_nameをそのまま使用します。

iOS device_name 全一覧
デバイスdevice_name
iPhone1,1iPhone
iPhone1,2iPhone 3G
iPhone2,1iPhone 3GS
iPhone3,1iPhone 4 (GSM)
iPhone3,3iPhone 4 CDMA
iPhone4,1iPhone 4S
iPhone5,1iPhone 5 A1428
iPhone5,2iPhone 5 A1429
iPhone5,3iPhone 5c A1456/A1532
iPhone5,4iPhone 5c A1507/A1516/A1529
iPhone6,1iPhone 5s A1433/A1453
iPhone6,2iPhone 5s A1457/A1518/A1530
iPhone7,1iPhone 6 Plus
iPhone7,2iPhone 6
iPhone8,1iPhone 6s
iPhone8,2iPhone 6s Plus
iPhone8,4iPhone SE
iPhone9,1iPhone 7 A1660/A1779/A1780
iPhone9,2iPhone 7 Plus A1661/A1785/A1786
iPhone9,3iPhone 7 A1778
iPhone9,4iPhone 7 Plus A1784
iPhone10,1iPhone 8 A1863/A1906
iPhone10,2iPhone 8 Plus A1864/A1898
iPhone10,3iPhone X A1865/A1902
iPhone10,4iPhone 8 A1905
iPhone10,5iPhone 8 Plus A1897
iPhone10,6iPhone X A1901
iPhone11,2iPhone XS
iPhone11,4iPhone XS Max
iPhone11,6iPhone XS Max
iPhone11,8iPhone XR
iPhone12,1iPhone 11
iPhone12,3iPhone 11 Pro
iPhone12,5iPhone 11 Pro Max
iPhone12,8iPhone SE (2nd gen)
iPhone13,1iPhone 12 mini
iPhone13,2iPhone 12
iPhone13,3iPhone 12 Pro
iPhone13,4iPhone 12 Pro Max
iPhone14,2iPhone 13 Pro
iPhone14,3iPhone 13 Pro Max
iPhone14,4iPhone 13 mini
iPhone14,5iPhone 13
iPhone14,6iPhone SE (3rd gen)
iPhone14,7iPhone 14
iPhone14,8iPhone 14 Plus
iPhone15,2iPhone 14 Pro
iPhone15,3iPhone 14 Pro Max
iPhone15,4iPhone 15
iPhone15,5iPhone 15 Plus
iPhone16,1iPhone 15 Pro
iPhone16,2iPhone 15 Pro Max
iPhone17,1iPhone 16 Pro
iPhone17,2iPhone 16 Pro Max
iPhone17,3iPhone 16
iPhone17,4iPhone 16 Plus
iPhone17,5iPhone 16e
iPad1,1iPad
iPad2,1iPad 2 WiFi
iPad2,2iPad 2 (GSM)
iPad2,3iPad 2 CDMA
iPad2,4iPad 2 WiFi (revised)
iPad2,5iPad mini WiFi
iPad2,6iPad mini A1454
iPad2,7iPad mini A1455
iPad3,1iPad 3rd gen (WiFi)
iPad3,2iPad 3rd gen (WiFi+LTE Verizon)
iPad3,3iPad 3rd gen (WiFi+LTE AT&T)
iPad3,4iPad 4th gen (WiFi)
iPad3,5iPad 4th gen A1459
iPad3,6iPad 4th gen A1460
iPad4,1iPad Air WiFi
iPad4,2iPad Air WiFi+LTE
iPad4,3iPad Air Rev
iPad4,4iPad mini 2 WiFi
iPad4,5iPad mini 2 WiFi+LTE
iPad4,6iPad mini 2 Rev
iPad4,7iPad mini 3 WiFi
iPad4,8iPad mini 3 A1600
iPad4,9iPad mini 3 A1601
iPad5,1iPad mini 4 WiFi
iPad5,2iPad mini 4 WiFi+LTE
iPad5,3iPad Air 2 WiFi
iPad5,4iPad Air 2 WiFi+LTE
iPad6,3iPad Pro 9.7 inch WiFi
iPad6,4iPad Pro 9.7 inch WiFi+LTE
iPad6,7iPad Pro 12.9 inch WiFi
iPad6,8iPad Pro 12.9 inch WiFi+LTE
iPad6,11iPad 9.7 Inch 5th Gen WiFi Only
iPad6,12iPad 9.7 Inch 5th Gen WiFi/Cellular
iPad7,1iPad Pro 12.9 inch A1670
iPad7,2iPad Pro 12.9 inch A18219
iPad7,3iPad Pro 10.5 inch A1701
iPad7,4iPad Pro 10.5 inch A1709
iPad7,5iPad 6th gen A1893
iPad7,6iPad 6th gen A1954
iPad7,11iPad 7th gen (WiFi)
iPad7,12iPad 7th gen (WiFi+Cellular)
iPad8,1iPad Pro 11 inch 1st gen (WiFi)
iPad8,2iPad Pro 11 inch 1st gen (WiFi+LTE 256GB)
iPad8,3iPad Pro 11 inch 1st gen (WiFi+LTE 512GB)
iPad8,4iPad Pro 11 inch 1st gen (WiFi+LTE 1TB)
iPad8,5iPad Pro 12.9 inch 3rd gen (WiFi)
iPad8,6iPad Pro 12.9 inch 3rd gen (WiFi+LTE 256GB)
iPad8,7iPad Pro 12.9 inch 3rd gen (WiFi+LTE 512GB)
iPad8,8iPad Pro 12.9 inch 3rd gen (WiFi+LTE 1TB)
iPad8,9iPad Pro 11 inch 2nd gen (WiFi)
iPad8,10iPad Pro 11 inch 2nd gen (WiFi+LTE)
iPad8,11iPad Pro 12.9 inch 4th gen (WiFi)
iPad8,12iPad Pro 12.9 inch 4th gen (WiFi+LTE)
iPad11,1iPad mini 5th gen (WiFi)
iPad11,2iPad mini 5th gen (WiFi+LTE)
iPad11,3iPad Air 3rd gen (WiFi)
iPad11,4iPad Air 3rd gen (WiFi+LTE)
iPad11,6iPad 8th gen (WiFi)
iPad11,7iPad 8th gen (WiFi+LTE)
iPad12,1iPad 9th gen (WiFi)
iPad12,2iPad 9th gen (WiFi+LTE)
iPad13,1iPad Air 4th gen (WiFi)
iPad13,2iPad Air 4th gen (WiFi+LTE)
iPad13,4iPad Pro 11 inch 3rd gen (WiFi)
iPad13,5iPad Pro 11 inch 3rd gen (WiFi+LTE 512GB)
iPad13,6iPad Pro 11 inch 3rd gen (WiFi+LTE 2TB)
iPad13,7iPad Pro 11 inch 3rd gen (WiFi 2TB)
iPad13,8iPad Pro 12.9 inch 5th gen (WiFi)
iPad13,9iPad Pro 12.9 inch 5th gen (WiFi+LTE 512GB)
iPad13,10iPad Pro 12.9 inch 5th gen (WiFi+LTE 2TB)
iPad13,11iPad Pro 12.9 inch 5th gen (WiFi 2TB)
iPad13,16iPad Air 5th gen (WiFi)
iPad13,17iPad Air 5th gen (WiFi+LTE)
iPad13,18iPad 10th gen (WiFi)
iPad13,19iPad 10th gen (WiFi+LTE)
iPad14,1iPad mini 6th gen (WiFi)
iPad14,2iPad mini 6th gen (WiFi+LTE)
iPad14,3iPad Pro 11 inch 4th gen (WiFi)
iPad14,4iPad Pro 11 inch 4th gen (WiFi+LTE)
iPad14,5iPad Pro 12.9 inch 6th gen (WiFi)
iPad14,6iPad Pro 12.9 inch 6th gen (WiFi+LTE)
iPad14,8iPad Air 11 inch M2 (WiFi)
iPad14,9iPad Air 11 inch M2 (WiFi+LTE)
iPad14,10iPad Air 13 inch M2 (WiFi)
iPad14,11iPad Air 13 inch M2 (WiFi+LTE)
iPad16,1iPad mini 7th gen (WiFi)
iPad16,2iPad mini 7th gen (WiFi+LTE)
iPad16,3iPad Pro 11 inch M4 (WiFi)
iPad16,4iPad Pro 11 inch M4 (WiFi+LTE)
iPad16,5iPad Pro 13 inch M4 (WiFi)
iPad16,6iPad Pro 13 inch M4 (WiFi+LTE)
iPad16,7iPad 11th gen (WiFi)
iPad16,8iPad 11th gen (WiFi+LTE)
iPod1,1iPod touch
iPod2,1iPod touch 2nd gen
iPod3,1iPod touch 3rd gen
iPod4,1iPod touch 4th gen
iPod5,1iPod touch 5th gen
iPod7,1iPod touch 6th gen
iPod9,1iPod touch 7th gen