AVAssetExportSession drop-in replacement with customizable audio&video settings
Branch: master
Clone or download
Pull request Compare This branch is 1 commit ahead, 53 commits behind rs:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
README.md
SDAVAssetExportSession.h
SDAVAssetExportSession.m

README.md

SDAVAssetExportSession

AVAssetExportSession drop-in remplacement with customizable audio&video settings.

You want the ease of use of AVAssetExportSession but default provided presets doesn't fit your needs? You then began to read documentation for AVAssetWriter, AVAssetWriterInput, AVAssetReader, AVAssetReaderVideoCompositionOutput, AVAssetReaderAudioMixOutput… and you went out of aspirin? SDAVAssetExportSession is a rewrite of AVAssetExportSession on top of AVAssetReader* and AVAssetWriter*. Unlike AVAssetExportSession, you are not limited to a set of presets – you have full access over audio and video settings.

Usage Example

SDAVAssetExportSession *encoder = [SDAVAssetExportSession.alloc initWithAsset:anAsset];
encoder.outputFileType = AVFileTypeMPEG4;
encoder.outputURL = outputFileURL;
encoder.videoSettings = @
{
    AVVideoCodecKey: AVVideoCodecH264,
    AVVideoWidthKey: @1920,
    AVVideoHeightKey: @1080,
    AVVideoCompressionPropertiesKey: @
    {
        AVVideoAverageBitRateKey: @6000000,
        AVVideoProfileLevelKey: AVVideoProfileLevelH264High40,
    },
};
encoder.audioSettings = @
{
    AVFormatIDKey: @(kAudioFormatMPEG4AAC),
    AVNumberOfChannelsKey: @2,
    AVSampleRateKey: @44100,
    AVEncoderBitRateKey: @128000,
};

[encoder exportAsynchronouslyWithCompletionHandler:^
{
    if (status == AVAssetExportSessionStatusCompleted)
    {
        NSLog(@"Video export succeeded");
    }
    else if (status == AVAssetExportSessionStatusCancelled)
    {
        NSLog(@"Video export cancelled");
    }
    else
    {
        NSLog(@"Video export failed with error: %@ (%d)", error.localizedDescription, error.code);
    }
}];