Как вы читаете образцы через AVAssetReader?Я нашел примеры дублирования или микширования с использованием AVAssetReader, но эти циклы всегда контролируются циклом AVAssetWriter.Можно ли просто создать AVAssetReader и прочитать его, получая каждый образец?
Спасибо.
Из вашего вопроса неясно, говорите ли вы о сэмплах видео или аудио. Чтобы прочитать образцы видео, вам необходимо сделать следующее:
Создание AVAssetReader:
asset_reader = [[AVAssetReader alloc] initWithAsset:asset error:&error]; (error checking goes here)
Получить видео (треки) из вашего ресурса:
NSArray* video_tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; AVAssetTrack* video_track = [video_tracks objectAtIndex:0];
Установите желаемый формат видеокадра:
NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init]; [dictionary setObject:[NSNumber numberWithInt:<format code from CVPixelBuffer.h>] forKey:(NSString*)kCVPixelBufferPixelFormatTypeKey];
Обратите внимание, что некоторые форматы видео просто не будут работать, и если вы делаете что-то в режиме реального времени, некоторые форматы видео работают лучше, чем другие (например, BGRA быстрее, чем ARGB).
Создайте фактический выходной трек и добавьте его в считыватель ресурсов:
AVAssetReaderTrackOutput* asset_reader_output = [[AVAssetReaderTrackOutput alloc] initWithTrack:video_track outputSettings:dictionary]; [asset_reader addOutput:asset_reader_output];
Начните чтение ресурса:
[asset_reader startReading];
Считать образцы:
CMSampleBufferRef buffer; while ( [asset_reader status]==AVAssetReaderStatusReading ) buffer = [asset_reader_output copyNextSampleBuffer];
Ответ Дэмиана работал для меня с видео и одной незначительной модификацией: на шаге 3, я думаю, словарь должен быть изменяемым:
NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init];