2026-10-26 13:49:37 +03:00
2026-10-14 15:28:25 +00:00
2026-10-14 13:03:47 +00:00
2026-10-14 13:03:47 +00:00
2026-10-14 13:03:47 +00:00
2026-10-14 13:03:47 +00:00

SDI-BRIDGE (RTSP -> DECKLINK)


ОГЛАВЛЕНИЕ

  1. Что это
  2. Как это работает
  3. Структура папки
  4. Требования
  5. Первичная настройка 5.1. Порядок действий 5.2. Проверка настроек платы (Connector Mapping)
  6. Файл streams.txt
  7. Запуск и остановка 7.1. Запуск 7.2. Остановка 7.3. Ярлык на рабочем столе
  8. Как проверить, что всё работает
  9. Частые проблемы и решения
  10. Полезные мелочи

1. ЧТО ЭТО


Набор скриптов для Windows, который:

  • Принимает до N RTSP-потоков (N = число портов карты).
  • Декодирует их через FFmpeg.
  • Выдаёт каждый поток на отдельный SDI-выход платы Blackmagic DeckLink в формате 1080i50 (Hi50).
  • Автоматически переподключается при обрыве потока.
  • Автоматически определяет модель карты и её каналы.
  • Запускается одной командой.

Список потоков задаётся в одном текстовом файле streams.txt — система сама раскидывает их по свободным портам.


2. КАК ЭТО РАБОТАЕТ


  +---------------------+
  |  sdi-bridge.ps1     |   <-- оркестратор (запускается вручную)
  +----------+----------+
             |
             | 1. Проверяет ffmpeg (существует, есть --enable-decklink)
             | 2. Читает версию драйвера Blackmagic из реестра
             | 3. Определяет карту и её каналы через ffmpeg
             | 4. Читает streams.txt
             | 5. Гасит старые воркеры (если были)
             | 6. Запускает по одному worker.cmd на поток
             |
             v
  +---------------------+     +-----------------------+
  |  worker.cmd  (SDI-1)| --> | ffmpeg -> DeckLink(1) |
  +---------------------+     +-----------------------+
  +---------------------+     +-----------------------+
  |  worker.cmd  (SDI-2)| --> | ffmpeg -> DeckLink(2) |
  +---------------------+     +-----------------------+
  +---------------------+     +-----------------------+
  |  worker.cmd  (SDI-N)| --> | ffmpeg -> DeckLink(N) |
  +---------------------+     +-----------------------+

Каждый worker.cmd — это бесконечный цикл:

:loop
запустить ffmpeg
если ffmpeg упал  ->  подождать 3 сек  ->  снова loop

Благодаря этому система сама восстанавливается после обрыва сети, зависания камеры, ошибки декодирования и т. п.

Имя карты (DeckLink Duo, DeckLink Quad, DeckLink Quad 2 и др.) определяется автоматически и передаётся воркеру как параметр — жёсткой привязки к конкретной модели нет.


3. СТРУКТУРА ПАПКИ


  C:\sdi-bridge\
  |
  |-- ffmpeg.exe            <-- ваш ffmpeg с поддержкой DeckLink
  |-- sdi-bridge.ps1        <-- оркестратор
  |-- worker.cmd            <-- универсальный воркер
  |-- stop-all.ps1          <-- остановка всего
  |-- streams.txt           <-- СПИСОК ПОТОКОВ
  |
  |-- STOP.flag             <-- временный файл-флаг (создаётся сам)

worker.cmd вызывается так:

worker.cmd <канал> <URL> "<имя карты>"

Пример:

worker.cmd 1 rtsp://10.10.5.140:8554/live1 "DeckLink Duo"

Оркестратор подставляет имя карты автоматически, вручную его указывать не нужно.


4. ТРЕБОВАНИЯ


  • Windows 10 / 11 (x64).
  • Плата Blackmagic DeckLink (проверено на Duo и Quad 2).
  • Драйвер Blackmagic Desktop Video 12.9.
  • FFmpeg с флагом --enable-decklink.
  • PowerShell 5.1 или новее (есть в Windows по умолчанию).

ПРОВЕРКА FFMPEG

Оркестратор проверяет это автоматически при запуске и останавливается с понятным сообщением, если флага нет.

