도브러너 DRM 멀티키 구현 가이드

개요

이 가이드 문서는 도브러너 고객을 위한 멀티키 시나리오 구현과 하드웨어 DRM 활용도 향상을 목표로 합니다. 멀티키 방식을 사용하여 콘텐츠 해상도에 따라 차별화된 보안 수준(L1/L3, SL2000/3000)을 적용하는 방법에 대한 상세한 지침을 제공합니다. 이 문서는 고객이 이러한 고급 DRM 전략을 이해하고 효과적으로 구현할 수 있도록 하는 기술 참조 자료로 사용됩니다.

멀티키 개념 및 보안적 중요성

멀티키의 정의

멀티키 콘텐츠를 통한 하드웨어 DRM 지원 (예시)
멀티키 콘텐츠를 통한 하드웨어 DRM 지원 (예시)

멀티키 DRM은 적응형 스트리밍 콘텐츠의 다양한 트랙 유형에 대해 서로 다른 암호화 키를 적용하는 정교한 콘텐츠 보호 전략을 의미합니다. 이 접근 방식을 통해 비디오/오디오 트랙 또는 해상도별 콘텐츠 세그먼트에 대한 세밀한 제어가 가능합니다.

멀티키 구현의 주요 특징:

  • 각 콘텐츠 자산에는 고유한 ContentID가 할당됩니다.
  • 이 ContentID 내에서 개별 KeyID가 특정 Track Type에 할당됩니다.
  • 시스템은 SD, HD, UHD1, UHD2, Audio의 5가지 주요 Track Type을 인식합니다.
  • DRM 라이선스 발급 시 각 Track Type마다 다른 보안 정책을 적용할 수 있습니다.

멀티키 구현의 전략적 이점

콘텐츠 서비스는 멀티키 구현을 통해 다음과 같은 이점을 얻을 수 있습니다.

  1. 프리미엄 콘텐츠에 대한 강화된 보호: 1080p 이상의 고해상도를 포함하는 적응형 스트리밍(ABR) 콘텐츠의 경우, 콘텐츠 제공업체는 고해상도 트랙에 대해 선택적으로 하드웨어 DRM 요구사항을 적용할 수 있습니다.

  2. 유연한 비즈니스 모델 지원: 멀티키 및 멀티 매니페스트 기술을 통해 구독 등급 또는 사용자 분류에 따라 이용 가능한 비디오 품질을 제한함으로써 콘텐츠 액세스에 대한 세밀한 제어가 가능합니다.

멀티키 콘텐츠 패키징

멀티 매니페스트 적용

미디어 스트리밍에서의 매니페스트란 스트리밍될 비디오/오디오/자막 등의 트랙에 대한 세부 정보가 포함된 텍스트 기반의 문서를 의미합니다. DASH 콘텐츠의 .mpd 파일과 HLS 콘텐츠의 .m3u8 파일이 매니페스트에 해당하며, 클라이언트 플레이어는 각 매니페스트 파일의 URL을 입력받아 스트리밍 재생을 수행합니다.

단일 매니페스트(DASH mpd 또는 HLS m3u8)에 트랙 별 보안 정책을 적용하는 경우, 멀티키 패키징으로 트랙 별 키가 구분되어 있더라도 하드웨어 DRM 또는 출력 보안이 지원되지 않는 클라이언트 환경에서는 콘텐츠 재생에 문제가 발생할 수 있습니다.

멀티 매니페스트 접근 방식은 단일 매니페스트 적용에 따른 잠재적인 재생 문제를 해결할 수 있습니다.

  • 문제점: 단일 매니페스트에 멀티키 라이선스 적용 시, ABR 작동 중 플레이어가 지원되지 않는 보안 수준의 트랙에 접근하려 할 때 재생 실패로 이어질 수 있습니다.
  • 해결책: 패키징 단계에서 Track Type별로 여러 매니페스트 파일을 생성합니다. 클라이언트 애플리케이션에서는 해당 환경의 보안 수준을 감지해 지원 가능한 매니페스트와 보안 정책을 적용합니다. 이를 통해 성공적인 재생에 필수적인 트랙 정보와 키만 포함하는 라이선스 발급이 가능합니다.

멀티키 패키징 방법

