Как мне разобрать ответ от Apple Terminal или Applescript? - PullRequest
0 голосов
/ 20 февраля 2019

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

Вот моя ситуация.У меня есть две роботизированные PTZ-камеры, которые управляются через CGI по IP-командам из программного обеспечения (Rocosoft PTZ Joy Sutd, поддерживающего предустановленные положения. В зависимости от того, где люди стоят на сцене, я могу легко сохранять и вызывать их позиции. У меня есть BlackmagicРазработайте видеопереключатель ATEM, который принимает эти два входа камеры и настраивается на вывод нашей программы.

Вот проблема: можно случайно щелкнуть другой пресет положения во время в реальном времени на выходе программы ATEM, который является ПЛОХОЙ.в движении на американских горках, когда PTZ перемещается из одной позиции в другую.

Вот то, что я думаю, решение состоит в следующем: мне нужно контролировать состояние переключателя ATEM и создавать appleScript или что-то еще, чтобы сначала проверить состояниепереключателя ATEM, посмотрите, активен ли PTZ-кулачок на выходе программы, и ЗАБЛОКИРУЙТЕ команды программного обеспечения для предустановок, если эта камера активна.

Я могу получить это состояние ATEM с помощью инструмента командной строки в терминаленазывается OSCchief (опротокол управления звуком пера), который будет прослушивать ATEM и сообщать мне состояние всех значений программы / предварительного просмотра.Это программное обеспечение также будет отправлять команды OSC.

Не уверен, что это полезно, но этот инструмент командной строки OSCchief, я думаю, должен был основываться на оригинальном протоколе Blackmagic ATEM, UDP, который был обратно разработан Skaarhoj.и это задокументировано на их странице github.

https://www.skaarhoj.com/fileadmin/BMDPROTOCOL.html

Его UDP-пакеты, которые были подтверждены с помощью wireshark.

Так как я могу сделать скрипт, который принимает вводOSCchief (или оригинальный протокол UDP, если так будет лучше) и анализируйте этот текст или ищите определенный символ.Вот как выглядит OSCchief

Последний вход в систему: среда, 20 февраля 09:16:51 на ttys000 Video-Booth-Mac-Pro: ~ macpro2 $ oscchief listen 4444 Начать прослушивание порта 4444 для входящих сообщений OSC...

/atem/program/0 f 0.000000
/atem/program/1 f 0.000000
/atem/program/2 f 0.000000
/atem/program/3 f 0.000000
/atem/program/4 f 1.000000
/atem/program/5 f 0.000000
/atem/program/6 f 0.000000
/atem/program/7 f 0.000000
/atem/program/8 f 0.000000
/atem/program/9 f 0.000000
/atem/program/10 f 0.000000
/atem/program/11 f 0.000000
/atem/program/12 f 0.000000

число после буквы f - это то, что изменяется.1.00 ... означает, что выход активен, 0 неактивен.

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

спасибо!

-Зак

1 Ответ

0 голосов
/ 26 февраля 2019

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

Постоянно следите за выводом из oscchief и создайте файл с именем /tmp/RECORDING, если запись выполняется, и удалите этот файл, если это не так.Затем другие процессы, такие как ваш CGI, могут затем просто проверить, присутствует ли файл или нет, чтобы узнать, активна ли запись, и должна ли она подавлять команды.

#!/bin/bash
################################################################################
# monitor
# Mark Setchell
#
# Continuously monitor the output of the "oscchief" program to determine if a
# recording is in progress. If it is, create a sentinel file in /tmp that other
# processes (e.g. CGIs) can check in order to find recording status. Delete the
# file if recording is not taking place, or when exiting so that programs will
# not be prevented from running.
################################################################################

SentinelFile="/tmp/RECORDING"

# Add the directory containing "oscchief" below
PATH="$PATH":/path/to/directory/containing/oscchief

# Called when program is terminated
cleanup(){
    echo "Cleaning up..."
    rm "$SentinelFile" 2> /dev/null
}

trap 'cleanup' SIGINT SIGABRT SIGQUIT SIGTERM

# Continuously tail the output of "oscchief"
oscchief | while read -r line ; do
    # If line contains "1.00" recording is active
    if [[ $line == *"1.00"* ]]; then
        touch "$SentinelFile"
    else
        rm "$SentinelFile" 2> /dev/null
    fi
done

Чтобы проверить это, сохранитеприведенный выше скрипт в вашем каталоге HOME с именем monitor и сделать его исполняемым, запустив Terminal и выполнив:

chmod +x monitor

Затем вы можете запустить его с помощью:

./monitor

Затем вы можете посмотреть/tmp, запустив Finder и нажав SHIFT G и напечатав /tmp в открывшемся окне.

В обычном случае использования в macOS вы запускаете этот скрипт через launchctl, чтобы он всегда работал - в StackOverflow есть множество учебных пособий и примеров.

Затем вы меняете CGIПрограмма под названием cgi-bin/aw_ptz (источник которой я не вижу), так что она меняет свое поведение в зависимости от наличия или отсутствия сторожевого файла.


Другие возможности, возникающие при рассмотрении некоторых аспектов вашегоЦюйestion:

  • поместите оболочку вокруг вашего CGI-скрипта для перехвата вызовов,
  • сделайте символическую ссылку на ваш CGI-скрипт на оригинальную или фиктивную версию, в зависимости от того, выполняется запись,
  • создайте ssh туннель для вашего CGI-сценария, который вы останавливаете во время записи,
  • сохраняя состояние записи в Redis, а не в файловой системе.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...