Ich habe diese Funktion ausgeführt, um einen bestimmten Teil einer Audiodatei zu trimmen. In der Funktion schreibe ich in die neue Datei zwei AVMetadataItems. Ich habe versucht, später auf diese Elemente zuzugreifen, indem ich die URL mit AvURlAsset geklickt habe und dann auf die MetaSaten/commonMetadata von AVAsset zugegriffen habe und beide das zuvor hinzugefügte Element nicht enthielten.Wie schreibt man AVMetaDateItem in eine Datei und greift später darauf zu?
Also überprüfte ich, was passiert, bevor ich die Datei exportiere, und obwohl ich exporter.metadata ein Array oh AVMetadataItem gegeben habe, scheint es vor dem Export immer noch Null zu sein.
Jeder weiß, was ist das Problem?
func trimFromOffSetWithDuration(_ from: Date, startOffSet: TimeInterval, duration: TimeInterval, newfileName: String, file: URL, completion: fileExportaionBlock?) {
if let asset = AVURLAsset(url: file) as AVAsset? {
let trimmedFileUrl = documentsDirectory().appendingPathComponent(newfileName)
let exporter = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetAppleM4A)
exporter?.outputFileType = AVFileTypeAppleM4A
exporter?.outputURL = trimmedFileUrl
let start = CMTimeMake(Int64(startOffSet), 1)
let end = CMTimeMake(Int64(startOffSet + duration), 1)
exporter?.timeRange = CMTimeRangeFromTimeToTime(start, end)
let typeMetaDataItem = AVMutableMetadataItem()
typeMetaDataItem.key = AVMetadataCommonKeyDescription as NSCopying & NSObjectProtocol
typeMetaDataItem.keySpace = AVMetadataKeySpaceCommon
typeMetaDataItem.value = TrackType.recording.rawValue as NSCopying & NSObjectProtocol
let dateMetaDataItem = AVMutableMetadataItem()
dateMetaDataItem.key = AVMetadataCommonKeyCreationDate as NSCopying & NSObjectProtocol
dateMetaDataItem.keySpace = AVMetadataKeySpaceCommon
dateMetaDataItem.value = from as NSCopying & NSObjectProtocol
exporter?.metadata? = [dateMetaDataItem, typeMetaDataItem]
exporter?.exportAsynchronously { handler in
if exporter?.status != AVAssetExportSessionStatus.completed {
print("Error while exporting \(exporter?.error?.localizedDescription ?? "unknown")")
completion?(nil)
return
}
}
completion?(trimmedFileUrl)
}
}
Ich verstehe, was Sie meinen, aber es funktioniert immer noch nicht, das ist nicht das Problem, danke irgendwie! –