четверг, 28 ноября 2019 г.

Software Failover Switch for UDP MPEG TS - multicat - простой переключатель IP TS потоков

Бесплатно и не сильно сложно.

(Этот метод устарел. лучшее решение - TSduck)
Переключатель UDP mpegTS собран на Multicat, о котором я писал в предыдущем посте.
Решение не очень элегантное на мой взгляд, но достаточно хорошо справляется с задачей.
Автоматическое переключение происходит при обрыве одного из потоков, а также вручную. Отслеживание состояния и переключение между потоками выполняется на удалённом сервере с Zabbix.
Source scripts are at bottom of page...

Работает следующим образом:
2 потока: основной и резервный, с идентичными PID-ами и настройками кодирования (различающимися только мультикаст адресами) записываются в RAM диск в разные папки, 1 и 2.
Записывается по 1 чанку - 5 секунд для каждого канала используя при этом ~10 Мб опреативки для двух стримов по 5 Мбит.
Запускается скрипт воспроизведения, содержащий бесконечное циклическое переключение задачи воспроизведения из папки 1 и 2. При этом есть задержка воспроизведения, минимальная для multicat - 250 мсек.
Например, при обрыве одного из входящих мультикастов временно прекращается запись  файла, например 1-го. Если воспроизводился TS именно  из 1-й папки, то через 250 мсек воспроизведение прервётся из-за окончания файла, и процесс воспроизведения завершится. По скрипту сразу запустится вспроизведение 2-го TS. И теперь, если первый фид снова прервётся, воспроизведение продолжится со 2-го TS файла.
Если прерывается 2-й фид, воспроизведение автоматически перебрасывается на 1-й TS и так до бесконечности.
В момент переключения создаётся промежуточный файл с информацией о том, какой ts сейчас вещает и отправляется SNMP trap. При ручном переключении текущий воспроизводящий multicat закрывается и запускается другой TS. Ну и само собой отправляется SNMP trap оповещение в тот же Zabbix о переключении, чтобы быть в курсе дела, а так-же добавить скрипт переключения из среды Zabbix для внешнего управления ченджовером.

На картинке: момент переключения между потоками.

При этом мониторинг не уловил момента - отсутствия потока, но показал MLR и СС. Переключение происходит очень быстро. Загрузка i3-3220 - 2-5 %. Теоретически, можно создать столько ченджоверов, сколько позволит сетевой интерфейс...

Это не прямой проброс мультикаста на прямую на выход, но у этого способа есть не раскрытый потенциал ввиде бесшовного перехода между источниками, в случае если натравить некоторый сервис обнаруживающий в потоке ключевой кадр, и при поступлении запроса переключаться именно на ключевой кадр. В этом случае при переходе на другой источник рассыпания картинки очень маловероятны.

Набор скриптов для создания Fail Over.
Читайте Readme, внесите нужные изменения в config.ini и запускайте.
https://cloud.mail.ru/public/2nzv/3aEXQ2Zv7

Исходники и доп. информация multicat на Github:
https://code.videolan.org/videolan/multicat

multicast udp mpegts - timeshift / дилэй для мультикаста TV

Timeshift for mpegts multicast


Для чего может понадобиться таймшифт / дилэй мультикаста на телевидении:

(Этот метод устарел. лучшее решение - TSduck)
  • Создание региональных версий для телеканала  (запись мультикаста с отложенным воспроизведением).
  • Создание резервного мультикаст потока на случай аварии плейаут сервера.
  • DVR - создание копии мультикаста и его анализ.
Source scripts at the bottom of page...

Сложно было найти решение, особенно бесплатное. Было много тестов  на ffmpeg, но они не увенчались успехом. Всему виной изменение характеристик потока на выходе.
Иными словами нужно было просто записать мультикаст UDP поток и воспроизвести его через время, но в другую сетевую карту или под другим  мультикаст адресом, не меняя в потоке ничего, то есть, воспроизвести ASIS. FFmpeg так не может.
На самом деле всё оказалось очень просто. Много времени ушло на поиски того что нужно.
Это Multicat! От VideoLAN... Очень стабильный софт! Пишет, рестримит мультикасты от SD вплоть до UHD, почти не потребляя вычислительной мощности. Только под Linux.

