Показаны сообщения с ярлыком ТВ. Показать все сообщения
Показаны сообщения с ярлыком ТВ. Показать все сообщения

пятница, 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, чтобы мы сами внесли изменения.

понедельник, 18 июня 2012 г.

Вывод аналогового видео с внешних источников (камеры) на экран

Вывод внешнего аналогового видеосигнала на экран возможен в случае, если установлена карата видеозахвата (TV-тюнер). Обычно все наши компьютеры поставляются с уже установленной картой видеозахвата. Если такой карты нет, можно приобрести ее самостоятельно. Обычно мы пользуемся картами фирм AverMedia, Beholder, FlyVideo, но должна подойти также любая WDM-совместимая карта или TV-тюнер. Тюнеры выпускаются для шин PCI или PCI-E - перед покупкой убедитесь, что у вас присутствует свободный разъем на материнской карте для выбранной карты. Убедитесь, что все драйвера для данной карты установлены. Также рекомендуется установить последнюю версию ПО AdvertisePro 3.1 или выше. Данная версия поддерживает все WDM-совместимые тюнеры. При установке выберите выборочную установку и укажите дополнительный элемент Аналоговое видео/WDM-совместимая плата.
После установки и запуска программы потребуется один раз задать размеры видеозахвата и размер для вывода, а также, возможно,  настроить параметры деинтерлейсинга (устранение чересстрочности) при размере кадра более 288 линий (половина кадра для сигнала PAL).
Откройте закладку Видео-источник (если ее нет, то при установке программы не был указан пункт Аналоговое видео).
Откройте меню Сервис/Настройка..., выберите пункт Аналоговое видео, справа нужно указать устройство из выпадающего списка WDM устройство (либо отключить его):
Пункт Масштабирование лучше указать Быстрое.
Закройте окно настроек.
Далее на закладке Видео-источник правой кнопкой мыши щелкните на большом черном прямоугольнике предпросмотра справа и выберите из списка пункт меню "Посмотреть возможности устройства". Если пункта нет, то устройство неправильно установлено либо не поддерживается. Раскройте список с типами поддерживаемых форматов:
В данном случае мы видим, что устройство поддерживает размеры вывода от 160х120 до 768х576. Некоторые карты выводят только в одном фиксированном размере, например 768х576, в последнем случае нам придется уменьшать изображение, чтобы вписать его в экран (если экран меньше  768х576). Далее будут рассмотрены оба случая, когда экран можно вписать в заданный диапазон и когда необходимо сжать изображение, чтобы вписать его в экран.
Закройте свойства с возможностями.


Зададим профиль оцифровки.

Красным обведен выпадающий список, нажав который нужно выбрать пункт Редактировать...
Откроется окно для создания профиля оцифровки:
Профиль По умолчанию настроен на размер 320х240, можно изменить его выбрав и нажав на кнопку Изменить... или добавить новый используя кнопку Добавить...
Далее откроется диалог с указанием параметров оцифровки:
В названии профиля укажите удобное для вас описание, например размер вашего экрана в пикселях, этот профиль потом будет легче выбрать, если вы создадите их несколько.

Вариант 1 (размер экрана входит в диапазон, поддерживаемый картой).


В группе "Размеры оцифровки"

необходимо указать размер получаемого кадра после оцифровки внешнего сигнала. Здесь надо учесть, что соотношение сторон должно быть 4:3, иначе кадр будет "плющить". Например, если экран у вас 480х240, то подходящий ему размер 480х360, или экран 320х288, то 384х288. Главное, что ваш экран полностью входит в указанный размер и соотношение сторон 4:3.

Координаты видимой части.

В поле Ширина и Высота укажите размер вашего экрана. X, Y - сдвиг, если пропорции экрана не соответствуют соотношению 4:3, их можно пока оставить равными 0.

Координаты вывода на экран.

X, Y = 0
Ширина и Высота - размеры экрана.

Вариант 2 (размер экрана меньше чем допустимый диапазон)


Размеры оцифровки.

Укажите размер, поддерживаемый картой.

Координаты видимой части.

X,Y укажите 0.
Ширину и Высоту укажите как в размере оцифровки или близко к ним, но старайтесь соблюсти соотношение сторон реального экрана. Например в размере оцифровки указано 768х576, а экран у вас 320х160 (т.е. соотношение сторон 2:1), тогда нужный размер 768х384, или экран 320х288 -> укажите 640х576. Если невозможно указать точно, укажите приблизительный размер, чтобы не сильно "плющить" изображение, когда не соблюдены соотношения высоты и ширины исходного изображения и размера экрана.

Координаты вывода на экран.

X, Y = 0
Ширина и Высота - размеры экрана. Если нужно вывести изображение только на часть экрана, укажите ее координаты и размер.