도브러너는 멀티키 콘텐츠 패키징을 위해 자체 패키징 도구 및 서드파티 솔루션 연동을 지원합니다. 각 도구의 특징과 사용 방법은 다음과 같습니다.

멀티키 콘텐츠 패키징 시, 오디오 트랙에 대한 별도의 보안 요구사항이 없다면 오디오 암호화를 적용하지 않는 것을 권장합니다. 이를 통해 FairPlay DRM과 같은 일부 환경에서 암호화된 오디오 트랙의 재생 문제를 방지할 수 있습니다.

DRM CLI Packager (v3.10.0 이상)

도브러너 DRM CLI Packager는 로컬 환경에서 콘텐츠를 암호화하고 패키징하기 위한 강력한 명령줄 도구입니다.

주요 특징:

  • 다양한 운영 체제(Windows, macOS, Linux) 지원 DASH, HLS, CMAF 형식의 패키징 지원
  • 멀티키 및 멀티 매니페스트 생성 기능 자막 파일 처리 지원
  • 세밀한 트랙 타입 제어 옵션

사용 방법:

  1. 각 해상도별 mp4 파일을 입력 파일(-i)로 지정합니다.
  2. 명령어에 --multi_key 옵션과 --generate_tracktype_manifests 옵션을 추가합니다.
  3. 오디오 트랙의 암호화 비활성화를 위해 --skip_audio_encryption 옵션을 추가합니다. (권장 사항)
  4. 필요한 경우, 각 트랙 타입(SD, HD 등)에 지정되는 해상도를 조정하기 위해 다음 옵션을 사용합니다.
  • –-max_sd_height: SD 트랙으로 패키징될 최대 해상도 설정 (기본값: 480)
  • -–max_hd_height: HD 트랙으로 패키징될 최대 해상도 설정 (기본값: 1080)
  • –-max_uhd1_height: UHD1 트랙으로 패키징될 최대 해상도 설정 (기본값: 2160)

패키징 명령어 예제:

PallyConPackager --enc_token <enc token> --content_id sample_multikey --dash --hls --multi_key --generate_tracktype_manifests --skip_audio_encryption -i <input file1> <input file2> ... 

패키징 결과:

  • DASH:
    • /sample_multikey/dash/stream_SD.mpd
    • /sample_multikey/dash/stream_HD.mpd
    • /sample_multikey/dash/stream_UHD1.mpd
    • /sample_multikey/dash/stream_UHD2.mpd
  • HLS:
    • /sample_multikey/hls/master_SD.m3u8
    • /sample_multikey/hls/master_HD.m3u8
    • /sample_multikey/hls/master_UHD1.m3u8
    • /sample_multikey/hls/master_UHD2.m3u8

TNP(Transcoding & Packaging) 서비스

도브러너 TNP 서비스는 클라우드 기반의 트랜스코딩 및 패키징 솔루션으로, 별도의 패키징 환경 구축 없이도 쉽고 빠르게 콘텐츠 패키징 작업을 수행할 수 있습니다.

주요 특징:

  • 웹 기반 인터페이스를 통한 쉬운 작업 관리
  • 자동화된 워크플로우 및 다양한 입력 포맷 지원
  • 고성능 클라우드 기반 처리
  • 멀티키 및 멀티 매니페스트 옵션 제공
  • 사용자 정의 가능한 트랜스코딩 프로필

사용 방법:

  1. 도브러너 Console에 로그인합니다.
  2. 트랜스코딩 & 패키징설정 메뉴로 이동합니다.
  3. 서비스 상태에서 활성화 요청을 통해 TNP 서비스 사용을 활성화합니다.
  4. 새 작업을 생성할 때, 작업 생성 5단계 작업 동작에서 다음 옵션을 설정할 수 있습니다.
  • 멀티키 및 멀티 매니페스트 옵션
  • 오디오 트랙 암호화 옵션 (오디오 암호화 제외 권장)
  • 각 트랙 타입별 최대 해상도

TNP 서비스를 사용하면 복잡한 로컬 설정 없이도 고품질의 멀티키 DRM 콘텐츠를 쉽게 생성할 수 있습니다. 또한, 대량의 콘텐츠를 처리해야 하는 경우 특히 유용합니다.

AWS MediaConvert 또는 MediaPackage 연동

AWS 미디어 서비스에서 제공하는 MediaConvertMediaPackageSPEKE v2 규격을 통해 멀티키 패키징을 지원합니다. (참고 링크)