На картинке выход стрима после multicat. FHD


Для одного из наших проектов потребовалось организовать резерв канала на случай аварии вещательного сервера. Необходимо было иметь хоть что-то на подмену, например, заглушку на время восстановительных работ. Было решено сделать циклическую запись последних суток вещания канала и создание вчерашней версии телеканала.
Настроили софт на запись канала на 24 часа. Создаются чанки по 60 минут. Все чанки, что старше 24 часов, удаляются скриптом. На самом деле необходимо наличие чанков на время задержки + 1 минута - чтобы не удалялся чанк который предназначен для воспроизведения.
Далее воспроизводим записанные чанки с задержкой 24 часа в новый мультикаст поток в ту же сетевую карту.
Тут же возникает вопрос о подмене основного потока с плейаута на записанный. Это делается разными способами, и на спец железках / коммутаторах или на различном софте. Multicat тоже может сделать такое. Уровень, конечно, элементарный, но на случай аварии спасает оперативно. Об этом в следующем посте.

Надо дополнить, что на основе этого же софта были изготовлены аварийные заглушки для множетсва наших каналов. Правда за последний час, но всё же. Не обошлось без решающего звена Zabbix.

Этот способ хорошо подходит для экстренной подмены одного из "упавших" серверов вещания. Другими словами по задумке существует один единственный сервер для горячей подмены мультикаста любого плейаут сервера.

Скажем так, у нас много плейаутов, у которых нет резерва по договору в связи с ограничением бюджета клиента. Для всех таких подобных плейаутов даже на время профилакики требуется оперативная подмена этого же материала за последний час, чтобы не составлять чёрное поле в эфире на время профилактических работ с севером.
Создаём сервер с multicat, который постоянно пишет последний час наших безрезервных плейаутов. Каждый TS складывается в свою папку с присвоенным названием канала. Таким образом, у нас на сервере замещения мультикастов собираются записи всех плейаутов за последний час.
Далее, в момент аварии (тогда, когда мультикаст не идёт с сервера N) нужно запустить скрипт изменения сетевого адреса на подменном сервере идентичный серверу N для того, чтобы рассылка мультиката шла именно с такого же адреса что у упавшего сервера. После изменения адреса сетевой карты можно запустить воспроизведение записи канала N за последний час и приступить к восстановительным работам на сервере N.
Есть некоторый нюанс. При изменении сетевого адреса карты на подменном сервере скрипты, отвечающие за запись каналов, необходимо перезапустить.
Автоматизируется это с помощью Zabbix.
Клиент Zabbix установленный на плейаут N отправляет информацию о том, что с сервера N не выходит мултикаст. Например, при выходе из строя блока питания, Zabbix клиент перестаёт отправлять данные о мультикасте на сетевом интерфейсе плейаута N на сервер Zabbix. Zabbix сервер принимает логическое решение на основании собранных данных, что мультикаст в сети пропал и отправляет команду запустить скрипт воспроизведения канала N на подменном сервере. Этот процесс надо хорошо отлаживать. Лучше пристроить систему мониторинга мультикастов, которая будет оповещать о наличии и состоянии мультикаст потока для повышения надёжности.

Набор скриптов для запуска timeshift
https://cloud.mail.ru/public/4uxm/54tSR2hMN

понедельник, 23 сентября 2019 г.

Stratum NTP server ESP8266 + GPS - сервер точного времени

NTP Сервер точного времени.
NTP сервер понадобился нам для синхронной работы вещательных серверов. Так-же проведённый анализ мультикастовых потоков выявил незначительное появление ошибок в момент синхронизации OS с сервером времени. Происходил сбой генерации PTS меток, как и подрыв сервиса в кодирущем софте.
По простому - каждые 1-2 дня сыпится картинка на потоковом изображении с выхода плейаут сервера. Чаще сбой происходил при кодировании мультикаста UHD разрешения 50i.
Первым делом была настроена частая синхронизация времени WIN OS и CMOS - в реестре Polling interval. - каждые 600 секунд.
Но и центральный сервер точного времени тоже нужен. Решил собрать по готовому примеру из сети , на основе wifi сетевой карты (ESP8266) и GPS модуля, которые как раз были под рукой.
Потребовалось некоторое время чтобы адаптировать проект к заливке в сетевую карту, после чего в проекте выявлена проблема преобразования миллисекунд. Миллисекунды всегда были не правильными - по отслеживанию NTP логам и криво формировались сетевой картой.
Баг был обнаружен и успешно устранён. Миллисекунды передвавлись в NTP запрос в чистом виде, а должны были формироваться как фракция секунды.


