简介
为了能够添加章节,这个概念并不像我最初想象的那么复杂。您需要使用以下主要类:
AVMetadataItem
AVMutableMetadataItem
AVTimedMetadataGroup
AVNavigationMarkersGroup
第 1 部分:创建章节生成方法
为了简化工作,我们将创建一个生成“章节”的方法,或者您将看到由title、description 和开始时间组成的AVTimedMetadataGroup。
我遇到的主要问题是,在 Swift2 中,我们可以直接使用 AVMetadataItem 指定标识符类型 (编辑:这实际上是错误的,在他们的示例中,他们创建了一个名为 AVMettadataItem 的自定义类,该类使用 AVMutableMetadataItem 来生成他们想要),而Swift3 已经不可能了。不过,这可以通过AVMutableMetadataItem解决
例如,这是我们为章节标题创建AVMutableMetadataItem 的方式:
let titleItem = AVMutableMetadataItem()
titleItem.identifier = AVMetadataCommonIdentifierTitle
titleItem.value = title as (NSCopying & NSObjectProtocol)?
这些项目中的每一个都需要添加到我们称之为“项目”([AVMetadataItem])的列表中
列表完成后,您需要使用刚刚创建的列表和将应用于您的视频的时间范围创建AVTimedMetadataGroup(又名:您的章节将从哪里开始以及持续多长时间)
就我而言,章节持续时间不是什么大问题,因此我将其设置为固定时间(10 秒)。
您需要注意的是,如果CMTime 无效,则该章节不会显示在列表中。
private func setupNavigationMarker(title: String, description: String, timeStart: Int64)-> AVTimedMetadataGroup {
let timeRange = CMTimeRange(start: CMTimeMake(timeStart, 1), duration: CMTimeMake(10, 1))
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)
}
第 2 部分:将您的章节添加到您的 AVNavigationMarkerGroup
然后在你的 AVPlayerViewController 中的某个地方(比如ViewDidLoad):
var timedMetadataGroupList = [AVTimedMetadataGroup]()
timedMetadataGroupList.append(self.setupNavigationMarker(title: "test1", description: "description test1" , timeStart: 100))
timedMetadataGroupList.append(self.setupNavigationMarker(title: "test2", description: "description test2" , timeStart: 200))
timedMetadataGroupList.append(self.setupNavigationMarker(title: "test3", description: "description test3" , timeStart: 300))
let navigationMarkersGroup = AVNavigationMarkersGroup(title: "Chapters", timedNavigationMarkers: timedMetadataGroupList)
avPlayerItem.navigationMarkerGroups.append(navigationMarkersGroup)
第 3 部分:在章节中添加图片
即将推出...
https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/MediaPlaybackGuide/Contents/Resources/en.lproj/UsingAVKitPlatformFeatures/UsingAVKitPlatformFeatures.html