AutoRecorder v1.4 (обновление)

Введение

В одной из прошлых статей, я описывал разработку программы-оболочки для FFMPEG и автоматизации нарезки записи. Шло время, и программа успешно пользовалась, постепенно выяснялись дополнительные хотелки. И так дождались! обновление!

Глава 1. Аппаратная

Появилась потребность связать нашу программу с другим пультом. Да не с простым, а звуковым. Не буду описывать на кой черт это потребовалось, скажу по существу: у другого пульта оказалась связь с внешним миром только хардварная… т.е. GPI. Ну меня такими словесами не испугать, так что здравствуй Arduino мля! Опять! Зарекалась свинья… Ну да ладно. Взялся за грудь – говори что ни будь. Но пилить код для ардуины особо не хотелось, и тогда вспомнил я про старый добрый firmata. Я мельком по него упоминал в статье Простой Tally Lights для vMix и этот протокол в общем то подходит как нельзя лучше. Но для начала нужно было собрать гальваническую развязку для GPI. Простой оптрон (а точнее 12, на вырост) решил проблему. Дешево и сердито, делаем двухсторонюю печатную плату под разъем DB25 (в исходниках положу):

гальваническая развязка GPIO

Далее подключаем нашу плату к ардуине согласно схеме:

Схема GPIO Arduino

и заливаем в ардуинку скетч из примеров standartFirmata. Теперь мы можем использовать до 6 GPI и 6 GPO каналов. Иными словами: можем назначить те или иные каналы GPI на управление записью или срезами, а так же назначить GPO для обратной связи (индикация или передача управления другому устройству). Распиновка разъема DB25:

GPIO DB25

Ну раз мы начали рассказывать про firmata, то нужно закончить его описание и программно. Особо сложного ничего нет: нашли библиотечку в интернете (там их полно), засунули в наш проект и вот вам радость… Но для меня была одна сложность, как для недопрограммиста. Дело в том, что в этот раз у меня на руках оказалась Arduino Leonardo. И, казалось бы, в чем разница? Есть скетч standartFirmata, есть библиотека на C#, запускай и всё. Но разница между той же nano и Leonardo в том, что у последней USB аппаратный, в контроллере. И обращаться к её программному COM порту нужно чуть-чуть по-другому, нежели в самой простой CH340 (те отдельные микросхемы USB-COM, что ставят на китайские Nano).

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

мем

Глава 2. Программная

И так, давайте пройдёмся по главному – по изменениям в функционале. Самое главное изменение – изменен алгоритм подсчета длительности. Внимание на переменную next:

Вместо функции GetVideoDuration и отдельного вызываемого ей процесса ffprobe, просто вычитаем из текущего времени, время запуска связанного процесса и добавляем к нему дельту. Подсчет работает в разы быстрее и точнее.

Не много дополнительных свистелок:

ar1.4_settings

  • Добавлена настройка выхода NDI. Для тех, кто не знает, что это – бесплатный программный стандарт, разработанный компанией NewTek, позволяющий передавать видео по сети с минимальными задержками. В общем очень крутая штука (не менее крута, чем ffmpeg). Иными словами, наша программа теперь может не только писать видео, но и плеваться им в сеть.
  • Добавлена автоматизация удаления срезов. При закрытии программы удаляются срезы старше указанных дней.
  • Все настройки управления перенесены в отдельую вкладку.

ar1.4_settings

Сюда же добавили возможность назначить глобальную горячую клавишу для запуска/остановки записи и управление протоколом Firmata. И всё что вам не нужно,  теперь можно деактивировать.

Заключение

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

ФАЙЛЫ ПРОЕКТА

Добавить комментарий

Ваш адрес электронной почты не будет опубликован.Обязательные поля помечены *

* Все комментарии проходят предмодерацию.