Много времени потребовалось на подбор программ для работы с готовым проектом и его заливке в контроллер.
Ниже - необходимый софт который без труда ищется в сети:

Software:
jre-8u202-windows-x64.exe
eclipse-cpp-neon-R-win32-x86_64.zip
mingw-get-setup.exe
Espressif-ESP8266-DevKit-v2.0.9-x86.exe
Espressif-ESP8266-DevKit-Addon.zip
C project for ESP8266.

Ниже: часть кода устраняющая это недоразумение - преобразование миллисекунд в фракцию секунды (milliseconds to fraction of a second):


timetmp=SecondsSince1900(GPSyear, GPSmonth, GPSday, GPShour, GPSminute, GPSsecond);
fractmp=system_get_time();
if( fractmp >= RTCcounts )
{
useconds=fractmp - RTCcounts;
}
else
{
useconds= (0xFFFFFFFF - RTCcounts)+fractmp;
}
//os_printf("useconds: %d\r\n",useconds);

useconds=((useconds+GNRMC_US_OFFSET_BYTETIME)*4294967296*0.000001);//+GPSmillisecond*1000



Надо добавить, что получившийся сервер получился очень крохотным и работал без отказов. Но. Из-за того что это не Ethernet , WiFi вносит  погрешность времени при доставке пакетов. 

В результате погрешность синхронизации составила чуть меньше чем ±0,01 с. в то время как погрешность синхронизации с открытыми NTP серверами через интернет составляет ±0,005 с.
Фоток к сожалению не сохранилось...

четверг, 27 июня 2019 г.

Zabbix - мониторинг TV playout систем + SNMP


Изначально Zabbix позиционируется как монитроинг множества параметров множества серверов различных групп. Очень мощная , гибкая и жизнеспособная система. К тому-же бесплатная.
При использовании на ТВ для мониторинга мультикастов в вещательных ip сетях, Zabbix тоже подходит, но наличие транспортных ошибок в потоке и его качественных характеристик, zabbix мониторить не умеет. В такой ситуации можно отслеживать только наличие и скорость траффика на мультикаст интерфейсе. Для этого нужно разделить интерфейсы данных и мультикаста либо физически, либо разнести в разные vlan-ы.
Мониторинг битрэйта мультикаст трафика это уже что-то. Настроить можно частоту проведения замеров, в том числе рабочее время или определённые дни. Можно настроить активный монтироинг, чтобы zabbix agent отправлял информацию только в момент неполадки.
Имея на руках информацию о падении мультикаст траффика Zabbix может отправлять уведомления по e-mail, SNMP и тп. или выполнить скрипт по диагностике проблемы, выполнить скрипт, осуществляющий перезапуск playout системы или приложения в зависимости от результата диагностики.
Так же Zabbix при аварии выводит информацию о проблеме, её важность, статус время, длительность, а так-же вложенную информацию по этой проблеме с её диагностикой и решением.
Очень полезная штуковина для отслеживания состояний различных устройств в сети.

Ускорение титров на фильмах с помощью FFmpeg

Это вопрос больше для телевизионщиков.

Однажды возникла необходимость укоротить титры в конце фильма, по скольку для вещания по тв, во время просмотра титров зритель переключает канал, на что-то более динамичное и интересное.
При наличии множества фильмов делать подрезку титров в ручную достаточно проблематично. Поэтому был написан скрипт для FFmpeg выполняющий такую задачу достаточно быстро. Нужно только узнать длительность фиьлма, и время в которое начинаются титры. Скорость работы ограничивается скоростью чтения/записи диска.

