DRM-X 6.0 鳩とオリーブの枝のロゴDRM-X 6.0ドキュメント
◎ 日本語

Apple FairPlay の連携

Swift、AVFoundation、SPC/CKC の交換、安全なサーバー側認可を使い、iOS、iPadOS、tvOS、Safari に DRM-X 6.0 FairPlay Streaming を組み込みます。

Markdown を表示動作サンプルUpdated 2026-09-21

FairPlay の証明書とライセンスの交換

交換中は SPC と CKC のバイナリデータを変更しないでください。

  1. 証明書

    認可された URL からアプリケーション証明書を読み込みます。

  2. SPC

    証明書と HLS 識別子を使って、デバイスの SPC リクエストを作成します。

  3. CKC

    認可されたライセンス URL に SPC を送り、CKC レスポンスを受け取ります。

  4. AVFoundation

    CKC を AVFoundation に渡して暗号化された動画を再生します。

証明書 → SPC チャレンジ → CKC 応答 → ネイティブ プレーバック。 バイナリーチャレンジと応答は変更されません。

UI のカスタマイズ、パラメーターの既定値、ライフサイクルの例については、PLAYER-UI-CONFIGURATION.md を参照してください。プレーヤー標準のポップアップパネルは不透明です。字幕とウォーターマークの不透明度は別に設定します。

SDK ZIP 内の DEMO-QUICKSTART.md に従って PHP デモをお試しください。自社のコンテンツを使う場合は、まずウェブサイトとバックエンドを統合し、次に MOBILE-AND-TV-APPS.md に従ってアプリを同じログインと視聴権限の仕組みに接続してください。

有効な Professional または Enterprise サブスクリプションで、Console → Developer Tools → Device SDKs から Apple SDK と iOS/tvOS サンプルアプリをダウンロードしてください。

iOS / iPadOS: サンプルをステップバイステップで実行します#

  1. Apple SDK ZIP をダウンロードして展開します。Package.swift、Sources、Tests、Samples を同じ構成のまま保持し、Mac で Samples/DrmXAppleSamples.xcodeproj を開いてください。
  2. DrmXiOS を選択します。Xcode の scheme メニューで DrmXiOS を選びます。最小 deployment target は iOS/iPadOS 15 です。このリリースと同じビルド確認には Xcode 26.3 を使用してください。
  3. 署名チームを設定します。アプリターゲットでSigning & Capabilitiesを開き、チームを選択し、自分に属するバンドル識別子を使用します。パッケージには署名 ID が含まれていません。
  4. 実機を接続します。Xcode Devices and Simulators で iPhone/iPad をペアリングします。求められた場合は Developer Mode を有効にし、実行先として実機を選択します。
  5. SDK ダウンロード内の CUSTOMER-INTEGRATION.md から始めてください。自社のログイン、公開済み Content IDs、視聴権限のルールを接続してから顧客用サンプルを実行します。デモコンテンツは評価専用です。
  6. 自分のアプリに組み込みます。パッケージの README に従い、File → Add Package Dependencies → Add Local から展開済みディレクトリを追加して、DrmXFairPlay を選択します。デモ用の認証、endpoint、Content IDs を自分の環境の値に置き換えてください。
再生イメージの合成図です。プレーヤー画面に提供された動画の静止画とサンプル字幕を追加しています。
再生イメージの合成図です。プレーヤー画面に提供された動画の静止画とサンプル字幕を追加しています。

DrmXUniversalPlayer は @StateObject または管理用コーディネーターで保持し、再計算される SwiftUI の body 内で作り直さないでください。認証コールバックからログイン中の視聴者のトークンを渡し、画面を最終的に閉じるときやサインアウト時に停止します。

Apple TV: tvOS サンプルを実行します#

  1. 同じ Apple ZIP を使用します。 サンプル Xcode プロジェクトを開き、DrmXtvOS スキームを選択します。 tvOS ターゲットにチームと一意のバンドル ID を設定します。
  2. Apple TV をペアリングします。Apple のペアリング手順に従って Xcode Devices and Simulators から接続します。実機の Apple TV を実行先に選び、Build and Run を実行します。
  3. リモコンを使用します。プレイリストからVODを選択し、Select/Playを押します。フォーカスをシーク、キャプション、オーディオ/設定、全画面に移動します。 Back とプレイリストの変更をテストします。
  4. 自分のコンテンツを追加します。iOS と同じ Swift Package および認証付き FairPlay バックエンドを使用します。登録済みの HLS/CBCS マニフェストと、対応する出力ポリシーを返してください。
再生イメージの合成図です。プレーヤー画面に提供された動画の静止画とサンプル字幕を追加しています。
再生イメージの合成図です。プレーヤー画面に提供された動画の静止画とサンプル字幕を追加しています。

このパッケージの tvOS はストリーミング専用です。iOS のオフライン再生に使う Apple HLS asset download API は tvOS では利用できません。iOS/tvOS シミュレーターではレイアウトを確認できます。FairPlay は署名済みアプリを実機で実行してテストしてください。公開 IPA や TestFlight のダウンロードはありません。

