Lectura de muestras a través de AVAssetReader

¿Cómo se leen las muestras a través de AVAssetReader? He encontrado ejemplos de duplicación o mezcla utilizando AVAssetReader, pero esos bucles siempre están controlados por el bucle AVAssetWriter. ¿Es posible crear un AVAssetReader y leerlo, obteniendo cada muestra?

Gracias.

No está claro por su pregunta si está hablando de muestras de video o muestras de audio. Para leer muestras de video, debe hacer lo siguiente:

  1. Construya un AVAssetReader:

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

  2. Obtenga la (s) pista (s) de video de su activo:

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

  3. Establezca el formato de marco de video deseado:

      NSMutableDictionary * dictionary = [[NSMutableDictionary alloc] init];
     [setObject del diccionario: [NSNumber numberWithInt: ] forKey: (NSString *) kCVPixelBufferPixelFormatTypeKey]; 

    Tenga en cuenta que ciertos formatos de video simplemente no funcionarán, y si está haciendo algo en tiempo real, ciertos formatos de video funcionan mejor que otros (BGRA es más rápido que ARGB, por ejemplo).

  4. Construya la salida de pista real y agréguela al lector de activos:

      AVAssetReaderTrackOutput * asset_reader_output = [[AVAssetReaderTrackOutput alloc] initWithTrack: video_track outputSettings: dictionary];
     [asset_reader addOutput: asset_reader_output]; 
  5. Inicia el lector de activos:

    [asset_reader startReading];

  6. Lea las muestras:

     CMSampleBufferRef buffer;
     while ([asset_reader status] == AVAssetReaderStatusReading)
           buffer = [asset_reader_output copyNextSampleBuffer];
    

La respuesta de Damian funcionó para mí con video y una pequeña modificación: en el paso 3, creo que el diccionario debe ser mutable:

 NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init];