AWS 미디어 서비스의 멀티키 패키징과 멀티 매니페스트 생성에 대한 세부 사항은 AWS의 가이드 문서를 참고하거나 AWS 측에 기술 지원을 요청하시기 바랍니다.

클라이언트 보안 수준 감지

효과적인 멀티키 DRM 구현을 위해서는 클라이언트 기기에서 지원하는 보안 수준을 감지해 적절한 매니페스트와 보안 정책을 적용하는 기능이 필요합니다. 이 섹션에서는 웹 또는 네이티브 클라이언트 애플리케이션에서 지원되는 DRM 보안 수준(SL2000/SL3000, L1/L3) 및 HDCP 버전을 감지하는 방법을 설명합니다.

Widevine 클라이언트

Widevine DRM을 지원하는 안드로이드 기기 또는 크롬 브라우저 환경의 경우, 멀티 매니페스트나 클라이언트 보안 수준에 따른 별도 처리 없이도 다음과 같은 멀티키 시나리오가 기본적으로 지원됩니다.

  • 멀티키 콘텐츠: 최고 해상도 비디오 트랙까지 포함한 단일 메니페스트 사용
  • DRM 라이선스 토큰: 트랙 별로 서로 다른 보안 정책이 적용된 단일 토큰 사용
  • 재생 시나리오: 클라이언트에서 지원되는 보안 수준(Widevine L1/L3, HDCP 적용 여부 및 버전 등)에 따라 단일 매니페스트 내에서 재생 가능한 비디오 트랙이 자동 재생됨

일부 Widevine 클라이언트 환경에서 위와 같은 재생 시나리오에 문제가 발생하거나 요금제에 따른 해상도 제한이 필요한 경우, 멀티 메니페스트와 다음과 같은 클라이언트 측 구현을 통해 처리할 수 있습니다.

웹 브라우저 환경

크롬 등 Widevine DRM을 지원하는 웹 브라우저의 경우, 아래 샘플 코드와 HDCP Policy Check 코드를 참고해 보안 수준을 감지할 수 있습니다.

function isWindowsChrome() {
  return navigator.userAgent.indexOf("Windows") > -1 && navigator.userAgent.indexOf("Chrome") > -1;
}

// Request media key system access
async function tryKeySystemAccess(keySystem, config) {
  try {
      await navigator.requestMediaKeySystemAccess(keySystem, config);
      return true;
  } catch {
      return false;
  }
}

// Base EME configuration
const baseEmeConfig = [{
  initDataTypes: ['cenc'],
  videoCapabilities: [{
      contentType: 'video/mp4;codecs="avc1.42E01E"'
  }],
  audioCapabilities: [{
      contentType: 'audio/mp4;codecs="mp4a.40.2"'
  }]
}];

// Widevine robustness levels in descending order
const robustnessLevels = [
  'HW_SECURE_ALL',
  'HW_SECURE_DECODE', 
  'HW_SECURE_CRYPTO',
  'SW_SECURE_DECODE',
  'SW_SECURE_CRYPTO'
];

// Create EME config with robustness
function createEmeConfigWithRobustness(videoRobustness, audioRobustness) {
  return [{
      ...baseEmeConfig[0],
      videoCapabilities: [{
          ...baseEmeConfig[0].videoCapabilities[0],
          robustness: videoRobustness
      }],
      audioCapabilities: [{
          ...baseEmeConfig[0].audioCapabilities[0],
          robustness: audioRobustness
      }]
  }];
}

