SS IPTV поддерживает работу архивов различных стандартов. Для плейлистов с подключенными архивами становятся доступны интерфейсные возможности приостановки, перемотки и выбора передачи для воспроизведения из телепрограммы.
Передача в режиме отложенного просмотра:
Подключение архива
Для того, чтобы подключить к приложению ваш архив телепрограмм, в плейлисте необходимо указать следующие атрибуты:
- catchup - определяет тип используемого архива (см. Поддерживаемые форматы).
- catchup-source - определяет ссылку api, которую приложение использует для получения архивных телепрограмм. Данный атрибут не является обязательным, его следует использовать только в том случае, если ссылку получения архивной телепрограммы невозможно получить из основной ссылки live-потока.
- catchup-days - определяет длину архива в днях. Данный атрибут не является обязательным, значение по умолчанию - 3 дня.
Вы можете указать эти атрибуты при директиве #EXTM3U, в этом случае атрибуты будут применены ко всем элементам плейлиста:
#EXTM3U catchup="default" catchup-days="5"
Либо указать эти атрибуты для конкретных каналов при директиве #EXTINF:
#EXTINF: 0 catchup="default" catchup-days="5", Disney Channel
Кроме того, можно не указывать эти атрибуты в плейлисте, а передать их в качестве параметра в ссылке на плейлист, после решетки. В этом случае атрибуты также будут применены ко всему плейлисту:
http://example.com/playlist.m3u#catchup=default&catchup-days=5
Переменные шаблона
Для создания шаблона обращения к API архива используются переменные, вместо которых приложение подставляет динамические значения:
- ${start} - время начала архивного потока в формате UNIX Time Stamp
- ${timestamp} - текущее время в формате UNIX Time Stamp
- ${offset} - смещение времени начала архивного потока относительно текущего времени в секундах
Поддерживаемые форматы
Default. Для создания запроса к API архива используется только шаблон, созданный на основе преобразования url-основного потока, либо из атрибута catchup-source:
#EXTINF: 0 catchup="default", Disney Channel http://example.com/stream1_${offset}.m3u8
Приведенный пример указывает приложению, что для получения текущей трансляции и архивной используется один и тот же шаблон с указанием смещения. Т.о. текущую трансляцию приложение будет запрашивать по ссылке http://example.com/stream1_0.m3u8, а трансляцию, с началом 10 минут назад - по ссылке http://example.com/stream1_600.m3u8.
Если ссылки для текущей и архивных трансляций имеют принципиально разную структуру, вы можете воспользоваться атрибутом catchup-source:
#EXTINF: 0 catchup="default" catchup-source="http://example.com/archive/?start=${start}" http://example.com/stream1.m3u8
В приведенном примере приложение обратится за текущей трансляцией по ссылке http://example.com/stream1.m3u8, а за телепрограммой с началом 4 апреля 2017 г. в 15:30 - по ссылке http://example.com/archive/?start=1491395400
Flussonic/Flussonic-hls/Flussonic-ts. Использует API Flussonic для доступа к архивным телепрограммам. Данный формат архива не подразумевает использование атрибута catchup-source, поскольку метод преобразования ссылки на текущую трансляцию в ссылку на архив жестко регламентирован.
Архивные телепрограммы запрашиваются в формате hls согласно API Flussonic, запись catchup="flussonic-hls" является эквивалентной:
#EXTINF: 0 catchup="flussonic", Disney Channel
Архивные телепрограммы запрашиваются в формате MPEG-TS согласно API Flussonic.
#EXTINF: 0 catchup="flussonic-ts", Disney Channel
Shift. Архивные телепрограммы запрашиваются через добавление параметров utc и lutc к ссылке текущей трансляции (либо к ссылке в catchup-source), где utc - время начала запрашиваемой трансляции, lutc - текущее время:
#EXTINF: 0 catchup="shift", Disney Channel http://example.com/stream1.m3u8
В этом случае для запроса архивной трансляции будет сформирована ссылка примерно такого вида: http://example.com/stream1.m3u8?utc=1491395400&lutc=1491808183
Stalker. Архивные телепрограммы запрашиваются согласно Stalker API
Для настройки в SS IPTV авторизации пользователя провайдер должен подготовить серверный скрипт, который будет возвращать плейлист, основываясь на авторизационных данных, полученных в GET-параметрах. Плейлист, возвращаемый скриптом должне полностью удовлетворять требованиям по CORS и кодировке (utf-8)
Пример ссылки скрипта:
http://example.com/playlist.php?user=test_login&pass=test_pass
После того, как данная скрипт будет подготовлен, провайдеру следует в Личном Кабинете Оператора сменить тип доступа для пакета:
- Токен - авторизация по одному параметру
- Логин/пароль - авторизация по двум параметрам
Далее следует указать ссылку на скрипт, возвращающий плейлист, заменив данные, которые должен ввести пользователь на специальные переменные среды:
- ${token} - введенный пользователем токен (авторизация по одному параметру)
- ${login} - введенный пользователем логин (авторизация по двум параметрам)
- ${password} - введенный пользователем пароль (авторизация по двум параметрам)
Например:
http://example.com/playlist.php?user=${login}&pass=${password}
Приложение позволяет прописывать в плейлисте ссылку на внешнюю телепрограмму, которая будет подгружаться, когда пользователь открывает соответствующий плейлист.
Внимание! Зачастую телевизоры не обладают достаточными ресурсами, чтобы обрабатывать большие источники телепрограмм! Бездумное использование данной опции может привести к подвисанию на длительное время, либо к полному прекращению работы приложения! Настоятельно рекомендуется подключать телепрограмму только для тех каналов, для которых она отсутствует в приложении.
Чтобы заставить приложение обратиться за внешней телепрограммой, необходимо к заголовочной директиве #EXTM3U добавить атрибут x-tvg-url:
#EXTM3U x-tvg-url="ссылка_на_телепрограмму"
В настоящее время поддерживаются телепрограммы формата jtv и xmltv. Рекомендуемый размер jtv - не более 0,5 Мб, xmltv - не более 5 Мб. Использование сжатия для xmltv - недопустимо.
Чтобы обеспечить загрузку телепрограммы на всех устройствах, файл должен отдаваться с http-заголовком: Access-Control-Allow-Origin: *
кроме того, для xmltv необходимо также наличие следующих заголовков:
Access-Control-Allow-Methods: "GET, POST, OPTIONS, HEAD" Access-Control-Allow-Headers: "Range" Access-Control-Expose-Headers: "Accept-Ranges, Content-Encoding, Content-Length, Content-Range"
При каждой своей загрузке SS IPTV запрашивает плейлист по адресу http://iptv.local/playlist.m3u
и в случае успешной загрузки выводит соответствующий тайл на Главный экран
Обращение за плейлистом происходит вне зависимости от того, зарегистрирован провайдер, пользователь которого запустил приложение, в системе или нет. Т.о. настроив DNS своей сети нужным образом, вы можете обеспечить простую доступность вашего плейлиста для собственных пользователей даже в том случае, если вы не были внесены в список поддерживаемых операторов.
В то же время, регистрация в системе позволяет оператору обеспечить гораздо более гибкое распространение контента, например, средствами получения от пользователя авторизационных параметров (логин/пароль, идентификатор устройства и т.п.
Для того, чтобы обеспечить гарантированную загрузку плейлиста на всех устройствах, сервер должен отдавать его с http-заголовком Access-Control-Allow-Origin. Все требования и возможности, касающиеся структуры плейлиста, распространяются также и на плейлисты, загружаемые из локального домена.
SS IPTV использует плейлисты, удовлетворяющие спецификации формата Extended M3U. Подробную информацию о структуре файла вы можете найти в нашей статье Инструкция по формату M3U.
Важно помнить, что поскольку на телевизорах некоторых производителей запрещены кросс-доменные запросы, загрузка файла плейлиста будет осуществляться не непосредственно клиентским устройством (телевизором), а сервером приложения, а значит, ссылка на файл должна быть доступна из внешней сети (или хотя бы для сервера приложения). Если же вы хотите, чтобы клиентское устройство загружало ваш плейлист напрямую, необходимо осуществить настройку вашего сервера в соответствии с технологией CORS. На практике это означает, что http-заголовок ответа на запрос плейлиста должен содержать следующую строку:
Access-Control-Allow-Origin: *
Кроме того плейлист должен быть доступен с IP адресов 195.201.246.115 116.202.118.184, 138.201.198.228 и 94.19.241.39 для периодической проверки.
Ниже приведена информация по настройке CORS для различных платформ
Header set Access-Control-Allow-Origin "*"
Для того чтобы убедиться в том, что изменения произошли корректно, рекомендуется использовать
apachectl -t
чтобы проверить изменения конфигурации на ошибки. После этого сервер возможно потребуется перезагрузить.
- Откройте диспетчер служб IIS
- Выберите сайт, в котором вы хотите включить CORS
- Нажмите Заголовки ответов HTTP
- Нажмите Добавить
- Для имени заголовка выберите Access-Control-Allow-Origin, для значения - *
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> </system.webServer> </configuration>
Если у вас нет файла web.config, просто создайте файл с таким именем и добавьте в него приведенный код
<?phpВ данном примере ссылка на плейлист для SS IPTV будет ссылкой на исполняемый файл php.
header("Access-Control-Allow-Origin: *");
$playlist = file_get_contents('playlist.m3u');
echo($playlist);
?>
add_header Access-Control-Allow-Origin *;Местоположение файла настроек по умолчанию: /etc/nginx/sites-available/default