🔄
NextLevelSessionExporterNextLevelSessionExporter
是一个用 Swift 编写的 iOS 媒体库的导出和转码库。
该库提供了可定制的音频和视频编码选项,与 AVAssetExportSession
不同,而且不需要学习 AVFoundation 的复杂细节。它是从 SDAVAssetExportSession 拷贝并受到 SCAssetExportSession 的启发 modification – 这都是优秀的 obj-c 替代品。
需要不同版本的 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。
资源
- AV Foundation 程序指南
- AV Foundation 框架参考
- NextLevel,Swift中的Rad Media Capture
- GPUImage2,Swift中的图像处理库
- SDAVAssetExportSession,Objective-C中的媒体转码库
许可
NextLevelSessionExporter
遵循MIT许可,更多信息请参阅LICENSE文件。