async function getWidevineHighestSecurityConfig() {
  const keySystems = isWindowsChrome() ? 
      ['com.widevine.alpha.experiment', 'com.widevine.alpha'] : 
      ['com.widevine.alpha'];

  // Try with robustness levels
  for (const keySystem of keySystems) {
    for (const videoRobustness of robustnessLevels) {
        for (const audioRobustness of robustnessLevels) {
            const succeed = await tryKeySystemAccess(
                keySystem, 
                createEmeConfigWithRobustness(videoRobustness, audioRobustness)
            );
            
            if (succeed) {
                if (videoRobustness.startsWith('HW_SECURE_') || audioRobustness.startsWith('HW_SECURE_')) {
                    supportL1 = true;
                }
                return { keySystem, videoRobustness, audioRobustness };
            }
        }
    }
  }

안드로이드 네이티브 환경

안드로이드 네이티브 어플리케이션의 경우, Android MediaDrm에서 제공하는 API를 통해 Widevine 보안 수준과 HDCP 지원 정보를 확인할 수 있습니다.

fun getWidevineSecurity() {
        var mediaDrm: MediaDrm? = null
        return try {
            mediaDrm = MediaDrm(C.WIDEVINE_UUID)
            val securityLevel = mediaDrm.getPropertyString(PROPERTY_SECURITY_LEVEL)
            val hdcpLevel = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                mediaDrm.getPropertyString(PROPERTY_HDCP_LEVEL)
            } else {
                "Unknown"
            }
            print("securityLevel : $securityLevel, hdcpLevel : $hdcpLevel")
        } catch (e: Exception) {
            e.printStackTrace()
        } finally {
            mediaDrm?.let {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                    it.close()
                } else {
                    it.release()
                }
            }
        }
    }

PlayReady 클라이언트

웹 브라우저 환경

PlayReady DRM을 지원하는 엣지 브라우저의 경우, 다음과 같은 EME KeySystem API를 사용해 지원되는 보안 수준을 확인할 수 있습니다.

// Request media key system access
async function tryKeySystemAccess(keySystem, config) {
  try {
      await navigator.requestMediaKeySystemAccess(keySystem, config);
      return true;
  } catch {
      return false;
  }
}

// Base EME configuration
const baseEmeConfig = [{
  initDataTypes: ['cenc'],
  videoCapabilities: [{
      contentType: 'video/mp4;codecs="avc1.42E01E"'
  }],
  audioCapabilities: [{
      contentType: 'audio/mp4;codecs="mp4a.40.2"'
  }]
}];

supportSl3000 = await tryKeySystemAccess('com.microsoft.playready.recommendation.3000', baseEmeConfig);
윈도우즈 네이티브 환경

PlayReady를 사용하는 Windows 애플리케이션의 경우, PlayReadyStatics 클래스를 사용할 수 있습니다.

using Windows.Media.Protection.PlayReady;

public class SecurityLevelDetector
{
    public static SecurityInfo GetPlayReadySecurity()
    {
        try
        {
            var securityLevel = PlayReadyStatics.PlayReadyCertificateSecurityLevel;
            var supportHardwareDRM = PlayReadyStatics.CheckSupportedHardware(PlayReadyHardwareDRMFeatures.HardwareDRM);

            return new SecurityInfo
            {
                SecurityLevel = securityLevel,
                SupportHardwareDRM = supportHardwareDRM
            };
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine($"PlayReady 보안 정보 가져오기 오류:  {ex.Message}"); 
            return new SecurityInfo
            {
                SecurityLevel = 150,
                SupportHardwareDRM = false
            };
        }
    }

    public class SecurityInfo
    {
        public uint SecurityLevel { get; set; }
        public bool SupportHardwareDRM { get; set; }
    }
}

FairPlay 클라이언트

맥OS와 iOS 사파리 브라우저와 같이 FairPlay DRM을 지원하는 웹 클라이언트 환경에서는 지원 가능한 HDCP 버전을 직접적으로 감지할 수 없습니다. 다만 HDCP가 적용된 콘텐츠를 재생 시도하거나 재생 중에 외부 출력과 관련한 환경 변화(예: 외부 모니터 연결)가 있는 경우, 다음과 같이 해당 이벤트를 감지해 매니페스트와 보안 정책을 적절하게 적용할 수 있습니다.

const session = video.mediaKeys.createSession();
                
// 키 상태 변경 리스너
session.addEventListener('keystatuseschange', () => {
  const statuses = session.keyStatuses;
  let statusText = '';
  statuses.forEach((status, keyId) => {
    statusText += `상태: ${status}, `;
  });
  Logger.info(`키 상태 변경: ${statusText || '없음'}`);
});

재생하는 콘텐츠에 적용된 HDCP 보안 정책을 지원하지 못하는 클라이언트 환경에서는 위 이벤트 리스너에서 Key Statusoutput-restricted인 이벤트를 확인할 수 있습니다. 이때 클라이언트 애플리케이션에서 추가 구현을 통해 해상도 제한이 적용된 매니페스트와 보안 정책으로 전환하면 콘텐츠 재생 오류를 방지하고 사용자 경험을 강화할 수 있습니다.