Вот содержимое  CMD файла:

set "infile=Film.mp4"
set "T=02:06:37"
set "D=02:13:57"
set "spd=setpts=0.5*PTS,setpts=0.5*PTS,setpts=0.5*PTS,setpts=0.5*PTS"
mkdir speedup


ffmpeg -y -fflags +genpts -i "%infile%" -map 0 -c copy -t %D% -f segment -segment_format mp4 -segment_time %T% -segment_list video.ffcat -reset_timestamps 1 -v error  chunk-%%03d.mp4

ffmpeg -y -i chunk-001.mp4 -filter:v "%spd%" -s 160x90 -b:v 10k -an endNOsnd.mp4


FOR /F "tokens=* USEBACKQ" %%F IN (`ffprobe -i endNOsnd.mp4 -v error -show_entries "format=duration" -of "default=noprint_wrappers=1:nokey=1" -sexagesimal `) DO (
SET dur=%%F
)
ffmpeg -y -i chunk-001.mp4 -filter:v "%spd%" -t %dur% endsnd.mp4

ffmpeg -y -i endsnd.mp4 -sseof -1 -copyts -i endsnd.mp4 -filter_complex     " anullsrc,atrim=0:2[at];[0][at]acrossfade=d=2[a]"    -map 0:0  -map "[a]" chunkEND.mp4
del endNOsnd.mp4
del endsnd.mp4
del chunk-001.mp4
ren chunkEND.mp4 chunk-001.mp4
ffmpeg   -y -fflags +genpts  -v error -i video.ffcat -map 0 -reset_timestamps 1 -c copy   "speedup\%infile%"
del chunk-000.mp4
del chunk-001.mp4
del video.ffcat

суббота, 1 сентября 2018 г.

Kinect + Processing/VVVV + Spout + Resolume


Отметил 33 года в заводском цеху с друзьями и коллегами, все остались в восторге!
На вечеринку взял проектор, пару цветных светильников ноут и kinect.
Заранее заготовил плейлист с музыкой, видеосетов, короткометражных COUB-ов и связку софта/железа Kinect > Procesing/VVVV > Spout > Resolume > projector, Midi клаву и звуковой аппаратуры.
На предыдущих мероприятиях использовал обычную Web камеру, но с kinect как-то по веселее)
Было весело!!

Что для этого нужно:
Xbox Kinect 360
Адаптер Kinect USB
Компьютер
Resolume 5/6 (32/64 bit)
Spout 2.006a + spout controls
VVVV 32bit! + addonpack (kinect работает только в 32bit VVVV)

1. Сначала проверим связь Spout через sender/receiver
2.Если работает, проверим связь Spout - Resolume. 
3. !! Сначала запустим Spout receiver, затем spout sender, и после resolume.
4. Проверяем приём в Resolume. Если нет изображения, настраиваем spoutDX mode.
5. Если есть, закрываем spout sender, запускаем vvvv spout texture sender help. Проверяем выход VVVV Spout - Resolume.
6. Если заработало, создаём kinect spout path в VVVV. Обязатнльно проверить выходные  настройки цвета и разрешения. Разрешение должно устанавливаться именно ноде Dx9 texture (через инспектор), цвет тоже  в Dx9 texture [A8R8G8B8].
И только после этого можно перейти к тонкой настройке нод в VVVV и модуляторов в resolume по вашему вкусу.

или можно вместо всего этого использовать NImate...

пятница, 31 августа 2018 г.

FFmpeg to Resolume. Transcode video files to Resolume.


Try this code on PC run as *.cmd or *.bat file:

mkdir mp4
mkdir orig
FOR /F "tokens=*" %%G IN ('dir /b "*.mp4"') DO (ffmpeg -y -i "%%G" -f mp4 -vcodec libx264 -preset slow -crf 20 -movflags +faststart  -profile:v high -pix_fmt yuv420p -g 1 -bf 0  -flags +cgop -x264-params keyint=1:min-keyint=1   -acodec aac -ac 2 -ab 128k -ar 48000   -async 1  "mp4\%%~nG.mp4"  -c:a pcm_s16le "mp4\%%~nG.wav" & move "%%G" orig\)
pause

