我有一个功能,我试图在其中保存视频文件。一切正常。但是我不知道如何向将实时读取元数据(以动态形式)的函数添加方法。现在,我的功能仅在访问时捕获(在屏幕上滑动)。你可以帮帮我吗。我read in this topic的一种方法可以在视频的不同时间覆盖文本:。我需要不断地(动态地)覆盖文本,并捕获元数据中是否有变化。每半秒/秒有效。
func trimVideo(sourceURL: URL, duration: Double, metaData: AVMutableMetadataItem, completion: @escaping (Result<URL, Error>)->Void) {
guard sourceURL.isFileURL else { fatalError() }
let asset = AVURLAsset(url: sourceURL, options: [AVURLAssetPreferPreciseDurationAndTimingKey: true])
guard let exportSession = AVAssetExportSession(asset: asset,
presetName: AVAssetExportPresetPassthrough) else { fatalError() }
exportSession.timeRange = generateRange(startTime: asset.duration.seconds - duration,
endTime: asset.duration.seconds)
exportSession.outputURL = FileManager.createNewFilePath(fileName: videoName)
exportSession.outputFileType = AVFileType.mp4
exportSession.shouldOptimizeForNetworkUse = true
exportSession.metadata = [metaData]
exportSession.exportAsynchronously(completionHandler: {() -> Void in
switch exportSession.status {
case .failed:
print(exportSession.error ?? "No error")
completion(.failure(exportSession.error!))
case .cancelled:
let error = NSError(domain: "VideoApp", code: 00, userInfo: ["Message": "Export cancelled"])
completion(.failure(error))
case .completed:
guard let correctURL = exportSession.outputURL
else {
print("error getting url")
return
}
print("Successful! \(correctURL)")
completion(.success(correctURL))
default:
fatalError()
}
})
}