It’s unclear from your question whether you are talking about video samples or audio samples. To read video samples, you need to do the following:
-
Construct an AVAssetReader:
asset_reader = [[AVAssetReader alloc] initWithAsset:asset error:&error];
(error checking goes here) -
Get the video track(s) from your asset:
NSArray* video_tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
AVAssetTrack* video_track = [video_tracks objectAtIndex:0]; -
Set the desired video frame format:
NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init]; [dictionary setObject:[NSNumber numberWithInt:<format code from CVPixelBuffer.h>] forKey:(NSString*)kCVPixelBufferPixelFormatTypeKey];
Note that certain video formats just will not work, and if you’re doing something real-time, certain video formats perform better than others (BGRA is faster than ARGB, for instance).
-
Construct the actual track output and add it to the asset reader:
AVAssetReaderTrackOutput* asset_reader_output = [[AVAssetReaderTrackOutput alloc] initWithTrack:video_track outputSettings:dictionary]; [asset_reader addOutput:asset_reader_output];
-
Kick off the asset reader:
[asset_reader startReading];
-
Read off the samples:
CMSampleBufferRef buffer; while ( [asset_reader status]==AVAssetReaderStatusReading ) buffer = [asset_reader_output copyNextSampleBuffer];