Reading samples via AVAssetReader

后端 未结 2 1580
余生分开走
余生分开走 2020-12-01 02:12

How do you read samples via AVAssetReader? I\'ve found examples of duplicating or mixing using AVAssetReader, but those loops are always controlled by the AVAssetWriter loop

2条回答
  •  孤街浪徒
    2020-12-01 03:13

    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:

    1. Construct an AVAssetReader:

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

    2. Get the video track(s) from your asset:

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

    3. Set the desired video frame format:

      NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init];
      [dictionary setObject:[NSNumber numberWithInt:] 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).

    4. 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];
    5. Kick off the asset reader:

      [asset_reader startReading];

    6. Read off the samples:

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

提交回复
热议问题