Перейти к основному содержимому

07-07-04 Инструменты отладки: GST_DEBUG, gst-inspect, графы пайплайнов

На этапе создания и настройки GStreamer-пайплайнов — особенно сложных, с несколькими источниками, преобразованиями и приёмниками — рано или поздно возникают ситуации, когда пайплайн не запускается, падает с ошибкой, или работает не так, как ожидается. В таких случаях невозможно полагаться только на интуицию или пробные запуски. Нужны инструменты диагностики, которые помогут понять, что происходит «под капотом».

В этом разделе мы рассмотрим три ключевых инструмента, которые входят в стандартную поставку GStreamer и доступны из командной строки:

  • GST_DEBUG — включение подробного логирования;
  • gst-inspect-1.0 — изучение структуры элементов;
  • Генерация графа пайплайна в формате DOT — визуализация структуры.

Эти инструменты критически важны при разработке продакшн-решений, но даже на уровне учебного курса они помогают быстрее понять, как работает gst-launch-1.0, почему элементы не соединяются, или откуда берётся задержка.


Включение логов с помощью GST_DEBUG

Когда пайплайн не запускается или работает нестабильно, первое, что нужно сделать — посмотреть, что происходит внутри. GStreamer предоставляет мощную систему отладочного вывода, активируемую через переменную окружения GST_DEBUG.

Как это работает

Переменная GST_DEBUG позволяет указать:

  • уровень детализации логов (от 0 до 6);
  • какие элементы или категории логов показывать.

Наиболее часто используется синтаксис:

GST_DEBUG=уровень команда

или более точно:

GST_DEBUG=имя_элемента:уровень команда

Уровни отладки

УровеньИмяОписание
0ERRORТолько критические ошибки
1WARNINGПредупреждения (например, проблемы с синхронизацией)
2FIXMEМеста, где что-то работает, но потенциально неправильно
3INFOОбщая информация о создании элементов, состояниях
4DEBUGПодробные данные о работе пайплайна
5LOGОчень подробные логи (например, каждый буфер)
6TRACEМаксимальная детализация (включая вызовы функций)

Пример использования

Допустим, вы запускаете пайплайн для RTSP-камеры, и он «зависает» или не показывает видео:

gst-launch-1.0 rtspsrc location=rtsp://192.168.1.100:554/stream ! decodebin ! videoconvert ! autovideosink

Чтобы понять, где проблема, включите отладку:

GST_DEBUG=3 gst-launch-1.0 rtspsrc location=rtsp://192.168.1.100:554/stream ! decodebin ! videoconvert ! autovideosink

На экране появится множество сообщений, например:

0:00:00.123456789 INFO                rtspsrc gstrtspsrc.c:1234:gst_rtspsrc_open: opening connection to rtsp://192.168.1.100:554/stream
0:00:00.123456789 INFO rtspsrc gstrtspsrc.c:2345:gst_rtspsrc_send_cmd: sending DESCRIBE request

Эти строки покажут:

  • Удалось ли установить RTSP-соединение;
  • Получен ли SDP-описание потока;
  • Какие RTP-потоки обнаружены;
  • Как decodebin пытается подобрать декодер.

Полезные практики

  • Начинайте с GST_DEBUG=3 — этого обычно достаточно для диагностики большинства проблем.
  • Если нужно сузить фокус, используйте:
    GST_DEBUG=rtspsrc:5,decodebin:4 gst-launch-... — только для конкретных элементов.
  • В сложных случаях можно направить логи в файл:
    GST_DEBUG=3 gst-launch-1.0 ... 2> debug.log

Изучение элементов с помощью gst-inspect-1.0

Иногда вы видите элемент в пайплайне (например, videorate или capsfilter), но не знаете, какие у него есть свойства, входы/выходы или какие форматы он поддерживает. В таких случаях на помощь приходит утилита gst-inspect-1.0.

Что делает gst-inspect-1.0

