【问题标题】:How to add Navigation Markers as Chapters for my video in tvOS?如何在 tvOS 中为我​​的视频添加导航标记作为章节?
【发布时间】:2016-09-21 08:05:48
【问题描述】:

说明:

我正在尝试了解(疯狂)如何在 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 视频中将导航标记实现为“章节”。详细解释每个部分应该完成的工作同样非常有帮助。

【问题讨论】:

    标签: swift swift3 tvos


    【解决方案1】:

    简介

    为了能够添加章节,这个概念并不像我最初想象的那么复杂。您需要使用以下主要类:

    • AVMetadataItem
    • AVMutableMetadataItem
    • AVTimedMetadataGroup
    • AVNavigationMarkersGroup

    第 1 部分:创建章节生成方法

    为了简化工作,我们将创建一个生成“章节”的方法,或者您将看到由titledescription 和开始时间组成的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

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      相关资源
      最近更新 更多