пятница, 2 октября 2020 г.

Получение спортивной статистки по протоколу UDP


Для упрощения доступа к статистике спортивных состязаний (раньше требовалось подключаться по RS485 и разбирать протокол NiBUS) добавлена возможность получения этих сообщений по протоколу UDP.
Загрузите файл rconsoles.dll
Замените старый файл (сохраните его перед этим), зарегистрируйте его командой:


>regsvr32 rconsoles.dll

Рекомендую обновить также game.dll и, если хоккей, icehockey.dll, которые тоже нужно регистрировать.

Внесите изменения в конфигурационный XML-файл (сохранитесь)
Откройте его в текстовом редакторе и попробуйте найти слово GameRetranslator.

А) Если не нашли, то ... (смотрите Б, если нашли)
Найдите объект Game и добавьте строку внутрь объекта:
  <bind_to id="GameRetranslator" dispname="Game"/>
Должно получиться как-то так:
<object name="Game" clsid="progid:Game.GameLogic" description="Игра">
  <bind_to id="IceHockeyLogic" dispname="Game"/>
  <bind_to id="GameRetranslator" dispname="Game"/>
  ...
</object>
Добавьте на уровень объектов:
<object name="GameRetranslator" clsid="progid:rconsoles.GameRetranslator" description="Игра: ретранслятор">
  <property dispname="TimerUdpPort" value="55555" />
  <property dispname="GameUdpPort" value="55556" />
  <property dispname="Address" value="192.168.1.255" />
  <bind_to id="IceHockeyLogic" dispname="TimeRetranslator"/>
</object>
Здесь можно видеть, что задаются три параметра:
TimerUdpPort - порт для передачи тамера (0-65535)
GameUdpPort - порт для передачи игровых моментов
Address - это адрес подсети для широковещательной рассылки (в конце 255 для сетей x.x.x.x/24), в которую отправлять пакеты UDP, можно не задавать тогда будет отправляться в 255.255.255.255. Не задавайте этот параметр, если не знаете что указать! 

Б) Если нашли, то добавьте три параметра в GameRetranslator как в предыдущем примере.

Теперь по указанным портам будут отправлены широковещательные пакеты UDP.
Значения таймеров будут отправлятся в формате:
1-й символ R (running) или P (paused) - состояние таймера
2-й символ P (primary) или S (secondary) - тип таймера (основное время/таймаут например)
потом пробел и собственно строка со значением таймера.

Игровые события:
два или три поля разделенных символом |
первое поле команда (если нужно указать) HOME/GUESTS
Например: HOME|SCORE|значение
Второе поле (или первое если команда не нужна)
SCORE - очки команды
RESTS - таймауты команды
FOULS - командные фолы
NAME - название команды
TOURNAMENT - название турнира 
PERIOD - период
и последнее поле - это значение.

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

четверг, 29 декабря 2016 г.

node-avs

Последнее 3 года я не вел блог так как был занят написанием новой системы для управления экранами. Это, конечно, не значит что программа AdvertisePro не развивалась. Все поддержку и обновления осуществляет мой коллега Максим Леваков. Я готов Вам представить новый проект node-avs. По ссылке Вы можете подробнее ознакомиться с различиями от AdvertisePro и почитать справку по интерфейсу управления. Данное ПО уже работает с 2015 года на экранах всех видеоэкранах Russ Outdoor в г. Москве

пятница, 14 июня 2013 г.

Матричное табло и Excel

Матричное табло создавалось для примитивного вывода текста с разбиением по колонкам на экран. Может возникнуть необходимость вывода таблиц из Microsoft Excel, например на соревнованиях нужно выводить результаты участников. Это можно сделать скопировав таблицу из Excel и вставив ее в окно матричного табло, предварительно расставив маркеры табуляции в окне матричного табло.
Excel поддерживает макросы, поэтому вывод на экран можно осуществить средствами самого Excel, конечно программа AdvertisePro так же должна быть запущена. В Excel мы разбираем таблицу, форматируем строку для вывода и отправляем ее в AdvertisePro.

