Медиа.маги Документация

Last updated

mdecide

Узел mdecide в центре холста, отдающий выходы ветвей HD, SD и Unknown рядом со сквозным пином Package.

1. Сводка

Многоветвевое решение: вычисляет несколько групп условий и маршрутизирует пакет на выход первой совпавшей группы либо на именованный выход default, когда ни одна не совпала. Каждая ветвь — это свой выходной пин на плитке, поэтому процесс может разойтись в три и более параллельных цепочки, не складывая вложенные узлы decide.

2. Когда использовать

  • N-путевая маршрутизация по одному инспектированному значению — разделение источника по VideoHeight на цели UHD / HD / SD / sub-SD, каждая со своей цепочкой фильтров и кодера.
  • Несколько целей по разрешению или кодеку — контентно-осознанная лестница, выбирающая разный профиль кодера для каждой обнаруженной полосы растра.
  • Маршрутизация «всё прочее» с явным умолчанием — отправка неизвестных источников в ветвь уведомления или карантина вместо молчаливого отбрасывания.
  • Замена цепочки узлов decide — сворачивание паттернов if VideoHeight ≥ 1080 then HD else if VideoHeight ≥ 576 then SD в одну плитку, которую проще читать и переупорядочивать.

3. Входы

  • Packagecore.Package. Пакет для маршрутизации.

    Совместимые узлы выше по потоку:

    • analyze — отдаёт инспекционные пины, которые читают группы решений.
    • download — когда маршрутизация идёт по переменным процесса или значениям из eval, а не по инспектированным метаданным.
    • decide, eval — переданные пакеты с этапов маршрутизации или классификации выше по потоку.
  • Метаданные-пины (динамические) — по одному входному пину на свойство, на которое ссылаются группы решений, типизированному под это свойство и подключённому от соответствующего выхода analyze (или eval Value).

4. Выходы

  • Packagecore.Package. Пакет, переданный так, чтобы параллельная ветвь могла пронести его мимо решения (типично для сквозного аудит-лога или для ветви notify на выходе default).

    Совместимые узлы ниже по потоку:

    • map/audio, map/video, map/text, map/timecode — продолжают цепочку мультиплексирования на ветви, которая парует пакет с триггером маршрутизированной ветви.
    • decide — уточняет совпадение ветви дополнительным условием.
  • Выходы ветвей (динамические) — по одному булеву пину на Decision Group, названному идентификатором ветви группы (например, HD, SD). Срабатывает, когда совокупное выражение группы истинно. Подключайте их в decide ниже по потоку (или прямо в цепочку, которая должна сработать на этой ветви), используя соответствующий вход mdecide_<id>/<branch> на потребителе.

  • Выход ветви default (динамический) — один булев пин, названный значением Default ELSE condition (редактор процесса предзаполняет Unknown). Срабатывает, когда ни одна группа решения не совпала.

5. Параметры

Форма «mdecide Node Settings» с двумя Decision Groups и полем Default ELSE condition.

Форма «Настройки» содержит подпись, поле ветви по умолчанию и по одной группе решения на каждую выходную ветвь.

  • Node Label (string, по умолчанию пусто)

    Произвольное имя, отображаемое на плитке узла на холсте.

    • Что задаёт. Подпись на плитке Multi-Decide.
    • Когда менять. Задавайте, чтобы кратко описать измерение, по которому узел маршрутизирует (By raster, By codec family).
  • Default ELSE condition if no decision group conditions are met (string, по умолчанию пусто)

    Имя ветви, срабатывающей, когда ни одна группа решения не совпала.

    • Что задаёт. Добавляет на плитку один выходной пин с заданным именем. Пакеты, не совпавшие ни с одной группой решения, вытекают из этого пина, поэтому покрытие ветвей процесса полное.
    • Когда менять. Всегда задавайте на боевых процессах — оставление поля пустым роняет несовпавшие пакеты на пол. Частые значения: Unknown, Other, Quarantine.
  • Decision Group #N (array из {id, comb, expr}, по умолчанию [], обязательно)

    По одной группе на ветвь. Каждая группа имеет идентификатор ветви (поле справа с пометкой B), комбинатор (AND / OR) и по одной строке на выражение — те же поля, что и строки условия decide.

    • Что задаёт. Каждая группа добавляет на плитку один именованный выход ветви. Группы вычисляются сверху вниз; первая совпавшая группа выигрывает.
    • Когда менять. Упорядочивайте группы от самой специфичной к самой общей, чтобы более узкий диапазон не поглощался более широким. Используйте действия Edit и Del на заголовке группы для переупорядочивания, переименования или удаления ветви.

Соответствие JSON-ключей и названий полей

JSON-ключ Название поля
default_output Default ELSE condition if no decision group conditions are met
output (группы решений)

6. Пример

Процесс Content-aware preview proxy ladder на холсте

Полный разбор — переменные, настройка каждого узла и ожидаемый результат — смотрите в Content-aware preview proxy ladder.

7. Где используется

8. Антипаттерны

  • Забытая ветвь Default ELSE. Без выхода default пакеты, чьи свойства не совпали ни с одной группой, отбрасываются молча. Всегда задавайте ветвь default и подключайте её в notify или карантинную цепочку, чтобы исход процесса был полным.
  • Перекрывающиеся группы решений в неверном порядке. Когда две группы могут совпасть с одним пакетом, выигрывает самая верхняя. Постановка свободной группы над строгой делает ветвь строгой группы мёртвым кодом. Упорядочивайте от самой специфичной к самой общей.
  • Маршрутизация по невыбранному на анализаторе пину. mdecide читает те же метаданные-пины, что и decide; если analyze выше по потоку не перенёс свойство в свои Selected PINs, сравнение молча проваливается, и пакеты уходят в ветвь default. Проверьте выбор анализатора перед сохранением.
  • Подключение каждой ветви в одну и ту же плитку ниже по потоку. Когда всем ветвям нужна одна цепочка ниже по потоку, решение не делает полезной работы — сверните его в одну линейную цепочку. mdecide оправдан, только когда низ каждой ветви различается.
Медиа.маги Документация