Поэтому я настроил ATPagingView (ScrollView) (https://github.com/andreyvit/SoloComponents-iOS/tree/master/ATPagingView) с настраиваемым PageView для каждой страницы. Представление страницы загружается с помощью AVPlayerLayer, который был / загружен с помощью AVPlayer (потому что это было частью попытки чтобы исправить это, я попытался использовать AVQueuePlayer.) Теперь в ATPagingView была встроена переработка страниц, так что мне не нужно загружать все 15 видео одновременно (установите 3), и я добавил функцию перезагрузки в PageView, которая в основном загружает видео для нового индекса страницы, не перезапуская все, но прежде чем я просто переинициализировал все, и это все еще не работало. Я довольно уверен, что это проблема памяти с avplayer, но профилировщик не показывает утечки и постоянный объем памяти. Я теперь, когда ATPagingView отправляет правильный индекс и все, потому что у меня также есть метки на PageViews, которые являются правильными.
Я пробовал это: Воспроизведение множества различных видео на iphone с использованием AVPlayer без удачи. А также пытаясь использовать AVQueuePlayers для обработки перезагрузки вместо replaceCurrentItemWithPlayerItem :. Опять не повезло.
Вот примерный код инициализации:
NSURL* m =[[NSBundle mainBundle] URLForResource:page.video withExtension:page.videoExt];
self.player = [AVQueuePlayer queuePlayerWithItems:[NSArray arrayWithObject:[AVPlayerItem playerItemWithURL:m]]];
self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
self.playerLayer.frame = self.frame;
[img.layer addSublayer: self.playerLayer];
self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[self.player currentItem]];
[self.player play];
И код перезагрузки выглядит примерно так:
[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:[self.player currentItem]];
[self.player removeAllItems];
NSURL* m =[[NSBundle mainBundle] URLForResource:page.video withExtension:page.videoExt];
//AVPlayer version
url = m;
AVAsset *newAsset = [AVURLAsset URLAssetWithURL:url options:nil];
AVPlayerItem *newPlayerItem = [AVPlayerItem playerItemWithAsset:newAsset];
[self.player insertItem:newPlayerItem afterItem:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:newPlayerItem];
[self.player play];
Как я уже сказал, это происходит не каждый раз, когда он перезагружается, но если я захожу в ATPagingView и затем возвращаюсь обратно в меню, а затем возвращаюсь в то время, когда это начнет происходить.
Есть идеи?