При появлении на входе сплайсера одновременно нескольких каналов ввода возникает конфликтная ситуация, которая разрешается применением нескольких уровней доступа каналов ввода с уровнем приоритета от 0 до 9, что гарантирует использование корректного по уровню доступа канала ввода. Уровень доступа каналов ввода с уровнем приоритета 0 обладает самым низким приоритетом. Уровень доступа каналов ввода с уровнем приоритета 9 обладает самым высоким приоритетом, который может переопределить соединение с более низким приоритетом. Флаг OverridePlaying в сообщении Splice_Request определяет приоритет вставки в тот момент, когда сплайсер ставит канал ввода в очередь на вставку или выполняет вставку. Если флаг установлен в "1", то ввод с более высоким приоритетом может прервать или понизить приоритет канала ввода, который в настоящий момент проигрывается. Если флаг установлен в "0", сплайсер не будет заменять вставку, проигрываемую в настоящий момент, даже если новый запрос будет иметь более высокий приоритет.
Сообщение Splice_Request должно быть отправлено не менее чем за 3 с до времени вставки (splice time( )). Если это условие не выполняется, то стандарт не определяет последствия обработки сообщения Splice_Request данным API. Если несколько серверов инициируют запросы вставки в один и тот же интервал времени с одним и тем же приоритетом, сплайсер расположит приоритеты запросов в порядке поступления. Все другие запросы будут отвергаться, и ошибка коллизии будет отправлена в сообщении Splice_Response (если не установлен флаг OverridePlaying).
Например, на интервале времени, предшествующем инициированию вставки, могут иметь место следующие ситуации:
- если запрос с приоритетом 5 Splice_Request получен одновременно с запросом приоритета 3 Splice_Request, то фиксируется ошибка коллизии, которая возвращается в ответ на запрос приоритета 3;
- если запрос с приоритетом 7 Splice_Request получен позже запроса с приоритетом 5 в том же интервале времени, ошибка коллизии возвращается на запрос приоритета 5 и запрос приоритета 7 поставлен в очередь;
- если второй запрос с приоритетом 7 получен с флагом OverridePlaying, установленным в 0, тогда второй запрос приоритета 7 примет ошибку коллизии.
Однако если флаг OverridePlaying установлен в 1 во втором запросе с приоритетом 7, первоначальный запрос с приоритетом 7 получит ошибку коллизии и будет переопределен.
На рисунке 2 показана диаграмма обработки запросов двух каналов ввода сплайсера. Затененные области на диаграмме обозначают каналы ввода, которые будут направлены к выходному каналу в указанные моменты времени.
Рисунок 2 - Операция флага OverridePlaying
Момент времени t1: Сервер 1 выпускает сообщение Splice_Request и начинает передавать свой поток к сплайсеру. Сплайсер переключает этот поток канала ввода на выходной канал. В сообщении Splice_Request был сделан запрос о вставке продолжительностью от времени t1 до времени t5. Сплайсер должен отправить Серверу 1 сообщение SpliceComplete_Response с SpliceType с установкой флага к Splice_in и с установкой значения Кода Результата "100": "Успешный Ответ".
Момент времени t2: Сервер 2 выпускает сообщение Splice_Request с флагом OverridePlaying установленным в "1", которое имеет равный или более высокий приоритет (по сравнению с каналом ввода (от Сервера 1)). Во время, определенное в сообщении Splice_Request, поток канала ввода 2 переключен на выходной канал (заменяет продолжающийся поток от Сервера 1). Сервер 2 сообщением Splice_Request запросил вставку продолжительностью от времени t2 до времени t3. Сплайсер должен отправить Серверу 1 сообщение SpliceComplete_Response с флагом SpliceType, установленным в Splice_out и с Кодом Результата "125": "Переопределение Канала". Сплайсер отправляет Серверу 2 сообщение SpliceComplete_Response с установкой флага SpliceType в Splice_in и устанавливает значение Кода Результата "100": "Успешный Ответ". Если Сервер 1 решает, что переопределение канала является ошибкой, он может отправить сообщение Abort_Request и завершить поток.
Момент времени t3: Вставка от Сервера 2 завершена, и сплайсер возвращается к материалу от Сервера 1, направляя его к выходному каналу. Сплайсер не переключает основной канал к выходному каналу. Сплайсер передает Серверу 1 сообщение SpliceComplete_Response с набором флага SpliceType к Splice_in и устанавливает значение Кода Результата "125": "Переопределение канала". Сплайсер передает на Сервер 2 сообщение SpliceComplete_Response с установкой флага SpliceType к Splice_out и устанавливает значение Кода Результата "100": "Успешный Ответ".
Момент времени t4: Сервер 2 выпускает сообщение Splice_Request с установкой флага OverridePlaying, установленным в "1". Во время, определенное сообщением Splice_Request, поток канала ввода 2 переключается на выходной канал (заменяя поток от Сервера 1). Сервер 2 сообщением Splice_Request запрашивает вставку продолжительностью от времени t4 до времени t6. Сплайсер должен отправить Серверу 1 сообщение SpliceComplete_Response с флагом SpliceType, установленным в Splice_out и со значением Кода Результата "125": "Переопределение канала". Сплайсер отправляет на Сервер 2 сообщение SpliceComplete_Response с установкой флага SpliceType, установленным в Splice_in, и со значением Кода Результата "100": "Успешный Ответ".
Момент времени t5: Сервер 1 заканчивает проигрывать вторую часть потока вставки, переопределенную Сервером 2.
Момент времени t6: Заключительная часть вставки завершена, сплайсер возвращается к материалу от основного канала и направляет его к выходному каналу. Сплайсер передает Серверу 2 сообщение SpliceComplete_Response с установкой флага SpliceType к Splice_out и устанавливает значение Кода Результата "100": "Успешный Ответ".
Возможна ситуация, когда несколько серверов должны будут разделить сообщение Cue_Request с возможностью вставки общей продолжительностью 60 с, когда один Сервер будет использовать первые 30 с, а второй Сервер будет использовать последние 30 с. В зависимости от приоритетов и в случае, если будут приняты сообщения Splice_Request, сплайсер должен установить Код Результата "109" "Коллизия вставки", если она возникнет. Настоящий стандарт не устанавливает параметры API, обеспечивающие возможность координации двух Серверов. Указанная координация может быть выполнена по взаимному соглашению между Серверами или API в версии сервер - сервер.