개요
Kollus에서 제공하는 Callback 정보는 플랫폼에서 전달하는 내용과 플레이어에서 전달하는 내용으로 구분될 수 있습니다. 플레이어에서 전달하는 정보는 사용자가 컨텐츠를 이용한 정보를 활용할 수 있도록 관련 정보를 지정된 Url에 전달하는 기능입니다. 진도율을 전송할때 응답을 확인하지 않습니다. 단, 네트워크 오류인 경우 해당 데이터를 보관후 재 전송 가능할때 재 전송됩니다. 해당 기능을 사용하기 위해서는 Kollus에 접속하여 관련 정보를 설정하시면 Video-gateway를 통해 관련 내용이 전달되어 재생과 관련된 정보를 전달합니다.
Callback process
재생 정보를 전달 받는 흐름을 설명합니다.
- Kollus 설정에서 관련 정보 요청을 설정합니다.
- Kollus는 컨텐츠 배포 단위인 채널 마다 다양한 옵션을 지정할 수 있습니다.
- 배포하는 채널마다 지정된 데이터 수집이 가능합니다.
- 동영상 재생을 위해 Video-gateway를 호출하면 컨텐츠 재생을 위한 다양한 정보를 플레이어 전달하게 되며, 이때 재생과 관련된 정보를 전달할 설정을 함께 전달합니다.
- 재생 정보를 활용하기 위해 설정한 Url에 관련 정보를 전달합니다.
- Kollus는 컨텐츠 재생과 관련된 기본 정보를 수집하기 위해 관련 정보를 수집합니다.
- 사용자 정보를 일체 포함되지 않습니다.
- Mac Address, IP Address 개인의 위치 정보와 관련된 정보를 수집 되지 않습니다.
Customer Requirement
Kollus에서 전달하는 재생 관련 정보는 고객의 다양한 요청을 수렴하여 개발되었습니다.
- 마지막 종료 시간
- 컨텐츠 구간별 재생 정보
- 사용자 정보
- 컨텐츠 정보
- PC 정보
- 동영상 구간을 시스템에서 지정된 블럭으로 나누어 정보를 수집
Plugin option
- {MAC}
- Mac Address
- 사용자 개인정보에 해당하여 수집을 권장하지 않습니다.
- 고급 사용자의 경우 Mac Address를 임의로 변경할 수 있으며, 모바일 플레이어의 경우 App의 등록 제한으로 인해 지원하지 않습니다.
- {IP} - RemoteAddress의 이슈로 지원하지 않습니다. (서버쪽에서 확인하도록합니다.)
- 컨텐츠를 재생하는 사용자 PC의 IP Address
- 사용자 개인정보에 해당하여 수집을 권장하지 않습니다.
- 공유기를 사용하는 환경에서 수집 되는 IP Address는 Private 영역 IP Address 입니다. 정확한 사용자의 IP를 수집하기 위해서는 Callback을 받는 Web 서버에서 Remote_Address를 확인하는 것이 정확합니다.
- {CLIENT_USER_ID}
- 사용자의 User ID 입니다.
- MediaToken 생성시 파라미터로 입력한 사용자의 ID 정보입니다. 이때 입력된 사용자 ID는 Kollus 시스템에서 관리되지 않고 사용자를 구분하는 Unique 정보로만 사용됩니다.
- {START_AT}
- Video-gateway를 호출한 시점의 Unixtimestamp 입니다.
- 사용자의 컨텐츠 이용중 다수의 재생정보 전달이 발생할 수 있습니다. 동일한 요청에 같은 {START_AT} 값을 갖게 되며, 같은 시간에 다수의 이용자가 발생할 경우 Unixtimestamp 이기 때문에 중복될 수 있습니다.
- 다운로드 컨텐츠의 경우 start_at은 컨텐츠 재생시 단말의 unixtimestamp 입니다.
- {BLOCK_CNT}
- Kollus에서 설정한 블럭의 개수입니다.
- 재생 정보를 지정된 블럭 개수로 나누어 관리하며 정보 전달시 함께 포함시킬수 있습니다.
- {PLAY_TIME}
- 전체 재생 시간 (단위:초)
- 배속 기능을 사용하는 경우 배속을 포함한 시간입니다. 시간 값은 누적입니다.
- 10초간 2배속으로 재생한 경우 20초로 계산됩니다.
- 모든 재생 시간을 포함한 시간입니다. (구간반복을 한 경우도 모두 포함됩니다.)
- {PLAYTIME_PERCENT}
- DURATION에 대한 전체 재생 비율 (단위:%, 정수, 절사)
- 컨텐츠를 두번 반복해서 본 경우 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}}
- 블럭 재생 여부
- 재생하지 않고 Skip
- 해당 블럭 재생 (0초 이상 재생하면 1로 설정됩니다.)
- {BLOCK_TIME_1} ~{BLOCK_TIME_##{BLOCK_CNT}}
- 해당 블럭을 재생한 시간입니다. (단위:초)
- 플레이어의 배속기능을 이용해 재생한 경우 재생시간은 배속을 적용하여 계산됩니다.
- 반복해서 3초의 범위를 갖는 블럭을 2회 재생한 경우 블럭의 재생시간은 6초입니다.
- {DURATION}이 {BLOCK_CNT} 보다 작은 경우 {BLOCK_TIME#}의 합은 {DURATION}을 초과합니다. (각 블럭의 재생시간이 밀리초로 나오는 경우 올림하여 1초로 계산합니다.)
- {LAST_PLAY_AT}
- 마지막 재생 위치 (단위:초)
- {HOST_NAME}
- 비디오 링크 요청 도메인명
- ex) catenoid.video.kr.kollus.com
- {PLAYER_ID}
- Kollus 플레이어의 고유 ID 입니다.
- 플레이어 설치시 생성된 고유 ID 입니다.
- 플래쉬 플레이어의 경우 kfp 라는 고유 문자열을 전송합니다.
- {PLAY_STATUS}
- 전용 플레이어에서만 사용가능(Flash, 공개 HTML5 사용안함)
- play : 재생중
- pause: 재생멈춤(일시정지)
- stop: 플레이 창이 내려 갈 때
- {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