Автоматизация внешних приложений

Здесь обсуждаются любые продукты компании СофтЛаб-НСК для телевизионного вещания (Форвард Т, Форвард ТС, Форвард Голкипер, Форвард Рефери, Форвард Офис, Форвард Инжест)

Модераторы: Людмила, PR, vd, Даниленко Сергей

Закрыто
krukovna
Сообщения: 57
Зарегистрирован: 30 май 2007 17:18

Сообщение krukovna »

Позвольте мне вклиниться. Теперь я не понимаю)

Вот в этой теме, когда я задавал похожий вопрос по поводу "можно ли получать от OnAir сообщения обо всем что с ним происходит", Сергей ответил что нельзя. Теперь получается что все-таки можно, хоть и не банально.

Что-то изменилось?)
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Пардон, это когда я такое написал, что нельзя получить состояние OnAir из внешней программы?
krukovna
Сообщения: 57
Зарегистрирован: 30 май 2007 17:18

Сообщение krukovna »

Уточняю, Вы говорили, что нельзя автоматически получать все что происходит. Можно только постоянно опрашивать. Либо я не так понял)

Эта тема, вторая страница, третий пост сверху.
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Эта тема, вторая страница, третий пост сверху.
Я извиняюсь, но не нашел там ничего похожего.
Вы говорили, что нельзя автоматически получать все что происходит. Можно только постоянно опрашивать
Да, это так. Программа OnAir не рассылает автоматом сообщения о своем состоянии. Чтобы узнать состояние программы OnAir необходимо ее спросить об этом.
==============================
ПРЕДЛОЖЕНИЕ КО ВСЕМ УЧАСТНИКАМ ОБСУЖДЕНИЯ В ЭТОЙ ТЕМЕ.
Я честно говоря уже запутался: о чем мы говорим, что конкретно обсуждаем, какие вопросы остались не отвеченными.
Может мы подведем здесь черту и начнем сначала?
У кого есть конкретные вопросы? Какие вопросы остались без ответа? Вроде бы на все "концептуальные вопросы" я ответил в силу своих возможностей.
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

2 krukovna:
По поводу той темы - да, здесь Сергей написал, что FDOnAir нужно постоянно опрашивать, чтобы узнать его состояние в данный момент. И что здесь непонятно?

Я до сих пор не могу понять: что именно вам нужно?

1. Написать программу, которая получает сообщения из FDOnAir, как будто она сама является вторым FDOnAir?
2. Написать две своих программы - одна шлет сообщения, другая получает, и всё это независимо от FDOnAir?
3. Написать программу, которая только сама шлет сообщения FDOnAir?
4. Написать программу, которая запрашивает состояние FDOnAir?

Расшифруйте, пожалуйста. А то вы задаете вопрос: "можно ли то-то сделать?". Вам отвечают: "Да, можно". Вы дальше спрашиваете: "А как, я не понял?"

Ну так мы и сами не можем дать 100% точный ответ, пока полностью не знаем, что именно вам нужно. Сами за Вас программу написать тоже не можем, уж извините.

Такое, в принципе, бывает, но только в случае, если мы понимаем, что такая же программа востребована большинством наших клиентов, и у нас есть силы и время ее написать самим.
krukovna
Сообщения: 57
Зарегистрирован: 30 май 2007 17:18

Сообщение krukovna »

Я тоже за поведения черты, ибо правда пошла путаница.

У меня конкретных вопросов нет, ибо моей целью является программа которая "опрашивает OnAir и получает от него ответы". Такая уже есть и работает.

Побочным вопросом у меня является такой - "Можно ли сделать так, чтобы OnAir некой моей программе отсылал уведомления о всем, что он делает, связанным с титровкой и плейлистом?" Как я понял, это же интересует и kasa. Если kasa это не интересует, то я готов закрыть эту тему, ибо этот вопрос из разряда "бонусов", а не необходимости.

Благодарю за ваше терпение в разборке наших словоформ.
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

"Можно ли сделать так, чтобы OnAir некой моей программе отсылал уведомления о всем, что он делает, связанным с титровкой и плейлистом?"

Нет, такого сделать нельзя. Нельзя заставить программу OnAir отсылать уведомления о своем состоянии в автоматическом режиме.
Узнавать состояние программы OnAir можно только в режиме "спросил-ответили". Т.е. внешнее приложение, которое хочет узнать какой-то из параметров состояния программы OnAir, должно послать команду-запрос на получение информации. В ответ на этот запрос программа OnAir пошлет сообщение с текущим состоянием требуемого параметра.
krukovna
Сообщения: 57
Зарегистрирован: 30 май 2007 17:18

