VIExportSession 0.1

VIExportSession 0.1

Vito Zhang 维护。



  • Vito

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 协议下