スナップショットと同様のビデオ再生をサポートするアプリケーションで作業しています(複数のリモートビデオをタップできます)。いくつかのビデオをタップした後、バッファリングは遅くなるように見え、ある時点で完全な停止になります。私にメモリリークのように聞こえる。AVPlayersは時間の経過とともにバッファーが遅くなります
私はAVPlayers、AVPlayerItems、およびAVPlayerLayersがすべて割り当て解除されていることをInstrumentsで確認しました。私は見つけるだけでリークがこれらです:
しかし、接続グラフとメモリ使用量を研究することによって、私ははっきりと見ることができるにもビデオプレーヤーを解雇し、アプリのカメラビューに座った後、いくつかのバッファリングがまだ発生しています。ネットワークアクティビティはかなり高く維持され、メモリは徐々に増加します。
動画の再生方法を理解するには、ここで簡単に説明します。私はVideoPlayerオブジェクトを持っていますが、そのうちの1つだけを開始してから、再生する新しいアセットを与えます。新しい資産を提供する前に、私はstopBuffering
に電話します。何も残っていないことを確認するだけです(私たちはどれほど成功したかを見ています)。
- (void)stopBuffering
{
[self removeObservers];
[self.player pause];
[self.avPlayer replaceCurrentItemWithPlayerItem:nil];
self.avPlayer = nil;
self.player = nil;
self.playerItem = nil;
}
新しいアセットが読み込まれるたびにこのメソッドが呼び出されることを確認しました。 これはすべてのヒープ&匿名VMグラフです。第1世代はビデオの再生前、第3世代はビデオプレーヤーから出ています。その間に、私はすぐに約20のビデオに飛びついた。