0
私はこの機能を使って、オーディオファイルの特定の部分をトリミングしました。 この関数では、2つのAVMetadataItemsを新しいファイルに書き込みます。 後でこれらの項目にアクセスしようとしましたが、そのURLをAvURlAssetでラップしてから、AVAssetのmetaData/commonMetadataにアクセスしていましたが、その前に追加した項目は含まれていませんでした。AVMetaDateItemをファイルに書き込んで後でアクセスする方法は?
ファイルをエクスポートする前に何が起きているのかを確認しました.export.metadataに配列AVMetadataitemを指定したにもかかわらず、エクスポート前にまだnilであるように見えます。
何が問題なのですか?
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)
}
}
私はあなたが意味することを得るが、それはまだ動作していない、それは問題ではありません、どのように感謝! –