如何在 tvOS 中为我的视频添加导航标记作为章节?
How to add Navigation Markers as Chapters for my video in tvOS?
描述:
我正在尝试了解(疯狂)如何在 tvOS 中向我的视频添加导航标记。
逻辑上应该不复杂。指定包含章节起点、章节标题和特定视频点缩略图的标记列表。
但是,我很难掌握如何实现它。
我尝试过的:
这是我认为要实现的最低要求,但我不知道为什么我需要所有这些才能让它工作。我也不知道应该如何设置信息。
//In my AVPlayerViewController
let metadataItem = AVMetadataItem()
let metadataItemList = [metadataItem]
let cmTimeStart = CMTimeMake(0, 0)
let cmTimeDuration = CMTimeMake(10, 1)
let timeRange = CMTimeRange(start: cmTimeStart, duration: cmTimeDuration)
let timedMetadataGroup = AVTimedMetadataGroup(items: metadataItemList, timeRange: timeRange)
let timedMetadataGroupList = [timedMetadataGroup]
let navigationMarkersGroup = AVNavigationMarkersGroup(title: "Chapters", timedNavigationMarkers: timedMetadataGroupList)
//Already previously initialized avPlayerItem
avPlayerItem.navigationMarkerGroups.append(navigationMarkersGroup)
(上面代码的目标是为我的视频显示一章。)
问题:
我想弄清楚如何在我的 tvOS 视频中将导航标记实现为 "Chapters"。关于每个部分应该完成什么的详细解释同样非常有帮助。
简介
添加章节的概念并不像我原先想象的那么复杂。您需要使用以下主要 classes:
AVMetadataItem
AVMutableMetadataItem
AVTimedMetadataGroup
AVNavigationMarkersGroup
第 1 部分:创建章节生成方法
为了简化工作,我们将创建一个生成 "chapter" 的方法,或者如您所见,AVTimedMetadataGroup
由 title
、description
,以及开始时间。
我遇到的主要问题是,在 Swift2 中,我们可以直接使用 AVMetadataItem
指定标识符类型(编辑:这实际上是错误的,在他们的示例中,他们创建了自定义 class 称为 AVMettadataItem,它使用 AVMutableMetadataItem 生成他们想要的东西) Swift3
不再可能了。但是,这可以通过 AVMutableMetadataItem
来解决
例如,这就是我们为章节标题创建 AVMutableMetadataItem
的方式:
let titleItem = AVMutableMetadataItem()
titleItem.identifier = AVMetadataCommonIdentifierTitle
titleItem.value = title as (NSCopying & NSObjectProtocol)?
这些项目中的每一项都需要添加到我们称之为 "items" ( [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 部分:将图像添加到您的章节
即将推出...
描述:
我正在尝试了解(疯狂)如何在 tvOS 中向我的视频添加导航标记。
逻辑上应该不复杂。指定包含章节起点、章节标题和特定视频点缩略图的标记列表。
但是,我很难掌握如何实现它。
我尝试过的:
这是我认为要实现的最低要求,但我不知道为什么我需要所有这些才能让它工作。我也不知道应该如何设置信息。
//In my AVPlayerViewController
let metadataItem = AVMetadataItem()
let metadataItemList = [metadataItem]
let cmTimeStart = CMTimeMake(0, 0)
let cmTimeDuration = CMTimeMake(10, 1)
let timeRange = CMTimeRange(start: cmTimeStart, duration: cmTimeDuration)
let timedMetadataGroup = AVTimedMetadataGroup(items: metadataItemList, timeRange: timeRange)
let timedMetadataGroupList = [timedMetadataGroup]
let navigationMarkersGroup = AVNavigationMarkersGroup(title: "Chapters", timedNavigationMarkers: timedMetadataGroupList)
//Already previously initialized avPlayerItem
avPlayerItem.navigationMarkerGroups.append(navigationMarkersGroup)
(上面代码的目标是为我的视频显示一章。)
问题:
我想弄清楚如何在我的 tvOS 视频中将导航标记实现为 "Chapters"。关于每个部分应该完成什么的详细解释同样非常有帮助。
简介
添加章节的概念并不像我原先想象的那么复杂。您需要使用以下主要 classes:
AVMetadataItem
AVMutableMetadataItem
AVTimedMetadataGroup
AVNavigationMarkersGroup
第 1 部分:创建章节生成方法
为了简化工作,我们将创建一个生成 "chapter" 的方法,或者如您所见,AVTimedMetadataGroup
由 title
、description
,以及开始时间。
我遇到的主要问题是,在 Swift2 中,我们可以直接使用 AVMetadataItem
指定标识符类型(编辑:这实际上是错误的,在他们的示例中,他们创建了自定义 class 称为 AVMettadataItem,它使用 AVMutableMetadataItem 生成他们想要的东西) Swift3
不再可能了。但是,这可以通过 AVMutableMetadataItem
例如,这就是我们为章节标题创建 AVMutableMetadataItem
的方式:
let titleItem = AVMutableMetadataItem()
titleItem.identifier = AVMetadataCommonIdentifierTitle
titleItem.value = title as (NSCopying & NSObjectProtocol)?
这些项目中的每一项都需要添加到我们称之为 "items" ( [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 部分:将图像添加到您的章节
即将推出...