Вот макрос:
Sub SendToScb()
    Dim apro, elements
    Set apro = GetObject("AdvertisePro:Application")
    If IsNull(apro) Then
        MsgBox ("Приложение не запущено")
    End If
    
    Set elements = apro.textform.Root.Children
    Dim line, column
    Dim scbWidth
    Dim scbHeight
    Dim headerLength
    headerLength = Range("HeaderLength").Value
    scbWidth = Range("ScbWidth").Value
    scbHeight = Range("ScbHeight").Value
    Dim src, colDef
    Set src = Worksheets("Вывод")
    Set colDef = Range("ColumnsDef")
    For line = 1 To scbHeight
        If (line <= headerLength) Then
            elements.Item(line - 1).Value = FormatLine(src.Cells(line, 1).Value, scbWidth, Range("HeaderAlign").Value)
        Else
            Dim text As String
            text = ""
            For column = 1 To colDef.Rows.Count
                Dim colWidth, colAlign
                colWidth = colDef.Cells(column, 1)
                colAlign = colDef.Cells(column, 2)
                If colWidth > 0 Then
                    text = text + FormatLine(src.Cells(line, column).Value, colWidth, colAlign)
                End If
            Next column
            elements.Item(line - 1).Value = text
        End If
    Next line
End Sub

Function FormatLine(text, width, align)
    text = Left(CStr(text), width)
    If align = "R" Then
        FormatLine = Right(Space(width) + text + " ", width)
    ElseIf align = "C" Or align = "С" Then
        FormatLine = Left(Space((width - Len(text)) / 2) + text + Space(width), width)
    Else
        FormatLine = Left(text + Space(width), width)
    End If
End Function

Здесь apro - экземпляр запущенного приложения AdvertisePro, elements - объекты-строки в матричной форме. Параметры экрана (высота, ширина в символах) и определения колонок хранятся в именованных областях.

Файл для excel с полным примером можно взять здесь
На первом листе Параметры указываем параметры экрана и определяем размеры колонок. Там думаю все понятно. Указываем количество строк заголовка и ширину колонок. Выравнивание в колонках указываем буками:
R - (Right) выравниваем вправо (и добавляем один пробел, чтобы отделить от следующей колонки)
C - (Center) - выравнивание по центру
L или любой другой символ -  (Left) выравнивание слева.

На второй лист "Вывод" копируем или заполняем результаты начиная с верхнего левого угла. Там же есть кнопка "Отправить" которая выводит результаты на экран.

Так же для AdvertisePro до версии 3.2.1 включительно нужно заменить файл библиотеки TextFormX.dll которая лежит в папке с программой, в старой версии была ошибка когда вставлялся текст из буфера обмена.

понедельник, 21 января 2013 г.

Объект NIMediaRender.


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

Чтобы данные скрипты работали на AdvertisePro версии 3.2, 3.2.1 нужно обновить файл библиотеки NIMediaObjectu7.dll

Объект MediaRenderer. progid:NIVideoRender.MediaRenderer

