Оптимізуйте своє виробництво за допомогою рівня автоматизації mimoLive
Ви зараз переглядаєте вміст заповнювача з YouTube. Щоб отримати доступ до актуального контенту, натисніть кнопку нижче. Зверніть увагу, що при цьому ви передаєте дані стороннім провайдерам.
Більше інформаціїРівень автоматизації mimoLive спочатку був розроблений як перевірка концепції, але з тих пір виявився неймовірно корисним інструментом для користувачів. За допомогою цього рівня можна автоматизувати вмикання та вимикання шарів у певній послідовності або у визначений час, передачу інформації з одного шару на інший, запуск та зупинку Призначення виводу, а також багато чого іншого!
Він може бути особливо корисним для створення складних продакшнів з кількома шарами та входами, оскільки усуває необхідність ручного перемикання та синхронізації. Завдяки цьому шару користувачі можуть зосередитися на створенні цікавого контенту, поки програма керує хронометражем і послідовністю їхнього виробництва. У версії 2 цього шару ми розширили команди, щоб вивести автоматизацію в mimoLive на абсолютно новий рівень.
Приклад: Рівень автоматизації

Скрипти автоматизації в mimoLive не виконуються в режимі реального часу
Зверніть увагу, що час роботи скриптів автоматизації в mimoLive може бути неточним через асинхронну природу HTTP-запитів, що викликаються механізмом рендерингу відео. Ці скрипти покладаються на HTTP-запити до API, а тривалість цих запитів не може бути точно визначена, що призводить до потенційних розбіжностей у часі. Будь ласка, майте це на увазі, коли використовуєте скрипти автоматизації у своєму робочому процесі.
Обов'язкова умова
Для того, щоб цей шар працював, вам потрібно увімкнути HTTP Сервер у mimoLive, щоб увімкнути пульт дистанційного керування API. Перейдіть до mimoLive -> Уподобання -> Пульти дистанційного керування: Позначте опцію "Дозволити доступ до віддаленого керування". (Наразі рівень автоматизації у mimoLive працює лише без пароля)

