VideoIO
视频输入/输出工具
VideoComposition
围绕自定义视频合成器 AVMutableVideoComposition
进行包装。提供方便的 BlockBasedVideoCompositor
。
使用 MetalPetal
let context = try! MTIContext(device: MTLCreateSystemDefaultDevice()!)
let handler = MTIAsyncVideoCompositionRequestHandler(context: context, tracks: asset.tracks(withMediaType: .video)) { request in
return FilterGraph.makeImage { output in
request.anySourceImage => filterA => filterB => output
}!
}
let composition = VideoComposition(propertiesOf: asset, compositionRequestHandler: handler.handle(request:))
let playerItem = AVPlayerItem(asset: asset)
playerItem.videoComposition = composition.makeAVVideoComposition()
player.replaceCurrentItem(with: playerItem)
player.play()
不使用 MetalPetal
let composition = VideoComposition(propertiesOf: asset, compositionRequestHandler: { request in
//Process video frame
})
let playerItem = AVPlayerItem(asset: asset)
playerItem.videoComposition = composition.makeAVVideoComposition()
player.replaceCurrentItem(with: playerItem)
player.play()
AssetExportSession
导出 AVAsset
。同时拥有自定义视频/音频设置以及 暂停
/ 恢复
的能力。
var configuration = AssetExportSession.Configuration(fileType: .mp4, videoSettings: .h264(videoSize: videoComposition.renderSize), audioSettings: .aac(channels: 2, sampleRate: 44100, bitRate: 128 * 1000))
configuration.metadata = ...
configuration.videoComposition = ...
configuration.audioMix = ...
self.exporter = try! AssetExportSession(asset: asset, outputURL: outputURL, configuration: configuration)
exporter.export(progress: { p in
}, completion: { error in
//Done
})
PlayerVideoOutput
从 AVPlayer
输出视频缓冲区。
let player: AVPlayer = ...
let playerOutput = PlayerVideoOutput(player: player) { videoFrame in
//Got video frame
}
player.play()
MovieRecorder
录制视频和音频。
AudioQueueCaptureSession
使用AudioQueue
捕获音频。
Camera
简单的音频/视频捕获。