Нажмите кнопку Ok. Теперь созданный Вами профиль можно выбрать из списка. Если все правильно сделано, то на поле предварительного просмотра можно увидеть область выделенную пунктиром, именно она будет выведена на экран. Если это поле меньше размера оцифровки, то с помощью левой кнопки мыши можно захватить область и передвигать ее, чтобы добиться вывода нужной части (обычно ближе к середине)
В верхней части закладки можно увидеть 6 кнопок. По порядку:

  1. Включить/Выключить вывод на экран
  2. Выбор входного-видеоисточника. Выберите в поле Input - Composite/тюнер/S-Video и т.д
  3. Настройка свойств и форматов (PAL/NTSC/Secam и различные свойства: яркость, цветность...)
  4. Настройка деинтерлейса. Доступно, если высота оцифровки больше 288. Поиграйтесь различными методами удаления чересстрочности и выберите оптимальные.
  5. Отображать окно предпросмотра (можно отключить, чтобы уменьшить нагрузку на процессор).
  6. Сделать снимок кадра и сохранить в файл (см. Сервис/Настройка.../Аналоговое видео/каталог)
Теперь можно подать сигнал на карту или выбрать в качестве источника тюнер (кнопка 2). Телевидение обычно отдает композитный сигнал, для подключения которого может понадобиться переходник BNC-тюльпан. Также очень рекомендую использовать гальваническую развязку в месте подключения кабеля к карте видеозахвата, возможно может понадобиться видеоусилитель, все это, обычно, можно взять у телевизионщиков, которые будут давать вам картинку.

четверг, 1 декабря 2011 г.

Мониторинг спортивных состязаний.

Иногда возникает необходимость получать информацию о текущем спортивном состязании, чтобы, например, можно было наложить ее на телевизионную картинку. Все данные об игре передаются по 485 интерфейсу используя протокол NiBUS. Подробные сведения по устройству протокола можно прочитать в документе NiBUS.pdf. Если Вы для прослушивания протокола NiBUS будете использовать компьютер под управлением Windows, а в качестве конвертера RS485-RS232 трансивер Siolynx/Siolynx2 (siolynx2.tech_ref.pdf), Вам необходимо будет установить на него службу NiBUS. На данный момент последняя версия nibus-v3.0.780.10.msi. После установки службы может потребоваться ее настройка (Настройка службы NIBUS). Этот дистрибутив также содержит примеры на C++:
  • NibusLog (VC2003), который снифит данные поступающие по nibus
  • NibusListener (VC2008), заготовка для написания обработчиков спортивных событий
Последний пример-заготовка позволяет быстро написать свой обработчик спортивных событий (время, счет и т.д). При необходимости можно добавить обработчики используя документ с расшифровкой основных информационных сообщений для спорта SportInfo.pdf. Обратите внимание 
  • CAppModuleEx::Init() - здесь строится стек протокола nibus (NibusListener.cpp)
  • CAppModuleEx::DoCapture(TRUE) - включить прослушку.
  • CNibusListenerView - получает и разбирает датаграммы
  • CNibusListenerView::OnTimerChanged - изменились данные таймера
  • CNibusListenerView::OnScoreChanged - изменился счет
  • CNibusListenerView::OnPeriodChanged - изменился период
Вместо Pin 1 для питания можно использовать Pin 2. 12V используется для питания пульта и может отсутствовать. Pin 4 и Pin 5 должны быть на одной паре, например - синяя и бело-синяя жилы, также как и Pin 3 и Pin 1/2.
Если возникли вопросы, то отпишитесь в комментариях  к данному сообщению.

Дополнение:

Гораздо удобнее с протоколом NiBUS можно работать с помощью .NET 4.0, поэтому, если для подключения к шине NiBUS Вы используете компьютер с Windows и установленным .NET Framework 4.0, то возможно стоит посмотреть как это реализовано на C#. В этом случае Вам не требуется установка службы NiBUS. Клиент для коммуникации по протоколу NiBUS должен использовать библиотеку libnibus.dll написанную на C#, также понадобятся библиотеки Async-CTP-v3 (AsyncCtpLibrary.dll, System.Threading.Tasks.Dataflow.dll) и NLog.dll для ведения журнала. Все это можно загрузить с с нашего ftp-сайта. Там же есть простейший пример для хоккея в архиве IceHockeyViewer.zip. Чтобы скомпилировать пример понадобится VS2010 и установленный Visual Studio Async CTP (Version 3). libnibus.xml - содержит подсказки для студии, а в libnibusdoc.chm - справка к библиотеке. Пример использует 14 COM-порт для взаимодействия с NiBUS, Вы должны не забыть указать свой. Также учтите, что при установленной VS 11 Beta пример не компилируется.

Важное дополнение:

Все примеры выше используют в качестве конвертера RS485<->RS232 Siolynx2 нашего производства. Наш конвертер, в отличие от обычных конвертеров, является более "интеллектуальным" устройством. Помимо приема/передачи данных он отвечает за разрешение коллизий в протоколе NiBUS. На выход пользователю он выдает Сетевой уровень (Глава 3 nibus.pdf). Если Вы используете обычный конвертер RS485<->RS232 Вам нужно обратить внимание на Канальный уровень (Глава 2). Он отличается от сетевого наличием специальных двухбайтовых маркеров, причем используется режим когда данные содержат 9 бит! Старший бит установлен именно у маркеров. Не все конвертеры могут поддерживать 9 бит данных. Обычно он обрезается до 8 бит. Некоторые конвертеры обрезают этот старший бит (данные можно обработать), другие могут обрезать младший (в этом случае информация неполная).