NextLevelSessionExporter 0.4.6

NextLevelSessionExporter 0.4.6

测试已测试
语言语言 SwiftSwift
许可 MIT
发布时间最新发布2020年9月
SPM支持 SPM

patrick piemonte 维护。



  • 作者
  • patrick piemonte

NextLevelSessionExporter🔄

NextLevelSessionExporter 是一个用 Swift 编写的 iOS 媒体库的导出和转码库。

Build Status Pod Version Swift Version GitHub license

该库提供了可定制的音频和视频编码选项,与 AVAssetExportSession 不同,而且不需要学习 AVFoundation 的复杂细节。它是从 SDAVAssetExportSession 拷贝并受到 SCAssetExportSession 的启发 modification – 这都是优秀的 obj-c 替代品。

  • 正在寻找一个捕获库?请查看 NextLevel
  • 正在寻找一个视频播放器?请查看 Player

需要不同版本的 Swift 吗?

  • 5.0 - 将您的 Podfile 定位到最新版本或 master 分支
  • 4.2 - 将您的 Podfile 定位到 swift4.2 分支
  • 4.0 - 将您的 Podfile 定位到 swift4.0 分支

快速入门

# 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)
    ]
)

或者,将 源文件 放入您的 Xcode 项目的文件中。

示例

只需使用 AVAsset 扩展或直接创建并使用 NextLevelSessionExporter 实例。

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)

或者,您可以直接使用 NextLevelSessionExporter

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
    }
})

文档

您可以在此处找到文档。文档使用jazzy生成,并托管在GitHub-Pages上。

社区

  • 发现bug吗?打开一个问题
  • 有功能想法吗?打开一个问题
  • 想贡献吗?提交一个Pull Request

资源

许可

NextLevelSessionExporter遵循MIT许可,更多信息请参阅LICENSE文件。