Сообщение krukovna »

Все, вопрос тогда полностью снят. Просто дело в том, что исходя из всей беседы выше (видимовсе и правда так запуталось), я так понял, что это всетаки возможно.
Вопросов больше не имею.
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

ок
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Да нет, простите, для меня этот вопрос еще не закрыт :)
Даниленко Сергей писал(а): Нет, такого сделать нельзя. Нельзя заставить программу OnAir отсылать уведомления о своем состоянии в автоматическом режиме.
Как это нельзя, если ваш коллега сказал, что можно? Возможно, это будут не сообщения о состоянии, а команды на исполнение, но в данной задаче это не имеет значения.
Если затык был только в терминологии, тогда надо было сначала четко прописать "что есть что", а уж потом раздувать такую дискуссию...
vd писал(а):Я до сих пор не могу понять: что именно вам нужно?
Я надеюсь, что это не ко мне вопрос, т.к. я спросил конекретно (уж не знаю, что тут может быть непонятного) : а могу ли я написать свою программу так, как будто она ведомый сервер? И что для этого нужно сделать?
Мне ответили:
vd писал(а):Да, можете. Нужно создать очередь сообщений для приема. Для этого нужно сначала создать объект с интерфейсом ISLMSConnection через CoCreateInstance, затем с помощью вызова из него метода CreateQueue создать объект с интерфейсом ISLMSQueue.

При создании очереди указывается окно, в которое будет приходить сообщение-нотификация. В обработчике этого сообщения нужно вызывать методы GetCounts и GetMessage из ISLMSQueue, чтобы уже вынуть сообщения из очереди со всеми параметрами.
Что, собственно говоря, меня устраивает и вполне поддается логике. Ибо, если ведущий сервер НЕ рассылает сам сообщения, то для чего в настройках есть галка "рассылать сообщения" и указывается список машин?

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

Однако, задам мега-конкретный вопрос Даниленко Сергею, с его позволения, дабы получить однозначный ответ на этот пост.
Что рассылает сервер тем машинам, которые указаны в списке его настроек зеркалирования?
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Да нет, простите, для меня этот вопрос еще не закрыт
Кто бы сомневался :D :D Ждали вопросов от вас как от автора темы.
уж потом раздувать такую дискуссию...
Ну на самом деле дисскусию раздуваете, на мой взгляд, именно вы. Мы то как раз старались ответить на конкретные вопросы, связанные с использованием SLMessageServer'а.
Если затык был только в терминологии, тогда надо было сначала четко прописать "что есть что",
Отсутствие четко прописанного (с вашей точки зрения) "что есть что" почему-то не мешает другим (например, krukovna - см. его последнюю запись) написать работоспособное приложение, решающее конкретные задачи.
Про "что есть что".
SLMessageServer изначально создавался для работы с программой OnAir. Исходя из этого есть две сущности, которые поддерживаются в SLMessageServer'е.
Команды управления - посылка команд для того, чтобы программа OnAir выполнила определенные действия. Например, включить логотип, запустить воспроизведение титров, назначенных на кнопку F9,... Т.е. практически всех действий, которые может выполнить оператор в программе OnAir (как вручную, так и по расписанию). Таким образом вы можете реализовать внешнее приложение, которое управляет программой OnAir. Пример реализации из нашего ПО - программа SLFileForwarder, которая модифицирует расписание OnAir (вставляет новые команды в расписание == посылает команды на изменение расписания). Другой пример - реализация механизма зеркалирования в OnAir.
Команды получения состояния - посылка команд с запросом определенных параметров состояния программы OnAir + организация очереди сообщений для получения ответа о состоянии. Т.е. практически все параметры состояния, которые можно видеть на "мордочке" программы OnAir, вы можете получить в своем приложении. Например, текущий уровень звука, включен или выключен логотип, в какой позиции расписания происходит воспроизведение, сколько позиций в расписании, какой файл стоит в той или иной позиции... Пример реализации из нашего ПО - программа SLFileForwarder, которая получает текущую позицию воспроизведения и идет от нее вперед на определенную (по времени) глубину перебирая каждую следующую команду в расписании для поиска "не локальных" файлов.