You should start this script file in same folder with your video files.

This code create 2 folders for encoded files and for original files, make transcoded video file and audio in "mp4" folder, and remove original file to "orig" folder.

You can use [-an] instead [-acodec aac -ac 2 -ab 128k -ar 48000   -async 1 ] , and change  ["*.mp4"] to other input format.
Also, you can change video quality by changing [-crf] value.

пятница, 1 июня 2018 г.

Тест расхождения аудио с видео в IP multicast stream. Синхронность звука и картинки.

Как проверить синхронность аудио и видео в одном потоке без инструментов?
Например, когда в трансляции губы расходятся с речью.
Да, это абсолютно реально! И просто!

Нам понадобится:
  • Любой видеоредактор, который открывает ваш записанный  TS поток в котором нужно обнаружить расхождение;
  • Тестовый файл состоящий из 1 кадра, со звуковой дорожкой, в начале и в конце которой должны быть тестовые метки (узкие пики).
Далее, остаётся воспроизвести тест файл на вещательной машине и записать результативный TS,  и сравнить его с оригинальным тест кадром.

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

На представленном изображении - тест кадр для PAL (50i) стандарта, с длительностью 40 миллисекунд, или 1/25 секунды.
Расхождение контрольных меток согласно ГОСТ Р 52722,  не должно превышать значения в 40 мс, то есть, первый всплеск должен быть в пределах тест-кадра.


пятница, 25 мая 2018 г.

Разработка и создание устройства внутренней голосовой связи - InterCom

Интерком.

Без этого девайса не обходится ни одна телестудия. Это устройство помогает координировать работу различных служб и управлять съёмочным процессом слаженно.
Не буду расписывать какие бывают и сколько стоят. При проектировании ориентировался на модель ClearCom intercom MS-704. Но нам, как обычно, нужно перекидывать деньги на ресурсы, которые невозможно создать вручную. 

Наш разрабатываемый интерком имеет:

  • 5 каналов;
  • Full-Duplex ;
  • гальваническая развязка по входам и выходам;
  • симметричные разъёмы;
  • чувствительность к удержанию клавиши;
  • Gate + Limiter;
  • активная подсветка!

Стоимость сего аппарата вышла около 10 т.р.

За основу было взято переговорное устройство для банков. (приобретено в Китае), то есть уже почти готовое устройство, из которого надо было изготовить кнопочный микшер/сплиттер для телестудии.

Первым делом разработал схему устройства. Здесь пара операционников используется как для подтяжки к среднему напряжению в месте разрыва линии (для отсутствия щелчков), так и для исключения изменения выходного сопротивления устройства, которое влияет на входной усилитель центрального устройства. Логическое переключение реализовано на D-триггере с подстройкой ко времени нажатия. Да, было несколько опытных образцов и убито некоторое количество времени при отладке и подборе реальных номиналов R-C цепочек. Но в целом всё очень даже жизнеспособно.


Процесс изготовления платы.

Для уменьшения размеров и с целью быстрого монтажа без сверловки, собирал плату на SMD элементах. Но совсем без сверления не обошлось из-за отечественного DIP D-триггера.

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


Сборка, настройка и подключение.

 

Интерком на своём рабочем месте, готов к работе!

Уже в бою и ни разу не подвёл.

четверг, 24 мая 2018 г.

Фотоотчёт строительства телекомпании РБК Омск










Централизованное управление телестудией РБК Омск

Централизованное управление телевизионной студией.

Начать стоит с того, что на этапе проектирования не было поставлено задач по централизованному управлению, и только на этапе постройки студии было найдено ПО позволившее осуществить не только задачи по выводу видео на несколько выходов/экранов, но и выполнять куда более интересные и не менее важные для телестудии функции. Это CasparCG!

Описание этой программы можно без труда найти в сети, а использовать её можно и не только на телевидении. Очень занятная софтина!
Расскажу о применении CasparCG в нашей студии.
  • Управление Playout-ом, титрованием и синхронной записью.
