Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将AVAsset转换为CMSampleBuffer帧?_Ios_Swift_Avfoundation_Core Foundation - Fatal编程技术网

Ios 如何将AVAsset转换为CMSampleBuffer帧?

Ios 如何将AVAsset转换为CMSampleBuffer帧?,ios,swift,avfoundation,core-foundation,Ios,Swift,Avfoundation,Core Foundation,我的应用程序导入用户通过系统文件选择器选择的视频,该选择器作为AVAsset: @IBAction func handleImportVideoButton(_ sender: Any) { let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [.movie], asCopy: true) documentPicker.delegate = self present(doc

我的应用程序导入用户通过系统文件选择器选择的视频,该选择器作为
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
帧转换为
CGImage
s,这样我可以考虑对每个图像帧执行机器学习分析。

这是未经测试的,但它应该为您提供如何进行此操作的要点:

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()
}
正确--已编辑