Pull to refresh

Comments 2

Признаюсь, несколько лет был, что называется, очарован этим набором библиотек, применял его и в своих личных, и в рабочих проектах, старался при любой имеющейся возможности предпочитать GStreamer пересекающимся по предметной области ffmpeg/libav. Привлекает и красивая концепция конвейера, и модульная архитектура, и с виду грамотное разделение API на уровни, когда для клиентского использования нет необходимости залезать во внутренности. Но, к сожалению, реализация сильно подкачала. Тут и огромное количество ошибок и «белых пятен» в элементах, и противоречивость некоторых частей API, и тёмные стороны в тонкостях работы конвейера. Фактически, начав писать какой-нибудь простенький плеер ты в определённый момент осознаёшь себя отлаживающим глубокие внутренности какого-нибудь элемента, который вроде бы должен был просто работать.

Разработчиков винить трудно, судя по опыту взаимодействия и их выступлениям, это действительно высококлассные специалисты. Проблема, наверное, в выборе языка C для продукта такого уровня сложности при ограниченном количестве активных разработчиков. Красноречиво об этом свидетельствует, например, функция set_name для GstObject, сама занимающая около 40 строк, вызывающая в них другую, «рабочую» функцию ещё на 50 строк, при этом они несколько раз захватывают и отпускают мьютексы не самым очевидным на свете образом и делают другие интересные вещи. В общем, чаще всего ситуация выглядит как «должно работать, но не работает». Так что в последнее время я хоть и по-прежнему люблю GStreamer, но уже с осторожностью.

В любом случае, спасибо автору за статью и интерес к этому мультимедийному фреймворку.
Sign up to leave a comment.

Articles