SDI-BRIDGE (RTSP -> DECKLINK)
Автоматическая выдача RTSP-потоков на SDI-выходы платы Blackmagic DeckLink
ОГЛАВЛЕНИЕ
- Что это
- Как это работает
- Структура папки
- Требования
- Первичная настройка 5.1. Порядок действий 5.2. Проверка настроек платы (Connector Mapping)
- Файл streams.txt
- Развертывание (Deployment)
- Запуск и остановка 8.1. Запуск 8.2. Остановка 8.3. Ярлык на рабочем столе
- Как проверить, что всё работает
- Частые проблемы и решения
- Полезные мелочи
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. ПЕРВИЧНАЯ НАСТРОЙКА
Порядок действий:
- Создайте папку
C:\sdi-bridge\ - Положите туда
ffmpeg.exe(с поддержкой DeckLink) - Скопируйте туда
sdi-bridge.ps1,worker.cmd,stop-all.ps1иstreams.txt - Откройте
streams.txtи впишите свои RTSP-адреса (см. раздел 6) - В Blackmagic Desktop Video Setup проверьте, что все нужные порты назначены как SDI Output (см. раздел 5a)
- Убедитесь, что Media Express закрыт — он держит порты и мешает FFmpeg.
5a. ПРОВЕРКА НАСТРОЕК ПЛАТЫ (CONNECTOR MAPPING)
Даже при работающем FFmpeg сигнал не появится, если порты платы настроены как входы или объединены в пары.
- Откройте Blackmagic Desktop Video Setup.
- Выберите вашу карту в списке устройств.
- Нажмите на иконку с шестерёнкой (или кнопку настроек).
- Перейдите на вкладку Connectors.
- Для каждого используемого порта должно быть выбрано просто
SDI 1,SDI 2и т. д. — неSDI 1 & SDI 2и неSDI 3 & SDI 4. - Нажмите Save.
- Перезагрузите компьютер — без этого драйвер не применит изменения.
После перезагрузки в главном окне 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\).
- Склонируйте репозиторий в нужную папку:
git clone https://git.tvstart.ru/lexx/sdi-bridge.git - Скачайте 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 ЯРЛЫК НА РАБОЧЕМ СТОЛЕ
Чтобы не набирать команду каждый раз:
-
Правый клик на рабочем столе -> Создать -> Ярлык.
-
В поле "Расположение объекта" вставьте:
powershell.exe -ExecutionPolicy Bypass -File C:\sdi-bridge\sdi-bridge.ps1 -
Имя: "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
"ERROR: this FFmpeg build was compiled WITHOUT DeckLink support"
Причина: в папке лежит 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.
"ERROR: No DeckLink channels detected"
Причина: ffmpeg собран с --enable-decklink, но карта не отвечает.
Решение:
-
Проверьте, что драйвер Blackmagic Desktop Video установлен и карта видна в Desktop Video Setup.
-
Перезагрузите компьютер.
-
Проверьте вручную:
C:\sdi-bridge\ffmpeg.exe -sinks decklink
FFmpeg работает, frame растёт, но на мониторе нет картинки
Причина: порт платы настроен как вход, а не выход, или объединён в пару с соседним портом.
Решение:
- Откройте Blackmagic Desktop Video Setup.
- Вкладка Connectors: для каждого порта выберите просто "SDI N" (не "SDI N & SDI M").
- Нажмите Save и перезагрузите компьютер.
- Проверьте, что в главном окне у портов пропала колонка VIDEO IN или она показывает No Signal.
- Проверьте, что 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-сервер не пускает параллельные подключения.
Решение:
-
Запустите stop-all.ps1, подождите 3 секунды, запустите оркестратор заново.
-
Проверьте, что Media Express закрыт.
-
Запустите воркер вручную, чтобы увидеть полный лог:
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\.
ДОБАВЛЕНИЕ НОВОГО ПОТОКА
- Откройте
streams.txt. - Допишите в конец строку с новым RTSP-адресом.
- Запустите
sdi-bridge.ps1заново.
Ничего больше править не нужно.
НЕСКОЛЬКО КАРТ DECKLINK В ОДНОЙ СИСТЕМЕ
Текущая версия оркестратора берёт имя первой найденной карты. Если в системе установлено несколько карт DeckLink, потребуется доработка — например, группировка каналов по картам и отдельный набор воркеров на каждую.