Основная задача - воспроизведение сюжетов и вывод изображения на экраны студии. CasparCG очень хорошо совместим с платами Blackmagic которые доступны в продаже и очень приемлемы по стоимости. 
Вывод сюжетов осуществляется через плату Blackmagic Mini monitor в формате 1080i50
Вывод видео на экраны отправляется через видео карту Nvidia GTX 960 (3 видео выхода) в формате HD ready с целью экономии ресурсов.
Всё прекрасно работает без тормозов и прочих лагов. При воспроизведении роликов на всех видео выходах, загрузка процессора (в нашем случае - i7) вырастает с 18 % до 27 %. 
Восхитительно то, что CasparCG позволяет смешивать видео, стыковать (mix - fade in/out), зациклить, применять наложение с альфа и многое, многое другое!
Например можно плавно переключить все изображения на всех экранах одновременно, или поменять местами.
Надо заметить, что штатная версия клиентской части позволяет составить расписание, с применением группирования функций, в том числе использование аудио/видео слоёв, запускаемых пользователем в нужный момент времени,
но только не по времени. Собственно это и не требуется при работе в павильоне в нашем случае.
CasparCG + Atem console


  • Интеграция с ATEM
Большим плюсом CasparCG является интеграция c протоколами видеопультов Blackmagic ATEM! Становится возможным передавать команды видеопульту о выборе источника сигнала, осуществления перехода, выбора DSK / KEY , выполнение сложных макросов. Таким образом, если грамотно составить расписание, то в штатных условиях консоль управления видеопультом становится не нужна. Всё вещание можно осуществить с помощью плэйлиста.


  • Входные потоки
CasparCG помимо видеофайлов позволяет выводить изображения, с альфа каналом в том числе, внешние источники изображения - UDP/RTP/m3u8 (не только SDI), динамическую Flash анимацию и показ HTML страниц со встроенными скриптами.
На данный момент мы используем Flash с AS3 интерактивную анимированную графику. А именно - титр ведущего или гостя студии. Отличительной возможность является заполнение полей титра прямо перед выдачей в эфир. То есть  для создания титра требуется заполнить строки имени и должности в поля титра прямо внутри клиентской части CasparCG. После - остаётся нажать клавишу запуска титра. Такой Flash титр отображается с входной и выходной анимацией, так-же есть возможность  удерживать титр необходимое время.
Таким образом изготовив всего 1 Flash анимацию титра, ею можно пользоваться бесконечное количество раз, вписывая в него различные данные. Такой ролик создаётся в Adobe Flash с применением ActionScript3. Это требует специфических знаний в программировании, НО если приложить усилия то можно получить оригинальную анимацию с "живыми" данными (API). Например, грамотно составленная анимация может отражать данные о погоде или пробках в реальном времени, на основе данных автоматически получаемых из интернета или постов из соц сетей. На текущий момент отображение анимации на базе Html5, ThreeJS происходит с дикими фризами, что пока не пригодно к воспроизведению. Но в целом замах хороший.

CasparCG титры


  • Запись входящего изображения через BlackMagic mini Recorder.
Выполнение такой задачи необходимо для записи готовой программы, последующего монтажа и постановки её в эфир.
Надо сказать что здесь есть некоторый нюанс...
CasparCG Disk consumer может писать любой канал/слой (входной или выходной) с настраиваемыми параметрами записи. Но в нашей студии из-за несовместимости настроек записи CasparCG и аппаратных видео монтажа, я решил применить немного другой вариант записи.
По скольку серверная часть CasparCG работает на базе FFmpeg, я создал программное решение -  рекордер так-же на FFmpeg, но со своими настройками и дополнительными функциями, позволяющей кодировать видео с помощью  CUDA, разделять входной поток на 3 потока с собственными настройками: с низким сжатием для монтажа, в пониженном качестве для трансляции по внутренней сети предприятия и для трансляции в соц. сети.
Тут уже плавно перейдём к синхронизации записи на всех устройствах.
Головным устройством записи у нас является машина с сервером CasparCG. Пишем через плату BlackMagic mini Recorder, вынесенную из настроек сервера CasparCG. Запись стартует в консольном режиме, пишется стабильно без ошибок.

FFmpeg record


  • Синхронизация записи
