私たちはクライアントアプリケーションのオフラインフェアプレーコンテンツを構築しています。我々はHLSCatalogデモアプリケーションでAppleサンプルダウンロードマネージャAssetPersistenceManagerクラスを参照することでその機能を実装しました。 一つの機能、そして私はここに強調表示したいバックAssetPersistenceManagerクラスの2回のコールがあり、それはそれはオフラインFairplay AVAssetDownloadTaskは、ダウンロード中に不明なエラーコールバックを取得しました(iOS 10.2でのみ発生しました)
func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didFinishDownloadingTo location: URL) {
let userDefaults = UserDefaults.standard
/
This delegate callback should only be used to save the location URL
somewhere in your application. Any additional work should be done in
`URLSessionTaskDelegate.urlSession(_:task:didCompleteWithError:)`.
*/
if let asset = activeDownloadsMap[assetDownloadTask] {
userDefaults.set(location.relativePath, forKey: asset.name)
}
}
最後のストリームのダウンロードが終了だ
/
func downloadStream(for asset: Asset) {
/
For the initial download, we ask the URLSession for an AVAssetDownloadTask
with a minimum bitrate corresponding with one of the lower bitrate variants
in the asset.
*/
guard let task = assetDownloadURLSession.makeAssetDownloadTask(asset: asset.urlAsset, assetTitle: asset.name, assetArtworkData: nil, options: [AVAssetDownloadTaskMinimumRequiredMediaBitrateKey: 265000]) else { return }
/
task.taskDescription = asset.name
activeDownloadsMap[task] = asset
task.resume()
var userInfo = [String: Any]()
userInfo[Asset.Keys.name] = asset.name
userInfo[Asset.Keys.downloadState] = Asset.DownloadState.downloading.rawValue
NotificationCenter.default.post(name: AssetDownloadStateChangedNotification, object: nil, userInfo: userInfo)
}
とコールバックがdidCompleteWithErrorコールバック
ありますfunc urlSession(_ session: URLSession, task: URLSessionTask,
didCompleteWithError error: Error?)
すべてがiOSでうまく動作しているようです。< 10.2、テストを行った後、レイトを実行しているデバイスiOSの10.2 tの唯一の13から15パーセントパーセントを完了している間、アプリはなかれ、didFinishDownloadToデリゲートにコールバックを持っ didCompleteWithError が呼び出され、我々は、プロキシのデバッグアプリでチェックエラー
> "=======> completed percent 11.2888760669556" .
> "=======> completed percent 11.445666"
> "=======> completed percent 11.7592459030787"
> "=======> completed percent 12.0728257938275"
> "=======> completed percent 12.5431956299506"
> "=======> completed percent 13.0135654660738"
> "=======> completed percent 13.3271453568226"
> "=======> completed percent 13.6407252475713"
> "=======> completed percent 13.9543051383201"
> "=======> completed percent 14.1110950836945"
> "=======> completed percent 14.2678850290689"
> "Error Domain=AVFoundationErrorDomain Code=-11800 \"The operation could not
> be completed\" UserInfo={NSLocalizedDescription=The operation could
> not be completed, NSLocalizedFailureReason=An unknown error occurred
> (-12667)}"
の下に受信された後、それがポイントそのアプリケーションは受信応答全体の前に接続を閉じます。のみ
Status
Complete
Failure
Client closed connection before receiving entire response
Response Code
206 Partial Content
iOSの10.2は、そのバージョン以下、他のOS上でテスト同じストリームがまだ正常に動作している、そのエラーを持っています。 この部分についてのiOS 10.2の変更履歴を見つけようとしましたが、何も見つかりませんでしたか?皆さんに助言がありますか?
Fairplayを使用することが暗号化されたHLSでAVAssetDownloadTaskを使用するために必須であるかどうか知っていますか?私は 'shouldWaitForLoadingOfRequestedResource'コールバックを実装してローカル暗号化キーを提供していますが、同じエラーが発生します。ストリーミング中は正常に動作しますが、ダウンロードは常に上記のエラーで失敗します。だから私はFairplayを使わないことで問題になるかもしれないと思っていました!または 'shouldWaitForLoadingOfRequestedResource'の中でキー処理の実装を私に提供することができますか?たぶん私はsthを間違っている。 – Alf
「ローカル暗号化キー」を使用する代わりに、サーバーキーを押してshouldWaitForLoadingOfRequestedResourceで新しいキーを取得するようにしてください。ローカルキーとも呼ばれる「永続キー」は、ストリーミングの再ダウンロードや再生には使用できません。 – untouchable
@VadimNikolaevはダウンロードしたオフラインコンテンツを再生しようとしていますか?その場合、以前にダウンロードタスクを開始したときに得たはずの永続キーを要求するためにresourceLoaderが呼び出されました。これは、オフラインでappを使用するために、そのキーをローカルに保存する必要があります(UserDefaultなど) – untouchable