Обычно данный объект прописан в конфигурационном файле под именем renderer:
<object name="renderer" xsi:type="cfg:MediaRender" clsid="progid:NIVideoRender.MediaRenderer" ...>
Чтобы узнать под каким именем он определен в вашем файле конфигурации можно сделать поиск по его progid. В некоторых случаях может быть несколько рендереров. Зная его имя можно обращаться к нему из скрипта, например Application.renderer.
Рассмотрим его свойства:
Свойства рендерера
Имя Доступ Описание
PermanentMedia Чтение/Запись Коллекция постоянных объектов. Именно она содержит список воспроизводимых объектов из текущего плейлиста
CurrentMedia Чтение/Запись Текущий воспроизводимый медиа-объект.
Set mediaObject = renderer.CurrentMedia
AddMedia Метод Добавление медиа-объекта в пул постоянных медиа-объектов.
renderer.AddMedia mediaObject
RemoveMedia Метод Удаление медиа-объекта из пула постоянных медиа-объектов.
renderer.RemoveMedia rendererId
MoveUp Метод Увеличить Z-координату объекта.
renderer.MoveUp rendererId
MoveDown Метод Уменьшить Z-координату объекта.
renderer.MoveDown rendererId
MoveToFront Метод Переместить объект на передний план.
renderer.MoveToFront rendererId
MoveToBack Метод Переместить объект на задний план.
renderer.MoveToBack rendererId
RemoveAll Метод Удалить все объекты.
renderer.RemoveAll
Background Чтение/Запись Текущий фон.
Set background = renderer.Background
Width Чтение Ширина
Height Чтение Высота
Advertising Чтение/Запись Режим показа рекламы. В этом режиме по окончании ролика его последний кадр продолжает оставаться на экране пока готовится к показу следующий ролик.
renderer.Advertising = true
SetMediaPosition Метод Задает координаты верхнего левого угла для вывода медиа-объекта.
renderer.SetMediaPosition rendererId, x, y
Media Функция Поиск медиа-объекта.
Set media = renderer.Media(key, flags)
All Чтение Коллекция всех меда-объектов
Параметры:

  • mediaObject - объект MediaObject
  • rendererId - Идентификатор-строка элемента в рендерере (см. св-ва медиа-объекта).
  • background - объект Background
  • x, y - целые числа
  • flags - Флаги поиска:
    0 - поиск по rendererId (по умолчанию)
    1 - поиск по Alias
    2 - поиск всех объектов
    4 - поиск по cookie
  • key - поиск по заданному значению, зависит от flags
  • Коллекции - стандартные, индекс начинается с 0, в качестве индекса может использоваться RendererId.
    Dim oMedia, oMedia3, oOtherMedia
    For Each oMedia in renderer.PermanentMedia
    Rem Работаем с медиа-объектом
    Next
    Set oMedia3 = renderer.PermanentMedia(3)
    Set oOtherMedia = renderer.PermanentMedia("{087846D6-2EE3-49FB-824B-9DB9746AC8BD}")

Медиа-объект

Свойства медиа-объекта
Имя Доступ Описание
sourceURL Чтение Путь к файлу воспроизведения
duration Чтение Длительность в секундах
RendererId Чтение Строка - идентификатор объекта. Доступна после добавления меда-объекта в рендерер
ZOrder Чтение/Запись Z-координата объекта
Alias Чтение/Запись Псевдоним
Cookie Чтение Cookie
x Чтение/Запись x-координата верхнего левого угла
y Чтение/Запись y-координата верхнего левого угла
CurrentPosition Чтение/Запись Текущее положение воспроизведения в секундах
StopTime Чтение/Запись Время остановки воспроизведения в секундах.
Rate Чтение/Запись Коэффициент скорости воспроизведения
SelfDeleteOnComplete Чтение/Запись Автоматическое удаление после воспроизведения.
oMedia.SelfDeleteOnComplete = true
ReleaseMedia Метод Освободить медиа-объект.
oMedia.ReleaseMedia

Медиа-загрузчик

Данный объект нужно использовать для создания новых медиа-объектов и управления выводом звука или масштабированием. Обычно в конфигурационном файле он называется MediaLoader, соответственно из скрипта он доступен как Application.MediaLoader. Чтобы узнать его имя найдите в конфигурационном файле объект с clsid="progid:NIMediaObject.MediaLoader". Их может быть несколько.
Свойства медиа-загрузчика
Имя Доступ Описание
LoadURL Функция Получить медиа-объект из указанного файла.
Set oMedia = mediaLoader.LoadURL("C:\Video\clip1.avi")
Audio Чтение/Запись Включить/выключить вывод звука.
mediaLoader.Audio = false
StretchMode Чтение/Запись Тип масштабирования:
0 - растянуть
1 - обрезать
2 - сохранить пропорции с рамкой
3 - сохранить пропорции
CheckURL Метод Если указанный файл не может быть воспроизведен возникнет исключение.
On Error Resume Next
mediaLoader.CheckURL "C:\Video\Clip.avi"
If Err.Number <> 0 Then
MsgBox ("Invalid file")
Err.Clear
End If
Width Чтение/Запись Ширина
Height Чтение/Запись Высота

