Библиотека сайта rus-linux.net
Фреймворк GStreamer. Руководство разработчика приложений. Метаданные
Оригинал: GStreamer Application Development ManualАвторы: Wim Taymans, Steve Baker, Andy Wingo, Ronald S. Bultje, Stefan Kost
Дата публикации: 21 мая 2014 г.
Перевод: А.Панин
Дата перевода: 20 июня 2014 г.
Глава 12. Метаданные
Фреймворк GStreamer проводит четкое разделение между двумя типами метаданных и поддерживает оба этих типа. К первому типу относятся тэги мультимедийного потока, которые описывают содержимое потока без технических подробностей. Примерами таких тэгов являются имя автора композиции, название этой композиции или название альбома, в составе которого она была выпущена. Ко второму типу метаданных относится информация о потоке данных, являющаяся отчасти техническим описанием свойств мультимедийного потока. К данной информации относятся размер изображения, частота дискретизации аудиопотока, названия используемых кодеков и.т..д. Тэги обрабатываются с помощью системы тэгов фреймворка GStreamer. Информация о потоке может быть получена от объекта точки соединения типа GstPad
путем получения объектов текущих (согласованных) свойств типа GstCaps
для данной точки соединения.
12.1. Чтение метаданных
Наиболее простой метод доступа к информации о потоке заключается в получении данных от объекта точки соединения типа GstPad
. Этот метод уже обсуждался ранее в разделе под названием "Использование возможностей для работы с метаданными". Ввиду этого, мы не будем обсуждать упомянутый метод в данной главе. Учтите, что для использования данного метода необходим доступ ко всем точкам соединения, из которых вы хотели бы получить получить информацию о мультимедийном потоке.
Чтение тэгов осуществляется посредством шины сообщений фреймворка GStreamer, о которой было сказано ранее в Главе 7, "Шина сообщений". Вы можете отслеживать сообщения GST_MESSAGE_TAG
и обрабатывать их так, как вы хотите.
Однако, следует учесть, что сообщение GST_MESSAGE_TAG
может генерироваться неоднократно для каждого из конвейеров. Задачей приложения является сбор передаваемых тэгов и показ их пользователю в читаемой и понятной форме. Обычно для этой цели хорошо подходит функция gst_tag_list_merge ()
; не забывайте об очистке кэша тэгов при загрузке новой композиции или через каждые несколько минут при прослушивании интернет-радио. Также убедитесь в том, что вы используете режим объединения тэгов GST_TAG_MERGE_PREPEND
для того, чтобы новое название композиции (которое принимается позднее) имело приоритет перед старым при его выводе.
Следующий пример позволяет извлечь тэги из файла и вывести их:
12.2. Запись тэгов
Запись тэгов осуществляется с помощью интерфейса GstTagSetter. Все что для этого нужно, это элемент с поддержкой функции установки тэгов в составе вашего конвейера. Для того, чтобы определить, поддерживают ли какие-либо из ваших элементов функции записи тэгов, вы можете использовать функцию gst_bin_iterate_all_by_interface (pipeline, GST_TYPE_TAG_SETTER)
. Для установки тэгов вы можете использовать по отношению к полученному в результате объекту элемента, обычно кодировщика или мультиплексора, функцию gst_tag_setter_merge ()
(со списком тэгов) или функцию gst_tag_setter_add ()
(с отдельными тэгами).
Полезной дополнительной функцией механизма поддержки тэгов фреймворка GStreamer является сохранение тэгов в рамках конвейеров. Это значит, что в том случае, если вы преобразуете мультимедийный поток, полученный из одного содержащего тэги файла, в мультимедийный поток другого типа, причем поток нового типа также поддерживает тэги, то эти тэги будут обработаны как часть потока данных и добавлены записываемый результирующий мультимедийный файл.
Следующий раздел : Интерфейсы