Я программно создаю аудиофайл и хочу добавить к нему метаданные, например название и имя исполнителя. Мне все равно, в каком формате записан файл, лишь бы AVPlayer его прочитал и отправил на проигрывающее устройство. (Вся цель состоит в том, чтобы отправить этот сгенерированный звук и название его дорожки на устройство Bluetooth. Я рад изучить более простые способы достижения этого на iPhone, которые не требуют записи файла или добавления метаданных непосредственно в файл.)
До сих пор я обнаружил, что AVAssetWriter часто просто отбрасывает метаданные, которые он не понимает, не создавая ошибок, поэтому я немного спотыкаюсь, пытаясь найти допустимые комбинации форматов файлов и ключей. До сих пор я не нашел формат файла, который я мог бы автоматически сгенерировать, чтобы AVAssetWriter добавлял какие-либо метаданные. Например:
let writer = try AVAssetWriter(outputURL: output, fileType: .aiff)
let title = AVMutableMetadataItem()
title.identifier = .commonIdentifierTitle
title.dataType = kCMMetadataBaseDataType_UTF8 as String
title.value = "The Title" as NSString
writer.metadata = [title]
// setup the input and write the file.
Я не нашел ни одной комбинации идентификаторов или типов файлов (которые я действительно могу сгенерировать), которые будут включать эти метаданные в файл.
Мой текущий подход состоит в том, чтобы создать файл как AIFF, а затем использовать AVAssetExportSession, чтобы переписать его как m4a. Используя это, я смог добавить достаточно метаданных, чтобы iTunes отобразил заголовок. Однако «Информация о файле» Finder не может прочитать заголовок (что он делает для файлов iTunes m4a). Я предполагаю, что если он даже не отображается в информации о файле, он не будет отправлен по Bluetooth (я скоро проверю это, но у меня нет нужного мне оборудования).
Изучая файлы iTunes m4a, я обнаружил некоторые теги, которые не могу воссоздать с помощью AVMetadataItem. Например, имя сортировки (sonm). Я не знаю, как писать теги, которые не являются одним из известных идентификаторов (и я протестировал все 263 AVMetadataIdentifier).
На этом фоне мои основные вопросы:
- Какие теги метаданных считываются AVPlayer и отправляются на устройства Bluetooth (например, AVRCP)?
- Можно ли записать метаданные непосредственно с помощью AVAssetWriter в формат файла, который поддерживает Linear PCM (или какой-либо другой формат, который легко генерировать)?
- Учитывая известный тег/значение, которое не соответствует ни одному из AVMetadataIdentifiers), можно ли записать его в AVAssetExportSession?
Позже я рассмотрю сторонние фреймворки id3, но я хотел бы добиться этого с помощью AVFoundation (или другого встроенного фреймворка), если это возможно.
value
. Я не уверен, что вы не должны помещать тудаData
(строка в кодировке utf8). Также не забудьте установитьkeySpace
. - person Sulthan   schedule 02.03.2018MPNowPlayingInfoCenter
nowPlayingInfo
?AVPlayer
зная так много о профилях Bluetooth, я немного пугаюсь. - person Rhythmic Fistman   schedule 02.03.2018