Налаштування рівня автоматизації
Існує два варіанти поведінки шару після увімкнення наживо:
Варіант | Поводиться |
---|---|
Автоматичне вимкнення шару | Для цієї опції доступний лише один скрипт. Після того, як цей сценарій буде оброблено, шар буде вимкнено. Ця опція може бути використана, якщо послідовність має бути виконана один раз. |
Вимкнення шару вручну (наприклад, оператором) | У цьому випадку доступні три сценарії. Коли шар увімкнено наживо, виконується сценарій "On Live". Після цього в нескінченному циклі виконується сценарій "While Live". Коли шар вимикається, виконується сценарій "Turned Off". Якщо вам не потрібен певний етап, ви можете залишити відповідний скрипт порожнім. |
Коментарі до вихідного коду
Щоб допомогти вам запам'ятати функцію вашого скрипта, ми рекомендуємо використовувати коментарі у вашому скрипті:
// First sleep for 5 seconds...
sleep(5)
// ...then start the stopwatch layer:
layerOn("7C4665C4-0E17-4F63-BCFF-B59D68D75956")
Коментарі повинні бути в окремому рядку.
Команди сценаріїв
Мова сценаріїв є пропрієтарною і включає кілька команд. Ці команди перераховані у шпаргалці в області попереднього перегляду шарів праворуч. Оскільки список може бути замалим для читання, ви можете розгорнути попередній перегляд за допомогою кнопки, розташованої вище і праворуч від області попереднього перегляду.
layerOn()
Ця команда дозволяє увімкнути шар або варіант шару.
// switching on a layer by its id
layerOn("4E38A868-DCB5-4E9C-AC75-231764229BFA")
// switching on a layer variant by its id
layerOn("4E38A868-DCB5-4E9C-AC75-231764229BFA/variants/5F18C566-F59F-45B4-8D40-27EF289D47B1")
// switching on a layer by its long API Endpoint URL
layerOn("/api/v1/documents/863743527/layers/4E38A868-DCB5-4E9C-AC75-231764229BFA")
// switching on a layer with a defined variable
setVariable($myLayerID, "4E38A868-DCB5-4E9C-AC75-231764229BFA")
layerOn($myLayerID)
layerOff()<API Ідентифікатор шару як рядковий вираз>> Ідентифікатор шару як рядковий вираз)
Ця команда дозволяє вимкнути шар або варіант шару.
// switching off a layer by its id
layerOff("4E38A868-DCB5-4E9C-AC75-231764229BFA")
// switching off a layer variant by its id
layerOff("4E38A868-DCB5-4E9C-AC75-231764229BFA/variants/5F18C566-F59F-45B4-8D40-27EF289D47B1")
// switching off a layer by its long API Endpoint URL
layerOff("/api/v1/documents/863743527/layers/4E38A868-DCB5-4E9C-AC75-231764229BFA")
// switching off a layer with a defined variable
setVariable($myLayerID, "4E38A868-DCB5-4E9C-AC75-231764229BFA")
layerOff($myLayerID)
layerSetRecall(<Ідентифікатор рівня API як рядковий вираз>)
За допомогою цієї команди можна викликати відкликання для певного Набору шарів.
// recall a Layer Set by its id
layerSetRecall("E6950B7A-7457-44C5-81F7-972D9B04DBC3")
// recall a Layer Set by its long API Endpoint URL
layerSetRecall("/api/v1/documents/863743527/layer-sets/E6950B7A-7457-44C5-81F7-972D9B04DBC3")
// recall a Layer Set with a defined variable
setVariable($myLayerSetID, "E6950B7A-7457-44C5-81F7-972D9B04DBC3")
layerSetRecall($myLayerSetID)
outputOn(<API виводить ідентифікатор пункту призначення як рядковий вираз>)
Використовуйте цю команду, щоб увімкнути пункт призначення виводу.
// запустити Output Destination за його id
outputOn("1953186E-4176-4849-A8ED-5B47EE1627BD")
// запустити пункт призначення виводу за довгою URL-адресою кінцевої точки API
outputOn("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// запустити Destination of Output з визначеною змінною
.
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOn($myOutputDestinationtID)
outputOff(<API виводить ідентифікатор пункту призначення як рядковий вираз>)
Використовуйте цю команду, щоб вимкнути пункт призначення виводу.
// зупинити пункт призначення виводу за його ідентифікатором
outputOff("1953186E-4176-4849-A8ED-5B47EE1627BD")
// зупинити пункт призначення виводу за довгою URL-адресою кінцевої точки API
outputOff("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// зупинити пункт призначення виводу з визначеною змінною
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOff($myOutputDestinationtID)
getLayerData()1TP11Ім'я змінної результату, , )
Ця команда поєднує кілька команд в одному кроці скрипта: Вона зчитує інформацію про шар з HTTP-сервера і зберігає певне поле даних з JSON-відповіді у змінну. Вам потрібен точний шлях до значення, яке ви хочете прочитати. Для вхідних параметрів шарів цей шлях зазвичай починається з "data.attributes.input-values".
// set up useful variables
setVariable($myScoreboardLayerID, "36FA76B4-11FE-4879-8DE1-307222512712")
setVariable($pathToHomeScore, "data.attributes.input-values.tvGroup_Control__Score_Home")
// read the score for the home team from the Basketball layer
getLayerData($currentHomeScore, $myScoreboardLayerID, $pathToHomeScore)
// The variable $currentHomeScore now contains the Home Score input value of the Basketball Score layer
getObjectIDByName(1TP11Ім'я змінної результату, , )
Ця команда отримує кінцеву точку API для конкретного об'єкта mimoLive за його іменем відображення. Зауважте, що ім'я відображення може бути легко змінено оператором mimoLive у користувацькому інтерфейсі mimoLive, що, у свою чергу, призведе до зупинки сценарію автоматизації, якщо він більше не зможе знайти певний об'єкт. З іншого боку, ця команда може бути використана для програмного пошуку кінцевих точок API без необхідності жорсткого кодування кінцевих точок API у скрипті.
Допустимими варіантами для є: "source", "layer", "layer-set", "output-destination"
// Get the API Endpoint for the Basketball Score layer
getObjectIDByName($myBasketballScoreLayerID, "layer", "My Basketball Score Keeper")
// switch this layer on
layerOn($myBasketballScoreLayerID)

спати.<Секунди> як число)
Команда sleep() призупинить виконання скрипта на заданий інтервал часу, виражений у секундах.
// pause the script execution for 12 seconds
sleep(12)
// pause the script execution for 35.6 seconds
sleep(35.6)
// pause the script execution for a time interval specified by a variable
setVariable($mySleepInterval, 17)
sleep($mySleepInterval)
sleepUntil(<Час як рядковий вираз>)
Команда sleepUntil() дозволяє скрипту призупинити роботу до досягнення вказаного часу. Якщо час вже минув, скрипт чекає до наступного дня. Формат часу - ГГ:ММ або ГГ:ММ:СС у 24-годинному періоді.
// sleep until 5:15pm
sleepUntil("17:15:00")
// sleep until 9:12am
sleepUntil("9:12")
// sleep until a time specified by a variable
setVariable($myWakeUpTime, "9:41")
sleepUntil($myWakeUpTime)
sleepOnTheMinute()
Ця команда призупиняє виконання скрипта до досягнення наступної "похвилинної" частки години.
// go on every 20 minutes: on the hour, 20 and 40 minutes past the hour:
sleepOnTheMinute(20)
// go on "on the hour"
sleepOnTheMinute(60)
// go on every 10 minutes past the hour (specified by a variable)
setVariable($myWakeUpMinute, 10)
sleepOnTheMinute($myWakeUpMinute)
setVariable()1TP11Ім'я змінної, <значення>)
Щоб визначити локальну змінну, використовуйте команду setVariable
. Вам потрібно вказати ім'я змінної (починаючи з $
) і значення, яке повинна зберігати ця змінна. Значення може бути числом, текстом (взятим у лапки) або логічними значеннями true
і false
.
setVariable($myText, "This is a text")
setVariable($myNumber, 15.73)
setVariable($myBoolValue, false)
setGlobal(1TP11Ім'я змінної, <значення>)
Глобальну змінну можна використовувати як у поточному шарі, так і в будь-якому шарі автоматизації над ним. Ця функція особливо корисна для спільного використання однієї і тієї ж інформації в декількох шарах автоматизації, наприклад, кінцевих точок API певного шару. Для значення змінної застосовуються ті ж правила, що і для команди setVariable
.
Зверніть увагу, що глобальні змінні доступні для інших шарів автоматизації, доки активний початковий шар. Це дає змогу перемикати глобальні змінні, активувавши інший шар з окремими визначеннями глобальних змінних. Найкращою практикою у цьому випадку є встановлення опції "Вимкнути шар" шару автоматизації на "Вручну" і визначення глобальних змінних у сценарії "Ввімкнути наживо".
setGlobal($myGlobalText, "This is a text")
setGlobal($myGlobalNumber, 15.73)
setGlobal($myGlobalBoolValue, false)
concat($resultVariableName, )
Ця команда скрипта об'єднує рядки разом і зберігає результат у вигляді рядка.
// define some variables
setVariable($myVariableA, "This is")
setVariable($myVariableB, "text.")
// concatenate those variables and store the result into a new one
concat($myResultVariable, $myVariableA + " a " + $myVariableB)
// The variable $myResultVariable contains "This is a text.".
math(1TP11Ім'яЗмінноїРезультату, )
Ця команда виконує прості математичні обчислення, зокрема додавання (+), віднімання (-), множення (*) і ділення (/). Зверніть увагу, що обчислення виконуються в тому порядку, в якому вони з'являються, і НЕ дотримуються правила PEMDAS/BODMAS.
// define some variables
setVariable($myVariableA, 3)
setVariable($myVariableB, 5)
// perform the calculation
math($myResult, $myVariableA + 2 * $myVariableB)
// The result in $myResult is 25 (!) and not 13
if(, , ) [else] endif
Цей оператор if
порівнює два числові вирази за допомогою вказаного компаратора. Якщо результат порівняння істинний, то виконується наступна команда (команди). В іншому випадку наступні команди пропускаються, доки не буде досягнуто else
або endif
.
Достовірними компараторами є:
“==” | дорівнює |
“!=” | не рівні |
">" | більше, ніж |
"<" | менше, ніж |
">=" | більше або дорівнює |
"<=" | менше або більше, ніж |
// define a variable
setVariable($myVariable, 3)
// test if the variable is bigger than 10
if($myVariable, ">", 10)
setVariable($text, "is bigger than 10")
else
setVariable($text, "is less or equal 10")
endif
// The result in $text is "is less or equal 10"
ifString(, , ) [else] endif
Цей оператор ifString
порівнює два рядкові вирази за допомогою вказаного компаратора. Порівняння ґрунтується на ASCII-коді кожної літери у рядках. Якщо порівняння істинне, то виконуються наступні команди. В іншому випадку наступні команди пропускаються до тих пір, поки не буде досягнуто else
або endif
.
Допустимі компаратори див. у команді if.
// define a variable
setVariable($myVariable, "mimoLive")
// test if the variable is "mimoLive"
if($myVariable, "==", "mimoLive")
setVariable($text, "yes")
else
setVariable($text, "no")
endif
// The result in $text is "yes"
ifLayerIsOn()<API Ідентифікатор шару як рядковий вираз>> Ідентифікатор шару як рядковий вираз) - ifLayerIsOff(<API Ідентифікатор шару як рядковий вираз>> Ідентифікатор шару як рядковий вираз) [else] endif
Ці оператори якщо
перевіряють, чи є певний шар на даний момент живим чи ні. Якщо вказана умова виконується (шар увімкнений або вимкнений), то обробляються наступні команди. В іншому випадку, наступні команди пропускаються до тих пір, поки не буде досягнуто else
або endif
.
setVariable($myLayerA, "D6A326CA-72E6-45E5-836D-9795F8F534F4")
setVariable($myLayerB, "8C58DEA7-CCBE-44CB-A60F-97C5BD456C68")
ifLayerIsOn($myLayerA)
// the layer is live, switch it off
layerOff($myLayerA)
else
// the layer is currently off, switch it on
layerOn($myLayerA)
endif
ifLayerIsOff($myLayerB)
// the layer is currently off, switch it on
layerOn($myLayerB)
endif
ifLayerSetIsActive(<API Ідентифікатор шару як рядковий вираз>> Ідентифікатор шару як рядковий вираз) - ifLayerSetIsInactive(<API Ідентифікатор шару як рядковий вираз>> Ідентифікатор шару як рядковий вираз) [else] endif
Ці оператори if
перевіряють, чи певний Набір шарів наразі є живим чи ні. Якщо так, то обробляються наступні команди. В іншому випадку наступні команди пропускаються, поки не буде досягнуто else
або endif
.
setVariable($myLayerSetA, "CEF07AFA-B552-40F8-821C-CF424EB93500")
setVariable($myLayerSetB, "E4B15B8B-EE34-4CCE-BDE7-58120A65E83A")
setVariable($myLayer, "8C58DEA7-CCBE-44CB-A60F-97C5BD456C68")
ifLayerSetIsActive($myLayerSetA)
// the layer set A is active, switch layer on
layerOn($myLayer)
else
// the layer set A is currently inactive, switch the layer off
layerOff($myLayer)
endif
ifLayerSetIsInactive($myLayerSetB)
// the layer set B is currently inactive, switch the layer off
layerOn($myLayer)
endif
ifLayerData(, , , ) [else] endif
Ця комплексна команда дозволяє протестувати будь-який параметр шару, який HTTP API надає. Вам потрібно вказати шар за його API ID, ключовий шлях у JSON-даних, що повертаються HTTP API, компаратор (у вигляді рядка в лапках, наприклад, "=="
), і значення.
Допустимими значеннями компаратора є
“==” | дорівнює |
“!=” | не рівні |
">" | більше, ніж |
"<" | менше, ніж |
">=" | більше або дорівнює |
"<=" | менше або більше, ніж |
// Example: Testing if the audio volume is turned up on a layer
setVariable($myLayerA, "D6A326CA-72E6-45E5-836D-9795F8F534F4")
setVariable($myLayerB, "8C58DEA7-CCBE-44CB-A60F-97C5BD456C68")
ifLayerData($myLayerA,"data.attributes.volume",">",0.5)
// The audio volume is bigger than 0.5 so turn layer B on
layerOn($myLayerB)
else
// The volume is lower than 0.5, lets turn layer B off
layerOff($myLayerB)
endif
loop([]) [break] endloop
Команда loop
дозволяє виконати код декілька разів. Якщо не вказати кількість ітерацій, цикл буде виконуватися нескінченно. Команда break
дозволяє вийти з циклу в будь-який момент. endloop
необхідна для позначення кінця блоку команд, який потрібно зациклити.
setVariable($myLayerA, "D6A326CA-72E6-45E5-836D-9795F8F534F4")
// blink layer A 4 times
loop(4)
layerOn(setVariable(myLayerA)
sleep(1)
layerOff(setVariable(myLayerA)
sleep(1)
endloop
// wait for volume of layer A will be bigger than 0.5
loop()
ifLayerData($myLayerA,"data.attributes.volume",">",0.5)
// The audio volume is bigger than 0.5 exit the loop now
break
endif
sleep(1)
endloop
httpRequest()
У "The httpRequest()
запускає команду за вказаною URL-адресою. Це забезпечує велику гнучкість у використанні цієї команди скрипта. У рядку mimoLive
він навіть може запускати дії в інших документах або віддалених скриптах. Докладні відомості про mimoLive
Команди HTTP API, будь ласка, зверніться до розділу HTTP API документацію, щоб вивчити всі можливі виклики API.
// увімкнути шар
httpRequest("http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B/setLive")
httpRequestJSON($resultVariableName, )
Ця команда зчитує відповідь HTTP-виклику у форматі JSON і зберігає дані у вказаній змінній результату. Після цього ви можете отримати доступ до даних за допомогою команди getJSONData()
.
getJSONData($resultVariableName, $jsonDataVariable, )
Ця команда отримує конкретне значення даних зі структури JSON, що зберігається у змінній. Вам потрібно вказати змінну, що містить дані JSON ($jsonDataVariable
), шлях до даних у структурі JSON () і змінну, в якій слід зберегти результат (
$resultVariableName
). Це дозволяє точно витягувати дані для подальшої обробки або використання у вашому скрипті.
// отримати всі дані шару
httpRequestJSON($myLayerData, "http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B")
// отримати значення шкали гучності
getJSONData($volumenDial, $myLayerData, "data.attributes.volume")// Тепер змінна $volumenDial буде мати значення від 0 до 1.
> Точка зупинки налагоджувача
Якщо увімкнено налагоджувач скриптів і встановлено режим налагодження "Безперервно", виконання скрипта призупиниться на цьому маркері і чекатиме, доки оператор mimoLive не натисне кнопку "Наступний крок". Будь ласка, зверніться до розділу "Кращі практики - Налагодження скриптів" для отримання додаткової інформації про можливості налагодження.
Типи даних
API Кінцеві точки
Параметр має бути кінцевою точкою API для шару, варіанту шару, набору шарів, джерела або призначення виводу. Ви можете отримати ці кінцеві точки API, клацнувши правою кнопкою миші на об'єкті у документі mimoLive. Має з'явитися контекстне меню з пунктом "Копіювати кінцеву точку API до буфера обміну".
Ця дія скопіює кінцеву точку API для цього об'єкта до буфера обміну. Якщо ви вставите його в інше місце, він виглядатиме приблизно так:
/api/v1/documents/863743527/layers/D6A326CA-72E6-45E5-836D-9795F8F534F4
/api/v1/documents/863743527/layers/68F63C8F-2376-4CA3-9764-CC17CBFC5F8D/variants/3FF72CC3-AF80-4252-A879-F8AFD68DB922
/api/v1/documents/863743527/layer-sets/E6950B7A-7457-44C5-81F7-972D9B04DBC3
Для команд, пов'язаних з шарами, ви можете зменшити API Кінцеві точки до важливої частини, тільки видаливши префікс "/api/v1/documents//layers/" . Це зробить ваш скрипт коротшим, як показано тут:
// switching on a layer:
layerOn("/api/v1/documents/863743527/layers/D6A326CA-72E6-45E5-836D-9795F8F534F4")
// OR
layerOn("D6A326CA-72E6-45E5-836D-9795F8F534F4")
// switching on a variant:
layerOn("/api/v1/documents/863743527/layers/68F63C8F-2376-4CA3-9764-CC17CBFC5F8D/variants/3FF72CC3-AF80-4252-A879-F8AFD68DB922")
// OR
layerOn("68F63C8F-2376-4CA3-9764-CC17CBFC5F8D/variants/3FF72CC3-AF80-4252-A879-F8AFD68DB922")
Найкращі практики
Кінцеві точки API
Як отримати кінцеві точки API
- Клацнувши правою кнопкою миші на шарі та вибравши "Копіювати кінцеву точку API"
- за допомогою команди getAPIEndpoint() (див. документацію)
Звернення до кінцевих точок API
Ви можете використовувати повну кінцеву точку API або видалити частину "/api/v1/documents//", щоб переконатися, що ваш скрипт буде працювати і при копіюванні в інший документ. Однак ідентифікатор документа важливий, якщо ви хочете звернутися до точки API в іншому документі mimoLive.
Налагодження скриптів
До шару автоматизації вбудовано налагоджувач скриптів. Ви можете перевести шар у режим налагодження, встановивши параметр шару "Налагодження" увімкненим.
НЕВІДОМО.
Ідеї для сценаріїв
Запускайте рекламу кожні 10 хвилин
У поєднанні з "PIP Вікно" шару "Джерело медіафайлів", що містить кілька коротких рекламних відеороликів, ви можете відтворювати один рекламний ролик кожні 10 хвилин. Переконайтеся, що ви зняли позначку з опції "Безперервний" у джерелі "Медіаплеєр". Таким чином, щоразу, коли ви натискатимете кнопку PIP Коли вікно буде налаштоване на відтворення, воно відтворить одне оголошення з джерела зі списку відтворення і вимкнеться. Через 10 хвилин буде відтворено наступне оголошення.
Запустіть стингер перед тим, як перейти на певний шар
Вам потрібно підготувати коротке стингер-відео, яке буде мати перехід до тих пір, поки воно не покриє весь екран (наприклад, через 1 секунду). Через 1 секунду ви перемикаєте в реальному часі той шар, який хочете розкрити. Розмістіть цей шар під шаром, на якому відтворюється відео-стингер. Тепер, коли відео-стингер покриває весь екран, перемикання шару, що знаходиться нижче, не буде видно. Відео-стингер має продовжувати показувати шар, що знаходиться нижче. Будь ласка, переконайтеся, що стингер-відео рендериться у відеокодеку ProRes4444, щоб воно містило необхідну для переходу прозорість.
Створіть складний вступ до шоу
Оскільки ви можете вмикати і вимикати шари один за одним протягом тривалого періоду часу, ви можете мати кілька шарів тексту або анотацій, шар розсипу, що показує графіку, або навіть нижню третину екрана, яка заповнює екран, щоб створити власну анімовану заставку для шоу. Проявіть творчість!
Запустіть пульт дистанційного керування HTTP URL дотиком до поверхні пульта дистанційного керування
Якщо вам потрібно запустити HTTP Запит за допомогою кнопки на вашому Поверхня для дистанційного керування ви можете додати шар автоматизації до стеку шарів і встановити опцію "Вимкнути шар" для цього шару на "Автоматично". Тепер ви можете ввести одну команду httpRequest() у поле сценарію "On Live". На поверхні пульта дистанційного керування додайте до макета кнопку Live цього шару. Щойно ви натиснете цю кнопку на поверхні пульта дистанційного керування, на екрані з'явиться кнопка HTTP запит буде виконано.