Вначале определим, чем отличаются таймауты соединения и чтения данных (Connect timeout и Read Data timeout).
Connect timeout.Когда клиент (в этом случае TVLINK выступает клиентом по отношению к сайту или провайдеру откуда он запрашивает потоки) инициализирует соединение, он должен получить ответ от сервера (специальный код ответа). Не важно какой именно ответ поступит от сервера. Это может быть ответ 200 (соединение установлено) или 302 (переадресация) или любой другой, главное, чтобы сервер ответил. Если в течении времени указанного в таймауте соединения (Connect timeout) ответ от сервера не поступил, клиент сбросит соединение.
Read Data timeout.Когда клиент получил ответ 200 (соединение установлено) от сервера, он начинает загружать (читать) данные которые отдает сервер. Если в течении времени указанного в таймауте чтения данных (Read Data timeout) сервер не передает информацию, клиент сбросит соединение.
Теперь определимся с форматами потоков.
Самые распространённые из них это: TS и HLS.
«TS» это по сути тоже самое, как если бы вы загружали какой-то файл в браузере. Клиент делает запрос и, если получает ответ 200, просто последовательно получает данные. Данные естественно идут в один поток и, если возникают проблемы по пути следования трафика, это непременно вызовет проблемы с видео. То есть, для IPTV через интернет не лучшее решение. Больше подходит для локальной сети.
«HLS» это тот же самый «TS» (упрощенно конечно) но порезанный на куски (сегменты). За счет того, что эти сегменты, это уже записанные файлы (в отличии от TS который идет в реальном времени) и их (этих файлов) несколько, клиент имеет возможность скачивать одновременно несколько сегментов. Что в свою очередь помогает бороться с проблемами трафика, и соответственно больше подходит для вещания IPTV через интернет.
Теперь непосредственно о параметрах «TVLINK».
«General HTTP timeout Connect/Data».Если у вас TS-поток, именно эти таймауты будут работать. «HLS segment» таймауты принимать участие для таких потоков не будут.
Если у вас HLS-поток, «General HTTP» таймауты будут работать, когда вы получаете плейлисты со списками разрешений (провайдер может предоставлять несколько вариантов качества потоков) или сегментов. Плейлисты это текстовые файлы, которые содержат ссылки на другие плейлисты (если это список качества потоков) или ссылки на видео сегменты.
«HLS segment timeout Connect/Data».Эти таймауты работают непосредственно с сегментами (видео файлами). Хотя в названии этого параметра стоит «HLS», но эти таймауты работают и с другими форматами сегментированных потоков. Например, «DASH».
В простом случае (без списка качества потоков) для HLS-потоков это будет выглядеть так:
- получение списка сегментов - «General HTTP timeout»
- загрузка сегмента 1 - «HLS segment timeout»
- загрузка сегмента 2 - «HLS segment timeout»
- загрузка сегмента 3 - «HLS segment timeout»
- получение нового списка сегментов - «General HTTP timeout»
- загрузка сегмента 4 - «HLS segment timeout»
- загрузка сегмента 5 - «HLS segment timeout»
- загрузка сегмента 6 - «HLS segment timeout»
- получение нового списка сегментов - «General HTTP timeout»
- и так далее…
«HLS segment queue threshold».Это параметр (таймаут) тоже относится к HLS-потокам. Список HLS-сегментов (плейлист) содержит переменную где указана длительность видео в сегменте. Эта переменная используется TVLINK для того чтобы знать через какое время запросить новый файл сегментов. Сервер, постоянно обновляет это список, как только закончена запись нового сегмента.
«HLS segment queue threshold» это число на которое будет умножено переменная длительности сегмента. И если в течении времени (которое мы получили при умножении) на сервере не обновился список сегментов, клиент разорвет соединение.
Например, в списке указано что длительность сегмента 6 секунд. «HLS segment queue threshold» у нас равно трем. Через 18 секунд клиент разорвет соединение если на сервере нет нового сегмента.
«Threads job timeout».Это таймаут внутреннего цикла «Streamlink» который читает данные со входа и записывает в выходной поток. Если в течении указанного времени через цикл не проходят данные, он прекращает работу. Соответственно любое соединение закрывается. Закрывается это в теории. Но в силу того, что модули «Streamlink» не идеальны соединения могут остаться в зависшем состоянии (остаться открытыми сокеты). Поэтому я рекомендую ставить здесь значение больше чем таймауты в «General HTTP» и «HLS segment».
«Stream retry count».Число повторных попыток соединения при срабатывании «General HTTP» и «HLS segment» таймаутов. Думаю, здесь добавить не чего.