1.1.2 • Published 4 years ago
clost-helper v1.1.2
cs-helper
cs-helper는 Cloud Streaming 기반 웹앱과 Cloud Streaming Player 와의 연동 규격에 대한 인터페이스 모듈이며 주로 아래의 기능을 수행한다.
- CSS로부터 전달 받은 요청을 이벤트 기반으로 웹앱에게 전달한다.
- StartApp : T-Commerce 웹앱에 대한 클라우드 스트리밍 시작 요청
- NotifyKey : 특정 키('이전', '종료' ,'홈')등을 웹앱에게 키이벤트가 아닌 메시지로 전달
- HsitoryAll : 히스토리 목록 요청
- BcsInfo : BCS 정보 요청
- 웹앱은 cs-helper를 이용하여 아래의 요청을 CSS에게 할 수 있다.
- StopApp : T-Commerce 웹앱에 대한 클라우드 스트리밍 종료 요청
- OnLoad : 웹앱이 로딩 완료 시 BCS에 전달
- TuneChannel : 채널 튜닝 요청
- StartVod : VOD 재생 요청
- StopVod : VOD 정지 요청
- History : 세션 복구 시 필요한 히스토리 정보를 셋탑에 저장
- KeyFilter : 키 입력에 대해 웹앱에서 특별한 처리를 해야하는 경우 키 필터링 요청
- SessionTimeout : 웹앱 화면 별로 별도의 세션 타임아웃 시간 설정
- PipResize : PIP(Picture In Picture) 요청
- DeviceInfo : 셋탑의 정보를 요청
1) 용어
- CS(Cloud Streaming)
- CSS(Cloud Streaming Server)
- ICS(Image based Cloud Streaming) : 이미지 기반 클라우드 스트리밍
- BCS(Broadcast based Cloud Streaming
- CSP(Cloud Strraming Player)
2) 버전
- 0.1.2
- 주요 변경사항 STB-CSP간 연동 규격 확정으로 인한 startVod, stopVod 메서드 수정 onVodPlayInfo, onVodTimeInfo 이벤트 추가
3) 설치
가능한 npm을 통한 배포를 지원할 예정이나 현재는 오프라인으로 전달받은 cs-helper@version.tgz을 사용해야 한다.
npm 을 이용해서 설치 할 경우
$ npm install cs-helper
- 오프라인으로 전달 받았을 경우
$ tar zxvf cs-helper@[version].tgz ./your-source-code-lib-path
$ npm install --save xml2js
$ npm install --save eventemitter3
3) APIs
isCss : 현재 실행 중인 웹앱이 클라우드 스트리밍 서버(CSS)에서 동작하는지 알려준다.
- example
import { csHelper } from './src/lib/cs-helper';
if( csHelper.isCss() ) {
console.log('Running on the Cloud Streaming server.')
}
init(options) : cs-helper를 초기화한다. 이때 cs-helper은 CSS 와 필요한 이벤트 리스너를 등록한다.
- options : * logging : cs-helper 라이브러리의 콘솔 로그를 on/off 한다.
- example
import { csHelper } from './src/lib/cs-helper';
csHelper.init( {logging:true} )
loadedApp : 웹앱이 로드가 완료되었다는 것을 알려준다.
- 해당 API는 BCS 웹앱 일 경우에만 호출하면 된다.
- example
import { csHelper } from './src/lib/cs-helper';
// 'load' 이벤트를 등록한다.
window.addEventListener("load", () => {
// BCS Type 웹앱 일 경우 'load' 이벤트 발생 시 BCS에게 NOTIFY를 해줘야 한다.
if( this.csType === constants.BCS_CS_TYPE ) {
csHelper.loadedApp();
}
})
closeApp(closeOption) : 웹앱에 대한 클라우드 스트리밍 종료 요청
- closeOption : 'Exit' , 'Home'
- Exit : 웹앱을 종료한다.
- Home : 웹앱을 종료하고 홈 화면을 로딩을 요청한다.
- example
import { csHelper } from './src/lib/cs-helper';
let closeOption = 'Exit'
csHelper.closeApp(closeOption)
tuneChannel(channelInfo) : 채널 튜닝 요청을 한다.
- channelInfo : 재생 할 채널의 정보
- example
import { csHelper } from './src/lib/cs-helper';
let channelInfo = { sourceId : 102 }
csHelper.tuneChannel(channelInfo)
startVod(contentInfo) : VOD 콘텐츠 재생 요청을 한다.
- contentInfo : 재생 할 VOD 콘텐츠의 정보
- example(SK stoa)
import { csHelper } from './src/lib/cs-helper';
let contentInfo = {
type : '',
contentId : '',
contentUrl : '',
hasNextPlay : false,
x : 0,
y : 0,
width : 1280,
height : 720
}
csHelper.startVod(contentInfo)
stopVod : VOD 콘텐츠 종료 요청을 한다.
- example
import { csHelper } from './src/lib/cs-helper'
csHelper.stopVod()
setVodControl(controlInfo) : VOD 콘텐츠 재생을 제어한다.
- controlInfo : 제어 정보
- example
import { csHelper } from './src/lib/cs-helper';
let controlInfo;
controlInfo = { status : 'pause|play' } // pause & play
controlInfo = { status : 'speed' , value: 'FF' } // ff
controlInfo = { status : 'speed' , value: 'REW' } // rew
csHelper.setVodControl(controlInfo)
setHistoryInfo(historyInfo) : 히스토리 정보 저장을 요청한다.
- historyInfo : 히스토리 정보
- example
import { csHelper } from './src/lib/cs-helper';
let historyInfo = { } // 히스토리 정보에 대한 정의는 웹앱 개발 업체가 한다.
csHelper.setHistoryInfo(historyInfo)
setKeyFilter(filterInfo) : 키 입력에 대해 웹앱에서 특별한 처리를 해야하는 경우 키 필터링 요청
- filterInfo : 필터링 정보
- example
import { csHelper } from './src/lib/cs-helper';
let filterInfo = { useNumberkey : true }
csHelper.setKeyFilter(filterInfo)
setSessionTimeout(timeoutInfo) : 화면별로 별도의 타임아웃 시간 설정이 필요한 경우 요청
- timeoutInfo : 타임아웃 정보
- example
import { csHelper } from './src/lib/cs-helper';
let timeoutInfo = { timeout : 15000 }
csHelper.setSessionTimeout(timeoutInfo)
setScreenResize(resizeInfo) : 영상 영역을 주어진 값에 따라 조정한다.
- resizeInfo : 화면 리사이즈 정보
- example
import { csHelper } from './src/lib/cs-helper';
let resizeInfo = {
x : 0,
y : 0,
width : 1280,
height : 720
}
csHelper.setScreenResize(resizeInfo)
sendMessage(message) : CSS로 부터 받은 이벤트에 대한 회신 메세지를 전송한다.
- message : 회신할 메세지, 메세지의 내용은 이벤트마다 상이하며 아래 이벤트 등록에 상세히 다룬다.
- example
// 요청에 대한 응답 메시지 전송
let data = {
result : true
}
let message = {
type : 'request|response',
msgId : new Data().getTime(), // 현재 시간을 밀리초로 변환, 회신일 경우
command : 'StarApp|StopApp',
contents : '',
data : data
}
csHelper.sendMessage(message)
on(event, func) : 웹앱은 cs-helper로 부터 전달 받아야하는 이벤트에 대해 콜백함수를 등록한다.
- event : 현재 등록 가능한 이벤트는 아래와 같다.
- 'onStart' : 웹앱에 대한 클라우드 스트리밍 시작 요청 시
- 'onNotify' : 특정 키('이전', '종료' ,'홈')등을 전달 시
- 'onBcsInfo' : BCS 정보 요청 시
- 'onVodPlayInfo' : VOD 콘텐츠 재생에 관련 이벤트 전달 시
- 'onVodTimeInfo' : VOD 콘텐츠 재생 시간 이벤트 전달 시
- func : 콜백함수
- example
- onStart
import { csHelper } from './src/lib/cs-helper';
csHelper.initialize()
csHelper.on('onStart', (payload, err) => {
// 에러처리
if(err) {
console.log('[%s]:Error occured onStart %s', TAG, err)
return;
}
// 요청에 대한 응답 메시지 전송
let data = {
result : true
}
let message = {
type : 'response',
msgId : payload.msgId,
command : payload.command,
contents : payload.contents,
data : data
}
csHelper.sendMessage(message)
})
콜백함수의 payload 에는 아래의 내용들이 포함되어 있다.
{
"type": "request",
"msgId": "1530670713180",
"command": "StartApp",
"contents": "",
"data": {
"mainAppId": "46",
"deviceInfo": {
"sourceId": "80001",
"stbId": "123456789",
"stbModel": "UC2300X",
"macAddress": "28:32:c5:df:f9:fc"
},
"launchInfo": {
"historyList": {
"history": {
"menuId": "101",
"homeKey": "true",
"channelReset": "false",
"sourceId": "852"
}
},
"extInfo": "",
"csType": "ICS",
"appType": "0",
"appId": "46",
"subAppId": "0"
}
}
}
* *onNotifyKey*
csHelper.on('onNotifyKey', (payload, err) => {
if(err) {
console.log('[%s]:Error occured onBcsInfo %s', TAG, err)
return;
}
console.log('[%s]:onNotifyKey > %s', JSON.stringify(payload.data) )
let keyCode = parseInt(payload.data.value, 10)
if( !isNaN(keyCode) ) {
switch( keyCode) {
case 111 :
csHelper.closeApp('Exit')
break;
case 3:
csHelper.closeApp('Home')
break;
default:
break;
}
}
})
payload 에는 아래의 내용들이 포함되어 있다.
{
"type": "request",
"msgId": "1530670713180",
"command": "NotifyKey",
"contents": "",
"data": { value : 111 }
}
* *onBcsInfo*
import { csHelper } from './src/lib/cs-helper';
csHelper.on('onBcsInfo', (payload, err) => {
if(err) {
console.log('[%s]:Error occured onBcsInfo %s', TAG, err)
return;
}
// 요청에 대해서 BCSInfo 메시지를 전송한다.
let bcsInfoData = require('assets/json/bcsinfo-data.json')
console.log('[%s]:keycodes : %s', TAG, JSON.stringify(bcsInfoData) )
let message = {
type : 'response',
msgId : '',
command : 'Set',
contents :'BcsInfo',
data : bcsInfoData
}
csHelper.sendMessage(message)
})
payload 에는 아래의 내용들이 포함되어 있다.
{
"type": "request",
"msgId": "1530670713180",
"command": "BcsInfo",
"contents": "",
"data": { }
}
bcsinfo-data.json 에는 아래의 내용들이 포함되어야 한다.
{
// 홈 화면에서 입력되는 키(left(=37), up(=38), right(=39), down(=40), enter(=13) 에 대한 정의
"keycodes" : {
"key" : [{
"$" : { "value" : "37"},
"launchInfo" : {
"csType": "ICS",
"appType" : 1,
"appId" : 123,
"subAppId" : 0
}
},{
"$" : { "value" : "38"},
"launchInfo" : {
"csType": "ICS",
"appType" : 1,
"appId" : 123,
"subAppId" : 0
}
}, ... ]
},
// 홈 화면에서 필요한 명령
"initialCmd" : {
"cmd" : [{
"$" : {"value" : "0", "delay" : "0" },
"_" : "<INTERFACE version=\"3\"><TYPE>notify</TYPE><MSGID/><COMMAND>Set</COMMAND><CONTENTS>StartDelayTime</CONTENTS><DATA><value>12000</value></DATA></INTERFACE>"
},{
"$" : {"value" : "1", "delay" : "100" },
"_" : "<INTERFACE version=\"3\"><TYPE>notify</TYPE><MSGID/><COMMAND>Set</COMMAND><CONTENTS>PipResize</CONTENTS><DATA><value>0|0|1280|720</value></DATA></INTERFACE>"
}]
}
}
* *onVodPlayInfo*
import { csHelper } from './src/lib/cs-helper';
csHelper.on('onVodPlayInfo', (payload, err) => {
if(err) {
console.log('[%s]:Error occured onVodPlayInfo %s', TAG, err)
return;
}
switch(payload.data.status) {
case 'start': // VOD 콘텐츠 재생 준비 완료
break;
case 'stop': // VOD 콘텐츠 정지
break;
case 'eof': // VOD 콘텐츠 재생 완료(EOF)
break;
case 'error' :// VOD 콘텐츠 재생 시 에러 발생
break;
}
})
payload 에는 아래의 내용들이 포함되어 있다.
{
"type": "request",
"msgId": "1530670713180",
"command": "Set",
"contents": "Vod",
"data": { status : "start|stop|eof|eroror" }
}
* *onVodTimeInfo*
import { csHelper } from './src/lib/cs-helper';
csHelper.getVodTimeInfo( {durationInfo:total} )
csHelper.getVodTimeInfo( {durationInfo:current} )
csHelper.on('onVodTimeInfo', (payload, err) => {
if(err) {
console.log('[%s]:Error occured onVodTimeInfo %s', TAG, err)
return;
}
// TDB
})
payload 에는 아래의 내용들이 포함되어 있다.
{
"type": "request",
"msgId": "1530670713180",
"command": "Get",
"contents": "Vod",
"data": { } // TBD
}
remove(event) : 등록한 이벤트 리스너를 제거한다.
- event : 이벤트 이름(onStart, onNotify, OnBcsInfo)
- example
import { csHelper } from './src/lib/cs-helper';
csHelper.remove('onStart')
4) Animation
slideIn(identify, from, to, duration, isNextBlock=0, isRefresh=0, accel=0)
애니메이션 대상이 되는 엘리먼트를 from(x, y, w, h, z, a)에서 to(x, y, w, h, z, a)까지 이동 시킨다. 해당 함수를 호출한 후 to 영역에 엘리먼트를 렌더링해야 한다.
identify
: 애니메이션 대상이 되는 엘리먼트의 IDfrom
: 애니메이션 대상이 되는 엘리먼트의 시작 위치 정보to
: 애니메이션 대상이 되는 엘리먼트의 종료 위치 정보- x : 애니메이션 대상이 되는 엘리먼트 x 좌표
- y : 애니메이션 대상이 되는 엘리먼트 y 좌표
- w : 애니메이션 대상이 되는 엘리먼트 width 값
- h : 애니메이션 대상이 되는 엘리먼트 height 값
- z : 애니메이션 대상이 되는 엘리먼트 z-index 값
- a : 애니메이션 대상이 되는 엘리먼트 alpha 값 (0~1)
duration
: 애니메이션 진행 시간 (ms)isNextBlock
: TBDisRefresh
: TBDaccel
: TBD
import { csHelper } from './src/lib/cs-helper';
csHelper.initialize()
let from = { x:1000, y:16, w:720, h:360, z:0, a:1 }
let to = { x:266, y:16, w:720, h:360, z:0, a:1 }
if( csHelper.isCss() ){
csHelper.slideIn(this.bannerId, from, to, 3000);
}
//위의 함수를 호출한 후 to 영역의 엘리먼트를 렌더링한다.
document.getElementById(this.bannerId).style = 'display: block'
slideInUseURL(urls, from, to, duration, isNextBlock=0, isRefresh=0, accel=0)
애니메이션 대상이 되는 이미지 목록들을 from(x, y, w, h, z, a)에서 to(x, y, w, h, z, a)까지 이동 시킨다.
urls
: 애니메이션 대상이 이미지의 URL 목록from
: 애니메이션 대상이 되는 엘리먼트의 시작 위치 정보to
: 애니메이션 대상이 되는 엘리먼트의 종료 위치 정보- x : 애니메이션 대상이 되는 엘리먼트 x 좌표
- y : 애니메이션 대상이 되는 엘리먼트 y 좌표
- w : 애니메이션 대상이 되는 엘리먼트 width 값
- h : 애니메이션 대상이 되는 엘리먼트 height 값
- z : 애니메이션 대상이 되는 엘리먼트 z-index 값
- a : 애니메이션 대상이 되는 엘리먼트 alpha값 (범위 0~1)
duration
: 애니메이션 진행 시간 (ms)isNextBlock
: TBDisRefresh
: TBDaccel
: TBD
import { csHelper } from './src/lib/cs-helper';
csHelper.initialize()
let urls = ['http://xxx.com/img01.png','http://xxx.com/img02.png','http://xxx.com/img03.png']
let from = { x:1000, y:16, w:720, h:360, z:0, a:1 }
let to = { x:266, y:16, w:720, h:360, z:0, a:1 }
csHelper.slideInUseURL(urls, from, to, 3000);