Need help with NextLevelSessionExporter?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

NextLevel
175 Stars 33 Forks MIT License 134 Commits 9 Opened issues

Description

🔄 Export and transcode media in Swift

Services available

!
?

Need anything else?

Contributors list

# 13,265
iOS
Swift
Objecti...
swift-f...
110 commits
# 208,598
Android
video-c...
video-t...
Swift
2 commits
# 341,204
Swift
Objecti...
avfound...
swift-e...
1 commit
# 250,458
Swift
iOS
Shell
Objecti...
1 commit
# 236,230
cocoapo...
carthag...
swift5
swift3
1 commit

NextLevelSessionExporter 🔄

NextLevelSessionExporter
is an export and transcode media library for iOS written in Swift.

Build Status Pod Version Swift Version GitHub license

The library provides customizable audio and video encoding options unlike

AVAssetExportSession
and without having to learn the intricacies of AVFoundation. It was a port of SDAVAssetExportSession with inspiration from SCAssetExportSession – which are great obj-c alternatives.
  • Looking for a capture library? Check out NextLevel.
  • Looking for a video player? Check out Player

Need a different version of Swift? *

5.0
- Target your Podfile to the latest release or master *
4.2
- Target your Podfile to the
swift4.2
branch *
4.0
- Target your Podfile to the
swift4.0
branch

Quick Start

# CocoaPods

pod "NextLevelSessionExporter", "~> 0.4.5"

Carthage

github "nextlevel/NextLevelSessionExporter" ~> 0.4.5

Swift PM

let package = Package( dependencies: [ .Package(url: "https://github.com/nextlevel/NextLevelSessionExporter", majorVersion: 0) ] )

Alternatively, drop the source files into your Xcode project.

Example

Simply use the

AVAsset
extension or create and use an instance of
NextLevelSessionExporter
directly.
let tmpURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
    .appendingPathComponent(ProcessInfo().globallyUniqueString)
    .appendingPathExtension("mp4")
exporter.outputURL = tmpURL

let compressionDict: [String: Any] = [ AVVideoAverageBitRateKey: NSNumber(integerLiteral: 6000000), AVVideoProfileLevelKey: AVVideoProfileLevelH264HighAutoLevel as String, ] let videoOutputConfig = [ AVVideoCodecKey: AVVideoCodec.h264, AVVideoWidthKey: NSNumber(integerLiteral: 1920), AVVideoHeightKey: NSNumber(integerLiteral: 1080), AVVideoScalingModeKey: AVVideoScalingModeResizeAspectFill, AVVideoCompressionPropertiesKey: compressionDict ] let audioOutputConfig = [ AVFormatIDKey: kAudioFormatMPEG4AAC, AVEncoderBitRateKey: NSNumber(integerLiteral: 128000), AVNumberOfChannelsKey: NSNumber(integerLiteral: 2), AVSampleRateKey: NSNumber(value: Float(44100)) ]

let asset = AVAsset(url: Bundle.main.url(forResource: "TestVideo", withExtension: "mov")!) asset.nextlevel_export(outputURL: tmpURL, videoOutputConfiguration: videoOutputConfig, audioOutputConfiguration: audioOutputConfig)

Alternatively, you can use

NextLevelSessionExporter
directly.
let exporter = NextLevelSessionExporter(withAsset: asset)
exporter.outputFileType = AVFileType.mp4
let tmpURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
    .appendingPathComponent(ProcessInfo().globallyUniqueString)
    .appendingPathExtension("mp4")
exporter.outputURL = tmpURL

let compressionDict: [String: Any] = [ AVVideoAverageBitRateKey: NSNumber(integerLiteral: 6000000), AVVideoProfileLevelKey: AVVideoProfileLevelH264HighAutoLevel as String, ] exporter.videoOutputConfiguration = [ AVVideoCodecKey: AVVideoCodec.h264, AVVideoWidthKey: NSNumber(integerLiteral: 1920), AVVideoHeightKey: NSNumber(integerLiteral: 1080), AVVideoScalingModeKey: AVVideoScalingModeResizeAspectFill, AVVideoCompressionPropertiesKey: compressionDict ] exporter.audioOutputConfiguration = [ AVFormatIDKey: kAudioFormatMPEG4AAC, AVEncoderBitRateKey: NSNumber(integerLiteral: 128000), AVNumberOfChannelsKey: NSNumber(integerLiteral: 2), AVSampleRateKey: NSNumber(value: Float(44100)) ]

exporter.export(progressHandler: { (progress) in print(progress) }, completionHandler: { result in switch result { case .success(let status): switch status { case .completed: print("NextLevelSessionExporter, export completed, (exporter.outputURL?.description ?? "")") break default: print("NextLevelSessionExporter, did not complete") break } break case .failure(let error): print("NextLevelSessionExporter, failed to export (error)") break } })

Documentation

You can find the docs here. Documentation is generated with jazzy and hosted on GitHub-Pages.

Community

Resources

License

NextLevelSessionExporter
is available under the MIT license, see the LICENSE file for more information.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.