Проверить вручную:

C:\sdi-bridge\ffmpeg.exe -version | findstr decklink

Если в выводе есть --enable-decklink — сборка подходит. Подходящие сборки обычно имеют суффикс "nonfree" в имени архива (например, из проекта AnimMouse/ffmpeg-autobuild).

ПРОВЕРКА ВЕРСИИ ДРАЙВЕРА

Оркестратор автоматически читает версию драйвера из реестра и выводит её в лог рядом с именем карты. Пример строки:

Blackmagic driver: 12.9.0.0

Если версия не определилась, будет выведено:

Blackmagic driver: version not detected (registry key missing)

Это не ошибка — скрипт продолжит работу. Точную версию драйвера всегда можно посмотреть в Blackmagic Desktop Video Setup, вкладка About для любого канала карты.


5. ПЕРВИЧНАЯ НАСТРОЙКА


Порядок действий:

  1. Создайте папку C:\sdi-bridge\
  2. Положите туда ffmpeg.exe (с поддержкой DeckLink)
  3. Скопируйте туда sdi-bridge.ps1, worker.cmd, stop-all.ps1 и streams.txt
  4. Откройте streams.txt и впишите свои RTSP-адреса (см. раздел 6)
  5. В Blackmagic Desktop Video Setup проверьте, что все нужные порты назначены как SDI Output (см. раздел 5a)
  6. Убедитесь, что Media Express закрыт — он держит порты и мешает FFmpeg.

5a. ПРОВЕРКА НАСТРОЕК ПЛАТЫ (CONNECTOR MAPPING)


Даже при работающем FFmpeg сигнал не появится, если порты платы настроены как входы или объединены в пары.

  1. Откройте Blackmagic Desktop Video Setup.
  2. Выберите вашу карту в списке устройств.
  3. Нажмите на иконку с шестерёнкой (или кнопку настроек).
  4. Перейдите на вкладку Connectors.
  5. Для каждого используемого порта должно быть выбрано просто SDI 1, SDI 2 и т. д. — неSDI 1 & SDI 2 и не SDI 3 & SDI 4.
  6. Нажмите Save.
  7. Перезагрузите компьютер — без этого драйвер не применит изменения.

После перезагрузки в главном окне Desktop Video Setup колонка VIDEO IN у ваших портов должна показывать No Signal (или вообще отсутствовать). Это признак того, что порты больше не работают как входы.

Колонка OUTPUT FORMAT должна показывать 1080i50 — то же самое, что стоит в -format_code Hi50 в worker.cmd. Если там другой формат, поменяйте его в Desktop Video Setup на 1080i50.


6. ФАЙЛ streams.txt


Одна строка = один поток. Пустые строки и строки, начинающиеся с #, игнорируются.

Пример

rtsp://10.10.5.140:8554/live1
rtsp://10.10.5.140:8554/live2
rtsp://10.10.5.140:8554/live3
rtsp://10.10.5.140:8554/live4

Потоки рассаживаются на каналы сверху вниз: первый URL -> SDI-1, второй -> SDI-2, и так далее.

ЯВНОЕ УКАЗАНИЕ КАНАЛА

Формат "номер:URL":

3:rtsp://10.10.5.140:8554/camera-A
5:rtsp://10.10.5.140:8554/camera-B

Поток camera-A пойдёт на SDI-3, camera-B — на SDI-5. Если канал занят или его нет — строка пропускается с предупреждением.

Лишние строки (сверх числа каналов) тоже пропускаются и перечисляются в конце вывода оркестратора в разделе "Skipped".


7. ЗАПУСК И ОСТАНОВКА


Система запускается одним PowerShell-скриптом. Он сам проверяет окружение, находит плату, читает streams.txt, гасит старые воркеры и запускает новые.

7.1 ЗАПУСК

Откройте PowerShell (Пуск -> начните печатать "PowerShell" -> Enter) и выполните:

powershell -ExecutionPolicy Bypass -File C:\sdi-bridge\sdi-bridge.ps1

Вставить текст в PowerShell можно правой кнопкой мыши или через Ctrl+V.

