AVPlayerを介してビデオ ファイルの再生を提供する必要があるアプリを開発中です。ファイルはユーザーのデバイスに保存する必要がありますが、ダウンロード中に再生する必要もあります。
現時点では、ASIHTTPRequestライブラリを使用して PHP 経由でビデオ ファイルを取得し (パブリック URL 経由でメディアをリンク可能にしたくありません)、それらを非同期的にディスクに書き込むダウンロード モジュールを作成しました。
次に、 AV Foundation Programming Guideに従って AVPlayer をセットアップし、AVURLAsset を使用してファイルを取得し、アセットを使用して AVPlayerItem を作成し、アイテムを使用して AVPlayer を構築し、プレーヤーを AVPlayerLayer に設定しました。プレーヤーは、完全にダウンロードされたビデオ ファイルで正常に動作し、プログレッシブにダウンロードされたファイルもシミュレーターで完全に正常に動作します。
残念ながら、実際のデバイスでは、プレーヤーの動作が変わります。代わりに、ビデオを 1 回ロードし、ディスクから新しいパケットを取得しようとしないように見えます。その結果、プレーヤーは、アセットがロードされた時点でダウンロードの進行状況を示すビデオのポイントまでビデオとオーディオを再生します(たとえば、2MB のデータがバッファリングされてからプレーヤーが作成される場合、プレーヤーは最大 2MB 分のデータを再生できます)。ビデオのヘッダーがあるため、プレーヤーはビデオの全期間にわたって再生されていると喜んで考え続けますが、他のビデオが画面にレンダリングされることはありません。
最後の問題は、ビデオが AVComposition に挿入され、それを使用して AVPlayer が作成された場合、プログレッシブ ビデオが正常に再生されることです。これは素晴らしい解決策です (また、場合によってはアプリに必要です) が、アプリのクライアントは、ビデオが AirPlay 経由で Apple TV で再生可能であることを要求しますが、AVCompositions はこれができません。
AVURLAssets から構築された AVPlayer を使用して、プログレッシブ ダウンロード ビデオ ファイルを再生する方法があるかどうかは誰にもわかりませんか? ビデオをメモリにキャッシュしているように見えるのではなく、AVURLAsset を使用して、AVComposition で行うように、player/playerItem を強制的にディスクから読み取る方法はありますか?
ありがとう!