Documentation Index

Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt

Use this file to discover all available pages before exploring further.

Content authentication

Prev Next

Available in Classic and VPC

Learn how to play content protected by Digital Rights Management (DRM) in the TV SDK.

Caution

DRM does not work on simulators or emulators. Test on a real device.

DRM by platform

The supported DRM and playback engines by platform are as follows:

Platform DRM Engine
Android TV Widevine(com.widevine.alpha) ExoPlayer
tvOS FairPlay(com.apple.fps) AVPlayer

Method 1: Web SDK-compatible DRM key

The SDK automatically selects the appropriate DRM depending on the platform. Android TV uses Widevine, while tvOS uses FairPlay.

<VpePlayer
    accessKey="YOUR_ACCESS_KEY"
    options={{
        playlist: [{
            drm: {
                'com.widevine.alpha': {
                    src: 'https://example.com/manifest.mpd',
                    licenseUri: 'https://license-server.com/widevine',
                    licenseRequestHeader: {
                        'pallycon-customdata-v2': 'DRM_TOKEN',
                    },
                },
                'com.apple.fps': {
                    src: 'https://example.com/index.m3u8',
                    certificateUri: 'https://license-server.com/cert',
                    certificateRequestHeader: {
                        'pallycon-customdata-v2': 'DRM_TOKEN',
                    },
                    licenseUri: 'https://license-server.com/fairplay',
                    licenseRequestHeader: {
                        'pallycon-customdata-v2': 'DRM_TOKEN',
                    },
                },
            },
            poster: 'https://example.com/poster.jpg',
            description: { title: 'DRM video' },
        }],
    }}
    onBack={() => navigation.goBack()}
/>

Method 2: Direct DRM format with react-native-video

You can also use the DRM format of react-native-video directly.

FairPlay(tvOS)

<VpePlayer
    accessKey="YOUR_ACCESS_KEY"
    options={{
        playlist: [{
            file: 'https://example.com/video.m3u8',
            drm: {
                type: 'fairplay',
                licenseServer: 'https://license-server.com/fairplay',
                certificateUrl: 'https://license-server.com/cert',
                headers: { 'pallycon-customdata-v2': 'DRM_TOKEN' },
            },
        }],
    }}
    onBack={() => navigation.goBack()}
/>

Widevine(Android TV)

<VpePlayer
    accessKey="YOUR_ACCESS_KEY"
    options={{
        playlist: [{
            file: 'https://example.com/video.mpd',
            drm: {
                type: 'widevine',
                licenseServer: 'https://license-server.com/widevine',
                headers: { 'pallycon-customdata-v2': 'DRM_TOKEN' },
            },
        }],
    }}
    onBack={() => navigation.goBack()}
/>

Secure Token

You can apply Secure Token to playback source and support OneTimeUrl as the token property. You can also refresh the token during playback.

const playerRef = useRef<PlayerHandle>(null);

<VpePlayer
    ref={playerRef}
    accessKey="YOUR_ACCESS_KEY"
    options={{
        playlist: [{ file: 'https://example.com/video.m3u8' }],
        token: 'token=st=1675320871~exp=1675320901~acl=....',
    }}
    onBack={() => navigation.goBack()}
/>

// Token renewal during playback
playerRef.current?.tokenChange('NEW_TOKEN_VALUE');