Примеры

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

Dim oMedia
// Создаем медиа-объект
Set oMedia = Application.MediaLoader.LoadURL("C:\Videos\Clip.avi")

// Указываем ZOrder больше чем основной плейлист
oMedia.ZOrder = 200

// Под этим именем он будет отображаться
oMedia.Alias = "Тестовый ролик"

// Двойная скорость воспроизведения
oMedia.Rate = 2.0

// Удалить себя по окончании!!!
oMedia.SelfDeleteOnComplete = true

Application.renderer.AddMedia oMedia // Воспроизводим

суббота, 29 декабря 2012 г.

AdvertisePro 3.2.1 (исправление)

Обновлена версия AdvertisePro: AdvertisePro3.2.1.msiAdvertisePro3.2.1.x64.msi Исправлен баг с выводом статичных картинок. Чтобы не устанавливать всю программу заново для версии 3.2 достаточно поменять в папке с программой NIMediaObjectu7.dll
Для перехода с версии 3.1 распаковать с заменой в папку с программой (нужны права администратора)  update3.1to3.2.zip

четверг, 27 декабря 2012 г.

Управление звуком по расписание (обновление 2)

В предыдущей статье для управления звуком предлагалась утилита msndvol.exe. К сожалению она поддерживается только на Windows XP. Есть готовая утилита для Windows 7, читайте по ссылкеhttp://my.opera.com/irzyxa/blog/index.dml/tag/Volume2. Данная утилита может постоянно работать в трее и поддерживает расписание. Также она поддерживает управление из командной строки:
volume2 MUTE
volume2 UNMUTE
volume2 75
Выключить звук
Включить
Задать громкость 75%
Данные команды можно вставлять в планировщик AdvertisePro
PS. Есть еще один способ включения/выключения звука. В Планировщике встаньте на нужную позицию в плейлисте,  нажмите на стрелку рядом с кнопкой Вставить новый элемент. Выберите Мастер "Заданий"/Вставить VB-скрипт, наберите команду Application.MediaLoader.Audio = false, Далее, Назовите команду "Выключить звук", Далее, Готово.
Также можно включить звук, только скрипт будет выглядеть как Application.MediaLoader.Audio = true
Подробнее в статье Объект NIMediaRender

пятница, 14 декабря 2012 г.

AdvertisePro 3.2

Обновленная версия AdvertisePro 3.2.1 (исправление)

Вышла новая версия AdvertisePro3.2.msi и для x64 AdvertisePro3.2.x64.msi.
Рекомендуемая версия операционной системы Windows 7, также поддерживается Windows XP.
Основное изменение затронуло процесс рендеринга видео:
  • используется VMR9
  • улучшилось качество масштабирования видео под размер экрана
  • устранение чересстрочной развертки средствами видеокарты
  • поддержка большого числа форматов видео
Чтобы программа поддерживала необходимые Вам форматы установите соответствующие кодеки (например K-Lite Codec Pack). Если в диалоге добавления файла в плейлист он не отображается, выберите тип файла "Все файлы (*.*)".
Те пользователи, которые уже установили версию AdvertisePro 3.1.1, могут самостоятельно обновить файлы распаковав архив update3.1to3.2.zip в папку с установленной программой с заменой (для Windows 7 требуются права Администратора). Перед заменой файлов, чтобы освободить Brcoreu7.dll, остановите службу NiBUS, например командой
net stop nibus
замените файлы, а затем запустите службу командой
net start nibus
Все официальные обновления теперь подписаны нашей цифровой подписью.
PS. Данная версия программы некорректно отображает статические изображения (jpg, gif, bmp)! Вскоре выйдет обновление с исправлением.