AVQueuePlayer を使用してAVPlayerItemsをキューに入れ、再生しました。ただし、 removeItem:メソッドを呼び出してプレーヤーのキューを変更すると、問題が発生します。現在再生中のアイテムに触れない限り、このキューを自由に変更できると想定していましたが、removeItem:を呼び出すたびに再生が一瞬フリーズするようです。
次のコード スニペットを検討してください。
+ (void)setBranch:(BranchType)bType {
NSArray* items = [dynamicMusicPlayer items];
for (AVPlayerItem* item in [items copy]) {
if (item == dynamicMusicPlayer.currentItem) {
continue; // don't remove the currently played item
}
[dynamicMusicPlayer removeItem:item];
}
[self queueNextBlockFromBranchType:bType];
currentBranch = bType;
}
このことから、さまざまなブランチから音楽を再生するダイナミック ミュージック プレーヤーであることが推測できます。したがって、基本的に、アイテムを削除する行にコメントを付けると、すべて問題なく再生されますが、必要に応じてすぐにブランチが変更されないことは明らかです。フリーズは削除が発生したときに発生するため、現在再生中のアイテムは中断されますが、実際のアイテム間の移行はシームレスです。また、キューに 2 つ以上のアイテムがあることはないので、ループでは基本的に 1 つのアイテムのみを削除することに注意してください。
だから、私の質問は次のとおりです。このフリーズを回避する方法はありますか? そして、そもそも何がフリーズを引き起こしているのでしょうか?
編集同じ問題に遭遇した人々にとって、私にとっての解決策は、AVFoundationの使用をやめ、代わりにOrigamiEngineを使用することでした.