Вопросы по теме создания собственного скрипта.

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

Модераторы: ElenVR, Людмила, PR

Ответить
Stealth77
Сообщения: 1
Зарегистрирован: 18 ноя 2014 00:10

Сообщение Stealth77 »

Продолжение темы "Титровальные скрипты - создание объекта шаг за шагом." будет вообще???
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

В планах есть, но не в ближних.
AlMaz
Сообщения: 76
Зарегистрирован: 02 июн 2010 12:48
Откуда: Красноярск, Прима-ТВ
Контактная информация:

Сообщение AlMaz »

Добрый день. Это вас Красноярск беспокоит =) Вы можете мне разъяснить такой вопрос:

1) Есть ли разница в последовательности остановки скрипта при нажатии кнопки выключения скрипта в ОнЭйре и остановке скрипта по команде titleObjGroupOff?

В обоих случаях начинается все с function Stop(atStop : double, fadeDuration : double) : boolean? Такое впечатление что нет.


2) Что происходит в скрипте при истечении времени заданного в titleObjGroupOn 0:00:хх? Вызываются для всех титр.элементов объекта методы элемент.stop() или function Stop ?
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

1) Есть ли разница в последовательности остановки скрипта при нажатии кнопки выключения скрипта в ОнЭйре и остановке скрипта по команде titleObjGroupOff? В обоих случаях начинается все с function Stop(atStop : double, fadeDuration : double) : boolean? Такое впечатление что нет.


Разница есть. При исполнении команды из расписания, как правило, известны времена начала и остановки титровального объекта. Поэтому в скрипт прилетают старт/стоп с конкретными временами.
При остановке через кнопку происходит остановка "прямо сейчас", т.е. время практически соответствует текущему.
2) Что происходит в скрипте при истечении времени заданного в titleObjGroupOn 0:00:хх? Вызываются для всех титр.элементов объекта методы элемент.stop() или function Stop ?
Если вы не переопределили функцию Stop в своём скрипте или при её отработаке произошла ошибка (исключение), то за вас всю работу будет выполнять так называемый базовый класс (титровальное ядро). Оно и "скажет" всем элементам скрипта "стоп".
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

И ещё. Обратите внимание на одну особенность остановки наших титровальных объектов. Некоторые из них могут останавливаться не сразу после команды стоп. Например, бегущая строка по "стоп" будет доигрывать последнее объявление.
AlMaz
Сообщения: 76
Зарегистрирован: 02 июн 2010 12:48
Откуда: Красноярск, Прима-ТВ
Контактная информация:

Сообщение AlMaz »

Даниленко Сергей писал(а):
1) Есть ли разница в последовательности остановки скрипта при нажатии кнопки выключения скрипта в ОнЭйре и остановке скрипта по команде titleObjGroupOff? В обоих случаях начинается все с function Stop(atStop : double, fadeDuration : double) : boolean? Такое впечатление что нет.


Разница есть. При исполнении команды из расписания, как правило, известны времена начала и остановки титровального объекта. Поэтому в скрипт прилетают старт/стоп с конкретными временами.
При остановке через кнопку происходит остановка "прямо сейчас", т.е. время практически соответствует текущему.


Мне хочется понять последовательность того что происходит в скрипте при этом.
Если команда из расписания установила длительность показа титра, то вызовется сразу после его запуска function Stop - с заданной длительностью, в этой функции нужно задать главному элементу длительность.
Затем, по истечении длительности показа - функция Stop титра уже не вызывается? А за счет чего останавливается главный элемент - ОнЭйром?
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

Я уже писал, что есть два способа поведения в скрипте.

Первый - вы ничего сами не останавливаете, т.е. не перегружаете Stop. В этом случае за вас как-то это сделает титровальное ядро. На мой взгляд - это не верный способ поведения, но он имеет право на жизнь.

Второй - вы в скрипте сами заботитесь об остановке всех входящих в него титровальных элементов. Я, например, поступаю так: в скрипте заводится специальный служебный элемент (обычно мы его называем main). И именно по нему происходит остановка всех остальных элементов. Т.е. в Stop вы останавливаете main:
override public function Stop(atStop : double, fade : double) : boolean
{
Trace("script.Stop({0})", atStop);
try
{
Main.Stop(atStop, fade);
return true;
}
catch (e : Exception)
{
Trace("script.Stop() -- Exception: {0}", e.ToString());
}
return false;
}
В нужный момент времени main остановится и сделает нотификацию об этом. Тогда уже можно остановить всех остальных:
override public function OnElementStop(name : String, index : int, taskId : int, stopTime : double, taskText: String)
{
try
{
if ( name == Main.Name )
{

Backgr.Abort(0);
Title.Abort(0);
::::::::
::::::::
}
}
catch (e : Exception)
{
Trace("+++ [{0}].stop() -- Exception: {1}", name, e.ToString());
}
}
}
Daemon23RUS
Сообщения: 1
Зарегистрирован: 18 апр 2015 05:32

Сообщение Daemon23RUS »

Даниленко Сергей писал(а): ...
В нужный момент времени main остановится и сделает нотификацию об этом.
...
В приведенно ниже фрагменте скрипта, через 10 секунд после старта отображается объект картинка, которая через 20 секунд скрывается. Но нотификация об остановке не прилетает. Возникает ряд вопросов:
1) Должна ли быть нотификация OnElementStop от Картинки ?
2) Будет ли при такой конструкции нотификация OnElementStop ?

При этом Main при остановке вызывает нотификацию.

Код: Выделить всё

    override function Start(atStart : double, fadeDuration : double) : boolean {
    	Debug.WriteLine("script Start");
    	try {
			Main.Start (0,1);
			Picture.LoadTask(LogoFile,ETaskType.eTaskFileName);
			Picture.Start(-10,1);
			Picture.Stop(-20,1);	
	    } catch (ee: Exception) {
	    	Debug.WriteLine("script Start exception:" + ee.Message);
            throw;
	    }
	    return true;
    override function OnElementStop(name: String, index: int, id: int, time: double, text: String) {
        Debug.WriteLine("===script OnElementStop:" + name + " index:" + index + " id:" + id + " time:" + time + " text:" + text);    
    	try {
    		// TODO: 
	    } catch (ee) {
	    	Debug.WriteLine("script OnElementStop exception:" + ee);
	    }
    }

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

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

Нотификации от титровального элемента "Картинка" нет.
Main - это "Подпись". От него нотификация приходит. Для показа картинки также можно использовать "АнимЛого". Нотификация приходить будет.
Ответить