Чтение образцов с помощью AVAssetReader

Как вы читаете образцы через AVAssetReader? Я нашел примеры дублирования или микширования с использованием AVAssetReader, но эти петли всегда управляются контуром AVAssetWriter. Можно ли просто создать AVAssetReader и прочитать его, получив каждый образец?

Благодарю.

С вашего вопроса неясно, говорите ли вы о образцах видео или аудио-образцах. Чтобы прочитать образцы видео, вам необходимо сделать следующее:

  1. Построить AVAssetReader:

    asset_reader = [[AVAssetReader alloc] initWithAsset:asset error:&error]; (error checking goes here)

  2. Получите видеодорожки из своего ресурса:

    NSArray* video_tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; AVAssetTrack* video_track = [video_tracks objectAtIndex:0];

  3. Установите желаемый формат видеоfragmentа:

      NSMutableDictionary * dictionary = [[NSMutableDictionary alloc] init];
     [dictionary setObject: [NSNumber numberWithInt: <формат кода из CVPixelBuffer.h>] forKey: (NSString *) kCVPixelBufferPixelFormatTypeKey]; 

    Обратите внимание, что некоторые видеоформаты просто не работают, и если вы делаете что-то в режиме реального времени, некоторые видеоформаты работают лучше других (BGRA быстрее, чем ARGB, например).

  4. Создайте фактический выход трека и добавьте его в считыватель активов:

      AVAssetReaderTrackOutput * asset_reader_output = [[AVAssetReaderTrackOutput alloc] initWithTrack: video_track outputSettings: dictionary];
     [asset_reader addOutput: asset_reader_output]; 
  5. Убейте читателя активов:

    [asset_reader startReading];

  6. Считайте образцы:

     Буфер CMSampleBufferRef;
     while ([status_reader status] == AVAssetReaderStatusReading)
           buffer = [asset_reader_output copyNextSampleBuffer];
    

Ответ Damian работал для меня с видео и одним незначительным изменением: на шаге 3 я думаю, что словарь должен быть изменчивым:

 NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init]; 
  • Полноэкранный UIView со строкой состояния и наложением панели навигации наверху
  • Как Apple знает, что вы используете частный API?
  • Переменная Property vs. instance
  • Что такое простой способ разбить NSArray с 4000+ объектами в нем на несколько массивов с 30 объектами каждый?
  • Как сделать ui отзывчивым все время и делать обновление фона?
  • Масштабирование MKMapView для подгонки аннотаций?
  • Поиск NSArray для значения соответствия значений
  • Статическая строковая переменная в Objective C на iphone
  • Ошибка: протокол недоступен, сброс backtrace
  • Перетаскивание UIView внутри UIScrollView
  • Ошибка UIActivityViewController на iOS 8 iPads
  • Давайте будем гением компьютера.