С этой точки зрения SDK, во-первых, разбито на две части - команды управления и команды получения состояния. Во-вторых, есть два механизмма - connection и queue, предназначенные для решения этих задач. В одном случае (для посылки команд) вам нужно только connection, в другом (для получения состояния) вам нужны и connection и queue. :!: Здесь идет речь о взаимодействии с программой OnAir, которая всегда автоматичсеки создает очередь с определенным названием :!:
Возможно, это будут не сообщения о состоянии, а команды на исполнение, но в данной задаче это не имеет значения.
Забавно звучит это от вас одновременно с требованием от нас четкого описания механизмов работы SLMessageServer'а. Если вы хотите ясности от нас, то почему мы не можем получить ясности от вас? Вас ведь с самого начала спрашивали - что именно будет делать ваша программа? Получать параметры состояния OnAir, посылать команды в программу OnAir или то и другое. Вопрос ведь не для нашего общего развития задавался. В зависимости от задачи и реализация разная. Повторюсь еще раз - в одном случае (для посылки команд) вам нужно только connection, в другом (для получения состояния) вам нужны и connection и queue.
Я надеюсь, что это не ко мне вопрос, т.к. я спросил конекретно (уж не знаю, что тут может быть непонятного) : а могу ли я написать свою программу так, как будто она ведомый сервер? И что для этого нужно сделать?
Именно к вам. Вопрос адресован именно вам, потому что второй участник обсуждения (krukovna) по его словам вопросов пока больше не имеет.
На мой взгляд проблема в том, то вы не хотите говорить в терминах, принятых в обсуждаемом SDK - команды управления и команды получения состояния. Вы пытаетесь говорить в терминах "ведущий" и "ведомый" серверы. Это не вносит ясность, а наоборот путает. Что должен делать ведомый сервер? Мы ведь не знаем, что это означает с вашей точки зрения. Только получать команды из OnAir или еще делать какие-то действия в соответствии с состоянием OnAir. А как применить понятие "ведомый сервер", например к программе FDPostPlayVideoIn, которая занимается вводом данных? Сейчас в FDPostPlayVideoIn также делается поддержка работы с использованием SLMessageServer'а для получения инофрмации о состоянии программы. На мой взгляд понятие "ведомый сервер" сюда не применимо. Но оперировать в терминах "команды управления" (начать ввод данных, остановить ввод данных) и "команды получения состояния" (с какой линии ведется ввод данных) вполне возможн.
Хотим четкого ответа с вашей стороны - что делает (должен делать) ваш "ведомый" сервер?
Ибо, если ведущий сервер НЕ рассылает сам сообщения, то для чего в настройках есть галка "рассылать сообщения" и указывается список машин?
Вы запутываете себя и других, пытаясь подменить разные понятия. Еще раз повторю - есть команды управления, а есть команды получения состояния. Программа OnAir в режиме зеркалирования посылает команды управления другому экземпляру программы OnAir (на другой машине). Например, если оператор эфира на одной машине добавит в расписание файл, то он автоматичсеки будет добавлен в расписание OnAir и на другой машине. Именно для этого и предназначены грыжик "рассылать сообщения" и список машин. Особенность реализации состоит в том, что программа OnAir всегда создает поименованную определенным образом очередь и соответственно знает кому посылать команды. Первый экземпляр, запущенный на одной машине, будет посылать команды такому же первому экземпляру программы OnAir на другой машине. А второй - второму.
Но программа OnAir не рассылает сообщения о своем состоянии - что сейчас играется, какой уровень звука, сколько позиций в расписании, включен или выключен логотип,... Чтобы это узнать в своем внешнем приложении вы должны спросить программу OnAir и получить ответ.
И давайте мы здесь сначала до конца обсудим вопрос, заданный автором ветки, а я уж потом подытожу в конце, когда все заработает...
Какой именно вопрос? И что вы хотите подытожить?
Однако, задам мега-конкретный вопрос Даниленко Сергею, с его позволения, дабы получить однозначный ответ на этот пост.
Что рассылает сервер тем машинам, которые указаны в списке его настроек зеркалирования?
Программа OnAir в режиме зеркалирования рассылает команды управления - см. Список команд, поддерживаемых программой FDOnAir из раздела РАБОТА С ПРИЛОЖЕНИЕМ FDONAIR в документе к SLMessageServerSDK. Но она не рассылает их направо и налево. Она посылает их в определенную очередь. Поэтому если вы хотите симитировать зеркалирование, то вам нужно создавать очередь с определенным названием.
Исторически было так: сначала мы сделали функцию зеркалирования. И нам показалось, что это будет полезно и интересно для других наших пользователей. Поэтому все зеркалирование перекочевало в Список команд, поддерживаемых программой FDOnAir. Когда появились пользователи SLMessageServer'а (например, ставилась такая задача - узнавать из своего приложения какой ролик сейчас играется в OnAir, что будет играться после и размещать эту информацию у себя на сайте), то появился раздел Опрос состояния приложения FDOnAir
вопрос... с его позволения
А можно без такого, что в спорте называют мелкий фол? Форум не мой, а компании СофтЛаб. На все вопросы стараемся отвечать, цензуры нет.
Если есть вопросы - задавайте.
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Даниленко Сергей писал(а): Отсутствие четко прописанного (с вашей точки зрения) "что есть что" почему-то не мешает другим (например, krukovna - см. его последнюю запись) написать работоспособное приложение, решающее конкретные задачи.
Видимо, я тупой...не исключено, но для меня критерия "работоспособное" не достаточно.

