Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Basic AVAssetReader problems reading video samples

I'm looking to read video samples via AVAssetReader and I'm running into all kinds of road blocks. Can some one post code that sets up an AVAsset from a video named 'Movie.m4v' from the application bundle and uses AVAssetReader to loop through the video frames (CMSampleBufferRef).

Here's some of the code I'm using now that doesn't work:

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Movie.m4v"];
AVAsset *avAsset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:path] options:nil];
NSError *error = nil;
AVAssetReader *reader = [[AVAssetReader alloc] initWithAsset:avAsset error:&error]; // crashing right around here!

// I've gotten avassetreader to not crash upon initialization by grabbing an asset from the ALAssetsLibrary but it says it has 0 tracks!

NSArray *videoTracks = [avAsset tracksWithMediaType:AVMediaTypeVideo]; 
AVAssetTrack *videoTrack = [videoTracks objectAtIndex:0];
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey];
AVAssetReaderTrackOutput *asset_reader_output = [[AVAssetReaderTrackOutput alloc] initWithTrack:videoTrack outputSettings:options];
[reader addOutput:asset_reader_output];
[reader startReading];

CMSampleBufferRef buffer;
while ( [reader status]==AVAssetReaderStatusReading ){

    buffer = [asset_reader_output copyNextSampleBuffer];
    NSLog(@"READING");



}
like image 564
devinross Avatar asked Jun 21 '11 06:06

devinross


1 Answers

Most likely crashes because of the [NSURL URLWithString:path]. You should use [NSURL fileURLWithPath:path] instead.

like image 74
Alex Chugunov Avatar answered Sep 18 '22 21:09

Alex Chugunov