Web Player Controller
개요
Web Player Controller(구 VG Controller)는 고객사 의 웹사이트에 iframe으로 삽입된 Kollus 플레이어와 통신하여,
재생 상태를 제어하거나 실시간 이벤트를 수신할 수 있게 해주는 JavaScript 라이브러리입니다.
주요 특징
- 통합 제어: 플레이어 종류와 관계없이 단일 규격으로 제어 가능합니다.
- 독립적 구동: 별도의 외부 라이브러리 의존성 없이 독립적으로 동작합니다.
- 이벤트 기반 구조: 메서드 호출 및 실시간 이벤트 리스너 구조를 지원합니다.
용어 정의
이 문서에서 사용하는 주요 기술 용어와 플레이어 표기에 대한 정의입니다.
| 용어 | 설명 |
|---|---|
| 비디오 게이트웨이 | 시청자 요청에 따라 재생 데이터 및 인증 정보를 전달하는 서버 |
| 플레이어 ID | Kollus 플레이어 고유 ID |
| 하드웨어 ID | Windows 환경 등 식별 가능한 값이 존재하는 경우 제공되는 하드웨어 고유 ID |
| HLS Fragment | HLS(HTTP Live Streaming) 프로토콜 기반 재생 시 전체 영상을 분할한 최소 단위의 미디어 세그먼트 파일 |
| v3 | HTML5 Player for PC (Hybrid): Microsoft Edge 또는 Chrome 45 이상에서 암호화 콘텐츠 재생 시 적용되는 하이브리드 HTML5 플레이어 |
| v4 | HTML5 Player for All: 비암호화 콘텐츠 전용 비설치형 HTML5 플레이어 |
| v5 | Web Player: 설치형과 비설치형의 장점을 결합한 차세대 통합 웹 플레이어 |
플레이어 안내
Kollus 플레이어에 대한 상세 설명은 아래 문서를 참고하세요.
라이브러리 설치 및 초기화
클라이언트 스크립트를 로드한 후, 제어 대상(iframe)을 지정하여 인스턴스를 생성합니다.
기본 구현 예제
<script src="https://file.kollus.com/vgcontroller/vg-controller-client.latest.min.js"></script>
<script>
window.onload = function () {
try {
var controller = new VgControllerClient({
target_window: document.getElementById('child').contentWindow,
});
// Register event listeners and call methods
} catch (e) {
console.error(e);
}
};
</script>
<body>
<iframe id="child" src="https://v.kr.kollus.com/{MEDIA_CONTENT_KEY}..."></iframe>
</body>
주의사항
- 대상 지정:
target_window속성에는 반드시iframe요소의contentWindow객체를 전달해야 합니다. - 브라우저 호환성: 이 라이브러리는
window.postMessageAPI를 사용하여 통신합니다. 해당 API를 지원하지 않는 브라우저에서는 작동이 제한됩니다. - 다중 플레이어 제어: 페이지 내 여러 개의 플레이어(
iframe)가 존재할 경우, 각iframeID별로 개별 인스턴스를 생성해야 합니다.
예외 코드
초기화 및 통신 과정에서 발생할 수 있는 에러 코드입니다.
| 코드 | 메시지 | 설명 |
|---|---|---|
-1 | * | postMessage 통신 중 발생한 예외 |
-99 | player type is not defined | 플레이어 유형 정보 누락 |
-99 | player type must be one of v2, v3, v4 and flash | 지원하지 않는 플레이어 |
-99 | this browser does not support postMessage | 브라우저에서 postMessage API를 지원하지 않음 |
-99 | listener is not callable | 등록하려는 이벤트 리스너가 유효한 함수가 아님 |
CDN 경로
Web Player Controller는 CDN을 통해 제공됩니다.
최신 버전 자동 적용
<script src="https://file.kollus.com/vgcontroller/vg-controller-client.latest.min.js"></script>
특정 버전 고정
<script src="https://file.kollus.com/vgcontroller/vg-controller-client.1.1.4.min.js"></script>
보안 강화 (SRI 적용)
라이브러리 변조 방지를 위한 SRI(Subresource Integrity) 속성 사용을 권장합니다.
<script src="https://file.kollus.com/vgcontroller/vg-controller-client.1.2.3.min.js"
integrity="sha256-esUCCL4RPYMS8AR+Sl3lNrFa5M+zgpt4Gb77qtz66OY="
crossorigin="anonymous">
</script>
참고
버전별 Integrity 속성(Integrity Code)은 CDN 목록을 참고하세요.
이벤트 리스닝
controller.on() 메서드를 활용하여 플레이어의 상태 변화 및 재생 이벤트를 실시간으로 수신합니다.
리스너 등록 방식
단일 리스너
controller.on('event_name', function(param) {
// Register event listener
});
다중 리스너
controller.on('event_name', function(param) {
// First listener
});
controller.on('event_name', function(param) {
// Second listener
});
// Execute all listeners when the event is fired
메서드 체이닝 (Method Chaining)
연속적인 이벤트 등록을 간결한 코드로 구현할 수 있습니다.
controller.on('event_name_1', function(param) {
// First listener
}).on('event_name_2', function(param) {
// Second listener
});
리스너 실행 순서
JavaScript 비동기 환경 특성상, 동일 이벤트에 등록된 여러 리스너 간의 실행 순서는 보장되지 않습니다.
- 권장 사항: 엄격한 실행 순서가 필요한 로직은 하나의 리스너 내부에서 순차적으로 작성하세요.
이벤트 목록
재생 상태 이벤트
| 이벤트 | 설명 | 대상 플레이어 |
|---|---|---|
loaded | 플레이어 구성 요소의 로딩이 완료된 시점에 발생 | v3, v4, v5 |
ready | 서버로부터 재생 데이터를 수신하여 재생 준비가 완료된 시점에 발생 | v3, v4, v5 |
play | 최초 재생 시작 또는 일시정지 후 재생 재개 시 발생 | v3, v4, v5 |
pause | 일시정지 시 발생 | v3, v4, v5 |
done | 재생 시점이 전체 길이(duration) 끝에 도달했을 때 발생 | v3, v4, v5 |
waiting | 네트워크 환경 영향으로 추가 버퍼링이 필요한 경우, 정상화 전까지 1초 주기로 발생 | v4, v5 |
진행률(Progress) 이벤트
| 이벤트 | 설명 | 대상 플레이어 |
|---|---|---|
progress | 재생 중 약 1초 간격으로 발생하며 현재 재생 위치 정보 전달 | v3, v4, v5 |
progress 파라미터 상세
| 파라미터 | 타입 | 설명 |
|---|---|---|
percent | integer | 현재 재생 진행률 (0~100) |
position | number | 현재 재생 위치 (sec) |
duration | number | 콘텐츠 전체 길이 (sec) |
controller.on('progress', function(percent, position, duration) {
console.log(percent + '%', position + 'sec');
});
주의
HTML5 브라우저 성능 및 네트워크 환경에 따라 progress 이벤트는 정확히 1초 간격이 아닌 약 0.1~0.5초의 오차가 발생할 수 있습니다.
탐색(Seek) 이벤트
| 이벤트 | 설명 | 대상 플레이어 |
|---|---|---|
seeking | 시청자가 재생 시점 이동을 시작한 시점에 발생 | v4, v5 |
seeked | 재생 시점 이동 작업이 완료된 시점에 발생 | v4, v5 |
seek_start | 재생 시점 이동이 감지된 최초 시점에 발생 | v4, v5 |
음향 이벤트
| 이벤트 | 설명 | 대상 플레이어 |
|---|---|---|
muted | 음소거 상태(On/Off) 변경 시 발생 | v3, v4, v5 |
volumechange | 음량 수치 변경 시 발생 | v3, v4, v5 |