Программный интерфейс TELE2 API Введение Программный интерфейс TELE2 API предназначается для: • Создания собственных приложений, использующих функциональность TELE2 (проигрывание видео-клипов с наложенными композициями переднего плана, различными эффектами) • Кастомизации самой программы TELE, например, с целью добавления системы учета, биллинга, т.д. Преимущество TELE2 API, в частности, заключается в том, что все функции интерфейса возвращают управление мгновенно, так что Ваша программа не будет «повисать», ожидая, когда функция выполнится. Приложение может быть написано на любом средстве программирования, позволяющем интегрировать контролы ActiveX, COM-объекты или DLL. Среди них: DHTML (VB, JavaScript), VBA (MS Word, MS Excel, MS Access), Microsoft Visual Basic 6.0/2003/2005, Microsoft C++ 6.0/2003/2005, Microsoft C# 6.0/2003/2005, Borland Delphi (for Windows 32/64). Для интерфейсно-ориентированных средств программирования DHTML, VBA, VB, C# удобнее использовать ActiveX control TELE2Ctrl. Для добавления его в программу достаточно добавить его в панель Toolbox (в VS2005 это делается путем нажатия правой кнопкой на нее и выбора “Choose Items” – далее нужно выбрать из компонентов COM TELE2Ctrl) и перетащить его на редактируемый диалог программы. Таким образом, обращаться к объекту можно следующими способами: а) через команду VBasic CreateObject("TELE.API") б) через ActiveX control TELE2Ctrl в) непосредственно через файл Logo2.dll, который содержит оба интерфейса и может быть также импортирован как DLL Еще одно преимущество TELE2Ctrl перед остальными способами вызова TELE2 API заключается в наличии событий. Например, событие FastTimer вызывается точно в момент начала каждого кадра. Возможности TELE2 API включают: • Контроль проигрывания расписания TELE2 (запуск с любого момента, остановка, запуск отдельного элемента) • Загрузка, сохранение, создание расписания, клипов и композиций переднего плана • Вызов различных интерфейсов программы TELE2 Есть 2 режима использования TELE2 API: с запущенной программой TELE2 и отдельно. Как уже говорилось, интерфейс может применяться как для управления / кастомизации программы TELE, так и для создания собственных приложений. В соответствии с этим, часть функций обращается к запущенному экземпляру TELE2 (т.е. программа TELE2 должна быть запущена), часть функций не требует этого, поскольку работает независимо. Функции, работающие независимо от программы TELE2 и не требующие того, чтобы она была запущена: Login AssignValue ChooseTransition ConvertFile EditLogotype FileClose FileWriteLine FileGetLine GetFilePath GetVideoClipDuration GetValue LoadLogosAndProfiles RestoreAPro SendObjDirect SendObjects SendPlayWithLogo SendPlayWithLogos SendVPlayerStop SetQueueSize Функции, используемые для управления программой TELE2 и требующие того, чтобы она была запущена: AProAssignValue AProGetValue AProExecCommand AProGetStatus AddSchedItem DeleteClip GetSectionValue GetSectionName GetSectionKeyByN GetNumSections GetSectionLineByN GetSectionLineByName DelSchedItem EditBlock EditClip FindSchedItem PlayBlock PlayClip SetItemLogo SetItemProfile StartPlaybackFromItem StartPlaybackFromTime StartSystemPlay StopPlayback ParseLine PreviewOn PreviewOff RegisterClip Любая программа должна в начале вызывать функцию Login, чтобы программа получила доступ к TELE2API. Эта функция вызывается в любом случае – если она использует TELE2 или если она работает самостоятельно, используя только TELE2 API. Композиции переднего плана хранятся в файле XML. Сама TELE хранит их в файле LogosAndProfiles.XML, который находится в директории Alphapro. Однако, функции работающие независимо от TELE могут использовать любой другой файл. Все что нужно сделать – это загрузить его при помощи команды LoadLogosAndProfiles. Возможна загрузка и использование самого файла LogosAndProfiles.XML, который используется программой ТЕЛЕ, однако не нужно забывать, что программа работает с загруженными в оперативную память данными, и если ваше приложение загрузит LogosAndProfiles.XML, то в памяти будет два экземпляра этого файла – один будет загружен программой ТЕЛЕ, другой – вашей; и изменение объектов или логотипов одной программой не приведет к автоматическому изменению их в другой программе – нужно будет сначала сохранить измененный LogosAndProfiles.XML одной программой и загрузить его другой. Функция EditLogotype редактирует логотип в том файле, который был загружен вашей программой (не TELE). После завершения редактирования функция автоматически сохраняет изменения в тот файл XML, который был в последний раз загружен функцией LoadLogosAndProfiles. Еще раз загружать файл после редактирования не нужно. Переменные Возможность использования переменных значительно повышает возможности TELE2 API. Аналогично переменным Alphapro, переменные TELE2 могут входить в состав строк, выводимых на ТВ, причем их значения автоматически подставляются при выводе. Например, можно задать объект переднего плана типа «static» (см. раздел «Типы Объектов»), и присвоить ему значение: «Сегодня %DATE, Время: %TIME». Когда этот объект будет выведен на экран, вместо %DATE %TIME будут автоматически выведены текущие дата и время. Причем время будет «идти», т.е. минуты и секунды будут автоматически меняться. Как видно из этого примера, названия переменных должны быть написаны большими латинскими буквами и перед ним должен стоять процент. Переменные могут быть созданы пользователем – все что для этого нужно сделать – это присвоить переменной значение: AssignValue(“MYVAR”, “какой-то текст”) Чтобы получить значение переменной можно использовать функцию GetValue: s=LogoApiObj.GetValue(“MYVAR”) Помимо пользовательских переменных, есть «системные» переменные, значения которых автоматически присваиваются системой TELE: %TIME – время в формате HH:MM:SS %TIMEHHMM – время в формате HH:MM %DATE – дата, например «Вторник 3 октября 2006г» %SHORTDATE – дата в формате DD/MM/YY %THERMO – показания термометра Как описывается в разделе «Типы объектов», любому объекту переднего плана присваивается по умолчанию (если значение пустое) переменная, имя которой соответствует названию этого объекта. Функции общего назначения Sub Login Key as String Эта функция должна быть выполнена в самом начале работы. Key – цифровая часть номера HASP ключа ТЕЛЕ-Инфоканал. Пример: LogoApiObj.Login(“334”) для ключа D334 Function ChooseTransition(transition as String) as String Запускает диалог выбора типа перехода. Параметр transition задает выбарнный по-умолчанию переход. Функция возвращает название выбранного перехода. Function ConvertFile (src as String, tgt as String, options as String) as Interger Осуществляет конвертацию файлов и последовательностей кадров. Function GetVideoClipDuration (fn as String) as Interger Возвращает длительность клипа. Sub PreviewOn () Переводит произрыватель в режим Preview ON. Sub PreviewOff () Переводит произрыватель в режим Preview OFF. Функции работы с композициями переднего плана (логотипами) Sub AssignValue Var as String, Val as String Присваивает значение переменной ТЕЛЕ. В имени переменной знак процента не указывается Пример: LogoApiObj.AssignValue (“VAR2”,”text text text”) В данном примере переменной ТЕЛЕ с именем %VAR2 присваивается значение ”text text text”. Имена переменных среды ТЕЛЕ могут встречаться в тексте обьектов типа static а также в качестве имени файла картинки в обьекте типа logo. При изменении значения переменной %VAR2, обьекты, в тексте которых встречается %VAR2 обновляются на экране с учетом нового значения переменной. Другой способ изменения значения параметров обьектов – функция SendObjDirect, когда параметрам присваиваются значения напрямую, а не опосредованно через переменные Function GetValue(Name as String) as String Возвращает значение переменной ТЕЛЕ Пример: s=LogoApiObj.GetValue(“VAR2”) Sub LoadLogosAndProfiles FileName as String Загрузить настройки логотипов (композиций переднего плана) и профилей из файла (XML или более ранний формат ТЕЛЕ 2.0) Пример: LogoApiObj.LoadLogosAndProfiles(“c:\alphapro\LogosAndProfiles.XML”) При этом в память загружаются все композиции, находящиеся в файле. Sub EditLogotype Name as String Запускает редактор логотипов для логотипа (композиции переднего плана) Name. При нажатии на Save в редакторе логотипов, текущий набор композиций и логотипов сохраняется в файл, из которого он был загружен (см. LoadLogosAndProfiles) Пример: LogoApiObj.EditLogotype(“New Logo1”) Function ChooseTransition(Transition as string) Name as String Запускает редактор графических переходов. Переходы используются, например, при появлении/исчезновении группы, а также в видео-блоках. Настройки перехода хранятся в строке вида: "TransitionLen=4 TransitionName=”””reveal_right””” Transition=”””reveal””” TransitionSoftness=8" У перехода есть 4 параметра: длина перехода TransitionLen (в кадрах), «мягкость» перехода TransitionSoftness, тип перехода Transition и имя перехода TransitionName. Функция возвращает строку, содержащую описание выбранного перехода. Пример: s=LogoApiObj.ChooseTransition(“”); Sub SendObjDirect Obj as String, Cmd as String Обновляет часть параметров обьекта (команда ObjDirect используется для присвоения значения объектов логотипов или профилей когда они уже отображаются на экране, чтобы сменить в реальном времени текст/логотип/…) Пример: LogoApiObj.SendObjDirect(“crawl1”,”addtext=””AAAAAAAAAAAAAAAAA”””) Этот пример добавляет текст к окончанию бегущей строки crawl1 . Пример: LogoApiObj.SendObjDirect(“static1”,”text=””NEWTEXT”””) Присвоение текстового значения обьекту типа static Пример: LogoApiObj.SendObjDirect(“logo1”,”logo=””c:\alphapro\face.logo”””) Изменение картинки, отображаемой в обьекте logo1 Пример: LogoApiObj.SendObjDirect(“group”,”text=””off”””) Присвоение значения off группе приводит к исчезновению группы с экрана вместе со всеми содержащимися в ней обьектами. Sub SendObjects Подготавливает к проигрыванию все логотипы и профили, инициализируюет все обьекты. Эту команду нужно вызвать заранее, до начала проигрывания, а также после каждого изменения, внесенного EditLogotype Sub SendPlayWithLogo(back as String, logo as String, dur as Integer, profile as String) Запускает проигрывание видео-файла или картинки back (указывается полный путь к ней, например c:\avi\test.avi, либо «clear», если картинка отстутсвует, а наложение логотипов производится на проходящий сигнал), с логотипом logo профилем profile и длительностью dur (в кадрах). Значение (-1) для длительности означает бесконечное проигрывание. Значение «clear» для имени файла обозначает наложение логотипов на проходящий видеосигнал Пример: LogoApiObj.SendPlayWithLogo(“clear”,”New Logo1”,10000,”DCS Bars”) Пример: LogoApiObj.SendPlayWithLogo(“c:\avi\test.avi”,”New Logo2”,1000,””) Sub SendPlayWithLogos(back as String, logos as String, dur as Integer, profile as String) Работает также как SendPlayWithLogo, но в параметре logos можно указывать несколько логотипов через зяпятую. В этом случае будет показана композиция логитипов. Следует слудить за тем, чтобы ни в каких двух из этих логотипах не было одинаковых объектов. Функции реализующие доступ к Alpha Pro Sub AProAssignValue Name as String, Value as String Присваивает значение переменной AlphaPro Действие функции эквивалентно AssignValue интерфейса Alpha Pro (см. описание расширенной версии Alpha Pro). Пример: LogoApiObj.AProAssignValue.Login(“%VAR1”,”text text text”) function AProGetValue(Name as string) as String Возвращает значение переменной AlphaPro Действие функции эквивалентно GetValue интерфейса Alpha Pro (см. описание расширенной версии Alpha Pro). Пример: s= LogoApiObj.AProGetValue(“%VAR1”) Sub AProExecCommand CmdLine as String Выполняет команду AlphaPro Действие функции эквивалентно ExecCommand интерфейса Alpha Pro (см. описание расширенной версии Alpha Pro). function AProGetStatus as String Возвращает статус AlphaPro Действие функции эквивалентно GetStatus интерфейса Alpha Pro (см. описание расширенной версии Alpha Pro). Функции реализующие доступ к текстовым файлам (для случаев, если другие функции работы с файлами не доступны, например в HTML) Sub FileClose FileName as String Закрывает файл, который был открыт для записи или чтения Function FileGetLine(FileName as String) as String Считывает строку из файла FileName. Если это первое обращение к этому файлу, он будет открыт. Sub FileWriteLine FileName as String, line as String Записать строку в файл FileName. Если это первое обращение к этому файлу, то он будет создан и открыт. Function GetFilePath as String Открыть диалог выбора файла Функции для работы с INI-файлами GetSectionName (n as integer, file as String) Возвращает название секции под номером N Function Function String as String GetSectionKeyByN (n as integer, section as String, file as String) as Возвращает название ключа под номером N в данной секции GetNumSections (file as String) Возвращает количество секций Function Function String as Integer GetSectionLineByN (n as integer, section as String, file as String) Возвращает строку по номеру в данной секции Function GetSectionLineByName (key as String, section as String, file as String) as String Возвращает строку по названию ключа в данной секции ParseLine (line as String, key as String) Возвращает значение ключа в строке Function as String Функции реализующие доступ к расписаниям TELE Scheduler Sub AddSchedItem AfterTime as Integer, type as Integer,Name as String Добавляет в расписание новый элемент: AfterTime – время начала Type – тип (0 - clip, 1 - block, 2 - anchor, 3 - empty (name в этом случае является длительностью) Name - название Sub DelSchedItem N as Integer Удаляет строку из расписания номер N Sub EditBlock Name as String Запускает редактор блоков для блока Name Sub EditClip Name as String Запускает редактор событий для события Name Sub FindSchedItem time as Integer, Name as String Найти номер строки расписания по времени и названию Sub PlayBlock Name as String Запускает блок Name на проигрывание Sub PlayClip Name as String Запускает событие Name на проигрывание Sub SetItemLogo n as Integer, Logo as String Устанавливает логотип строки расписания Sub SetItemProfile n as Integer, Profile as String Устанавливает профиль строки расписания Sub StartPlaybackFromItem SchedItem as Integer Запускает проигрывание со строки расписания с номером SchedItem Sub StartPlaybackFromTime Time as Integer Запускает проигрывание расписания со времени Time as Sub StartSystemPlay Запускает проигрывание по системному времени Sub StopPlayback Останавливает проигрывание расписания Sub RegisterClip(name as String, path as String) Добавляет клип в БД Типы объектов, используемые в композициях переднего плана Каждый объект имеет различные параметры, их набор зависит от типа объекта. Параметры делятся на общие и постоянные. Значение постоянных параметров одинаково во всех логотипах, где данный объект используется, т.е. оно хранится в самом объекте. Задать значение постоянного постоянного параметра проще всего непосредственно в редакторе логотипов. Значение переменных параметров может быть разным в разных логотипах, поскольку оно хранится в логотипе, и такие значения можно менять при помощи функции AssignValue или SendObjDirect. Разница между AssignValue и SendObjDirect состоит в том, что AssignValue присваивает значение переменной, а SendObjDirect присваивает значение непосредственно параметру объекта. Работает это следующим образом: если изначально параметр text (для текстовых объектов) или logo (для картинок) пустой, т.е. в редакторе логотипов не задано никакого значения по умолчанию, то ему присваивается переменная, название которой совпадает с названием объекта. Например, для объекта mystatic это будет %MYSTATIC. Т.е. если мы в редакторе логотипов не задали значение text объекта mystatic, то ему будет автоматически присвоена переменная %MYSTATIC. Если мы присвоим значение переменной %MYSTATIC перед появлением объекта на экране, то он отобразится сразу со значением, которое было присвоено переменной. Если в дальнейшем изменить значение переменной %MYSTATIC, то объект на экране автоматически изменится (в случае static изменится текст на экране). Однако, если изначально значение параметра не было пустым, изменить его можно будет уже только при помощи команды SendObjDirect (или присвоить при помощи SendObjDirect переменную). Аналогично, если мы уже изменили значение параметра при помощи SendObjDirect, даже если изначально в редакторе логотипов оно было пустым, больше для этого объекта AssignValue работать не будет. Таким образом, сказанное можно свести в таблицу: AssignValue Используется только для задания параметров text или logo (для текстовых объектов – text, для картинок – logo), для группы – “on” или “off”. Удобно для задания начального значения, которое будет сразу при появлении, но можно использовать и когда объект уже на экране, если только начальное значение, заданное в редакторе логотипов пустое и не использовались команды SendObjDirect для этого параметра объекта Пример: LogoApiObj.AssignValue (“STATIC1”,”text text text”) SendObjDirect Можно использовать для любых параметров объекта Используется только если объект уже на экране Пример:LogoApiObj.SendObjDirect(“static1”,”text=”” text text text”””) общие параметры для всех объектов: постоянные: x,y,w,h – координаты wait (0/1) переменные : style по умолчанию ("helios") – стиль текста text классы объектов: clock – аналоговые часы постоянные параметры : clock=путь к директории со стрелками crawl – бегущая строка (с картинками) переменные параметры: speed , text допустимые последовательности в тексте - \picture \pause \speed примеры: LogoApiObj.SendObjDirect(“mycrawl”,”text=”””это текст текст \speed(10)ускоренный текст””””) \picture(C:\avi\pic.tga) pause(100) тоже Добавление текста в конец строки: LogoApiObj.SendObjDirect(“crawl1”,”addtext=””AAAAAAAAAAAAAAAAA”””) Чтобы осуществить такое добавление только когда текущая строка уже пробежала, нужно: перед каждой командой SendObjDirect с параметром addtext (LogoApiObj.SendObjDirect(“crawl1”,”addtext=””AAAAAAAAAAAAAAAAA”””)) нужно присвоить значение 1 переменной состояния: LogoApiObj.AssignValue (“crawl1_busy”,”1”) использовать такой цикл для ожидания окончания текущей строки: LogoApiObj.AssignValue (“crawl1_busy”,”1”) LogoApiObj.SendObjDirect(“crawl1”,”addtext=””AAAAAAAAAAAAAAAAA”””) Dim ss as string While ss<>”0” Ss=GetValue(“crawl1_busy") … Wend по окончанию цикла можно еще раз сделать LogoApiObj.AssignValue(“crawl1_busy”,”1”). И снова послать SendObjDirect с параметром addtext Gauge – столбик переменной ширины/высоты (может используется для диаграмм) постоянные параметры direction (1-горизонтальное, 2 - вертикальное), picture переменные параметры: color, position Значение position 1000 соответствуюет полностью запоненной шкале, 500 – половина шкалы пример: LogoApiObj.SendObjDirect(“gauge1”,”position=””500”” color=””FFFFFF”””) logo – картинка переменные параметры: Transition – тип перехода при появлении/исчезновении (reveal_right, reveal_left, crossfade, zoom, fade, wipe) TransitionLen – длительность перехода TransitionName – название перехода (путь к картинке для wipe) TransitionSoftness – «мягкость» перехода noanim [0/1] - не воспринимать tga файл, как часть последовательности, даже если имя заканчивается на цифру noloop[0/1] - прокрутить анимацию один раз и остановиться на последнем кадре logo="имя файла" – картинка пример: LogoApiObj.SendObjDirect(“logo1”,”logo=””c:\alphapro\ALPHAPRO.TGA”””) Присваивает значение объекту типа «картинка», можно использовать TGA –файл или анимационный файл типа LOGO, созданный в программе conv422. Внимание! TGA-файлы, если имя заканчивается на цифру, например test3.tga рассматриваются, как кадры в анимационной последовательности. roll – текст (с картинками) бегущий вертикально постоянные параметры : align="left/right/center" переменные параметры: text, speed, autospeed (0/1/2) - режим скроллирования вертикального барабана, в завмсимости от скорости добавления новых данных по addtext vspacing – межстрочное расстояние addvspacing, style стиль текста допустимые последовательности в тексте - \picture примеры: LogoApiObj.SendObjDirect(“myroll”,”text=”””это текст \picture(C:\avi\pic.tga) ””””) LogoApiObj.SendObjDirect(“roll1”,”addtext=””AAAAAAAAAAAAAAAAA`”””) Параметр addtext позволяет добавить текст в конце барабана. Не забудьте поставить в конце символ «обратная кавычка» он обозначает перевод строки scrncap – видеозахват с экрана переменные параметры: logo - имя файла для маски (Mask File Name) srcx,srcy,srcw,srch – расположение окна findflash=[0/1] - автоматически найти на десктопе Windows окно с классом Flash и брать изображение оттуда bright, contrast, gamma, softness priority=[-1,0,1] static – статический текст постоянные параметры: align="left/right/center" valign="top/bottom/center" rotate= [0,1] – поворот на 90 градусов переменные параметры: vspacing (межстрочный интервал), Transition – тип перехода при появлении/исчезновении (reveal_right, reveal_left, crossfade, zoom, fade, wipe) TransitionLen – длительность перехода TransitionName – название перехода (путь к картинке для wipe) TransitionSoftness – «мягкость» перехода Style (стиль текста), text пример: LogoApiObj.SendObjDirect(“mystatic”,”text=”””это текст””””) допустимые последовательности в тексте - нет (только смена стиля) window – вывод видео в окне постоянные параметры: scale=[0/1] (масштабировать ли видео), force444=[0/1] - режим при котором видеофайл отображается в окне на фоне проходящего видео (картинка в картинке) переменные параметры: logo - фоновая картинка, разрешение только 720х576 (720х480 для режима NTSC) group – группа (объединение объектов, которые появляются и исчезают вместе) помимо функции логотипа, позволяет включенным в него объектам одновременно появляться и исчезать вместе в ним, используя эффект (transition) , заданный для группы постоянные параметры : нет переменные параметры: Transition – тип перехода при появлении/исчезновении (reveal_right, reveal_left, crossfade, zoom, fade, wipe) TransitionLen – длительность перехода TransitionName – название перехода (путь к картинке для wipe) TransitionSoftness – «мягкость» перехода noanim [0/1] - не воспринимать tga файл, как часть последовательности, даже если имя заканчивается на цифру noloop[0/1] - прокрутить анимацию один раз и остановиться на последнем кадре logo="имя файла" – фоновая картинка группы text=”on”/”off” – показать или скрыть группу пример: LogoApiObj.SendObjDirect(“group1”,”text=””on”””) выводит группу, вместе со всеми входящими в нее объектами на экран LogoApiObj.SendObjDirect(“group1”,”text=””off”””) убирает группу с экрана Примеры Пример последовательности команд для запуска видео-ролика с логотипом: LogoApiObj=CreateObject("TELE.API") LogoApiObj.Login(“334”) LogoApiObj.LoadLogosAndProfiles(“c:\alphapro\LogosAndProfiles.XML”) LogoApiObj.SendObjects LogoApiObj.SendPlayWithLogo(“c:\avi\bol.avi”,”New Logo1”,10000,”DSC Bars”) Пример последовательности команд для отображения проходящего видео с наложенным логотипом c последующей модификацией содержимого обьекта static: Dim LogoApiObj Private Sub Form_Load() LogoApiObj=CreateObject("TELE.API") LogoApiObj.Login(“334”) LogoApiObj.LoadLogosAndProfiles(“c:\alphapro\LogosAndProfiles.XML”) LogoApiObj.SendObjects LogoApiObj.SendPlayWithLogo(“clear”,”New Logo1”,-1,””) End Sub Private Sub Command1_Click() LogoApiObj.SendObjDirect(“static1”,”text=”””+ Text1.Text) End Sub