적절한 매니페스트 선택

클라이언트 보안 수준을 감지한 후에는 해당 환경에서 재생 가능한 트랙이 적용된 매니페스트를 플레이어에 설정합니다. 아래 예시 코드에 필요에 따라 FairPlay 관련 코드와 HDCP 적용 관련 로직을 추가할 수 있습니다.

function selectManifest(securityLevel, drm) {
    let manifestUrl;

    switch (drm) {
        case 'widevine':
            if (securityLevel === 1) {
                manifestUrl = 'https://<Service_Domain>/Sample/dash/stream_UHD1.mpd'
            } else {
                manifestUrl = 'https://<Service_Domain>/Sample/dash/stream_HD.mpd'
            }
            break;
        case 'playready':
            if (securityLevel >= 3000) {
                manifestUrl = 'https://<Service_Domain>/Sample/dash/stream_UHD1.mpd'
            } else if (securityLevel >= 2000) {
                manifestUrl = 'https://<Service_Domain>/Sample/dash/stream_HD.mpd'
            } else {
                manifestUrl = 'https://<Service_Domain>/Sample/dash/stream_SD.mpd'
            }
            break;

        default:
            manifestUrl = 'https://<Service_Domain>/Sample/dash/stream_SD.mpd';
    }

    return manifestUrl;
}

라이선스 토큰 정책 설정

Widevine 클라이언트

Widevine 환경에서의 보안 수준 별 재생 제어는 다음과 같은 단일 보안 정책으로 처리할 수 있습니다. 아래 예시에서는 SD, HD, UHD1 비디오 트랙에 각각 다른 수준의 Widevine Security Level과 외부 출력 보안을 설정하였습니다.

{
    "policy_version": 2,
    "playback_policy": {
        "persistent": false,
        "allowed_track_types": "ALL"
    },
    "security_policy": [
        {
            "track_type": "SD",
            "widevine": {
                "security_level": 1,
                "required_hdcp_version": "HDCP_NONE",
                "required_cgms_flags": "CGMS_NONE"
            }
        },
        {
            "track_type": "HD",
            "widevine": {
                "security_level": 1,
                "required_hdcp_version": "HDCP_V1",
                "required_cgms_flags": "COPY_NEVER"
            }
        },
        {
            "track_type": "UHD1",
            "widevine": {
                "security_level": 5,
                "required_hdcp_version": "HDCP_V2_2",
                "required_cgms_flags": "COPY_NEVER",
                "hdcp_srm_rule": "CURRENT_SRM"
            }
        }
    ]
}

PlayReady 클라이언트

PlayReady 환경에서 멀티키 시나리오를 지원하기 위해서는 클라이언트 보안 수준에 따라 라이선스 토큰의 보안 정책도 다르게 적용되어야 합니다.

하드웨어 DRM 환경

클라이언트 보안 수준 감지 기능을 통해 PlayReady SL3000(하드웨어 수준 DRM)과 HDCP 지원이 확인된 환경에 대해서는 다음 예시와 같은 라이선스 토큰 보안 정책을 적용할 수 있습니다.

{
    "policy_version": 2,
    "playback_policy": {
        "persistent": false,
        "allowed_track_types": "ALL"
    },
    "security_policy": [
        {
            "track_type": "ALL_VIDEO",
            "playready": {
                "security_level": 3000,
                "digital_video_protection_level": 300,
                "analog_video_protection_level": 201,
                "digital_audio_protection_level": 300,
                "require_hdcp_type_1": true
            }
        }
    ]
}

소프트웨어 DRM 환경

소프트웨어 수준(SL2000, SL150) 또는 HDCP가 지원되지 않는 환경에 대해서는 아래 예시와 같은 토큰 보안 정책을 적용할 수 있습니다.

{
    "policy_version": 2,
    "playback_policy": {
        "persistent": false,
        "allowed_track_types": "ALL"
    },
    "security_policy": [
        {
            "track_type": "ALL_VIDEO",
            "playready": {
                "security_level": 150,
                "digital_video_protection_level": 100,
                "analog_video_protection_level": 100,
                "digital_audio_protection_level": 100
            }
        }
    ]
}
  • 위와 같이 클라이언트 환경에 따라 서로 다른 보안 정책을 적용하기 위해서는 콘텐츠 서비스 백엔드에 라이선스 토큰을 요청할 때 클라이언트에서 감지한 보안 수준을 전달하는 구현이 필요합니다.
  • 위에 명시된 클라이언트 환경 별 보안 정책은 참고용 예시입니다. 서비스에 적용할 때는 해당 콘텐츠에 요구되는 보안 수준에 따라 적합한 정책으로 설정하시기 바랍니다.

