Apple FairPlay 연동
iOS, iPadOS, tvOS, Safari에 DRM-X 6.0 FairPlay Streaming을 통합, Swift, AVFoundation, SPC 및 CKC 교환을 사용하여, 안전한 서버 권한.
FairPlay 인증서 및 라이선스 교환
교환 과정에서 SPC와 CKC 바이너리 데이터를 변경하지 마세요.
- 인증 및 인증
허가된 URL에서 애플리케이션 인증서를 불러오세요.
- SPC
인증서와 HLS 식별자를 사용해 기기의 SPC 요청을 만드세요.
- CKC
허가된 라이선스 URL로 SPC를 보내고 CKC 응답을 받으세요.
- AVFoundation
암호화된 동영상을 재생하도록 CKC를 AVFoundation에 전달하세요.
UI 사용자 지정, 매개변수 기본값 및 수명 주기 예제는 PLAYER-UI-CONFIGURATION.md를 참조하세요. 플레이어의 기본 팝업 패널은 불투명하며 자막과 워터마크의 불투명도는 별도로 설정합니다.
SDK ZIP의 DEMO-QUICKSTART.md에 따라 PHP 데모를 사용해 보세요. 자체 콘텐츠를 사용하려면 먼저 웹사이트와 백엔드를 통합한 다음, MOBILE-AND-TV-APPS.md에 따라 앱을 동일한 로그인 및 시청 권한 규칙에 연결하세요.
iOS / iPadOS : 샘플을 단계별로 실행#
- Apple SDK ZIP.를 다운로드하고 추출합니다.
Package.swift,Sources,Tests및Samples를 함께 유지합니다. Mac에서Samples/DrmXAppleSamples.xcodeproj를 엽니다. - DrmXiOS을 선택하세요.Xcode의 구성표 메뉴에서 DrmXiOS를 선택하세요. 최소 배포 대상은 iOS/iPadOS 15입니다. 이 릴리스의 빌드 검사를 재현하려면 Xcode 26.3을 사용하세요.
- 서명 팀을 설정하세요.앱 대상에서 Signing & Capabilities를 열고 팀을 선택한 다음 자신에게 속한 번들 식별자를 사용하세요. 패키지에 서명 ID가 없습니다.
- 실제 기기를 연결하세요.Xcode의 Devices and Simulators에서 iPhone/iPad를 페어링합니다. 요청하면 Developer Mode를 활성화하고 해당 기기를 실행 대상으로 선택하세요.
- SDK 다운로드의 CUSTOMER-INTEGRATION.md부터 읽으세요. 고객용 예제를 실행하기 전에 자체 로그인, 게시된 Content IDs 및 시청 권한 규칙을 연결하세요. 데모 콘텐츠는 평가 전용입니다.
- 자신의 앱을 연결하세요.패키지 README를 따르세요: File → Add Package Dependencies → Add Local을 통해 추출된 디렉터리를 추가하고 DrmXFairPlay 제품을 선택하세요. 데모 인증, 엔드포인트 및 Content IDs을 자신만의 것으로 교체하세요.

@StateObject 또는 소유 코디네이터와 함께 DrmXUniversalPlayer를 유지합니다. 다시 계산하는 SwiftUI 본문 내에서 다시 생성하지 마세요. 인증 콜백을 통해 로그인한 뷰어의 토큰을 제공합니다. 최종 화면이 닫히거나 로그아웃되면 중지됩니다.
Apple TV: tvOS 샘플 실행#
- 동일한 Apple ZIP를 사용하세요.샘플 Xcode 프로젝트를 열고 DrmXtvOS 구성표를 선택하세요. tvOS 대상에 팀과 고유 번들 식별자를 설정하세요.
- Apple TV.Apple의 페어링 흐름을 사용하여 Xcode Devices and Simulators를 통해 연결하세요. 실제 Apple TV 및 Build and Run.를 선택하세요.
- 리모컨을 사용하세요.재생목록에서 VOD을 선택하고 Select/Play를 누르세요. 탐색, 캡션, 오디오/설정 및 전체 화면으로 초점을 이동하세요. Back를 테스트하고 재생목록을 변경합니다.
- 콘텐츠를 추가하세요.동일한 Swift Package 및 인증된 FairPlay 백엔드를 iOS와 함께 사용하세요. 등록된 HLS/CBCS 매니페스트 및 지원되는 출력 정책을 반환하세요.

