AVAssetDownloadTask
FairPlay で暗号化されたオーディオ コンテンツをオフラインでダウンロードして再生するために使用しようとしています。で次のようなエラーが発生し続けましたurlSession:task:didCompleteWithError:
。
エラー Domain=AVFoundationErrorDomain Code=-11863 "Operation Stopped" UserInfo={NSLocalizedFailureReason=このコンテンツは利用できなくなりました., NSLocalizedDescription=操作は停止しました}
私のフローは次のとおりです。
AVURLAsset
のような URL を使用して作成しますhttps://my.cdn.com/playlist.m3u8
- リソース ローダーのデリゲートを設定する
- の形でプレイヤーに渡す
AVPlayerItem
- のメソッドを使用して
AVAssetResourceLoaderDelegate
、スキームで始まる URL を探しskd
、CKC をダウンロードし、永続化可能なフォームを取得して、それをリソース ローダー リクエストに返します。
これはすべて機能し、Apple のHLSCatalog サンプル コードと同じ方法で実行されました。しかし、同じプレイリストと主要な URL をサンプル コードにプラグインすると正常にダウンロードされるにもかかわらず、ダウンロードすると上記のエラーが表示されます。
私が最終的に理解したのは、既にストリーミングされており、( を介して) 復号化キーが与えられていて、プレーヤーに関連付けられていないインスタンスAVAssetDownloadTask
のみをダウンロードするということです。既に再生中のものと同じ URL を使用して新しいものを作成してダウンロードすることはできません。したがって、任意の FairPlay コンテンツをダウンロードするには、次のことを行う必要があるようです。AVURLAsset
AVAssetResourceLoaderDelegate
AVURLAsset
- を作る
AVURLAsset
- を作成し、
AVPlayer
そのボリュームを 0 に設定します - アセットを渡して再生する
- リソースローダーからキーを要求して再生を開始するまで待ちます
- ダウンロードタスクに渡し、プレーヤーとの関連付けを解除します
しかし、これはひどいようです。それは真実ではありません。
それで、私の質問: FairPlay で暗号化された AVURLAsset を、その特定のインスタンスを以前にストリーミングせずにダウンロードするにはどうすればよいですか?