Эта команда выводит полную информацию об элементе:

  • Назначение и краткое описание;
  • Доступные свойства (properties);
  • Пэды (pad'ы): входы (sink) и выходы (src);
  • Поддерживаемые caps (форматы);
  • Примеры использования.

Синтаксис

gst-inspect-1.0 имя_элемента

Пример: изучение rtspsrc

Выполним:

gst-inspect-1.0 rtspsrc

В выводе увидим:

Factory Details:
Rank primary (256)
Long-name RTSP source
Class Source/Network
Description Receive data as an RTSP client
Author Wim Taymans <wim.taymans@gmail.com>

...

Ключевые разделы:

1. Свойства (Properties):

  latency           : Amount of ms to buffer (0 = no buffering, -1 = default)
flags: readable, writable
Integer. Range: -1 - 2147483647 Default: 2000

location : The RTSP URI to connect to
flags: readable, writable
String. Default: null

Здесь мы видим, что latency по умолчанию — 2000 мс, что объясняет, почему без указания latency=0 пайплайн может иметь большую задержку.

2. Пэды (Pad Templates):

  SRC template: src_%u
Availability: Sometimes
Capabilities:
application/x-rtp
media: video
clock-rate: [ 1, 2147483647 ]
encoding-name: (string)H264

Это означает, что rtspsrc создаёт динамические выходные пэды (src_0, src_1 и т.д.) для каждого RTP-потока, и каждый из них передаёт данные в формате application/x-rtp с видео H.264.

3. Примеры использования

В конце часто приводятся готовые строки gst-launch, например:

gst-launch-1.0 rtspsrc location=rtsp://example.com/stream ! rtpjitterbuffer ! rtpmp4gdepay ! aacparse ! avdec_aac ! audioconvert ! autoaudiosink

Это полезно для быстрого старта.


Визуализация пайплайна: генерация графа в DOT

Одна из самых мощных возможностей GStreamer — автоматическая генерация графа пайплайна в формате DOT (язык описания графов от Graphviz). Это особенно полезно, когда пайплайн сложный, содержит decodebin, compositor, или несколько веток.

Как это работает

GStreamer может автоматически создавать .dot-файлы, описывающие структуру пайплайна на каждом этапе его жизни: при создании, переходе в PAUSED, PLAYING и т.д.

Для этого используется переменная окружения:

GST_DEBUG_DUMP_DOT_DIR=/путь/к/папке

Пошаговая инструкция

  1. Создайте папку для графов:
mkdir ~/gst-graphs
  1. Установите переменную и запустите пайплайн:
GST_DEBUG_DUMP_DOT_DIR=~/gst-graphs gst-launch-1.0 rtspsrc location=rtsp://... ! decodebin ! videoconvert ! autovideosink
  1. После запуска в папке ~/gst-graphs появятся файлы вида:
0.gst-dot.12345.PRE_LINK.dot
0.gst-dot.12345.POST_LINK.dot
0.gst-dot.12345.PRE_PLAYING.dot

Каждый файл соответствует определённому этапу:

  • PRE_LINK — до соединения элементов;
  • POST_LINK — после соединения, но до запуска;
  • PRE_PLAYING — перед переходом в состояние PLAYING.

Просмотр графа

Для визуализации .dot-файлов нужен Graphviz. Установите его:

sudo apt install graphviz

Затем преобразуйте файл в изображение:

dot -Tpng ~/gst-graphs/0.gst-dot.12345.POST_LINK.dot -o pipeline.png

Откройте pipeline.png — вы увидите наглядную схему вашего пайплайна.

Что можно увидеть на графе

  • Как decodebin развернулся в цепочку: h264parse → avdec_h264;
  • Где вставлены автоматические конвертеры (videoconvert);
  • Как соединены пэды;
  • Наличие скрытых queue, добавленных автоподбором;
  • Несколько веток (например, если есть аудио и видео).

Пример: диагностика автоподбора

Допустим, вы ожидаете, что видео будет идти напрямую, но на графе видите:

rtspsrc → rtph264depay → h264parse → queue → avdec_h264 → videoconvert → autovideosink

Вы не добавляли queue, но он есть. Это значит, что GStreamer вставил его автоматически — например, для многопоточности. Теперь вы понимаете, что эта очередь может добавлять задержку, и при необходимости можете управлять её параметрами:

queue max-size-time=0 max-size-buffers=2 leaky=downstream

Сводная таблица инструментов отладки

ИнструментКоманда / переменнаяКогда использоватьЧто даёт
GST_DEBUGGST_DEBUG=3Пайплайн не запускается, падает, зависаетПодробные логи по этапам инициализации, ошибки, предупреждения
gst-inspect-1.0gst-inspect-1.0 elementНе знаете, как использовать элемент, какие у него свойстваПолная документация по элементу: пэды, caps, свойства, примеры
DOT-графыGST_DEBUG_DUMP_DOT_DIR=...Пайплайн сложный, неясно, как соединяются элементы, есть задержкаВизуальное представление структуры, включая автосозданные элементы и очереди

Заключение: почему эти инструменты важны

На первый взгляд, gst-launch-1.0 — это просто строка из элементов, соединённых восклицательными знаками. Но на самом деле за этой строкой скрывается сложный граф, динамически создаваемые элементы, автоподбор кодеков и буферизация на каждом этапе.

Инструменты отладки позволяют:

  • Превратить «чёрный ящик» в прозрачную систему;
  • Понять, почему пайплайн ведёт себя так, а не иначе;
  • Найти «узкие места» по задержке (например, лишние очереди);
  • Убедиться, что используется нужный декодер или формат;
  • Эффективно учиться и экспериментировать.

Даже простой вызов GST_DEBUG=3 или gst-inspect-1.0 может сэкономить часы на догадки. А визуализация графа — это не просто «красиво», а необходимый инструмент проектирования сложных медиапотоков.

Поэтому рекомендуется использовать эти инструменты с самого начала, даже в учебных примерах. Это формирует правильное понимание архитектуры GStreamer и помогает избегать типичных ошибок на более поздних этапах.