Как установить идентификатор AVMetadataItem в swift3?

Описание:

Я пытаюсь установить identifier из AVMetadataItem в swift3, как указано в это яблочное видео. Тем не менее, видео pre-swift3.

В swift2 это будет выглядеть примерно так:

let metadataItem = AVMetadataItem(identifier: AVMetadataCommonIdentifierTitle, value: "Title here")

Однако в swift3 этого конструктора больше не существует.

Есть пустой конструктор и вот этот:

AVMetadataItem(propertiesOf: AVMetadataItem, valueLoadingHandler: (AVMetadataItemValueRequest) -> Void)

Кажется, не существует никаких методов для установки identifier.

Вопрос:

Как установить identifier из AVMetadataItem в swift3?

Редактировать:

Пробовал с 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)

Он компилируется и запускается, но при воспроизведении видео не предлагаются навигационные маркеры (также известные как главы). Что мне не хватает?


person kemicofa ghost    schedule 21.09.2016    source источник


Ответы (1)


Используйте AVMutableMetadata вместо AVMetadata, чтобы вы могли изменить identifier по своему усмотрению.

let titleItem =  AVMutableMetadataItem()
titleItem.identifier = AVMetadataCommonIdentifierTitle
person Luca Davanzo    schedule 21.09.2016
comment
Вы пытались использовать экземпляр AVMutableMetadataItem? Чтобы создать элементы метаданных для ваших собственных ресурсов, вы используете изменяемый подкласс AVMutableMetadataItem. - person Luca Davanzo; 21.09.2016
comment
@LucasDavanzo На самом деле нет. Я поиграю с ним и посмотрю, работает ли он. Спасибо за совет. - person kemicofa ghost; 21.09.2016