#c# #taglib-sharp
#c# #taglib-sharp
Вопрос:
У меня есть следующий код:
memoryStream
это поток, который считывает aac
файл из потока HLS. Таким образом, вначале это будет упакованный AAC с тегами ID3.
using var tagFile= TagLib.File.Create(new StreamFile(memoryStream), "audio/aac", ReadStyle.Average);
var id3v2tag= (TagLib.Id3v2.Tag)tagFile.GetTag(TagTypes.Id3v2);
var id3v1tag = (TagLib.Id3v1.Tag)tagFile.GetTag(TagTypes.Id3v1);
tagFile.TagTypesOnDisk
Показывает, что это ‘тега Id3v2. Однако, когда я проверяю id3v2tag
, там нет никаких установленных свойств. Вместо этого кажется, что id3v1tag
вместо этого заполняется.
Это вызывает у меня проблемы, поскольку я хочу иметь возможность читать пользовательский тег, который у нас есть, и единственный способ сделать это — использовать TagLib.Id3v2.Tag
тип.
Чего-то не хватает?
Ответ №1:
Оказывается aac
, файл содержит несколько тегов ID3. Первый тег ID3 имеет закрытый фрейм com.apple.streaming.transportStreamTimestamp
. Второй тег ID3 содержит остальную информацию, которую я ищу, такую как название, исполнитель и т. Д. 2.
Поскольку в файле aac было несколько тегов id3, tagFile.GetTag
не сработало. Я должен был сделать следующее:
using var tag = TagLib.File.Create(new StreamFile(memoryStream), "audio/aac", ReadStyle.Average);
// Cast into a combined tag to retrieve the id3v2 variant
var nonContainerTag = (TagLib.CombinedTag)tag.Tag;
var id3v2Tag = (TagLib.Id3v2.Tag)nonContainerTag.Tags.FirstOrDefault(x => x.TagTypes == TagTypes.Id3v2 amp;amp; x.Title == nonContainerTag.Title);
var customUserTextInformation = id3v2Tag.GetFrames<UserTextInformationFrame>();
customUserTextInformation
будет содержать пользовательские метаданные ID3