概要
Kollusサービスで提供しているCallbackは、Platform CallbackとPlayer Callbackで分けていおり、ユーザーのコンテンツ利用情報を確認したい際にはPlayer Callbackが必要です。
Playerから取得された内容を指定したURLに転送する機能をLMS Callbackといいます。Playerは情報を一方転送するだけでレスポンスの受け取ることは出来ません。
この機能を使用する場合にはKollus Live管理画面から関連情報を設定する必要があります。LMS Callback URLの設定が終わりましたらVideo gatewayから再生関連情報が指定したURLに自動で転送されます。
Callback process
再生情報を受け取る流れを説明します。
- Kollus 側で情報リクエストを設定します。
- コンテンツ配信単位である"チャンネル"別に転送したい項目を指定することができます。
- Video-gatewayが呼出すとコンテンツ再生に必要な情報をPlayerに転送し、この段階で再生と関わる情報の転送設定(1で設定したCallback設定情報)を共に転送します。
- Playerは2.で指定された情報取得し、設定されたURL (顧客側) にを転送します。
- コンテンツ再生に関する情報を取得するため、関連情報を収集します。
- ユーザーの個人情報は収集されません。
- Mac Address, IP Address 位置情報に関する内容は収集されません。
Customer Requirement
Kollusから転送する再生関連情報は顧客の意見を反映して提供項目を決めています。
- 再生終了時点
- コンテンツの区間別の再生情報
- ユーザ情報 (ユーザが識別できる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側に保存されません。ユーザのユニーク性を識別する用途で使用されます。
- {START_AT}
- Video-gatewayをリクエストした時点のUnixtimestamp
- コンテンツ再生中に複数の再生情報が転送される可能性があります。同一リクエストに同一{START_AT} 値が付与されるため、同時間に多数の再生件数が発生する場合Unixtimestampが重複されることがあります。
- ダウンロードしたコンテンツの場合、start_atはコンテンツを再生したデバイスのunixtimestampが適用されます。
- {BLOCK_CNT}
- Kollus側で設定したブロックの数
- 再生情報を指定したブロック数に分けて管理し、データを転送する際に追加することが可能です。
- {PLAY_TIME}
- 全体再生時間 (単位 : 秒):累計
- 倍速が適用された場合、倍速時間も計上されます。
- 10秒間 2倍速で再生した場合、Play Timeは20秒に計算
- 全ての再生時間が計上されます。(リピート、倍速再生など全ての再生時間含まれます。)
- {PLAYTIME_PERCENT}
- DURATION対比全体再生比率 (単位:%, 定数: 小数点以下切り捨て)
- コンテンツを繰り返して2回見た場合には200%に計算されます。
- {DURATION}
- コンテンツの長さ (単位: 秒)
- {MEDIA_CONTENT_KEY}
- メディアコンテンツキー
- {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 Playerの場合kfp文字列を転送します。(ユニーク値)
- {PLAY_STATUS}
- Kollus Security Playerのみ対応 (HTML5 Player使用不可)
- play: 再生中
- pause: 再生停止 (一時停止)
- stop: Playerウィンドウが閉じられた際
- {RUN_TIME}
- JSON_DATA의 runtime과 같음
- {SHOW_TIME}
- JSON_DATA의 showtime과 같음
- {USERVALUE0}~{USERVALUE9}
- Video-gateway호출에 추가된 추가 정보 입니다.
- ex) LCD={USERVALUE0}&UCD={USERVALUE4}
- 영문,숫자 이외의 한글등의 문자열을 전달할 경우 웹 브라우저들의 차이점이 있기 때문에 해당 변수 전달시 UTF-8로 전달해야 합니다. (전달되는 문자열은 웹의 특성상 UrlEncode해서 전달해야 합니다.)
- {TIMEMAP_DATA}
- real_playtime 데이터를 초단위로 bitmap 방식으로 표시
- 1: 사용자가 시청한 구간(초)
- 2: 사용자가 시청하지 않은 구간(초)
- 예) 000111100 ... : 4~7초는 사용자가 시청한 구간
- {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, 고객 확인용
- host_name : 비디오 링크 요청 도메인명
- device : 디바이스명
content_info
- duration : 컨텐츠 길이
- encoding_profile : 인코딩 프로파일
- media_content_key : 미디어 컨텐츠 키
- channel_key : 채널키
- real_playtime : 실제 전체 재생 시간 (단위:초)
- 배속 기능을 사용하는 경우 배속을 포함한 시간입니다.
- 10초간 2배속으로 재생한 경우 20초로 계산됩니다.
- 모든 재생 시간을 포함한 시간입니다. (구간반복을 한 경우는 제외됩니다.)
- playtime : 컨텐츠 재생 시간
- playtime_percent : duration에 대한 전체 재생 비율
- start_at : Video-gateway를 호출한 시점의 Unixtimestamp 입니다. 다운로드 컨텐츠의 경우 start_at은 컨텐츠 재생시 단말의 unixtimestamp 입니다.
- last_play_at : 마지막 재생 위치 (단위:초)
- runtime : 플레이어 실제 구동 시간(단위:초)
- showtime : 플레이어를 실제적으로 play 한 구동 시간 (단위:초)
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
플레이어별 지원 옵션을 확인할 수 있습니다. {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 |
{USERVALUE0} ~ | O | O | O |
{JSON_DATA} | O | O | O |
Settings
Callback에 대한 설정은 채널에서 할 수 있습니다. Callback이 필요한 채널 마다 설정해야 합니다.
- Callback URLs: 캐리지 리턴으로 각각 치환자를 포함한 URL을 등록합니다.
- 재생정보를 다수의 시스템에서 전달 받을 수 있도록 캐리지리턴(\n)으로 구분된 다수의 callback_url 을 등록할 수 있습니다.
- Kollus 플랫폼의 필요에 따라 URL 설정 수를 제한할 수 있습니다.
- Format: [block_count]:[period]:[enable_sessions]:[callback_url]
- 구분자 : (콜론)
- block_count
- 컨텐츠 재생 구간을 나누는 블럭의 수 입니다. 10으로 설정하면 컨텐츠의 길이가 300초의 경우 각 블럭은 30초로 구성됩니다.
- peroid
- 데이터 전송 주기
- Callback이 전송되는 주기로 지정된 period(단위:초) 마다 호출되고 프로그램(플레이어)이 종료될 때 추가로 호출 됩니다. 단, 플래시 플레이어의 경우는 플레이어 종료시 호출되지 않습니다.
- 플레이를 일시정시 또는 정지했을 때 추가로 호출 됩니다.
- 단위 :초
- 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로 처리 됩니다.
- 모든 컨텐츠의 {DURATION}보다 작거나 같도록 {BLOCK_CNT}를 설정하는 것을 권장합니다. {DURATION}이 {BLOCK_CNT}보다 작은 경우 아래와 같이 처리됩니다.
- {BLOCK_CNT}가 100일때 {DURATION}이 30이면 전송되는 블럭 정보는 30개로 조정됩니다.
Callback 호출 주기 (Callback period)
- Callback은 시스템에 설정된 Callback Url 정보의 period 설정에 따라 호출됩니다.
- 플레이어가 일시정지, 정지를 하는 경우도 Callback이 호출됩니다.
- 주기적으로 호출되는 동일한 사용자의 정보는 {START_AT}, {CLIENT_USER_ID}값으로 구분하여 마지막 정보를 확인할 수 있습니다.
- 플래시 플레이어의 경우는 플레이어 종료시 호출되지 않습니다.
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 Single 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