問題タブ [avassetresourceloaderdelegate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1033 参照

ios - AVAssetDownloadTask を使用して、まだストリーミングされていない FairPlay で暗号化された AVURLAsset インスタンスをダウンロードするにはどうすればよいですか?

AVAssetDownloadTaskFairPlay で暗号化されたオーディオ コンテンツをオフラインでダウンロードして再生するために使用しようとしています。で次のようなエラーが発生し続けましたurlSession:task:didCompleteWithError:

エラー Domain=AVFoundationErrorDomain Code=-11863 "Operation Stopped" UserInfo={NSLocalizedFailureReason=このコンテンツは利用できなくなりました., NSLocalizedDescription=操作は停止しました}

私のフローは次のとおりです。

これはすべて機能し、Apple のHLSCatalog サンプル コードと同じ方法で実行されました。しかし、同じプレイリストと主要な URL をサンプル コードにプラグインすると正常にダウンロードされるにもかかわらず、ダウンロードすると上記のエラーが表示されます。

私が最終的に理解したのは、既にストリーミングされており、( を介して) 復号化キーが与えられていて、プレーヤーに関連付けられていないインスタンスAVAssetDownloadTaskのみをダウンロードするということです。既に再生中のものと同じ URL を使用して新しいものを作成してダウンロードすることはできません。したがって、任意の FairPlay コンテンツをダウンロードするには、次のことを行う必要があるようです。AVURLAsset AVAssetResourceLoaderDelegateAVURLAsset

  • を作るAVURLAsset
  • を作成し、AVPlayerそのボリュームを 0 に設定します
  • アセットを渡して再生する
  • リソースローダーからキーを要求して再生を開始するまで待ちます
  • ダウンロードタスクに渡し、プレーヤーとの関連付けを解除します

しかし、これはひどいようです。それは真実ではありません。

それで、私の質問: FairPlay で暗号化された AVURLAsset を、その特定のインスタンスを以前にストリーミングせずにダウンロードするにはどうすればよいですか?