플레이어 UX 옵션

이 페이지에서는 플레이어 UX를 구성하고 설정하는 옵션을 안내합니다.

touchGestures

touchGestures 속성으로 모바일 UI에서 터치 제스처 기능을 활성화할 수 있습니다.

<VpePlayer
    ...
    options={{
        playlist: [
            {
                file: 'https://CDN도메인/example_video_01.mp4'
            },
        ],
        touchGestures: true // 터치 제스처 사용(기본값)(false: 터치 제스처 사용 안 함)
    }}
    ...
/>

텍스트 워터마크

watermarkText 속성으로 시청자를 추적할 수 있는 워터마크를 원하는 텍스트(유저 아이디 + 사이트명 등)로 설정할 수 있습니다.

이 기능을 사용하려면 콘솔에서 해당 플레이어의 워터마크 설정이 활성화되어 있어야 합니다. 워터마크 텍스트는 스크립트를 통해서만 추가할 수 있습니다.
<VpePlayer
    ...
    options={{
        playlist: [
            {
                file: 'https://CDN도메인/example_video_01.mp4'
            },
        ],
        visibleWatermark: true,
        watermarkText: 'UserId@SiteDomain',
    }}
    ...
/>

텍스트 워터마크 상세 설정

텍스트 워터마크에 사용 시 워터마크 랜덤 위치 활성화 여부에 따라 상세 옵션을 설정할 수 있습니다. 워터마크에 대한 상세 옵션은 네이버 클라우드 플랫폼 콘솔에서도 설정할 수 있습니다.

랜덤 위치 활성화

<VpePlayer
    ...
    options={{
        playlist: [
            {
                file: 'https://CDN도메인/example_video_01.mp4'
            },
        ],
        visibleWatermark: true,
        watermarkText: 'UserId@SiteDomain',
        watermarkConfig: {
            randPosition: true,             // 워터마크 랜덤 위치 활성화(기본값)
            randPositionInterVal: 5000,     // 워터마크 위치 랜덤 변경 시간, 기본값: 3000(3초)
        }
    }}
    ...
/>

랜덤 위치 비활성화

<VpePlayer
    ...
    options={{
        playlist: [
            {
                file: 'https://CDN도메인/example_video_01.mp4'
            },
        ],
        visibleWatermark: true,
        watermarkText: 'UserId@SiteDomain',
        watermarkConfig: {
            randPosition: false,    // 워터마크 위치 고정
            x: 10,                  // 가로 위치 %
            y: 2,                   // 세로 위치 %
            opacity: 0.4            // 투명도 0.1 ~ 1
        }
    }}
    ...
/>

전체화면 모드

전체화면을 모달(Modal) 또는 커스텀 전체화면 중 선택하여 개발할 수 있습니다. 모달 방식 전체화면은 커스텀이 불가하나 기본적인 동작이 실행됩니다. 커스텀 전체화면은 안전영역 및 동작 등을 직접 제어할 수 있습니다.

모달형 전체화면

<VpePlayer
    ...
    options={{
        playlist: [
            {
                file: 'https://CDN도메인/example_video_01.mp4'
            },
        ],
        modalFullscreen: false, //true : 플레이어 모달, false : 커스텀 풀스크린
    }}
    ...
/>

커스텀 전체화면

import { View, StatusBar, ScrollView, TouchableOpacity, Text } from 'react-native';
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
import { VpePlayer } from 'vpe-react-native';
import React, { useRef, useState } from 'react';
import { useNavigation } from '@react-navigation/native';

export default function App() {
    const navigation = useNavigation();
    const [isFullScreen, setIsFullScreen] = useState(false);
    const playerRef = useRef(null);

    return (
        <SafeAreaProvider>
            <SafeAreaView edges={isFullScreen ? ['none'] : ['top', 'left', 'right', '']} />
            <StatusBar barStyle={'dark-content'} hidden={isFullScreen ? true : false} />

            <VpePlayer
                ref={playerRef}
                devTestAppId={'com.vpereactnative.example'}
                accessKey={'YOUR_ACCESS_KEY'}
                platform={'pub'}
                events={{
                    fullScreen: (data) => {
                        setIsFullScreen(data.isFullScreen);
                    },
                }}
                options={{
                    playlist: [
                        {
                            file: 'https://CDN도메인/example_video_01.mp4'
                        },
                    ],
                    aspectRatio: '16/9',
                    objectFit: 'contain',
                    modalFullscreen: false, // 커스텀 풀스크린
                }}
            />

            {!isFullScreen && (
                <ScrollView style={{ backgroundColor: '#ffffff' }}>
                    <View style={{ padding: 10 }}>
                        <Text>커스텀 풀스크린 구현 데모</Text>
                    </View>
                </ScrollView>
            )}
        </SafeAreaProvider>
    );
}
React Native