Почему TaglibSharp не может прочитать мой тег Id3v2?

#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 тип.

Чего-то не хватает?

TagTypesOnDisk

Ответ №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