По скольку в нашей студии используется видеопульт BlackMagic ATEM 2 M/E Production 4k, а в роли накамерных рекордеров выступает BlackMagic Video Assist, было принято решение их синхронизировать на основе таймкода. 
ATEM 2 M/E Production 4k имеет на борту гнёзда входа и выхода таймкода. Если в видеопульт на гнездо входа таймкод не приходит, то он генерирует свой таймкод начиная с нуля. Если на ходу подключить во входное гнездо таймкод, то пульт будет выводить входной таймкод.  BlackMagic Video Assist стартует запись как только таймкод по SDI начинает бежать, и останавливается при остановке таймкода соответственно. Встала задача создания таймкод генератора с запуском и остановкой. В связи с этим был создан следующий трюк - на ПК с сервером CasparCG с FFmpeg записью, запускаем приложение (создал на Processing/Java) которое генерирует на звуковом выходе штатной звуковой карты балансный сигнал - таймкод с ПАУЗОЙ а именно повторяющаяся 80 битовая комбинация "00:00:00:00". Таким образом при запуске приложения таймкод в видеопульте обнуляется, и постоянно держит "00:00:00:00". Как только приложение закрывается, звук "00" пропадает и видеопульт запускает генерацию своего внутреннего таймкода с нуля, а при повторном запуске программы "00", пульт сбрасывается на 0 и останавливается. Ввиду этого я изменил CMD файл запуска записи FFmpeg. Теперь при запуске CMD файла записи:
1) Закрывается приложение с таймкодом (стартует запись на всех студийных камерах с Video Assist
2) Запускается звукозапись  на компьютере звукорежиссёра (программа звукозаписи тоже настроена на старт таймкода)
3) Запускается FFmpeg рекордер
В этот момент записывают все устройства системы павильона.
4)По окончании записи в FFmpeg, консоль FFmpeg закрывается. Останавливается запись на сервере.
5)Автоматически запускается приложение таймкод генератора "00". Останавливается запись на Video Assist


  • Синхронное управление табличками
К нашей системе синхронизации мы добавили микроконтроллер (Arduino) управления табличками ON AIR и MIC ON. Микроконтроллер включает реле таблички ON AIR в тот момент когда на разъёме входа таймкода видеопульта пропадает звуковой сигнал "00", то есть именно в тот момент когда начинается централизованная запись, и погасает когда запись заканчивается. Что в принципе логично. Управление реле табличками MIC ON подхватывается по MIDI - с выхода звукового пульта (Behringer x32). Как только отжимается любая из  кнопок "mute" на консоли звукорежиссёра из определённой группы микрофонов, то табличка MIC ON загорается.
Может и выглядит это не профессионально, но свои задачи выполняет на ура! Всё просто и удобно!
 Arduino box и таблички
  • Управление камерами
Немного о связке оборудования ATEM 2 M/E Production 4k/Video Assist/Blackmagic micro studio camera 4k
Такая конфигурация была собрана с целью оптимизации работы оператора, упрощения работы с записывающими устройствами. Все камеры полностью управляются с видеоконсоли режиссёра через видеопульт. Команды о настройке с консоли поступают на видеопульт и раздаются по любому из гнёзд выхода программы. После, через дистрибьютор разводтся на каждую камеру, у каждой камеры естественно свой номер, по которому она применяет настройки.
К плюсам можно отнести Tally light который меняет цвет в зависимости от того какая камера в программе или в подготовке, и наличие в накамерном канале двусторонней связи с оператором, с использованием гарнитуры от сотового телефона на стороне камеры.
Но и в этих плюсах есть небольшие минусы. Использование звуковой связи с оператором через видеопульт требует наличия в головном устройстве связи Intercom/Clearcom/etc, цепи подавления обратной связи SideChain.
Огонёк Tally light на камере маловат,и возможности подключиться к нему нет, ещё и бленда объектива иногда перекрывает его полностью. Поэтому мы изготовили и установили световоды из оргстекла на камеры, теперь Tally light видно прекрасно!

Камеры с световодами

  • Качество картинки.
Теперь о грустном. 
Сложности с которыми пришлось столкнуться при эксплуатации и настройке оборудования Blackmagic.
Камеры BlackMagic micro studio 4k