各動画のメニューには Move up / Move down と、オンライン時の Download またはオフライン時の Delete があります。完了済みの動画では Download が無効になります。Downloaded videos スイッチでオフライン再生を選びます。利用できるのはキャッシュ済みのトラックだけです。独立したダウンロード、削除、プレイリスト一括ダウンロードのボタンはありません。

統合の前にFairPlayを登録する#

設定する FairPlay 導入および証明書材料の DRM-X コンソール。 秘密鍵素材は暗号化され、サーバー側のままです。 公開 HLS/CBCS のための変形 Content ID 試験を予定しています。

Appleのセッションをリクエスト#

認証済みのバックエンドから drmSystem: fairplay、manifestTypes: ["hls"]、適切な clientPlatform を送信します。レスポンスには、登録済みの HLS マニフェスト、証明書エンドポイント、CKC ライセンスエンドポイント、認可手順、セッション解放エンドポイントが含まれます。

ネイティブバイトを保持 返されたコントラクトで明示的に要求されていない限り、SPC および CKC データを Base64 変換、JSON ラップ、または再解釈しないでください。正確なバイナリ要求および応答タイプをプロキシします。

AVFoundation シーケンス#

  1. 証明書をロードします。返されたFairPlay証明書URLから、返された短期認証を使用して証明書を取得します。
  2. コンテンツキーデータを作成する。利用する skd:// 提供された識別子 HLS プレイリストとアプリケーション証明書。
  3. SPC. POST を返されたライセンス URL に正確に SPC バイトを送って、正確な CKC バイトを受け入れます。
  4. Finish and release. コンテンツキーリクエストに応答し、終了時に DRM-X セッションを解放します。

Safariとアプリの受け入れ#

  • ネイティブHLS FairPlayでiPhoneとiPad Safariをテストします。
  • 試験結果 macOS Safari 修飾されると Shaka MSE FairPlay 利用可能でネイティブ HLS フォールバック。
  • ネイティブiOS、iPadOS、tvOSの再生、AirPlayポリシー、AVのアダプターポリシー、背景遷移、更新、および出力変更をテストします。
  • 異なる開発と生産 FairPlay 展開と 認証情報 を使用します。
Apple SDK

iOS、iPadOS、tvOS、ネイティブFairPlay#

Swift パッケージは iOS と tvOS 15+ を対象としています。AVFoundation の AVContentKeySession のコンテンツキーリクエストは FairPlay で、証明書の検索、バイナリ 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の決定を含みます。

1つのパッケージ、3つの統合の選択肢#

iOS/iPadOS、tvOS の Universal Player、または上記のネイティブ AVPlayer の統合に Universal Player を使用します。 全て同じ DrmXFairPlay パッケージと顧客の再生セッションエンドポイントを使用します。 ホストアプリケーションは顧客の認証を供給します。 テナント 認証情報 はバックエンドに残ります。

ストリーミングプレーヤーは、プレイリスト、シャッフル/レパット、cancellableオートネクスト、再開位置、検索、速度、品質設定、オーディオ/サブタイトル選択、キャプションサイジング、ブックマーク、オプションのチャプター/トランスクリプト、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、設定、ビデオ内のフルスクリーンを配置します。 再生中に2秒後に非表示を制御し、タッチまたはリモートのやりとりを繰り返します。 供給された顧客/ビューア名空間内のシャッフル、繰り返し、VOD進捗は、ダウンロードした再生を含みます。 シャッフルとリピートオフで、最終的なビデオの後にキューが停止します。

iPhoneとiPadで保護されたダウンロード

認証を渡す offlineEndpoint とりあえず DrmXUniversalPlayer ダウンロードとダウンロードビデオモードを有効にします。 iOS 実装用途 AVAssetDownloadURLSession ローカル HLS パッケージとパッケージ AVContentKeySession デバイス-boundの永続性のため FairPlay キー。 不透明のネイティブキーとローカルメタデータを格納します。 DRM License Tokens またはクリアキー。ダウンロードは、顧客/ビューア名空間によって隔離されます。オフラインキューには、完了したカタログ項目が含まれており、保存された位置、シャッフル、リピートを共有します。ライセンス更新には、新しいオンライン承認が必要です。削除は選択したダウンロードのみを消去します。

PHP のサンプルは fairplay/hls/ios の永続的なリクエストをサポートしています。各コンテンツ項目の信頼できる hlsManifestUrl を構成する; 証明書のルートは、新しく発行されたトークンでアクティブなデプロイメントを使用します。 FairPlay は expiry を強制します。 オフライン品質はダウンロードされた品質のままで、キャッシュされた言語のトラックのみが選択可能です。 tvOS はストリーミング プレーヤー を使用します。

スクリーンキャプチャの資格

レイアウト、プレイリスト制御、設定、リモートナビゲーション用のiPadとApple TVシミュレータを使用します。 FairPlay再生は、これらのシミュレータでは利用できません。 SDKは、この制限を報告し、サポートされていないネイティブキーセッションを作成する代わりに、予約を解放します。 シミュレータ UI結果は、保護された再生、オフラインダウンロードのサポート、または物理的なデバイス受諾を確立しません。

iOS が録画やミラーリングの開始を通知すると、プレーヤーは音声と映像を一時停止し、非アクティブなシーンを覆います。スクリーンショット通知は撮影後に届くため、保存済みの画像を変更することはできません。