플레이어 UI

Prev Next

Classic/VPC 환경에서 이용 가능합니다.

플레이어 UI를 구성하고 설정하는 옵션과 선언적 레이아웃 시스템을 안내합니다.

controls

controls 속성으로 컨트롤바 표시 여부를 설정할 수 있습니다.

<VpePlayer
    accessKey="YOUR_ACCESS_KEY"
    options={{
        playlist: [{ file: 'https://example.com/video.m3u8' }],
        controls: false, // 컨트롤바 숨김
    }}
    onBack={() => navigation.goBack()}
/>

controlBtn

controlBtn 속성으로 개별 버튼의 표시 여부를 설정할 수 있습니다. TV SDK에서는 fullscreen, pictureInPicture 속성이 없습니다.

<VpePlayer
    accessKey="YOUR_ACCESS_KEY"
    options={{
        playlist: [{ file: 'https://example.com/video.m3u8' }],
        controls: true,
        controlBtn: {
            play: true,
            progressBar: true,
            volume: true,
            times: true,
            setting: true,
            subtitle: true,
        },
    }}
    onBack={() => navigation.goBack()}
/>

progressBarColor

progressBarColor 속성으로 진행바의 색상을 설정할 수 있습니다.

<VpePlayer
    accessKey="YOUR_ACCESS_KEY"
    options={{
        playlist: [{ file: 'https://example.com/video.m3u8' }],
        progressBarColor: '#00E0FF',
    }}
    onBack={() => navigation.goBack()}
/>

controlActiveTime

  • controlActiveTime 속성으로 컨트롤바가 자동으로 숨겨지는 시간을 설정합니다. 기본값은 3000ms(3초)입니다.
참고

controlActiveTime0으로 설정하면 컨트롤바가 자동으로 숨겨지지 않고 항상 표시됩니다. 라이브커머스처럼 UI가 늘 보여야 하는 화면에 유용합니다.

<VpePlayer
    accessKey="YOUR_ACCESS_KEY"
    options={{
        playlist: [{ file: 'https://example.com/video.m3u8' }],
        controlActiveTime: 5000, // 5초 후 자동 숨김
    }}
    onBack={() => navigation.goBack()}
/>

lang

lang 속성으로 UI 언어를 설정할 수 있습니다.

언어
ko 한국어 (기본값)
en English
ja 日本語

리모컨 이벤트

TV SDK는 리모컨 D-pad 입력을 자동으로 처리합니다.

이벤트 Apple TV Android TV 동작
select O O 확인/선택
playPause O O 재생/일시정지
up/down O O 컨트롤바 표시/포커스 이동
left/right O O SeekBar에서 ±10초 시킹
menu O X 뒤로가기
rewind/fastForward X O 되감기/빨리감기

레이아웃 시스템

TV SDK의 선언적 레이아웃 시스템을 사용하여 컨트롤바 UI를 커스터마이징할 수 있습니다.

레이아웃 구조

5개 섹션(top, upper, center, lower, bottom)과 seekbar로 구성된 선언적 레이아웃입니다.

사용 가능한 아이템

컨트롤바에 배치할 수 있는 아이템은 다음과 같습니다.

아이템 설명
PlayBtn 재생 / 일시정지 / 다시 재생
BigPlayBtn 중앙 대형 재생 + 이전 / 다음
BackBtn 뒤로가기
SeekBar 탐색바(D-pad 좌/우로 ±10초 탐색)
SkipBackBtn / SkipForwardBtn ±10초 탐색
PrevBtn / NextBtn / NextPrevBtn 트랙 이동
TimeBtn / CurrentTimeBtn / DurationBtn 시간 표시(라이브 시 LIVE 인디케이터)
MuteBtn / VolumeBtn 음소거 / 볼륨(TV에서는 뮤트 토글)
SubtitleBtn 자막 메뉴
SettingBtn 설정 메뉴
MetaDesc 영상 메타 정보
Blank / BlankBtn 빈 공간

TV에서 제거된 아이템은 FullscreenBtn, PipBtn, ShareBtn이며, 레이아웃에 포함해도 무시됩니다.

커스텀 레이아웃 예제

<VpePlayer
    accessKey="YOUR_ACCESS_KEY"
    options={{ playlist: [{ file: 'https://example.com/video.m3u8' }] }}
    layout={{
        top: [
            { items: ['BackBtn'], wrapper: 'Group' },
            { items: ['MetaDesc'] },
            { wrapper: 'Blank', items: [] },
        ],
        center: [
            { items: ['BigPlayBtn'], align: 'center' },
        ],
        lower: [
            { wrapper: 'Blank', items: ['SeekBar'], align: 'center' },
        ],
        bottom: [
            { items: ['PlayBtn'], wrapper: 'Group' },
            { items: ['NextPrevBtn'], wrapper: 'Group' },
            { items: ['MuteBtn'], wrapper: 'Group' },
            { items: ['TimeBtn'], wrapper: 'Group' },
            { wrapper: 'Blank', items: [] },
            { items: ['SubtitleBtn', 'SettingBtn'], wrapper: 'Group' },
        ],
    }}
    onBack={() => navigation.goBack()}
/>

VOD/Live 변형

VOD와 Live에서 서로 다른 레이아웃을 사용할 수 있습니다.

<VpePlayer
    accessKey="YOUR_ACCESS_KEY"
    options={{ playlist: [{ file: 'https://example.com/video.m3u8' }] }}
    layout={{
        vod: {
            bottom: [
                { items: ['PlayBtn'], wrapper: 'Group' },
                { items: ['TimeBtn'], wrapper: 'Group' },
                { wrapper: 'Blank', items: [] },
                { items: ['SettingBtn'], wrapper: 'Group' },
            ],
        },
        live: {
            bottom: [
                { items: ['PlayBtn'], wrapper: 'Group' },
                { items: ['TimeBtn'], wrapper: 'Group' },
                { wrapper: 'Blank', items: [] },
                { items: ['MuteBtn'], wrapper: 'Group' },
            ],
        },
    }}
    onBack={() => navigation.goBack()}
/>

런타임 레이아웃 변경

ref 메서드를 통해 런타임에 레이아웃을 변경할 수 있습니다.

const playerRef = useRef<PlayerHandle>(null);

// 부분 업데이트 (merge=true, 기본값)
playerRef.current?.layout(
    { bottom: [{ items: ['PlayBtn'], wrapper: 'Group' }] },
    true
);

// 전체 교체 (merge=false)
playerRef.current?.layout(newLayout, false);

그룹 옵션

각 그룹에 설정할 수 있는 속성은 다음과 같습니다.

속성 타입 설명
items string[] 레이아웃 아이템 목록
wrapper 'Blank', 'Group' 래퍼 타입
align 'left' , 'right' , 'center' 정렬
size number 버튼 크기(기본 88)