1) Шум на изображении с камер. Особенно заметен в однотонных и тёмных местах. В камере есть порог регулировки Gain от 0 до +12. В наших условиях, с объективами olympus f-2.0 при работе в павильоне с диафрагмой f 3.5 мы можем установить усиление максимум +6 dB,  все значения выше приводят к ещё большему количеству шума на изображении, а при диафрагме 2 и усилении 0 dB картинка всё-же темновата. В новой прошивке камер градация усиления расширена, только после прошивки мы всё равно используем вторую ступень усиления +4 dB для получения той-же картинки.
Хочу добавить, что количество шумов на изображении сильно влияет на объём записи данных.
В нашей компании для монтажа необходим битрэйт не превышающий 50 Mbit/s для 1080i50. Это связано как и со скоростью монтажа так и со скоростью доставки по сети.
Другими словами - чем больше шума на входном видео тем больше битрэйт, и когда входной битрэйт записи будет превышать лимит в 50 Mbit/s то происходят потери изображения в местах с шумом и не только, отсюда и квадраты на картинке и переполнение буфера FFmpeg и т.п. Короче говоря - шумов много, и из-за них возникают проблемы.
Шум на сером.

2) Чрезмерная чувствительность к статике. Ситуация следующая: оператор в свитере подходит к камере для корректировки плана, и как только он касается рукой штатива с камерой, настройки камеры сбрасываются в ноль. Чтобы восстановить настройки камеры, её необходимо выключить и включить. Иногда камера не подхватывает настройки по SDI и приходится загружать настройки с консоли ATEM. Во время записи это очень неприятно и даже недопустимо.
В нашей студии всё заземлено по максимуму. Надо заметить что ближе к середине весны, проблема отключения камер стала проявляться реже. Теоретически это связано со сменой гардероба сотрудников телекомпании. Для избежания таких случаев нам пришлось заставить операторов терпеть боль каждый раз разряжаясь, прикасаясь к заземлённым воллбоксам и шинам, при переходе от одной камере к другой. Это помогло решить проблему со сбросом камер. Для особо боязливых разряжаться мы держим в тех отделе пачку резисторов, для ограничения тока разряда...

  • Телесуфлёр.
В роли программы телесуфлёра мы решили использовать бесплатный аддон к Chromе browser с названием TellyPrompt. Работает хорошо, но только с мониторами одинакового разрешения. Есть режим работы Dual. Здесь есть некоторая централизованность. Небольшая фишка нашей студии - монитор установленный в стол под тонированное стекло для ведущего. Это сделано с целью не устанавливать компьютеры на столешницу и не загромождать стол. У ведущего установлен удалённый доступ к компьютеру с ПО телесуфлёра и есть возможность править и запускать текст удалённо, педали так-же работают по удалёнке и управляют скоростью текста. По мимо чтения текста с удалённой машины этом же мониторе в столе ведущий может получать актуальную информацию из интернета. И само собой, текст на экранах телесуфлёров на камерах отображаться через стекло зеркально.

Монитор в столе и суфлёр с АСБ

  • Управление светом
Тут тоже интересный момент централизации. Светом управляет тот же человек, который переключает камеры и ставит сюжеты (режиссёр или ассистент). Делается это всё абсолютно незаметно, через то самое расписание в CasparCG. CasparCG может отправлять OSC сообщения в сеть на компьютер управляющий светом в павильоне. Мы используем связку: CasparCG OSC > ALTOSC > Chromateq> USB DMX box. ALTOSC выступает в роли моста между OSC и MIDI, так как наш софт Chromateq может принимать только MIDI. 
То есть режиссёр прямо во время съёмочного процесса может легко запустить световую сцену прямо из своего расписания. Это очень удобно!

Фото из АСБ Chromateq - CasparCG

Ещё в CasparCG есть поддержка GPIO, и сам GPIO девайс легко собирается на базе Arduino.

convert colors to midi note for midi controllers

I recently (2 years ago) designed and built a simple MIDI controller for my intercom system using an Arduino Leonardo, USB hub, sound card, ...