FairPlay 클라이언트

소프트웨어 수준과 하드웨어 수준으로 구분되는 Widevine, PlayReady 클라이언트 환경과 달리, FairPlay 클라이언트는 모두 하드웨어 수준 DRM을 지원합니다. 따라서 멀티키 시나리오 적용 시 FairPlay 클라이언트에 대해서는 주로 외부 출력 보안 여부에 따라 영상의 최대 해상도를 제한합니다.

외부 출력 보안이 지원되는 환경

HDCP Type 1 (v2.2 이상) 환경에 대해서는 다음과 같은 토큰 보안 정책과 고해상도 트랙이 포함된 매니페스트를 적용할 수 있습니다. 또한 특정 콘텐츠의 보안 요구 사항에 따라 HDCP Type 0(v2.1 및 이전 버전)을 지정하거나 외부 출력을 허용할 수도 있습니다.

{
    "policy_version": 2,
    "playback_policy": {
        "persistent": false,
        "allowed_track_types": "ALL"
    },
    "security_policy": [
        {
            "track_type": "ALL_VIDEO",
            "fairplay": {
                "hdcp_enforcement": 1,
                "allow_airplay": false,
                "allow_av_adapter": false
            }
        }
    ]
}

출력 보안 미지원 환경

HDCP가 지원되지 않거나 AirPlay, AV 어댑터 등을 통한 외부 출력이 필요한 경우, 다음과 같은 토큰 보안 정책과 함께 저해상도로 제한된 매니페스트를 적용할 수 있습니다.

{
    "policy_version": 2,
    "playback_policy": {
        "persistent": false,
        "allowed_track_types": "SD_ONLY"
    },
    "security_policy": [
        {
            "track_type": "SD",
            "fairplay": {
                "hdcp_enforcement": -1,
                "allow_airplay": true,
                "allow_av_adapter": true
            }
        }
    ]
}

요금제에 따른 해상도 제한

클라이언트 보안 수준과 무관하게 사용자가 가입한 요금제에 따라 비디오 해상도를 제한하려면 멀티 매니페스트를 활용해 다음과 같이 구현할 수 있습니다.

  1. 재생할 콘텐츠의 SD 트랙용 mpd 또는 m3u8을 지정합니다.
  • DASH: https://<Service_Domain>/Sample/dash/stream_SD.mpd
  • HLS: https://<Service_Domain>/Sample/hls/master_SD.m3u8
  1. TokenPolicy를 다음과 같이 지정합니다. 필요에 따라 SD가 아닌 HD 해상도까지 허용할 수도 있습니다.
  • playback_policyallowed_track_typesSD_ONLY로 설정
  • SD 트랙에 대한 각 DRM 별 보안 정책 설정
{
    "policy_version": 2,
    "playback_policy": {
        "persistent": false,
        "license_duration": 0,
        "allowed_track_types": "SD_ONLY"
    },
    "security_policy": [
        {
            "track_type": "SD",
            "widevine": {
                "security_level": 1,
                "required_hdcp_version": "HDCP_NONE",
                "required_cgms_flags": "CGMS_NONE"
            },
            "playready": {
                "security_level": 150,
                "digital_video_protection_level": 100,
                "analog_video_protection_level": 100,
                "digital_audio_protection_level": 100
            },
            "fairplay": {
                "hdcp_enforcement": -1,
                "allow_airplay": true,
                "allow_av_adapter": true
            }
        }
    ]
}

이러한 탐지 및 선택 메커니즘을 구현하면 멀티키 DRM 솔루션이 다양한 디바이스와 플랫폼에서 필요한 보안 수준을 유지하면서 가능한 최고 품질의 콘텐츠를 제공하도록 보장할 수 있습니다.

멀티키 시나리오 구현에 대한 추가 지원이나 설명이 필요한 경우, 도브러너 기술 지원팀에 문의하시기 바랍니다.

다음