【发布时间】:2018-02-09 10:21:40
【问题描述】:
我正在尝试覆盖 M4A 文件中曲目编号元数据的值。 当我从现有轨道读取值时:
if metadataIdentifier == AVMetadataIdentifier.iTunesMetadataTrackNumber{
print(track Number = \(itunesMetadata.value?.description)")
}
我明白了
track Number = <00000008 000E>
哪个结果是轨道号 00000008 和总轨道 000E
的十六进制表示通过做这个假设,我尝试这样写这个标签:
let trackNumber = String(format:"%08X", editedTrack?.trackNumber ?? 0)
let totalTrackNumber = String(format:"%04X", editedTrack?.totalTrackNumber ?? 0)
let trackNumberValue = "<\(dikNumber) \(totalDiskNumber)>"
let avMetaTrack = AVMutableMetadataItem()
avMetaTrack.keySpace = AVMetadataKeySpace.iTunes
avMetaTrack.key = AVMetadataIdentifier.iTunesMetadataTrackNumber as NSCopying & NSObjectProtocol
avMetaTrack.identifier = AVMetadataIdentifier.iTunesMetadataTrackNumber
avMetaTrack.value = trackNumberData as NSCopying & NSObjectProtocol
但它在 iTunes 和外部标签编辑器中都不起作用。
编辑: 然后我通过
转换成新文件/* Export Metadata */
let urlAsset = AVURLAsset.init(url: trackFileManager.documentsUrl.appendingPathComponent(trackToEdit?.url ?? ""))
let assetExportSession: AVAssetExportSession! = AVAssetExportSession(asset: urlAsset, presetName: AVAssetExportPresetPassthrough)
assetExportSession.outputFileType = AVFileType.m4a
let stringUrlPath:[String] = (trackToEdit?.url?.components(separatedBy: "/"))!
assetExportSession.outputURL = trackFileManager.documentsUrl.appendingPathComponent("ex_\(stringUrlPath.last!)")
assetExportSession.metadata = newMetadata
print("\(logClassNameChild): output = \(assetExportSession.outputURL!)")
assetExportSession.exportAsynchronously(completionHandler: {
print("done")
//try! FileManager.default.removeItem(atPath: documentsUrl.appendingPathComponent(trackObject.url!).path)
//try! FileManager.default.moveItem(at: assetExportSession.outputURL!, to: documentsUrl.appendingPathComponent(trackObject.url!))
})
【问题讨论】:
-
如何将
avMetaDisk链接回您的文件? -
avMetaDisk是如何与newMetadata关联的?
标签: ios swift avfoundation swift4