Наши партнеры

UnixForum





Библиотека сайта 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 является сохранение тэгов в рамках конвейеров. Это значит, что в том случае, если вы преобразуете мультимедийный поток, полученный из одного содержащего тэги файла, в мультимедийный поток другого типа, причем поток нового типа также поддерживает тэги, то эти тэги будут обработаны как часть потока данных и добавлены записываемый результирующий мультимедийный файл.


Следующий раздел : Интерфейсы