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.
}