iOSアプリでBrightcove SDKを使ってDRMコンテンツを配信するまでの話

# はじめに
初めまして。株式会社運動通信社でスポーツブルアプリのiOSを担当している松川です。
今回はスポーツブルの一機能「[スポーツブルプレミアム](https://sportsbull.jp/premium/about/)」で動画配信を行う際に必要になったDRM有効化の手順をまとめました。
表題にもある通り、弊社では動画の再生に[Brightcove](https://www.brightcove.com/ja/)という動画配信プラットフォームを利用しているので、その環境でDRMコンテンツを再生するまでの流れになっています。
※DRMとはDigital Rights Managementの略。デジタル著作権管理のことで、音楽や映画などのデジタルコンテンツの著作権を保護する技術や機能の総称です

# 流れ
1. AppleからFairPlay Streaming Deployment Packageを取得する
2. 証明書の発行（FairPlay Streaming Certificate、Application Secret Key）
3. 取得した情報をBrightcoveに伝えてFairPlayの有効化をしてもらう
4. DRMコンテンツを再生する
5. まとめ

# 1. AppleからFairPlay Streaming Deployment Packageを取得する
Apple製品向けにDRM配信を行うためには、AppleのDRMであるFairPlayStreaming（以下FPS）を利用する必要があります。

まずはAppleにDeployment Packageを依頼します。

https://developer.apple.com/contact/fps/

![スクリーンショット 2021-11-05 14.33.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116708/fc30c664-d3a1-8325-9ddf-b03e1459de72.png)

```
# 項目

- Name
    - Apple Developerアカウントで設定されている名前が初期設定されています
- Email
    - Apple Developerアカウントで設定されている名前が初期設定されています
- Team
    - Apple Developerアカウントで設定されている名前が初期設定されています
- Website
    - 利用するサービスのWebページ
- Streaming Distribution Partner Name(optional)
    - ストリーミング配信パートナー名
- Streaming Distribution Partner Website(optional)
    - ストリーミング配信パートナーサイト
- Is there a working FPS development server in which to use the FPS credentials?
    - FPSの認証情報を使用するためのFPS開発サーバーはありますか？
- Your Content
    - コンテンツの内容、コンテンツの所有者、FPSでの再生を保護したい理由を説明してください
- Your Company
    - 自社の事業内容や、配信するコンテンツの所有者との取引関係などを説明してください
```

申請を行い、Appleからの返答を待ちます。

## Appleとのやり取り

### 1回目の返信
数日経ってAppleから以下のフィードバックがありました。

> Hello,
> 
> Thank you for your interest in FairPlay Streaming (FPS).  We need more information from you before your request can be sent to the approvers for review.
> It is important that we understand who are the licensed content owners and licensed providers of content.
> Please describe the business relationship you have with the owners of the content you would be streaming and whose customers would be paying for the content.
> 
> Regards,
> Ted

内容は、以下２点。

- **ライセンスされたコンテンツの所有者とライセンスされたコンテンツの提供者が誰であるか**
- **ストリーミングされるコンテンツの所有者と、そのコンテンツに対価を支払う顧客とのビジネス関係を説明してください**

フワッとした記載してたからな...と思いつつ、上記内容を書いてAppleに返信しました。

### 2回目の返信
そして待つこと数日、Appleから返信が来ました。

> Thank you for your interest in FairPlay Streaming (FPS).
> 
> To avoid misplacing your Application Secret key (ASk), FairPlay Streaming Certificate or private key, we recommend you don’t create your certificates until you have a Key Server Module (KSM) that has been fully tested using the verify_ckc tool and test vectors as instructed in the FairPlay Streaming Programing Guide.
> Please reply when you have a KSM implemented, tested and ready to use the FPS credentials in.
> 
> We appreciate your understanding.

今回はBrightcoveでKSMが既に準備されていたので、その旨を返信。

### 3回目の返信
そして数日後にAppleから返信があり、本文にパッケージのダウンロードページのURLが記載されていました。
以下ダウンロードページ。
![スクリーンショット 2021-11-05 13.53.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116708/fc944383-0e1f-7711-01f1-164021f5b002.png)
無事FPS Deployment Packageを取得することができました :raised_hands:

## 時系列
| 日時 | 備考 |
| - | - |
| 2021/05/07(水) 0:50 | to Apple. <br>入力してリクエスト |
| 2021/05/09(日) 4:38 | from Apple. <br>1回目フィードバック |
| 2021/05/14(金) 11:57 | to Apple. <br>フィードバック内容を返信 |
| 2021/05/15(土) 4:58 | from Apple. <br>返信受領のメール |
| 2021/05/21(金) 6:10 | from Apple. <br>リクエスト通過のメール。KSMが実装され、テストされ、FPSの認証情報を使用する準備ができたら、返信してね |
| 2021/05/21(金) 17:36 | to Apple. <br>準備できたよ |
| 2021/05/25(火) 5:31 | from Apple. <br>ダウンロードリンクもらう |

## 気を付けるポイント

:::note warn
Your Contentの記載に関して、以下２点を意識するとAppleからの戻しを減らせるかも
    1. ライセンスされたコンテンツの所有者とライセンスされたコンテンツの提供者が誰であるかを記載
    2. ストリーミングされるコンテンツの所有者と、そのコンテンツに対価を支払う顧客とのビジネス関係を記載
:::

:::note warn
Appleのレビュー通過まで2,3週間ほど見ておいたほうが良い
:::


# 2. 証明書の発行（FairPlay Streaming Certificate、Application Secret Key）

1で手に入る `FairPlay Streaming Credential Generation Guide` に手順が記載されていて、そのコマンド通りに指定すれば作成できました。
※手順書にも記載がありますが、発行して一度しか画面に表示されないキーもありますので注意してください


# 3. 取得した情報をBrightcoveに伝えてFairPlayの有効化をしてもらう

提供したファイルは以下

- ASKファイル (Application Secret Key)
- A Fairplay証明書 (.cerもしくは.derフォーマットにて)
- プライベートキー (.p12 もしくは .pem フォーマットにて。パスフレーズが設定されている場合にはそのパスフレーズも連絡）

上記を提供して、数日するとBrightcoveのCMSで動画コンテンツにDRMを有効にできるチェックボックスが表示されました。

# 4. DRMコンテンツを再生する

## BrightcoveのCMSでコンテンツ＆プレーヤーをDRM有効化
- 指定した動画ファイルのDRMを有効にする
![スクリーンショット 2021-11-10 13.29.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116708/568befd1-4076-9e64-29cf-6e3f146a2cfe.png)

- 再生するプレーヤーのDRMを有効にする
![スクリーンショット 2021-11-10 13.31.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116708/953eb7ee-b644-bd04-92a6-04e783ae0579.png)


## アプリの対応
iOS SDK についてはBCOVPlaybackControllerに対してFairPlay用のSessionProviderを追加してプレーヤーをFairPlayに対応させる必要があります。
実装については以下に詳細が記載されていますのでご参照ください。
※DRMが有効になっている動画は、DRMが有効になっているプレーヤーしか再生できないので注意

https://github.com/brightcove/brightcove-player-sdk-ios/blob/master/FairPlay.md

また、上記の内容を実装したサンプルは以下にありますので合わせて参照してみてください。

https://github.com/BrightcoveOS/ios-player-samples/tree/master/FairPlay/BasicFairPlayPlayer/swift

# 5. まとめ

今回初めてDRMというキーワードを知って、サービスを介して無事配信を行うことができました。
当時はDRMで配信するため何をすれば良いか分からない状態だったので、この記事が誰かの参考になれば幸いです。
また記載していることでご意見ありましたら、コメントお願いします。
では。


## Tips

### iOS15+SafariブラウザでDRMコンテンツが再生できない
弊社でも発生していたのですが、iOS15.0のSafariブラウザで一部DRMコンテンツ（FPS）が再生できない不具合が発生していました。
どうやらiOS15.0の問題だったらしく、iOS15.1で対応されたようです。

#### 他の方も発生していたみたい

https://developer.apple.com/forums/thread/690429

https://media-streaming.nextscape.net/blog/1038/