Параметр -ExecutionPolicy Bypass нужен, потому что по умолчанию Windows блокирует запуск .ps1-файлов. Он действует только на время текущего запуска и ничего в системе не меняет.

Что произойдёт

  • В окне PowerShell появится лог проверки окружения, обнаружения платы, список каналов и таблица запущенных потоков.
  • Откроются окна SDI-1, SDI-2, ... — по одному на каждый поток. Их закрывать нельзя — это работающие воркеры.
  • Окно PowerShell можно свернуть или закрыть: оно свою работу выполнило.

Повторный запуск безопасен: старые воркеры будут автоматически остановлены перед стартом новых.

7.2 ОСТАНОВКА

Откройте PowerShell и выполните:

powershell -ExecutionPolicy Bypass -File C:\sdi-bridge\stop-all.ps1

Либо закройте все окна SDI-N вручную (Ctrl+C или крестик).

7.3 ЯРЛЫК НА РАБОЧЕМ СТОЛЕ

Чтобы не набирать команду каждый раз:

  1. Правый клик на рабочем столе -> Создать -> Ярлык.

  2. В поле "Расположение объекта" вставьте:

    powershell.exe -ExecutionPolicy Bypass -File C:\sdi-bridge\sdi-bridge.ps1
    
  3. Имя: "SDI Bridge" -> Готово.

Двойной клик по ярлыку — и система запущена.


8. КАК ПРОВЕРИТЬ, ЧТО ВСЁ РАБОТАЕТ


Проверка 1. Лог оркестратора

В самом начале вывода должно быть что-то вроде:

Checking FFmpeg build...
FFmpeg build OK (DeckLink enabled).
Blackmagic driver: 12.9.0.0
Detecting DeckLink channels...
Card:     DeckLink Duo
Channels: 1, 2, 3, 4

Имя карты определяется автоматически, поэтому здесь может быть "DeckLink Duo", "DeckLink Quad", "DeckLink Quad 2" или другое.

В конце — таблица:

SDI     Stream                             Status
---     ------                             ------
SDI-1   rtsp://10.10.5.140:8554/live1     launched
SDI-2   rtsp://10.10.5.140:8554/live2     launched
...

Проверка 2. Окна SDI-N

В каждом окне должны идти строки вида:

[дата время] Starting : DeckLink Duo (1)
[дата время] Stream   : rtsp://10.10.5.140:8554/live1
...
frame=  1234 fps= 25 q=-0.0 size=N/A time=00:00:49.36 ...

Если frame растёт, а fps держится около 25 — всё хорошо.

Проверка 3. Монитор на SDI

Подключите монитор к соответствующему выходу карты. Должна быть картинка в 1080i50.

Проверка 4. Диспетчер задач

Число процессов ffmpeg.exe должно быть РАВНО числу запущенных потоков. Не больше.


9. ЧАСТЫЕ ПРОБЛЕМЫ И РЕШЕНИЯ


"ERROR: ffmpeg.exe not found: ..."

Причина: файл ffmpeg.exe отсутствует по указанному в Config пути.

Решение: проверьте строку в sdi-bridge.ps1

$FFmpeg = 'C:\sdi-bridge\ffmpeg.exe'

и убедитесь, что файл действительно лежит там:

dir C:\sdi-bridge\ffmpeg.exe

Причина: в папке лежит ffmpeg.exe, собранный без поддержки DeckLink (например, стандартная сборка с ffmpeg.org или "gpl-shared" без опции --enable-decklink).

Решение: замените ffmpeg.exe на сборку с --enable-decklink. Проверить можно командой:

C:\sdi-bridge\ffmpeg.exe -version | findstr decklink

Подходящие сборки обычно имеют суффикс "nonfree" в имени архива (например, из проекта AnimMouse/ffmpeg-autobuild).


"Blackmagic driver: version not detected"

Это не ошибка. Скрипт просто не нашёл ключ в реестре. Версия драйвера выводится для информации и не влияет на работу. Точную версию смотрите в Blackmagic Desktop Video Setup, вкладка About.


Причина: ffmpeg собран с --enable-decklink, но карта не отвечает.

Решение:

  1. Проверьте, что драйвер Blackmagic Desktop Video установлен и карта видна в Desktop Video Setup.

  2. Перезагрузите компьютер.

  3. Проверьте вручную:

    C:\sdi-bridge\ffmpeg.exe -sinks decklink
    

