윈도우즈 크롬에서의 PlayReady SL3000 지원
이 가이드는 Windows Chrome 브라우저에서의 PlayReady Security Level 3000 (SL3000) 통합 및 지원에 대해 설명합니다. PlayReady SL3000은 Windows의 하드웨어 기반 DRM 경로를 활용하여 고가치 콘텐츠(4K/UHD, HDR, HEVC 등)를 보호합니다.
과거에는 Microsoft Edge에서만 사용할 수 있었던 이 기능은 이제 Windows 11 사용자를 위한 Google Chrome에서도 하드웨어 보안 재생을 지원합니다.
PlayReady SL3000을 활용하기 위해서는 최종 사용자 환경과 구현이 다음 요구 사항을 충족해야 합니다.
시스템 요구 사항
Section titled “시스템 요구 사항”- 운영 체제: Windows 11 21H2 (빌드 22000) 이상
- 브라우저: Chrome 버전 140.0.7339.0 이상
- 하드웨어: PlayReady SL3000을 지원하는 유효한 GPU 드라이버
- 아키텍처 제한:
- 지원됨: x64 (네이티브)
- 지원되지 않음: x86 빌드, ARM64 빌드, 또는 WoW 에뮬레이션을 통해 ARM64에서 실행되는 x86_64 빌드
- H.264: 기본적으로 지원됨
- HEVC: 지원됨. 단, Microsoft Store에서 HEVC 비디오 확장(HEVC Video Extensions)을 설치해야 함
- AV1: 현재 개발 중/실험적 상태
Chrome에서 PlayReady SL3000 키 시스템을 타겟팅하려면 구체적인 EME(Encrypted Media Extensions) 설정이 필요합니다.
키 시스템 문자열 및 강건성
Section titled “키 시스템 문자열 및 강건성”다음과 같은 키 시스템 문자열과 강건성 설정이 권장됩니다.
- 키 시스템 문자열:
com.microsoft.playready.recommendation.3000 - 비디오/오디오 강건성: 설정 안함 또는 빈 문자열 설정
키 시스템 문자열 자체에 하드웨어 수준의 강건성 적용이 포함되어 있으므로 별도의 Robustness 설정이 불필요합니다.
하드웨어 컨텍스트 재설정 처리
Section titled “하드웨어 컨텍스트 재설정 처리”PlayReady SL3000 사용 시 하드웨어 컨텍스트 재설정이라는 고유한 문제가 발생할 수 있습니다. 이는 다음과 같은 시스템 이벤트로 인해 보안 미디어 경로가 중단될 때 발생합니다.
- 장치가 절전 모드로 진입하거나 깨어날 때 (예: 노트북 덮개를 닫고 열 때)
- 새 모니터를 연결하거나 그래픽 토폴로지가 변경될 때
이러한 상황이 발생하면 복호화 키가 손실되며, 브라우저는 별도의 조치 없이는 자동으로 재생을 재개할 수 없습니다.
브라우저 동작
Section titled “브라우저 동작”재설정이 발생하면 다음과 같은 현상이 일어납니다.
- 브라우저가
"hardware-context-reset"이라는 이유로 모든MediaKeySession객체를 닫습니다. - 미디어 엘리먼트에서
waitingforkey이벤트가 발생합니다. - 재생이 멈춥니다.
구현 요구 사항
Section titled “구현 요구 사항”플레이어 애플리케이션은 반드시 이러한 이벤트를 감지하고 복구 로직을 처리해야 합니다.
복구 전략:
MediaKeySession.closed프라미스(Promise)를 모니터링합니다.- 닫힌 이유가
hardware-context-reset인지 확인합니다. - 확인된 경우, 반드시 MediaKeySession을 다시 생성하고 라이선스를 재요청한 뒤 미디어 엘리먼트를 업데이트해야 합니다.
- 또는, 플레이어 인스턴스를 리로드하거나 사용자에게 “재생” 버튼을 눌러 세션을 다시 시작하도록 유도합니다.
오픈 소스 플레이어 설정
Section titled “오픈 소스 플레이어 설정”널리 사용되는 오픈 소스 플레이어를 사용하는 경우, 올바른 키 시스템 매핑을 위해 특정 설정이 필요합니다.
Shaka Player
Section titled “Shaka Player”Shaka Player는 기본적으로 표준 PlayReady 키 시스템을 사용할 수 있습니다. 따라서 SL3000 문자열을 명시적으로 매핑해야 합니다.
drm: { servers: { 'com.microsoft.playready': 'YOUR_LICENSE_URL', }, keySystemsMapping: { // 표준 PlayReady를 SL3000 특정 문자열로 매핑 'com.microsoft.playready': 'com.microsoft.playready.recommendation.3000' }}Video.js (videojs-contrib-eme)
Section titled “Video.js (videojs-contrib-eme)”특정 SL3000 키 시스템을 사용할 때, 브라우저는 요청 본문에 전체 <PlayReadyKeyMessage> XML을 전송합니다. 일부 라이선스 서버는 <Challenge> 데이터만 기대할 수 있으므로, getLicense 콜백에서 메시지를 파싱해야 할 수도 있습니다.
// getLicense 콜백 구현 의사 코드(Pseudocode)getLicense: function(emeOptions, keyMessage, callback) { // 1. 'keyMessage' (XML) 파싱 // 2. <Challenge> 태그 내부의 콘텐츠 추출 // 3. 추출된 챌린지를 라이선스 서버로 전송}기능 쿼리 예제
Section titled “기능 쿼리 예제”재생을 초기화하기 전에 지원 여부를 확인하려면 navigator.mediaCapabilities.decodingInfo 기능 쿼리를 사용할 수 있습니다.
H.264 지원 확인
Section titled “H.264 지원 확인”async function checkPlayReadySL3000H264() { const config = { type: 'media-source', video: { contentType: 'video/mp4; codecs="avc1.4d401f"', // 프로필/레벨에 맞게 조정 width: 1920, height: 1080, bitrate: 2000000, framerate: 30 }, keySystemConfiguration: { keySystem: 'com.microsoft.playready.recommendation.3000', // SL3000 키 시스템 persistentStateRequired: 'true', // SL3000에 필수 video: { robustness: "" } // 빈 값 또는 "3000" } };
try { const result = await navigator.mediaCapabilities.decodingInfo(config); if (result.supported && result.keySystemAccess) { console.log('PlayReady SL3000 H.264 is supported.'); } else { console.log('PlayReady SL3000 H.264 is NOT supported.'); } } catch (e) { console.error('Capability check failed', e); }}HEVC 지원 확인
Section titled “HEVC 지원 확인”Windows에 HEVC 확장이 설치되어 있는지 확인합니다.
async function checkPlayReadySL3000HEVC() { const config = { type: 'media-source', video: { contentType: 'video/mp4; codecs="hvc1.1.6.L93.B0"', // HEVC 코덱 문자열 조정 width: 1920, height: 1080, bitrate: 2000000, framerate: 30 }, keySystemConfiguration: { keySystem: 'com.microsoft.playready.recommendation.3000', persistentStateRequired: 'true', video: { robustness: "" } } }; // ... 위와 동일하게 decodingInfo 실행}재생이 실패하거나 키 시스템이 감지되지 않는 경우 다음 사항을 확인합니다.
1. 브라우저 플래그
Section titled “1. 브라우저 플래그”Chrome 설정에서 하드웨어 보안 복호화가 활성화되어 있는지 확인합니다.
- 주소창에
chrome://flags/#enable-hardware-secure-decryption입력. - 설정값을 Enabled로 변경.
2. 미디어 내부 로그
Section titled “2. 미디어 내부 로그”Chrome의 내부 로깅 기능을 사용하여 CDM 로드 및 오류를 디버깅합니다.
- CDM 정보:
chrome://media-internals#cdmscom.microsoft.playready.recommendation을 검색하여 등록 여부 확인.
- 재생 로그:
chrome://media-internals#playersPIPELINE_ERROR_DECODE오류나 라이선스 교환 실패 로그 확인.
3. Windows HWDRM 재설정
Section titled “3. Windows HWDRM 재설정”드물게 치명적인 오류가 발생할 경우, Windows가 HWDRM 기능을 자동으로 비활성화할 수 있습니다. 테스트 목적으로 콘솔을 통해 수동으로 다시 활성화하려면 다음을 수행합니다.
MF_MEDIAKEYSESSION_TYPE_PERSISTENT_USAGE_RECORD타입의 세션을 생성합니다.- 세션 ID로
ResetHardwareDRMDisabled 1.0문자열을 사용하여Load를 호출합니다.
4. 코덱 설치 확인
Section titled “4. 코덱 설치 확인”Windows에 설치된 코덱 버전을 확인하려면 PowerShell에서 다음 명령어를 실행합니다.
get-appxpackage *hevc* | Select-Object Versionget-appxpackage *av* | Select-Object Version