【问题标题】:How do you convert an AVAsset into CMSampleBuffer frames?如何将 AVAsset 转换为 CMSampleBuffer 帧?
【发布时间】:2021-03-30 23:29:57
【问题描述】:

我的应用导入用户通过系统文件选择器选择的视频,它以AVAsset 的形式出现:

@IBAction func handleImportVideoButton(_ sender: Any) {
    let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [.movie], asCopy: true)
    documentPicker.delegate = self
    present(documentPicker, animated: true)
}

// UIDocumentPickerDelegate callback.
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
    guard let url = urls.first else {
        return
    }
    model.recordedVideoSource = AVAsset(url: url)
}

然后我如何将此AVAsset 转换为CMSampleBuffer 帧?最终目标是将CMSampleBuffer 帧转换为CGImages,这样我就可以考虑对每个图像帧进行机器学习分析。

【问题讨论】:

    标签: ios swift avfoundation core-foundation


    【解决方案1】:

    这是未经测试的,但它应该为您提供如何解决此问题的要点:

    let asset = AVAsset()
    let reader = AVAssetReader(asset: asset)
    guard let track = asset.tracks(withMediaType: .video).last else {
        return
    }
    let trackOutput = AVAssetReaderTrackOutput(track: track, outputSettings: nil)
    reader.add(trackOutput)
    reader.startReading()
    
    // Get first sample buffer
    var sample = trackOutput.copyNextSampleBuffer()
    while sample != nil {
        // iterate over all buffers
        // sample = trackOutput.copyNextSampleBuffer()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2018-02-18
      • 2011-05-28
      • 1970-01-01
      相关资源
      最近更新 更多