Алексей Барабанов 9021f98344 Update README.md
Добавлен пунт про Deplpy
2026-10-26 11:36:01 +00:00
2026-10-26 11:36:01 +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. Развертывание (Deployment)
  8. Запуск и остановка 8.1. Запуск 8.2. Остановка 8.3. Ярлык на рабочем столе
  9. Как проверить, что всё работает
  10. Частые проблемы и решения
  11. Полезные мелочи

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. Развертывание (Deployment)


Проект работает в "portable" режиме. Все файлы должны лежать в одной папке (например, C:\sdi-bridge\).

  1. Склонируйте репозиторий в нужную папку:
    git clone https://git.tvstart.ru/lexx/sdi-bridge.git
    
  2. Скачайте ffmpeg.exe (с поддержкой DeckLink) и драйвер Blackmagic: Перейдите в раздел Releases этого репозитория. Скачайте архив ffmpeg_decklink_win64.zip и распакуйте ffmpeg.exe в корень папки (рядом с sdi-bridge.ps1). Установите драйвер Blackmagic Desktop Video из архива или с официального сайта.

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


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

8.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 можно свернуть или закрыть: оно свою работу выполнило.

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

8.2 ОСТАНОВКА

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

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

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

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

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

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

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

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

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


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


Проверка 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 должно быть РАВНО числу запущенных потоков. Не больше.


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


"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 с кириллицей.


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


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

Закомментируйте лишние строки в 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%