Даниленко Сергей писал(а): На мой взгляд проблема в том, то вы не хотите говорить в терминах, принятых в обсуждаемом SDK - команды управления и команды получения состояния. Вы пытаетесь говорить в терминах "ведущий" и "ведомый" серверы.
Я пытаюсь? Вообще-то, эти термины в этой ветке ввели вы.
И говорить в терминах я как раз хочу, именно об этом вопрос "что есть что". Просто, вам нужно было с самого начала прояснить ситуацию, чтобы я не задавал "тупых" вопросов.
Ведь вещи, очевидные для вас, разработчиков, не очевидны для меня, только начинающего изучать вашу систему...
Все же просто, вам надо было сказать: сервер сам не шлет информацию о состоянии, но шлет команды. Все!
Вот скажите, чем отличается посылка запроса "включен ли логотип" от приема команды "включить логотип"?
Согласитесь, что если мне пришла команда управления "Player.SetLogotip 1", то я точно знаю, что логотип включен?
Даниленко Сергей писал(а): Хотим четкого ответа с вашей стороны - что делает (должен делать) ваш "ведомый" сервер?
У меня нет никакого сервера, у меня просто есть программа, которая в любой момент времени должна знать, что происходит на сервере.
Управлять сервером она не должна.
Даниленко Сергей писал(а): А можно без такого, что в спорте называют мелкий фол? Форум не мой, а компании СофтЛаб. На все вопросы стараемся отвечать, цензуры нет.
Если есть вопросы - задавайте.
Я не хотел никого обидеть, просто хотел, чтобы на вопрос ответили именно вы, т.к. ваш коллега уже на него ответил...


А вообще, я кажется понял в чем неувязка. Зеркалирование происходит на уровне расписания, а не на уровне элементов этого расписания.
Сервер шлет второму команды, типа "загрузи расписание", "запусти расписание" и все.
В процессе вопроизведения никаких больше команд (ну, за исключением каких-нить сервисных или команд, поданных вручную оператором).
Думаю, что это в первую очередь с тем, что не всегда сервер может выполнить команду мгновенно, что критично для прямого эфира.
Для некоторых команд ему может потребоваться некое предварительное кеширование.
Я правильно понял?
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

2 kasa:
Правильно ли я понял, что вам принципиально обязательно надо написать программу, которая именно является ведомой для FDOnAir, и никак иначе?

