Попытка извлечь метаданные из URL - PullRequest
0 голосов
/ 31 октября 2018

Я занимаюсь разработкой приложения для потоковой передачи живой музыки для iOS. Я пытаюсь извлечь значения метаданных из музыки, которая воспроизводится в данный момент. Метаданные хранятся в URL. Напишите сейчас, я могу извлечь это как метаданные.

 Optional([<AVMetadataItem: 0x600001c69860, identifier=common/title, keySpace=comn, key class = __NSCFConstantString, key=title,
 commonKey=title, extendedLanguageTag=(null), dataType=(null),
 time={19392/22050 = 0.879}, duration={INVALID}, startDate=(null),
 extras={ }, value class=__NSCFString, value=Electricity - Silk City &
 Dua Lipa f./Diplo - 03:39 >])

Проблема в том, что в элементе метаданных есть только один общий ключ, т. Е. «Заголовок». Этот общий ключ имеет значение, которое состоит из названия песни, исполнителя и продолжительности песни. Как извлечь из этого общего ключа только значение исполнителя ...

Вот как я извлекаю метаданные.

Я добавил наблюдателя в AVPlayerItem для ключевого пути "timedMetadata"

playerItem.addObserver(self, forKeyPath: "timedMetadata", options: [], context: nil)




 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {


    if keyPath != "timedMetadata" { return }

    var data: AVPlayerItem = object as! AVPlayerItem

    for item in data.timedMetadata as! [AVMetadataItem] {


        if let stringValue = item.value as? String {
            //print(item.commonKey)
            if item.commonKey!.rawValue == "title" {
                print(stringValue.description)
            }



        }

    }


}

Получение этого значения: Electricity - Silk City & Dua Lipa f./Diplo - 03:39

У этого значения есть название песни, исполнители песни и продолжительность песни. Что я хочу, так это получить в качестве значения только исполнителя песни. метаданные изменяют свое значение для каждой песни, которая воспроизводится в данный момент.

1 Ответ

0 голосов
/ 31 октября 2018

Наконец-то нашли способ решить эту проблему ..

Значение, которое я получал, было разделено общим символом (-). То, что я сделал, преобразовал эту единственную строку в массив строк.

let stringValueArray = stringValue.components(separatedBy: "-")

                let title = stringValueArray[0]

                let author = stringValueArray[1]

                let duration = stringValueArray[2]

Я знаю, что это может быть неправильный подход, но все же он работает ..

...