AVAssetDownloadTaskFairPlay で暗号化されたオーディオ コンテンツをオフラインでダウンロードして再生するために使用しようとしています。で次のようなエラーが発生し続けました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 AVAssetResourceLoaderDelegateAVURLAsset
- を作る
AVURLAsset - を作成し、
AVPlayerそのボリュームを 0 に設定します - アセットを渡して再生する
- リソースローダーからキーを要求して再生を開始するまで待ちます
- ダウンロードタスクに渡し、プレーヤーとの関連付けを解除します
しかし、これはひどいようです。それは真実ではありません。
それで、私の質問: FairPlay で暗号化された AVURLAsset を、その特定のインスタンスを以前にストリーミングせずにダウンロードするにはどうすればよいですか?