FFmpeg работает, frame растёт, но на мониторе нет картинки

Причина: порт платы настроен как вход, а не выход, или объединён в пару с соседним портом.

Решение:

  1. Откройте Blackmagic Desktop Video Setup.
  2. Вкладка Connectors: для каждого порта выберите просто "SDI N" (не "SDI N & SDI M").
  3. Нажмите Save и перезагрузите компьютер.
  4. Проверьте, что в главном окне у портов пропала колонка VIDEO IN или она показывает No Signal.
  5. Проверьте, что OUTPUT FORMAT = 1080i50.

"Option reconnect not found"

Причина: ваша сборка FFmpeg не поддерживает -reconnect.

Решение: не используйте -reconnect. Переподключение обеспечивает worker.cmd через цикл :loop.


"Unsupported number of channels! Only 2, 8 or 16 ..."

Причина: в потоке есть аудио, которое FFmpeg пытается отдать в DeckLink как моно.

Решение: в worker.cmd уже стоят -map 0✌️0 и -an. Не убирайте их.


На выходе 1080p25 вместо 1080i50

Причина: FFmpeg не сохраняет признак interlaced по всей цепочке.

Решение: в фильтре есть setfield=tff — он принудительно помечает кадры как чересстрочные (top field first).


"Синтаксическая ошибка в имени файла, имени папки или метке тома"

Причина: символ ">" в echo-строках worker.cmd. Windows воспринимает его как перенаправление вывода.

Решение: используйте ":" вместо "->" в echo. В текущей версии worker.cmd это уже исправлено.


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

Причина: старые worker.cmd не завершились.

Решение: убедитесь, что worker.cmd содержит проверку STOP.flag (до и после запуска ffmpeg), а sdi-bridge.ps1 содержит блок "Cleanup". Перед запуском можно вручную выполнить stop-all.ps1.


ffmpeg печатает версию и замолкает

Причина: ffmpeg завис на открытии RTSP или на открытии вывода DeckLink. Часто это связано с тем, что порт занят предыдущим ffmpeg, или RTSP-сервер не пускает параллельные подключения.

Решение:

  1. Запустите stop-all.ps1, подождите 3 секунды, запустите оркестратор заново.

  2. Проверьте, что Media Express закрыт.

  3. Запустите воркер вручную, чтобы увидеть полный лог:

    C:\sdi-bridge\worker.cmd 1 rtsp://10.10.5.140:8554/live1 "DeckLink Duo"
    

Кириллица в окнах отображается "кракозябрами"

Причина: cmd.exe по умолчанию работает в OEM-кодировке.

Решение: все сообщения воркеров и оркестратора на английском. Не добавляйте echo с кириллицей.


10. ПОЛЕЗНЫЕ МЕЛОЧКИ


ВРЕМЕННО ЗАПУСТИТЬ МЕНЬШЕ ПОТОКОВ

Закомментируйте лишние строки в streams.txt символом #.

ПРОСМОТР СТАТУСА

В любой момент в PowerShell:

Get-Process ffmpeg -ErrorAction SilentlyContinue | Select-Object Id, StartTime, CPU

Покажет, сколько воркеров ffmpeg сейчас живёт и как давно запущен каждый.

ЛОГИ

Если нужно сохранять историю, добавьте в sdi-bridge.ps1 в самом начале строку:

Start-Transcript -Path "C:\sdi-bridge\logs\run.log" -Append

Не забудьте создать папку C:\sdi-bridge\logs\.

ДОБАВЛЕНИЕ НОВОГО ПОТОКА

  1. Откройте streams.txt.
  2. Допишите в конец строку с новым RTSP-адресом.
  3. Запустите sdi-bridge.ps1 заново.

Ничего больше править не нужно.

Текущая версия оркестратора берёт имя первой найденной карты. Если в системе установлено несколько карт DeckLink, потребуется доработка — например, группировка каналов по картам и отдельный набор воркеров на каждую.

Description
No description provided
Readme 59 KiB
2026-10-26 11:37:14 +00:00
Languages
PowerShell 86.3%
Batchfile 13.7%