MovieRecorder 0.1

MovieRecorder 0.1

Evan Xie 维护。



  • 作者
  • Evan Xie

MovieRecorder

一个使用 Metal 为 iOS 提供灵活和多功能视频录制的库。

特性

  • 支持 SCNView 录制器
  • 支持系统相机录制
  • 支持 MTLTexture 录制
  • 使用 MovieRecorder 自定义录制器。

如何使用?

以下是一些示例代码,有关详细示例,参见 Example 项目。

SCNViewRecorder 示例

  var movieURL = URL(fileURLWithPath: NSTemporaryDirectory())
  movieURL = movieURL.appendingPathComponent("myMovie.mp4")
        
  let videoSize = CGSize(width: view.bounds.width * UIScreen.main.nativeScale,
                        height: view.bounds.height * UIScreen.main.nativeScale)
  let configuration = RecorderConfiguration(outputURL: movieURL,
                                       videoFramerate: 60,
                                      videoResulution: videoSize)
  let recorder = SCNViewRecorder(view: view as! SCNView,
                        configuration:configuration)
  recorder.errorHandler = {
  	// Handle error
  }
  
  recorder.startRecording(completionBlock: { 
    // Recorder started successfully.
  })
  
  recorder.stopRecording(completionBlock: { (movieURL) in
    // Recorder finished with saved movie file url.
  }

AVCameraRecorder 示例

  let session = AVCameraSession()
  try! session.useAudioDeviceInput()
  try! session.useVideoDeviceInput(for: .back(.hd4K3840x2160))
  session.startRunning()

  var movieURL = URL(fileURLWithPath: NSTemporaryDirectory())
  movieURL = movieURL.appendingPathComponent("myMovie.mp4")
        
  let videoSize = CGSize(width: 3840, height: 2160)
  let configuraiton = RecorderConfiguration(outputURL: movieURL,
		                       videoFramerate: 30,
		                      videoResulution: videoSize, 
		                    enablesAudioTrack: false, 
		                             fileType: .mov)
  let recorder = AVCameraRecorder(session: session, configuration:configuraiton)
  recorder.errorHandler = {
  	  // Handle error
  }
  
  recorder.startRecording(completionBlock: { 
    // Recorder started successfully.
  })
  
  recorder.stopRecording(completionBlock: { (movieURL) in
    // Recorder finished with saved movie file url.
  }

MTL纹理示例

        
  let recorder = MTLTextureRecorder(device: `MTLDevice`, configuration:`configuration`)
  recorder.errorHandler = {
  	// Handle error
  }
  
  recorder.startRecording(completionBlock: { 
    // Recorder started successfully.
  })
  
  recorder.stopRecording(completionBlock: { (movieURL) in
    // Recorder finished with saved movie file url.
  }
  

自定义视频录制示例

  let audioProducer: AudioSampleProducer = ...
  let videoProduer: VideoSampleProducer = ...
  let recorder = MovieRecorder(outputURL: `fileURL`,
                           audioProducer: audioProducer,
                           videoProducer: videoProducer,
                           movieFileType: .mov)
       
  recorder.errorHandler = {
  	// Handle error
  }
                              
  recorder.startRecording(completionBlock: { 
    // Recorder started successfully.
  })
  
  recorder.stopRecording(completionBlock: { (movieURL) in
    // Recorder finished with saved movie file url.
  }