問題タブ [avassetdownloadtask]
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.
ios - オフライン HLS コンテンツのダウンロードと再生 - iOS 10
iOS 10 以降、Apple はオフライン表示用に HLS (m3u8) ビデオのダウンロードをサポートしています。
私の質問は、HLS を再生中にのみダウンロードできるようにする必要があるかどうかです。または、ユーザーがダウンロード ボタンを押して進行状況を表示したときにダウンロードすることもできます。
Objective Cバージョンでこれを実装した人はいますか? 実際、私の以前のアプリは Objective C で作成されています。MP4 ではなく HLS のダウンロードのサポートを追加したいと考えています (以前は、オフライン ビュー用に MP4 をダウンロードしていました)。
私はこれに本当に必死です。実装されている場合は、考えやコードを共有してください。
ios - AVAssetDownloadURLSession へのダウンキャストが失敗する
を作成していますAVAssetDownloadURLSession
ここに私のコードがあります:
ここで、 を印刷するavSession
と、__NSURLBackgroundSession
ではなく であると表示されAVAssetDownloadURLSession
ます。avSession
別の変数 (この場合は Any)に代入し、後でダウンキャストすると失敗します。
まさにこれを行う必要があるため、これは本当の問題です。失敗せずにこれをダウンキャストできないのはなぜですか? のメモリ アドレスをavSession
検査し、デバッガーでいずれかを検査すると、両方とも同じアドレスになります。しかし、それは間違いなく (デバッガーとランタイム自体によると) ではありませんAVAssetDownloadURLSession
。
これについて助けてくれてありがとう。
ios - オフラインの Fairplay AVAssetDownloadTask で、ダウンロード中に不明なエラー コールバックが発生しました (iOS 10.2 でのみ発生)
クライアント アプリ用のオフライン フェアプレイ コンテンツを作成しています。HLSCatalog デモ アプリの Apple サンプル ダウンロード マネージャー AssetPersistenceManager クラスを参照して、その機能を実装しました。ここで強調したいのは、AssetPersistenceManager クラスに 1 つの関数と 2 つのコールバックです。
ストリームのダウンロードが完了したらコールバックします
最後は didCompleteWithError コールバックです
iOS < 10.2 ではすべて正常に動作するようですが、最新の iOS 10.2 を実行している一部のデバイスでテストした後、アプリは常に didFinishDownloadTo デリゲートへのコールバックを取得しましたが、完了率は 13 ~ 15% のみでした。その後、didCompleteWithError が呼び出され、以下のエラーを受け取りました。
プロキシデバッグアプリで確認すると、アプリが応答全体を受信する前に接続を閉じることが指摘されています。
そのエラーが発生するのは iOS 10.2 のみです。そのバージョンより下の他の OS でテストされた同じストリームは、引き続き正常に動作します。この部分についてiOS 10.2の変更ログを見つけようとしましたが、何も見つかりませんでしたか? 何かアドバイスはありますか?
ios - AVAssetDownloadTask を使用して、まだストリーミングされていない FairPlay で暗号化された AVURLAsset インスタンスをダウンロードするにはどうすればよいですか?
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 を、その特定のインスタンスを以前にストリーミングせずにダウンロードするにはどうすればよいですか?