项目作者: MetalPetal

项目描述 :
Video Input/Output Utilities
高级语言: Swift
项目地址: git://github.com/MetalPetal/VideoIO.git
创建时间: 2019-12-19T05:24:47Z
项目社区:https://github.com/MetalPetal/VideoIO

开源协议:MIT License

下载


VideoIO

Video Input/Output Utilities

VideoComposition

Wraps around AVMutableVideoComposition with custom video compositor. A BlockBasedVideoCompositor is provided for convenience.

With MetalPetal

  1. let context = try! MTIContext(device: MTLCreateSystemDefaultDevice()!)
  2. let handler = MTIAsyncVideoCompositionRequestHandler(context: context, tracks: asset.tracks(withMediaType: .video)) { request in
  3. return FilterGraph.makeImage { output in
  4. request.anySourceImage => filterA => filterB => output
  5. }!
  6. }
  7. let composition = VideoComposition(propertiesOf: asset, compositionRequestHandler: handler.handle(request:))
  8. let playerItem = AVPlayerItem(asset: asset)
  9. playerItem.videoComposition = composition.makeAVVideoComposition()
  10. player.replaceCurrentItem(with: playerItem)
  11. player.play()

Without MetalPetal

  1. let composition = VideoComposition(propertiesOf: asset, compositionRequestHandler: { request in
  2. //Process video frame
  3. })
  4. let playerItem = AVPlayerItem(asset: asset)
  5. playerItem.videoComposition = composition.makeAVVideoComposition()
  6. player.replaceCurrentItem(with: playerItem)
  7. player.play()

AssetExportSession

Export AVAssets. With the ability to customize video/audio settings as well as pause / resume.

  1. var configuration = AssetExportSession.Configuration(fileType: .mp4, videoSettings: .h264(videoSize: videoComposition.renderSize), audioSettings: .aac(channels: 2, sampleRate: 44100, bitRate: 128 * 1000))
  2. configuration.metadata = ...
  3. configuration.videoComposition = ...
  4. configuration.audioMix = ...
  5. self.exporter = try! AssetExportSession(asset: asset, outputURL: outputURL, configuration: configuration)
  6. exporter.export(progress: { p in
  7. }, completion: { error in
  8. //Done
  9. })

PlayerVideoOutput

Output video buffers from AVPlayer.

  1. let player: AVPlayer = ...
  2. let playerOutput = PlayerVideoOutput(player: player) { videoFrame in
  3. //Got video frame
  4. }
  5. player.play()

MovieRecorder

Record video and audio.

AudioQueueCaptureSession

Capture audio using AudioQueue.

Camera

Simple audio/video capture.