이 패키지에서 tvOS는 스트리밍만 지원합니다. iOS 오프라인 재생에 사용하는 Apple의 HLS 다운로드 API는 tvOS에서 사용할 수 없습니다. iOS/tvOS 시뮬레이터로 레이아웃을 확인할 수 있지만, FairPlay는 서명한 앱을 실제 기기에서 테스트해야 합니다. 공개 IPA 또는 TestFlight 다운로드는 없습니다.
각 동영상 메뉴에는 Move up / Move down과 함께 온라인에서는 Download, 오프라인에서는 Delete가 표시됩니다. 다운로드가 완료되면 Download가 비활성화됩니다. Downloaded videos 스위치로 오프라인 재생을 선택하며 캐시된 트랙만 사용할 수 있습니다. 다운로드, 삭제, 전체 재생목록 다운로드를 위한 별도 버튼은 없습니다.
통합하기 전에 FairPlay 등록 #
설정하기 FairPlay 배포 및 인증서 자료 in DRM-X 콘솔. 개인 키 자료는 암호화 및 서버 측에 남아 있습니다. 게시 HLS/CBCS 변종을 위한 Content ID 테스트 계획.
Apple session#을 요청하십시오.
인증된 백엔드에서 drmSystem: fairplay, manifestTypes: ["hls"], 적절한 clientPlatform를 전송하세요. 응답에는 등록된 HLS 매니페스트, 인증서 엔드포인트, CKC 라이선스 엔드포인트, 권한 부여 지침 및 세션 해제 엔드포인트가 포함됩니다.
AVFoundation 순서#
- 인증서를 로드합니다.반환된 단기 인증을 사용하여 반환된 FairPlay 인증서 URL에서 인증서를 가져옵니다.
- 제휴 내용 키 데이터.
skd://식별자 HLS 재생 목록 및 응용 프로그램 인증서에 의해 공급. - Send the SPC.POST 정확한 SPC 바이트 에 반환된 라이센스 URL와 허용 정확한 CKC 바이트.
- Finish and release.내용 키 요청에 응답한 후, 종료시 DRM-X 세션을 실행합니다.
Safari 및 응용 프로그램 합격 #
- iPhone 및 iPad Safari을 기본 HLS FairPlay으로 테스트하십시오.
- macOS Safari 자격을 갖춘 Shaka MSE FairPlay을 테스트하십시오. 여기서 사용 가능하고 기본 HLS의 fallback.
- 기본 iOS, iPadOS 및 tvOS 재생, AirPlay 정책, AV 어댑터 정책, 배경 전환, 갱신 및 출력 변경을 테스트합니다.
- 다른 개발 및 생산 사용 FairPlay 배포 및 인증 정보.
iOS, iPadOS 및 tvOS 기본 FairPlay #
더 많은 정보 Swift 패키지 대상 iOS 이름 * tvOS 15+. 그것은 사용합니다 AVFoundation’s AVContentKeySession 제품정보 FairPlay 콘텐츠 키 요청, 인증서 retrieval, 바이너리 SPC/CKC 교환, 갱신, 취소 및 세션 릴리즈.
import AVKit
import DrmXFairPlay
let controller = DrmXFairPlayPlayer()
let player = try await controller.prepare(
endpoint: URL(string: "https://customer.example/api/drmx/playback-session")!,
contentId: "course-12-lesson-4",
contentType: .vod,
customerHeaders: ["Authorization": "Bearer \(customerAccessToken)"]
)
playerViewController.player = player
player.play()
귀하의 백엔드는 정책 템플릿을 선택합니다. 정책에 넣지 마십시오. URL, Site Key, Access Key, 또는 앱 번들에서 장기간의 토큰을 나타낸다. 실제 HLS/CBCS 미디어를 물리적 iPhone, iPad 및 Apple TV 장치에서 테스트하십시오. HDMI 및 AirPlay 결정을 포함하여.
하나의 패키지, 세 가지 통합 선택#
Universal Player iOS/iPadOS, Universal Player tvOS, 또는 위의 네이티브 AVPlayer 통합. 모든 사용은 동일한 DrmXFairPlay 패키지 및 고객 재생 세션 엔드 포인트. 호스트 응용 프로그램은 고객 인증을 공급; tenant 인증 정보 귀하의 백엔드에 남아.
스트리밍 플레이어은 재생 목록, shuffle/repeat, cancellable auto-next, 이력서 위치, 찾고, 속도, 품질 선호도, 오디오 / 자막 선택, caption 노래, 책갈피, 선택적인 장/transcripts, A-B 루프, 수면 타이머 및 풀 스크린을 제공합니다. 레이아웃은 터치 스크린 및 Apple TV 리모트에 적합합니다.
let playlist = try DrmXPlaylist(items: [
DrmXPlaylistItem(contentId: "lesson-1", title: "Getting started"),
DrmXPlaylistItem(contentId: "lesson-2", title: "Next lesson")
])
let model = DrmXUniversalPlayer(
endpoint: URL(string: "https://customer.example/api/drmx/playback-session")!,
playlist: playlist,
storageNamespace: "your-tenant-and-viewer"
) {
["Authorization": "Bearer \(customerAccessToken)"]
}
// Retain the model with @StateObject or an owning coordinator.
DrmXUniversalPlayerView(model: model)
// Stop when the owning screen is actually dismissed.
model.stop()
품질 설정은 반환된 세션 천장 내에서 최대 선호 사항입니다. AVPlayer는 사용 가능한 대역폭에 적응합니다. FairPlay 라이센스 및 출력 제한은 권한이 유지됩니다. 재생 인증 정보을 저장하지 않고 고객/뷰어 네임스페이스에 의해 위치 및 북마크가 표시됩니다.
현재 개발 소스 장소 이전/Play-Pause/Next, CC, 설정 및 비디오 내부 전체 화면. 제어는 터치 또는 원격 상호 작용에 재생 및 반복하는 동안 두 초 후에 숨깁니다. 다운로드한 재생을 포함하여 공급한 고객/viewer 네임스페이스 내에서, 반복 및 VOD 진행률. 셔플과 반복으로, 큐는 최종 비디오 후 중지합니다.
iPhone 및 iPad에서 보호 된 다운로드
offlineEndpoint을 DrmXUniversalPlayer로 전달하여 다운로드 및 다운로드 - 비디오 모드를 활성화하십시오. iOS 구현은 HLS 패키지 및 AVContentKeySession의 로컬 FairPlay 키에 대한 AVAssetDownloadURLSession를 사용합니다. 그것은 opaque native 키와 Local metadata를 저장하고, 결코 DRM License Tokens 또는 clear 키가 없습니다. 다운로드는 customer/viewer namespace에 의해 격리됩니다. 오프라인 큐는 완료 된 카탈로그 항목과 공유 저장 된 위치, shuffle 및 온라인 오류가 필요합니다.
PHP 샘플은 fairplay/hls/ios 영구적인 요청을 지원합니다. 각 콘텐츠 항목의 신뢰할 수 있는 hlsManifestUrl 구성; 인증서 경로는 새로 발행된 토큰의 활성 배포를 사용합니다. FairPlay는 만료를 시행합니다. 오프라인 품질은 다운로드된 품질을 유지하며 캐시된 언어 트랙만 선택 가능합니다. tvOS는 스트리밍 플레이어을 사용합니다.
스크린 캡처 자격
iPad 사용 Apple TV 레이아웃, 재생 목록 제어, 설정 및 원격 탐색을위한 시뮬레이터. FairPlay 재생은 이 시뮬레이터에서 사용할 수 없습니다; SDK 이 제한을보고 지원되지 않은 네이티브 키 세션을 만드는 대신 예약을 해제합니다. 시뮬레이터 UI 결과는 보호된 재생, 오프라인 다운로드 지원, 또는 물리적 장치 합격을 설치하지 않습니다.
iOS가 화면 녹화 또는 미러링 중임을 알리면 플레이어는 오디오와 비디오를 일시 중지하고 비활성 장면을 가립니다. 스크린샷 알림은 캡처 후에 도착하므로 이미 저장된 이미지를 수정할 수 없습니다.
DRM-X 6.0