画面の一部でビデオを再生する必要がある iPad 用の iOS アプリを開発しています。コンパイル時に指定されていない順序で次々に再生する必要があるビデオ ファイルがいくつかあります。1 つのビデオが再生されているように見える必要があります。あるビデオから次のビデオに移動するときに、2 つのビデオの最後のフレームまたは最初のフレームが表示されるときに多少の遅延が発生することは問題ありませんが、ちらつきやコンテンツのない白い画面があってはなりません。ビデオには音声が含まれていません。メモリ使用量を考慮することが重要です。ビデオの解像度は非常に高く、複数の異なるビデオ シーケンスを同時に並べて再生できます。
これを得るために、私はこれまでいくつかの解決策を試してきました。以下にそれらを示します。
1.すべてのビデオを含むAVCompositionを備えたAVPlayer
このソリューションでは、隣り合わせに配置されたすべてのビデオを含む AVComposition を使用して作成された AVPlayerItem でのみ使用する AVPlayer があります。特定のビデオに移動するとき、コンポジション内で次のビデオが始まる時間をシークします。このソリューションの問題は、プレーヤーをシークするときに、シークしているフレームの一部がすぐに表示されることです。これは受け入れられません。コンポジションの特定の時間に直接ジャンプする方法はないようです。ちょうど終了したビデオの最後のフレームの画像を作成し、シーク中にAVPLayerの前に表示し、シークが完了した後に最後に削除することで、これを解決しようとしました。AVAssetImageGeneratorを使って画像を作っているのですが、なぜか画質が動画と同じではなく、そのため、ビデオの上に画像を表示したり隠したりすると、顕著な変化があります。もう 1 つの問題は、単一の AVPlayerItem がすべてのビデオを保持するため、AVPlayer が大量のメモリを使用することです。
2. 複数の AVPlayerItem を持つ AVPlayer
このソリューションは、各ビデオに AVPlayerItem を使用し、新しいビデオに切り替えるときに AVPlayer のアイテムを置き換えます。これに伴う問題は、AVPlayer のアイテムを切り替えると、新しいアイテムをロードしている間、短時間白い画面が表示されることです。これを修正するには、ロード中に最後のフレームの前に画像を配置するソリューションを使用できますが、それでも画像とビデオの品質が異なり、注目に値するという問題があります。
3. AVPlayerItem を順番に再生する互いの上にある 2 つの AVPlayer
私が試した次の解決策は、AVPlayerItem を交互に再生する 2 つの AVPlayer を重ね合わせることでした。そのため、プレーヤーの再生が完了すると、ビデオの最後のフレームにとどまります。もう一方の AVPlayer が前面に表示され (項目が nil に設定されているため、透明になります)、次の AVPlayerItem がその AVPlayer に挿入されます。ロードされるとすぐに再生が開始され、2 つのビデオ間のスムーズなトランザクションの錯覚は損なわれません。このソリューションの問題は、メモリ使用量です。場合によっては、画面上で同時に 2 つのビデオを再生する必要があります。その結果、AVPlayerItem がロードされた 4 つの AVPlayer が同時に発生します。ビデオは非常に高解像度になる可能性があるため、これは単純にメモリが多すぎます。
全体的な問題と上記の解決策に関する考え、提案、コメント、または何かがある人はいますか。