【问题标题】:How to handle error and get current recording video size using AVCaptureVideoDataOutput ?如何使用 AVCaptureVideoDataOutput 处理错误并获取当前录制的视频大小?
【发布时间】:2018-01-15 03:10:35
【问题描述】:

我正在使用 AVCaptureVideoDataOutput 录制视频,因为我需要视频和音频帧。我们如何在录制时处理错误,例如“没有磁盘空间”/“录制停止”。在使用 AVCaptureMovieFileOutput 录制时,我们可以得到错误:

func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!)

以及我们如何跟踪或获取当前录制视频的视频文件大小。 使用 AVCaptureMovieFileOutput,我们可以在录制时通过在“startRecording”委托中保留“AVCaptureFileOutput”的引用来获取视频的大小。

【问题讨论】:

    标签: ios objective-c xcode macos swift3


    【解决方案1】:

    您需要遵守AVCaptureVideoDataOutputAVCaptureVideoDataOutputSampleBufferDelegate 并使用称为captureOutput(_:didOutput:from:) 的方法。此方法将在写入新视频帧以及从哪个连接写入时通知您的委托。在这个方法中,我会读取您输出的buffer size,然后将其与磁盘上的可用空间进行比较:

    if let systemAttributes = try? FileManager.default.attributesOfFileSystem(forPath: NSHomeDirectory() as String) {
        if let availableSpace = systemAttributes[FileAttributeKey.systemFreeSize] as? NSNumber {
            print("Available Space \(availableSpace.int64Value)")
        }
    }
    

    这样,您将在AVCaptureVideoDataOutput 输出视频帧时收到通知,并且如果录制的大小接近磁盘上可用空间的阈值,那么您可以停止录制并提醒您的用户他们有他们的视频空间不足。

    【讨论】:

    • 感谢您的回复,我已经尝试过,但是在获取缓冲区大小时,每个缓冲区样本的缓冲区大小:1080:1920。我们如何检查记录的大小已接近磁盘上可用空间的阈值。
    • 我需要在可用空间
    猜你喜欢
    • 2016-12-22
    • 2023-03-16
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多