필수 구성 요소
iOS 10+ 디바이스에서 FairPlay에 대한 오프라인 DRM을 구현하기 전에 다음을 수행합니다.
-
Apple FairPlay 라이선스 요구 사항 및 구성 읽기
- Apple Developer Network에서 FPS SDK를 가져옵니다. FPS SDK에는 두 가지 구성 요소가 들어 있습니다.
- FPS Server SDK에는 KSM(키 보안 모듈), 클라이언트 샘플, 사양 및 테스트 벡터 집합이 들어 있습니다.
- FPS 인증서 고객별 프라이빗 키 및 애플리케이션 비밀 키를 생성하는 방법에 대한 지침과 함께 D 함수 사양이 포함된 FPS 배포 팩입니다. Apple은 사용이 허가된 콘텐츠 공급자에게만 FPS Deployment Pack을 발급합니다.
- FPS 인증서 생성의 일부로 받은 .der/.cer 인증서 파일에는 공개 키가 포함되어 있으며 클라이언트에서 사용할 수 있습니다. 프라이빗 키(.pfx)는 Azure Key Vault 또는 다른 보안 위치에서 보호되어야 합니다.
Azure Key Vault FairPlay 프라이빗 키(.pfx) 저장
Apple에서 받은 프라이빗 키(.pfx)는 보안 인증서로 취급해야 하며 Azure Key Vault에 저장할 수 있습니다.
- 먼저 관리자가 .pfx 인증서 파일을 기본 64 텍스트 파일로 변환해야 합니다.
- 변환된 파일은 Azure DevOps Services에 보안 텍스트 파일로 저장할 수 있습니다.
- 그런 다음, 문자열을 Azure KeyVault에 수동으로 "비밀 개체"로 저장하거나, 솔루션에 대한 배포/빌드 스크립트의 일부로 저장할 수 있습니다. Azure KeyVault에 FairPlay 프라이빗 인증서를 저장하는 예제는 Gridwich 프로젝트 샘플 코드에서 확인할 수 있습니다.
- 필요에 따라 .pfx 파일 암호를 키 자격 증명 모음에 비밀로 저장할 수 있습니다.
예제 CLI 스크립트
Base64로 인코딩된 프라이빗 키 파일을 Azure KeyVault에 복사하려면 다음을 수행합니다.
set -eu
echo key vault : $SHARED_KV_NAME
echo "Copying FairPlay certificate to key vault as secret"
az keyvault secret set --vault-name $SHARED_KV_NAME -n ams-fairPlay-certificate-b64 -f $(FairPlayCertificate.secureFilePath) --output none
샘플 복제
Media Services .Net 샘플을 복제합니다.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
코드 수정
.NET을 사용하여 DRM으로 암호화에서 코드를 수정하여 FairPlay 구성을 추가합니다.
참고
Widevine은 GovCloud 지역에서 사용할 수 없습니다.
필수 구성 요소
Android 디바이스에서 Widevine에 대한 오프라인 DRM을 구현하기 전에 먼저 다음을 수행해야 합니다.
오프라인 모드 사용
Widevine 라이선스에 오프라인 모드를 사용하도록 설정하려면 Widevine 라이선스 템플릿을 구성합니다.
policy_overrides 개체에서 ConfigureWidevineLicenseTemplate에 표시된 대로 can_persist 속성을 true로 설정합니다.
Android 디바이스용 네이티브 플레이어 앱을 개발하는 가장 쉬운 방법은 오픈 소스 비디오 플레이어 SDK인 Google ExoPlayer SDK를 사용하는 것입니다. ExoPlayer는 MPEG-DASH 및 Microsoft 부드러운 스트리밍 배달 프로토콜을 포함하여 Android의 네이티브 MediaPlayer API에서 현재 지원하지 않는 기능을 지원합니다.
ExoPlayer 버전 2.6 이상에는 오프라인 Widevine DRM 재생을 지원하는 여러 클래스가 포함되어 있습니다. 특히 클래스는 OfflineLicenseHelper
오프라인 라이선스를 다운로드, 갱신 및 해제하기 위해 DefaultDrmSessionManager를 쉽게 사용할 수 있는 유틸리티 함수를 제공합니다. SDK 폴더 library/core/src/main/java/com/google/android/exoplayer2/offline/
에 제공된 클래스는 오프라인 비디오 콘텐츠 다운로드를 지원합니다.
다음과 같은 클래스 목록은 Android용 ExoPlayer SDK에서 오프라인 모드를 지원합니다.
library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java
library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java
library/core/src/main/java/com/google/android/exoplayer2/offline/Downloader.java
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/offline/DashDownloader.java
개발자는 애플리케이션 개발 중에 ExoPlayer 개발자 가이드 및 해당 개발자 블로그를 참조하는 것이 좋습니다.
이전 Android 디바이스 사용
일부 이전 Android 디바이스의 경우, 다음 policy_overrides 속성(Widevine 라이선스 템플릿: rental_duration_seconds, playback_duration_seconds 및 license_duration_seconds)에 대한 값을 설정해야 합니다. 또는 로 설정할 0
수 있습니다. 즉, 시간 제한이 없습니다.
Xamarin을 사용하여 Android 재생 앱 빌드
다음 링크를 사용하여 ExoPlayer에 대한 Xamarin 바인딩을 찾을 수 있습니다.
스레드 Xamarin 바인딩도 참조하세요.
Android용 Chrome 플레이어 앱
안드로이드 v. 62용 Chrome의 릴리스를 시작으로 EME의 영구 라이선스가 지원됩니다.
Widevine L1은 이제 Android용 Chrome에서도 지원됩니다. 따라서, 최종 사용자에게 이 버전 이상의 Chrome이 있기만 하면 Chrome에서 오프라인 재생 애플리케이션을 만들 수 있습니다.
또한 Google은 PWA(프로그레시브 웹앱) 샘플을 생성했습니다.
Android 휴대폰에서 모바일 Chrome 브라우저를 v62(또는 이상)로 업그레이드하고 위의 호스티드 샘플 앱을 테스트하는 경우, 온라인 스트리밍 및 오프라인 재생이 둘 다 작동되는 것을 볼 수 있습니다.
위의 오픈 소스 PWA 앱은 Node.js에서 작성됩니다. Ubuntu 서버에 고유한 버전을 호스트하려는 경우, 재생을 방해할 수 있는 다음과 같은 일반적인 문제가 발생한다는 점에 유의합니다.
- CORS 문제: 샘플 앱의 샘플 비디오는 https://storage.googleapis.com/biograf-video-files/videos/에서 호스팅됩니다. Google은 Google 클라우드 스토리지 버킷에 호스트되는 모든 테스트 샘플에 대해 CORS를 설정했습니다. CORS 항목
https://biograf-155113.appspot.com
(Google에서 해당 샘플을 호스트하는 도메인)을 명시적으로 지정하는 CORS 헤더가 사용되어 다른 사이트의 액세스를 방지합니다. 작업을 시도하면 다음 HTTP 오류가 표시됩니다. Failed to load https://storage.googleapis.com/biograf-video-files/videos/poly-sizzle-2015/mp4/dash.mpd: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https:\//13.85.80.81:8080' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
- 인증서 문제: Chrome v 58부터, Widevine용 EME에는 HTTPS가 필요합니다. 따라서 X509 인증서를 사용해서 HTTPS를 통해 샘플 앱을 호스트해야 합니다. 일반적인 테스트 인증서는 다음 요구 사항 때문에 작동하지 않습니다. 즉, 다음과 같은 최소 요구 사항을 충족하는 인증서를 가져와야 합니다.
- Chrome 및 Firefox에서는 SAN 주체 대체 이름 설정이 인증서에 있어야 합니다.
- 인증서는 신뢰할 수 있는 CA에서 발급한 것이어야 하고, 자체 서명된 인증서가 작동하지 않습니다.
- 인증서는 웹 서버 또는 게이트웨이의 DNS 이름과 일치하는 CN이 있어야 합니다.
H264/AAC를 사용하는 부드러운 스트리밍(PIFF) 파일 형식은 PlayReady(AES-128 CTR)와 바인딩되어 있습니다. 오디오가 비디오에서 muxed라고 가정하는 부드러운 스트리밍 .ismv 파일은 그 자체가 fMP4이며 재생에 사용할 수 있습니다. 부드러운 스트리밍 콘텐츠가 PlayReady 암호화를 통과하는 경우 각 .ismv 파일은 PlayReady로 보호되는 MP4 조각이 됩니다. 기본 비트 전송률로 .ismv 파일을 선택하고 다운로드할 .mp4 이름을 바꿀 수 있습니다.
점진적 다운로드 시 PlayReady 보호 MP4를 호스트하는 데 두 가지 옵션이 있습니다.
- MP4를 동일한 컨테이너/미디어 서비스 자산에 배치하고 점진적 다운로드를 위해 Azure Media Services 스트리밍 엔드포인트를 사용할 수 있습니다.
- Azure Storage에서 직접 점진적 다운로드를 위해 SAS URL을 사용할 수 있습니다.
두 가지 유형의 PlayReady 라이선스 제공을 사용할 수 있습니다.
- Azure Media Services의 PlayReady 라이선스 배달 서비스
- 어디에서든 호스팅되는 PlayReady 라이선스 서버
AMS 배달 서비스를 사용하여 PlayReady 라이선스를 얻으려면 PlayReady 라이선스가 있는 Media Services v3 템플릿을 참조하세요.
재생 테스트 시 Windows 10에서 Universal Windows Application을 사용할 수 있습니다.
Windows 10 유니버설 샘플에는 적응 스트리밍 샘플을 호출하는 기본 플레이어 샘플이 있습니다. 다운로드한 비디오를 선택하기 위한 코드를 추가하고 적응 스트리밍 원본 대신 원본으로 사용합니다.