VIExportSession
一个带有可自定义音频和视频设置的 AVAssetExportSession
替代品。
您可以在 ExportConfiguration.swift
中查看更多关于视频编码和解码的详细信息
class ExportConfiguration {
var outputURL = URL.temporaryExportURL()
var fileType: AVFileType = .mp4
var shouldOptimizeForNetworkUse = false
var metadata: [AVMetadataItem] = []
}
class VideoConfiguration {
// Video settings see AVVideoSettings.h
var videoInputSetting: [String: Any]?
var videoOutputSetting: [String: Any]?
var videoComposition: AVVideoComposition?
}
class AudioConfiguration {
// Audio settings see AVAudioSettings.h
var audioInputSetting: [String: Any]?
var audioOutputSetting: [String: Any]?
var audioMix: AVAudioMix?
var audioTimePitchAlgorithm: AVAudioTimePitchAlgorithm?
}
示例
exportSession.videoConfiguration.videoOutputSetting = {
let frameRate = 30
let bitrate = min(2000000, videoTrack.estimatedDataRate)
let trackDimensions = videoTrack.naturalSize
let compressionSettings: [String: Any] = [
AVVideoAverageNonDroppableFrameRateKey: frameRate,
AVVideoAverageBitRateKey: bitrate,
AVVideoMaxKeyFrameIntervalKey: 30,
AVVideoProfileLevelKey: AVVideoProfileLevelH264HighAutoLevel
]
var videoSettings: [String : Any] = [
AVVideoWidthKey: trackDimensions.width,
AVVideoHeightKey: trackDimensions.height,
AVVideoCompressionPropertiesKey: compressionSettings
]
if #available(iOS 11.0, *) {
videoSettings[AVVideoCodecKey] = AVVideoCodecType.h264
} else {
videoSettings[AVVideoCodecKey] = AVVideoCodecH264
}
return videoSettings
}()
exportSession.audioConfiguration.audioOutputSetting = {
var stereoChannelLayout = AudioChannelLayout()
memset(&stereoChannelLayout, 0, MemoryLayout<AudioChannelLayout>.size)
stereoChannelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo
let channelLayoutAsData = Data(bytes: &stereoChannelLayout, count: MemoryLayout<AudioChannelLayout>.size)
let compressionAudioSettings: [String: Any] = [
AVFormatIDKey: kAudioFormatMPEG4AAC,
AVEncoderBitRateKey: 128000,
AVSampleRateKey: 44100,
AVChannelLayoutKey: channelLayoutAsData,
AVNumberOfChannelsKey: 2
]
return compressionAudioSettings
}()
安装
VIExportSession
仅支持 Swift 4
Cocoapods
platform :ios, '8.0'
use_frameworks!
target 'MyApp' do
# your other pod
# ...
pod 'VIExportSession'
end
手动
您可以将 VIExportSession.swift
拖放到您的项目中
授权协议
MIT 协议下