如何在 swift3 中设置 AVMetadataItem 的标识符?
How to set the identifier of AVMetadataItem in swift3?
描述:
我正在尝试在 swift3
中设置 AVMetadataItem
的 identifier
,如 this apple video 中所述。但是,该视频是 pre-swift3.
在 swift2
中看起来像这样:
let metadataItem = AVMetadataItem(identifier: AVMetadataCommonIdentifierTitle, value: "Title here")
但是,在 swift3
中,该构造函数不再存在。
有一个空构造函数和这个:
AVMetadataItem(propertiesOf: AVMetadataItem, valueLoadingHandler: (AVMetadataItemValueRequest) -> Void)
似乎没有任何方法可以设置 identifier
。
问题:
如何在swift3
中设置AVMetadataItem
的identifier
?
编辑:
按照 Lucas 的建议尝试使用 AVMutableMetadataItem()。
private func setupNavigationMarker(title: String, description: String, timeRange: CMTimeRange)-> AVTimedMetadataGroup {
var items: [AVMetadataItem] = []
let titleItem = AVMutableMetadataItem()
titleItem.identifier = AVMetadataCommonIdentifierTitle
titleItem.value = title as (NSCopying & NSObjectProtocol)?
items.append(titleItem)
let descriptionItem = AVMutableMetadataItem()
descriptionItem.identifier = AVMetadataCommonIdentifierDescription
descriptionItem.value = description as (NSCopying & NSObjectProtocol)?
items.append(descriptionItem)
return AVTimedMetadataGroup(items: items, timeRange: timeRange)
}
并在此处使用:
let cmTimeStart = CMTimeMake(0, 0)
let cmTimeDuration = CMTimeMake(10, 1)
let timeRange = CMTimeRange(start: cmTimeStart, duration: cmTimeDuration)
let timedMetadataGroup = self.setupNavigationMarker(title: "test", description: "description test" , timeRange: timeRange)
let timedMetadataGroupList = [timedMetadataGroup]
let navigationMarkersGroup = AVNavigationMarkersGroup(title: "Chapters", timedNavigationMarkers: timedMetadataGroupList)
//predefined avPlayerItem
avPlayerItem.navigationMarkerGroups.append(navigationMarkersGroup)
它可以编译并运行,但在播放视频时不会建议导航标记(也称为章节)。我错过了什么?
使用 AVMutableMetadata
而不是 AVMetadata
这样您就可以根据需要修改 identifier
。
let titleItem = AVMutableMetadataItem()
titleItem.identifier = AVMetadataCommonIdentifierTitle
描述:
我正在尝试在 swift3
中设置 AVMetadataItem
的 identifier
,如 this apple video 中所述。但是,该视频是 pre-swift3.
在 swift2
中看起来像这样:
let metadataItem = AVMetadataItem(identifier: AVMetadataCommonIdentifierTitle, value: "Title here")
但是,在 swift3
中,该构造函数不再存在。
有一个空构造函数和这个:
AVMetadataItem(propertiesOf: AVMetadataItem, valueLoadingHandler: (AVMetadataItemValueRequest) -> Void)
似乎没有任何方法可以设置 identifier
。
问题:
如何在swift3
中设置AVMetadataItem
的identifier
?
编辑:
按照 Lucas 的建议尝试使用 AVMutableMetadataItem()。
private func setupNavigationMarker(title: String, description: String, timeRange: CMTimeRange)-> AVTimedMetadataGroup {
var items: [AVMetadataItem] = []
let titleItem = AVMutableMetadataItem()
titleItem.identifier = AVMetadataCommonIdentifierTitle
titleItem.value = title as (NSCopying & NSObjectProtocol)?
items.append(titleItem)
let descriptionItem = AVMutableMetadataItem()
descriptionItem.identifier = AVMetadataCommonIdentifierDescription
descriptionItem.value = description as (NSCopying & NSObjectProtocol)?
items.append(descriptionItem)
return AVTimedMetadataGroup(items: items, timeRange: timeRange)
}
并在此处使用:
let cmTimeStart = CMTimeMake(0, 0)
let cmTimeDuration = CMTimeMake(10, 1)
let timeRange = CMTimeRange(start: cmTimeStart, duration: cmTimeDuration)
let timedMetadataGroup = self.setupNavigationMarker(title: "test", description: "description test" , timeRange: timeRange)
let timedMetadataGroupList = [timedMetadataGroup]
let navigationMarkersGroup = AVNavigationMarkersGroup(title: "Chapters", timedNavigationMarkers: timedMetadataGroupList)
//predefined avPlayerItem
avPlayerItem.navigationMarkerGroups.append(navigationMarkersGroup)
它可以编译并运行,但在播放视频时不会建议导航标记(也称为章节)。我错过了什么?
使用 AVMutableMetadata
而不是 AVMetadata
这样您就可以根据需要修改 identifier
。
let titleItem = AVMutableMetadataItem()
titleItem.identifier = AVMetadataCommonIdentifierTitle