Como você lê amostras via AVAssetReader? Eu encontrei exemplos de duplicação ou mistura usando AVAssetReader, mas esses loops são sempre controlados pelo loop AVAssetWriter. É possível apenas criar um AVAssetReader e lê-lo, obtendo cada amostra?
Obrigado.
Não está claro se você está falando sobre amostras de vídeo ou amostras de áudio. Para ler amostras de vídeo, você precisa fazer o seguinte:
Construa um AVAssetReader:
asset_reader = [[AVAssetReader alloc] initWithAsset:asset error:&error]; (error checking goes here)
Receba as faixas de vídeo do seu material:
NSArray* video_tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; AVAssetTrack* video_track = [video_tracks objectAtIndex:0];
Defina o formato de quadro de vídeo desejado:
Dicionário NSMutableDictionary * = [[NSMutableDictionary alloc] init]; [dictionary setObject: [NSNumber numberWithInt:] forKey: (NSString *) kCVPixelBufferPixelFormatTypeKey];
Note que certos formatos de vídeo simplesmente não funcionam, e se você está fazendo algo em tempo real, certos formatos de vídeo têm um desempenho melhor do que outros (a BGRA é mais rápida que o ARGB, por exemplo).
Construa a saída da trilha real e adicione-a ao leitor de ativos:
AVAssetReaderTrackOutput * asset_reader_output = [[Alocação de AVAssetReaderTrackOutput] initWithTrack: output de video_trackConfigurações: dictionary]; [asset_reader addOutput: asset_reader_output];
Kick off the asset reader:
[asset_reader startReading];
Leia as amostras:
CMSampleBufferRef buffer; while ([asset_reader status] == AVAssetReaderStatusReading) buffer = [asset_reader_output copyNextSampleBuffer];
A resposta de damian funcionou para mim com o vídeo e uma pequena modificação: na etapa 3, acho que o dictionary precisa ser mutável:
NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init];