Постоянно запрашивать текущее состояние из FDOnAir - это чем-то плохо? Много вычислительных ресурсов это не потребует, и уж точно никак не отразится на общей производительности эфирного сервера. Обмен сообщениями - это всего лишь пересылка небольших строк между программами, поток данных ничтожный, нагрузка на систему практически нулевая.
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Вообще-то, эти термины в этой ветке ввели вы.
Не совсем так. В документе по работе с SLMessageServer нет ни одного употребления слова "сервер" в том понятии в котором вы его используете в этом топике. Зато полно слов команда, опрос состояния - т.е. в том смысле, в котором я употреблял их здесь.
И говорить в терминах я как раз хочу, именно об этом вопрос "что есть что". Просто, вам нужно было с самого начала прояснить ситуацию, чтобы я не задавал "тупых" вопросов.
А чем интересно мы тут занимались по вашему? Погоду обсуждали? Или падение мировых рынков? :D :D
Ведь вещи, очевидные для вас, разработчиков, не очевидны для меня, только начинающего изучать вашу систему...
Все же просто, вам надо было сказать: сервер сам не шлет информацию о состоянии, но шлет команды. Все!
Вы это зря. Мы так вам прямо и сказали, но вы почему-то не заметили.
Вот что было написано на стр. 3 обсуждения:
Хочется внести некоторую ясность в работу с MessageServer.
1)Каждый экземпляр программы OnAir всегда заводит очередь в MessageServer.
2)Все очереди создаются только на локальной машине.
3)Чтобы послать команду в OnAir (именно команду для осуществления в нем каких-нибудь действий, но не для запроса о его состоянии) очередь в клиентском приложении создавать не нужно. Команда посылается в очередь OnAir (см. п. 1). Здесь используется интерфейс Connection и его метод посылки сообщения.
4)Чтобы получить информацию из OnAir нужно создать очередь в клиентском приложении. После этого следует послать команду на запрос состояния в очередь OnAir. В данном случае используется точно такой же метод посылки сообщения, но интерфейса Queue. Программа OnAir, получив запрос на "состояние", ответит в очередь клиентского приложения. В своем клиентском приложении вы должны организовать опрос очереди для "выемки" ответа о состоянии OnAir.
5)Методы посылки сообщений в интерфейсах Queue и Connection одинаковы. Но в первом случае при посылке сообщения (через Queue) заполняется поле с "обратным адресом" и получатель сообщения знает куда ответить. Во втором случае (через Connection) поле "обратный адрес" не заполняется и связь получается односторонней. Заполнение этих полей происходит автоматически.
Прочитайте, пожалуйста, п.3 и п.4 - там все написано.
Вот скажите, чем отличается посылка запроса "включен ли логотип" от приема команды "включить логотип"?
Согласитесь, что если мне пришла команда управления "Player.SetLogotip 1", то я точно знаю, что логотип включен?
Ну для начала вообще непонятно зачем использовать такой подход вообще, ведь есть специальный механизм для получения состояния.

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

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

В-четвертых, приведу пример на основе вашего примера - про логотип. Команда Player.SetLogotip 1 ЛЕТИТ ТОЛЬКО ТОГДА, КОГДА НАЖИМАЮТ НА КНОПКУ F8. НО ОНА НЕ ПРИЛЕТАЕТ ТОГДА, КОГДА ЛОГОТИП ВКЛЮЧАЕТСЯ/ВЫКЛЮЧАЕТСЯ ИЗ РАСПИСАНИЯ. Чувствуете разницу? А при "честном" опросе состояния такой проблемы не будет.

В-пятых, по реализации (написанию программы) непосредственно. Как и в случае опроса состояния, так и в случае получения команд ВАМ ПОТРЕБУЕТСЯ ОРГАНИЗОВЫВАТЬ ОЧЕРЕДЬ ДЛЯ СООБЩЕНИЙ И МЕХАНИЗМ ДЛЯ ИЗВЛЕЧЕНИЯ КОМАНД ИЗ НЕЕ. Где же тут выигрыш?
В-шестых, если вы организовываете опрос, то можно фильтровать поток сообщений. Т.е получать только ТЕ СООБЩЕНИЯ, КОТОРЫЕ ВАМ НУЖНЫ, а не все, которые сыпет программа OnAir в режиме зеркалирования.
Продолжать?
А вообще, я кажется понял в чем неувязка. Зеркалирование происходит на уровне расписания, а не на уровне элементов этого расписания. Сервер шлет второму команды, типа "загрузи расписание", "запусти расписание" и все.
В процессе вопроизведения никаких больше команд (ну, за исключением каких-нить сервисных или команд, поданных вручную оператором).
Совершенно верно. Цель механизма зеркалирования - держать на обоих машинах абсолютно одинаковое расписание, чтобы при возникновении сбоев на одном сервере сразу же можно было переключиться на другой. Для выполнения этой цели не нужно пересылать команды о том, какой сейчас файл играется или включен/выключен сейчас логотип. Посылаются только команды, обеспечивающие равенство расписаний.
Думаю, что это в первую очередь с тем, что не всегда сервер может выполнить команду мгновенно, что критично для прямого эфира. Для некоторых команд ему может потребоваться некое предварительное кеширование.

Нет, не так. Просто для целей зеркалирования этого не нужно (см. выше). Зачем мне, например, при зеркалировании знать о том, какой сейчас уровень звука и соответственно посылать об этом автоматически сообщения.
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Спасибо большое за ваше терпение!
Все вышеописанное я понял тогда, когда писал свой предыдущий пост, но вы укрепили мои предположения.
Теперь все ясно, зеркалирование мне не подойдет. Зато я знаю теперь как работает система сообщений, что мне, безусловно, не повредит :)

Однако, написал тестовое приложение для опроса состояния. Ведет оно себя как-то странно, но это тема для другой ветки...

Еще раз всем спасибо!
Закрыто