如何在 Swift 中将 4k 60 FPS 录制到内部存储?像其他外部应用程序一样,例如 Blackmagic cam

问题描述 投票:0回答:1

当我尝试以 Pro Res 格式录制 60 FPS 的 4k 或 1080p 素材时,遇到以下异常

AVCaptureMovieFileOutput startRecordingToOutputFileURL:recordingDelegate:] 仅在外部存储设备上支持在此设备上使用 ProRes 编解码器捕获 1080p60。'

这应该是可以做到的,因为 Blackmagic cam (https://www.blackmagicdesign.com/ca/products/blackmagiccamera) 等其他应用程序允许这样做。

以下代码片段供参考:

do {
    try self.videoDeviceInput.device.lockForConfiguration()
    self.videoDeviceInput.device.activeFormat = self.videoDeviceInput.device.findFormat()!
    self.videoDeviceInput.device.activeColorSpace = .appleLog
    let frameRate = CMTimeMake(value: 1, timescale: 60)
    self.videoDeviceInput.device.activeVideoMaxFrameDuration = frameRate
    self.videoDeviceInput.device.activeVideoMinFrameDuration = frameRate

    self.videoDeviceInput.device.unlockForConfiguration()
} catch {
    print("Could not lock device for configuration: \(error)")
}
// Start recording video to a temporary file.
let outputFileName = NSUUID().uuidString
let outputFilePath = (NSTemporaryDirectory() as NSString).appendingPathComponent((outputFileName as NSString).appendingPathExtension("mov")!)
movieFileOutput.startRecording(to: URL(fileURLWithPath: outputFilePath), recordingDelegate: self)

我已经设置了所有正确的 activeFormat 值和 activeColorspace 以允许此操作。

ios swift avfoundation ios-camera
1个回答
0
投票

您的代码是正确的,但您的错误是由于您的特定测试设备不支持使用 ProRes 编解码器录制 1080p60,但可以使用外部存储设备。

您必须首先列出所选设备的可用格式,然后搜索 1080p60 是否适用于所选设备,如果不可用,则获取下一个最佳格式

© www.soinside.com 2019 - 2024. All rights reserved.