Уменьшить использование видеопамяти AVPlayer

У нас есть видеопроигрыватель, в котором мы воспроизводим видео в AVPlayer (1 ГБ контента размером около 8 МБ .mov). Мы загружаем AVPlayer с помощью AVMutableComposition видеодорожки и аудиодорожки, которые находятся на локальном диске в комплекте с приложением.

Мы делаем что-то вроде:

AVAsset* videoAsset = [[AVURLAsset alloc] initWithURL:videoUrl options:nil]; AVAsset* voiceAsset = useVoice ? [[AVURLAsset alloc] initWithURL:voiceUrl options:nil] : nil; AVMutableComposition* composition = [[AVMutableComposition alloc] init]; AVMutableCompositionTrack* videoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; AVMutableCompositionTrack* audioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; AVMutableCompositionTrack* voiceTrack = useVoice ? [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid] : nil; NSError* error = nil; [videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] firstObject] atTime:kCMTimeZero error:&error]; if (error) { [[MNGAppDelegate sharedManagers].errorManager presentError:error]; } if ([videoAsset tracksWithMediaType:AVMediaTypeAudio].count > 0) { [audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeAudio] firstObject] atTime:kCMTimeZero error:&error]; if (error) { [[MNGAppDelegate sharedManagers].errorManager presentError:error]; } } if (useVoice) { [voiceTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, voiceAsset.duration) ofTrack:[[voiceAsset tracksWithMediaType:AVMediaTypeAudio] firstObject] atTime:kCMTimeZero error:&error]; if (error) { [[MNGAppDelegate sharedManagers].errorManager presentError:error]; } } 

И мы загружаем его с помощью replaceCurrentItemWithPlayerItem (за исключением первого).

  [self.player replaceCurrentItemWithPlayerItem:nextItem]; 

Мы никогда не создаем плейлист или можем вернуться. Мы просто заменяем его, когда нужно воспроизводить новое видео.

Что мы замечаем, так это то, что VM Tracker показывает, что наш Dirty Size сходит с ума. Как только мы играем первый 8-мегабайтный файл, мы приближаемся к 80 МБ грязных. Поскольку мы заменяем все больше и больше видео, мы можем легко получить наш Dirty Size до 200MB +. В течение примерно 20-30 видео приложение обычно будет убито, и мы получим журнал сбоев с низкой памятью.

Есть ли что-то особенное, что мы должны делать, чтобы уменьшить память AVPlayer при замене клипов в проигрывателе?

  • Когда устанавливаются свойства розетки XIB?
  • Как объединить видео с помощью AVMutableComposition в iPhone sdk
  • Как отключить окно сообщений для текстовых сообщений в приложении ios
  • setImageWithUrl не показывает изображение с самого начала
  • iOS 6: как принудительно изменить ориентацию при нажатии контроллера просмотра в стек навигационного контроллера
  • приложение ios 6 совместимо с ios 5
  • разделите изображение на две части, используя разделитель
  • RKResponseDescriptor vs RKRouter
  • Сделать UICollectionViewCell в центре UICollectionView
  • Данные маршрутизации для MKMapKit в iOS6
  • EXC_BAD_ACCESS на iOS 6, но не 5 при изменении байтов CFDataRef
  • IOS Custom UIBarbuttonItem изменяет позицию в подробном представлении
  • Interesting Posts

    Как создать подкласс класса UIView с xib?

    IOS Contacts, как кодировать и декодировать imageData в String и отправлять его через словарь infoDiscovery с рекламодателем MPC

    Как предотвратить блокировку экрана ios с Qt

    Swift: как отклонить SLCAlertView, когда пользователь прикасается к AlertView

    Почему строка отображается в NSDictionary с кавычками, а другие нет?

    Запустите UICollectionView по определенному пути индекса

    Нет архитектур для компиляции для (ARCHS =, VALID_ARCHS = armv7k) Xcode 7 beta 3

    Установите альфа фона UIButton, но не заголовок

    Самый простой и правильный способ переключения видов в немодальном режиме с использованием раскадровки

    Установите UIView для изменения размера на основе UILabel

    С заменой TestFlight на iTunes Connect, что произойдет с бета-тестированием приложений на предприятии?

    Как извлечь доминирующий цвет из CIAreaHistogram?

    Как вы предотвращаете автоматический запуск игровых площадок Xcode 7?

    Как изменить размер titleView в панели навигации. Потому что между titleView и backButton есть пробел в navigationBar

    Как получить доступ к отчетам о сбоях вместо файлов .ips.beta для тестового приложения TestFlight с устройства в Xcode 6.3?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.