アプリケーションで AVPlayer を使用して、サーバーからオーディオを再生しています。オーディオを完全にバッファリングしたら、そのデータをアプリケーションに保存して後で再生できるようにしたいと考えています。では、バッファ データにアクセスし、後で使用するために保存するにはどうすればよいでしょうか。
4 に答える
resourceLoader
リソース読み込みプロセスの制御を引き継ぐデリゲートを提供AVPlayer
し、データが要求されて利用可能になったときにデータを提供することができます。リソース ローダーは のプロパティAVURLAsset
です。私のブログで完全なソリューションを文書化しましたが、主なアイデアは、URL のプロトコルをカスタムのものに切り替えて、AVURLAsset のリソース ローダーがその URL をロードする際にアプリケーションの支援を必要とすることです。次に、AVAssetResourceLoaderDelegate
コールバックを取得したら、ファイルのダウンロードを開始し、データがあるときに、これらのデリゲート コールバックから受信した保留中の要求に応答しようとします。これにより、アプリで本格的な HTTP サーバーを実行したり、他の複雑なソリューションに頼ったりすることなく、コンテンツのプログレッシブ ロード/再生が可能になります。
Calm のチームは、これに対する実装をオープンソース化しました。CocoaPod として利用できます。と呼ばれていPersistentStreamPlayer
ます。
これは、resourceLoader として機能します。他の実装に対する大きな利点は、バイナリ データがどの時点でもメモリ内にある必要がないため、より大きなファイルをサポートすることです。
機能は次のとおりです。
- オーディオ ファイルのストリーミング、最初のデータが利用可能になるとすぐに再生を開始
- また、バッファが完了するとすぐにストリーミング データをファイル URL に保存します
- バッファ ストリームが停止した後、オーディオ ファイルの再起動を処理します (ネットワークが遅いなど)。
- シンプルな play、pause、destroy メソッド (destroy はすべてのメモリ リソースをクリアします)
- RAM に収まらない大きなファイルをサポートするため、オーディオ ファイル データをメモリに保持しません。
ここで見つけることができます: https://github.com/calmcom/PersistentStreamPlayer
のバッファにアクセスできませんAVPlayer
。いくつかのヒント: オーディオ ファイルのプレビュー (オーディオの短いバージョン) をサーバーに配置して、ユーザーが完全なオーディオ ファイルをダウンロードする前にプレビューを聞くことができるようにするか、カスタムのオープン ソース オーディオ ストリーム プレーヤーを検索することができます。これにより、ストリーム バッファにアクセスできるようになります。幸運を!