Streamlink позволяет открыть прямую трансляцию или другой поддерживаемый поток по адресу страницы, выбрать доступное качество, передать медиаданные во внешний проигрыватель, сохранить их в файл либо вывести в стандартный поток для дальнейшей обработки.
Работа строится вокруг командной строки и системы плагинов. Пользователь передаёт Streamlink адрес страницы или прямой адрес потока, утилита определяет подходящий обработчик, получает варианты качества и открывает выбранный вариант. Воспроизведение обычно выполняет VLC, mpv или другой совместимый проигрыватель: Streamlink отвечает прежде всего за извлечение адресов и транспорт медиаданных, а не за собственное окно просмотра.
Основной сценарий — прямые эфиры и потоковые источники. Поддержка архивных роликов зависит от конкретного плагина, а некоторые сервисы требуют учётную запись, региональный доступ, cookies, дополнительные HTTP-заголовки или FFmpeg для объединения раздельных дорожек. Поэтому правильная настройка Streamlink начинается не с выбора контейнера, а с понимания источника, протокола и способа передачи данных плееру или в файл.
Скачать Streamlink
- Конвертация видео
- Сжатие файлов
- Просто для новичков
- Нет графического интерфейса
- VOD поддерживаются не везде
- FFmpeg нужен для muxing
Как устроен рабочий процесс Streamlink
В самом коротком варианте команда состоит из адреса источника и имени потока. Если имя качества не указано, Streamlink пытается распознать адрес и выводит список найденных вариантов. Если после адреса указать best, выбирается наиболее высоко ранжированный вариант; worst означает самый низко ранжированный. В списке часто встречаются обозначения вроде 720p, 1080p60, audio_only, а рядом с крайними вариантами утилита показывает синонимы best и worst.
streamlink "<URL>"
streamlink "<URL>" best
streamlink "<URL>" 720p
После выбора качества Streamlink открывает поток подходящим внутренним классом — например HLS, DASH или обычным HTTP-потоком — и передаёт данные в выбранный выход. По умолчанию это внешний проигрыватель. Альтернативы — запись в файл, стандартный вывод, одновременная запись и воспроизведение, а также отдача данных плееру через временный HTTP-сервер или именованный канал.
Система плагинов отделяет логику конкретных сайтов от работы с HLS, DASH и HTTP. Плагин знает, как из страницы конкретного сервиса получить реальные медиапотоки, какие запросы и заголовки нужны, какие варианты качества существуют и какие дополнительные параметры доступны. Поэтому один и тот же общий синтаксис применяется к разным сервисам, но фактические возможности всегда определяются плагином и самим источником.
Такой подход важен для понимания ограничений. Streamlink не является универсальным средством для сохранения любого видео, которое видно в браузере. Если для адреса нет плагина и это не прямой поддерживаемый поток, утилита не сможет автоматически извлечь медиаданные. Аналогично, наличие плагина не гарантирует поддержку всех разделов сайта: один сервис может поддерживать только прямые эфиры, другой — эфиры и часть архива, третий — только отдельные типы страниц.
Первый запуск и чтение вывода в терминале
Для практической работы достаточно открыть терминал, выполнить команду с адресом трансляции и посмотреть на строки журнала. Сообщение о найденном плагине показывает, какой обработчик сопоставлен с адресом. Затем строка Available streams перечисляет доступные имена потоков. После выбора появляются сообщения об открытии потока и запуске проигрывателя.
Не стоит воспринимать имя качества как заранее фиксированный перечень. Набор формирует источник: у одной трансляции доступны 360p, 720p и 1080p60, у другой — только один вариант, у третьей отдельно присутствует аудиопоток. Если сервис выдаёт альтернативные типы потоков с одинаковым видимым качеством, Streamlink учитывает приоритет типов и может показывать различия между HLS, HTTP или другими реализациями.
streamlink "<URL>"
# вывод: найденный плагин и список доступных потоков
streamlink "<URL>" best
# открытие выбранного варианта и запуск проигрывателя
Адрес и аргументы желательно заключать в кавычки, если в них есть символы, которые командная оболочка интерпретирует сама: амперсанд, вопросительный знак, пробелы, круглые скобки и некоторые другие символы. Особенно это заметно в PowerShell и командных оболочках Unix, где один и тот же фрагмент может иметь различный смысл. Ошибка оболочки возникает до запуска Streamlink и потому не исправляется параметрами самой программы.
Для проверки установки полезны streamlink --version и streamlink --help. Первый вызов подтверждает, что команда доступна из текущего окружения, второй показывает группы параметров и точный синтаксис. Если команда не находится, проблема обычно связана с PATH, способом установки или тем, что терминал был открыт до изменения переменных среды.
Выбор качества, запасные варианты и фильтрация
Синоним best удобен, когда нужно каждый раз брать верхний вариант без привязки к конкретному разрешению. Однако максимальное качество не всегда оптимально: высокая частота кадров и большой битрейт увеличивают требования к соединению и декодеру, а при нестабильной сети могут приводить к остановкам. В таких случаях лучше явно выбрать поток или ограничить ранжирование.
Streamlink позволяет перечислить несколько желаемых вариантов через запятую. Утилита проверяет их по порядку и использует первый доступный. Это удобно для сценария 1080p60, если есть; иначе 720p60; затем лучший из оставшихся.
streamlink "<URL>" "1080p60,720p60,720p,best"
Параметр --default-stream задаёт поток по умолчанию и особенно удобен в конфигурационном файле. В таком режиме можно оставить в привычной команде только адрес, а правило выбора качества хранить постоянно. При необходимости командная строка может переопределить общую настройку.
Для более строгого контроля есть --stream-sorting-excludes. Он исключает из ранжирования варианты выше, ниже или равные указанному уровню. Например, ограничение выше 720p делает best фактически лучшим вариантом не выше 720p. Это полезнее жёсткого имени, если разные каналы публикуют неодинаковые наборы разрешений. Если фильтр исключил всё, обычные best и worst становятся недоступны, а для явного обхода фильтра предусмотрены best-unfiltered и worst-unfiltered.
Параметр --stream-types задаёт допустимые типы и их приоритет. Это отличается от качества: фильтр типов отвечает за технологию потока, а не за разрешение. Настройка нужна, когда один источник предлагает несколько реализаций одинакового качества и пользователь хочет, например, предпочитать HLS либо, наоборот, исключить определённый тип.
Нельзя заранее считать, что имя 1080p60 гарантирует конкретный кодек, битрейт или контейнер. Имя потока — удобная метка ранжирования, а технические параметры зависят от сервиса и манифеста. Если критичен кодек, язык звука или способ объединения дорожек, надо проверять опции конкретного плагина и протокола.
Воспроизведение через VLC, mpv и другие проигрыватели
Streamlink не декодирует видео ради собственного окна. Он запускает внешний проигрыватель и передаёт ему поток. Если VLC находится в стандартном месте и доступен, программа умеет использовать его без явного параметра. Для другого проигрывателя применяется --player или короткая форма -p.
streamlink --player mpv "<URL>" best
streamlink --player "C:\Program Files\VideoLAN\VLClc.exe" "<URL>" best
Путь с пробелами нужно корректно заключать в кавычки. На macOS исполняемый файл VLC находится внутри пакета приложения, поэтому при ручном указании пути важно передать путь именно к исполняемому файлу. На Linux и BSD чаще достаточно имени команды, если плеер доступен через PATH.
Параметры плеера
--player-args передаёт дополнительные аргументы проигрывателю. В строке поддерживается переменная {playerinput}, которая заменяется тем способом ввода, который выбрал Streamlink. Если переменная отсутствует, вход обычно добавляется автоматически. Это позволяет включить в VLC или mpv нужный размер буфера, поведение после окончания потока, полноэкранный режим и другие параметры, но названия таких параметров уже относятся к документации самого проигрывателя.
streamlink --player mpv --player-args="--keep-open=no {playerinput}" "<URL>" best
Параметр --player-verbose выводит stdout и stderr дочернего проигрывателя вместе с журналом Streamlink. Он полезен, когда Streamlink успешно открывает источник, но окно плеера сразу закрывается или плеер сообщает собственную ошибку формата, декодера или входного интерфейса.
Четыре способа передать данные
Стандартный режим использует stdin: Streamlink пишет данные в стандартный ввод процесса плеера. Для проигрывателей, которым удобнее файловый интерфейс, предусмотрен именованный канал --player-fifo. Режим --player-http запускает локальную HTTP-точку, из которой плеер читает поток. --player-continuous-http похож на HTTP-режим, но рассчитан на повторные подключения проигрывателя к одной локальной точке.
Отдельно существует --player-passthrough: вместо прокачивания медиаданных через Streamlink программе плеера передаётся разрешённый адрес потока. После этого сетевые запросы выполняет уже проигрыватель. Этот режим подходит только для типов, которые плеер умеет получать сам, и не годится для каждого протокола. Например, сложные DASH-сценарии с раздельными дорожками обычно требуют обработки Streamlink и FFmpeg, а не простого passthrough.
Если VLC сообщает, что не может открыть MRL вида fd://0, проблема связана с stdin-режимом конкретной сборки или платформы. Практический обход — переключиться на FIFO или HTTP. Это важнее бесконечного увеличения сетевых таймаутов: данные уже получены, а сбой происходит на границе между Streamlink и плеером.
Сохранение потока в файл и одновременная запись
Для записи вместо проигрывания используется --output или короткая форма -o. Streamlink пишет принятые медиаданные в указанный файл. Он не обязан перекодировать их: расширение файла само по себе не превращает поток в другой кодек или контейнер. Поэтому имя лучше выбирать в соответствии с тем, что выдаёт источник и какой выход формирует Streamlink.
streamlink --output "recording.ts" "<URL>" best
Если файл уже существует, Streamlink по умолчанию просит подтверждение перезаписи. Для неинтерактивных сценариев применяется --force, но использовать его надо осторожно: он снимает защиту от случайного затирания файла.
--record решает другую задачу: сохраняет поток и одновременно оставляет обычный выход для проигрывателя. Это удобный режим для прямого эфира, который нужно смотреть и архивировать одновременно. Путь записи может включать подкаталоги; при разрешённых правах Streamlink создаёт недостающие каталоги.
streamlink --record "records/session.ts" "<URL>" best
Для конвейеров применяется --stdout или -O. Медиаданные пишутся в стандартный вывод, после чего их можно передать FFmpeg, плееру, собственному анализатору или другому процессу. Журнал при этом должен оставаться на stderr, иначе бинарные медиаданные нельзя смешивать с текстовыми сообщениями.
streamlink --stdout "<URL>" best | ffmpeg -i pipe:0 ...
Комбинация --stdout и --record позволяет одновременно сохранить исходный поток и отправить копию в следующий процесс. Старые примеры в интернете могут использовать --record-and-pipe; в современной конфигурации та же практическая задача решается сочетанием двух отдельных опций. При переносе старых команд полезно сверяться с --help, потому что в командной строке Streamlink встречаются устаревшие псевдонимы.
Что именно окажется в файле
Streamlink сохраняет потоковые данные, которые удалось извлечь и, при необходимости, объединить. Это не редактор и не система авторинга. Если нужен MP4 с конкретными кодеками, нормализованным звуком, обрезкой, метаданными контейнера или перекодированием, такую обработку обычно выполняют FFmpeg или другой профильный инструмент после либо во время получения потока.
При раздельных видео- и аудиодорожках Streamlink может привлекать FFmpeg для muxing. В этом случае итоговый байтовый поток уже является результатом объединения дорожек, но это всё ещё не означает обязательного перекодирования: FFmpeg может копировать потоки в общий контейнер, если параметры совместимы.
Шаблоны имён файлов и метаданные трансляции
Для автоматической записи полезны переменные метаданных. Streamlink умеет подставлять их в --output, --record и заголовок плеера. Общие переменные включают имя плагина, разрешённый адрес и текущую дату/время. Многие плагины дополнительно предоставляют идентификатор трансляции, автора или канал, категорию и заголовок.
streamlink --record "records/{author}/{time:%Y%m%d_%H%M%S}-{id}.ts" "<URL>" best
Доступность {author}, {category}, {title} и {id} не одинакова для всех сервисов. Если плагин не публикует определённое поле, подстановка для имени файла может оказаться пустой. Поэтому автоматизированная схема должна оставаться корректной даже при пропущенной переменной: например, включать время, которое доступно независимо от сайта.
Переменная {time} поддерживает форматирование по правилам strftime. Это даёт стабильные имена с датой и временем и помогает избежать конфликтов при регулярных записях. Символы, недопустимые для файловой системы, при подстановке заменяются безопасным образом в рамках правил Streamlink.
Параметр --title позволяет сформировать заголовок окна проигрывателя из метаданных, если используемый плеер поддерживается для автоматической передачи заголовка. Практический вариант — показывать автора, категорию и название трансляции. Это удобно при нескольких одновременно открытых потоках, когда одинаковые окна VLC или mpv трудно различать по панели задач.
streamlink --title "{author} - {category} - {title}" "<URL>" best
Для машинной обработки метаданных есть --json. Он выводит структурированное представление найденного плагина, потоков и доступных метаданных. Такой режим предпочтительнее разбора человекочитаемого текста регулярными выражениями: формат журнала предназначен для диагностики и может меняться, а JSON создавался именно для программного использования.
HLS: буфер, live edge, сегменты и перемотка
HLS разбивает трансляцию на последовательность сегментов, перечисленных в плейлисте. Streamlink регулярно обновляет плейлист, загружает сегменты и пишет их в выходной буфер. Большая часть параметров задержки и устойчивости у прямых эфиров связана именно с тем, насколько далеко от живого края начинается чтение и как быстро новые сегменты попадают в очередь.
--hls-live-edge задаёт количество сегментов, на которое начало воспроизведения отстаёт от текущей позиции эфира. Значение по умолчанию оставляет небольшой запас. Уменьшение сокращает задержку, но снижает время на получение очередного сегмента; при сетевой нестабильности возрастает риск буферизации. Увеличение делает воспроизведение устойчивее ценой дополнительного отставания.
streamlink --hls-live-edge 2 "<URL>" best
--hls-segment-stream-data разрешает писать данные сегмента в выходной буфер ещё до того, как загрузка всего сегмента завершена. Это уменьшает дополнительную задержку, но полезность зависит от сервиса и качества соединения. Для некоторых плагинов низкой задержки опция включается автоматически вместе с другими настройками.
--stream-segment-threads управляет количеством параллельных загрузок сегментов. Увеличение может помочь, когда CDN и соединение хорошо работают с параллелизмом, но слишком большое значение не является универсальным ускорителем: оно создаёт больше одновременных запросов и может ухудшить ситуацию при ограничениях сервера или слабой сети.
За повторные попытки и таймаут сегментов отвечают общие параметры --stream-segment-attempts и --stream-segment-timeout. Они применяются к сегментированным потокам шире, чем старые HLS-специфичные параметры, которые могут встречаться в устаревших инструкциях.
--hls-playlist-reload-time позволяет переопределить интервал обновления плейлиста. Значение можно задать числом либо одним из предусмотренных режимов, связанных с длительностью сегмента или live edge. Это настройка для случаев, когда сервер публикует плейлист с необычным поведением; без причины менять её не следует.
Начальная позиция и ограничение длительности
--hls-start-offset задаёт смещение от начала потока, а для прямого эфира отрицательное значение интерпретируется относительно конца доступного окна. Практическая возможность перемотки зависит от того, какие старые сегменты сервер сохраняет в плейлисте. Streamlink не может вернуть фрагменты, которые CDN уже убрал.
--hls-live-restart пытается начать прямой эфир с наиболее ранней позиции, доступной в текущем HLS-окне. Это полезно для эфиров с DVR-плейлистом, но не создаёт архив там, где его нет.
Ограничение времени для сегментированных потоков задаётся --stream-segmented-duration. Продолжительность округляется к границам сегментов, поэтому это не кадрово-точная обрезка. Для точного монтажа сохранённый материал лучше обрабатывать отдельным редактором или FFmpeg.
Несколько аудиодорожек
--hls-audio-select выбирает одну или несколько HLS-аудиодорожек по языковому коду или имени. Значение * означает включение всех доступных аудиоисточников. Эта опция нужна главным образом там, где обычный выбор по локали недостаточен, например при нескольких дорожках одного языка или специальных вариантах звука.
Низкая задержка в прямом эфире
Задержка складывается как минимум из трёх частей: публикации сегментов самим сервисом, буфера Streamlink и буфера проигрывателя. Уменьшение только одного параметра не гарантирует мгновенного результата. Например, низкий hls-live-edge бесполезен, если плеер сам накапливает большой запас перед стартом.
Для Twitch предусмотрен --twitch-low-latency. Он включает поведение, рассчитанное на эфиры, где вещатель и сервис действительно используют низкую задержку: уменьшает значение HLS live edge до небольшого уровня и включает потоковую запись данных сегмента в выходной буфер. Если канал не работает в таком режиме, агрессивные параметры могут увеличить число остановок.
streamlink --twitch-low-latency --player mpv "<URL>" best
Дальнейшее уменьшение --hls-live-edge до единицы возможно, но официальная документация предупреждает о высокой вероятности буферизации. Причина проста: Streamlink почти не оставляет времени на обновление плейлиста и загрузку следующего сегмента. Для стабильного просмотра разумнее начать с режима плагина, а затем корректировать буфер плеера.
В VLC и mpv размер входного кэша настраивается собственными аргументами этих программ, которые можно передать через --player-args. Конкретные значения нельзя рекомендовать универсально: они зависят от битрейта, задержки сети и мощности устройства. Настройку следует делать по признакам — увеличивать запас при периодических остановках и уменьшать его, если приоритетом является минимальное отставание.
При записи задержка просмотра и полнота файла — разные задачи. Для архива надёжность обычно важнее нескольких секунд отставания, поэтому экстремально низкие значения live edge и минимальный буфер проигрывателя не дают преимуществ записанному файлу, зато повышают риск пропуска сегментов при проблемном соединении.
DASH и роль FFmpeg
MPEG-DASH часто хранит видео и звук в отдельных представлениях. Streamlink умеет разбирать MPD-манифесты и создавать варианты потока, но для объединения нескольких дорожек в единый выход требуется FFmpeg. В документации Streamlink FFmpeg указан как дополнительная зависимость именно для muxing: DASH с раздельным аудио и видео требует объединения, а HLS использует его в отдельных случаях, когда выбранные дорожки тоже надо свести вместе.
Если FFmpeg отсутствует или не находится через PATH, пользователь может увидеть ситуацию, когда список качеств получен, но открытие muxed-потока завершается ошибкой. Решение — установить FFmpeg либо указать путь к исполняемому файлу параметром Streamlink, если он предусмотрен в конкретной установке.
Параметры группы FFmpeg позволяют переопределять путь к бинарному файлу, уровень журнала, вывод диагностического stderr, формат итогового muxed-потока и, при необходимости, кодек транскодирования. Однако транскодирование не является обязательной частью обычной работы Streamlink. Чем меньше преобразований между источником и плеером, тем ниже лишняя нагрузка и тем проще диагностировать проблемы.
При выборе качества важно помнить, что лучший DASH-вариант может представлять собой пару дорожек, а не готовый единый файл. Streamlink скрывает часть сложности за именем потока и запускает muxer, но системные требования остаются: FFmpeg должен быть доступен, а кодеки должны поддерживаться контейнером или проигрывателем.
Если задача — только передать прямой MPD-адрес в программу, которая сама уверенно работает с DASH и умеет объединять дорожки, теоретически можно выбрать другой маршрут. Но --player-passthrough не является универсальным решением для DASH, поэтому надёжнее использовать штатный muxing Streamlink там, где он формирует составной поток.
Прямые HLS, DASH и HTTP-адреса без сайт-плагина
Плагин сайта нужен не всегда. Streamlink умеет принимать прямые адреса поддерживаемых протоколов: HLS, MPEG-DASH и прогрессивный HTTP. Для явного выбора применяются префиксы hls://, dash:// и httpstream://. Если передать обычный адрес манифеста, встроенный обработчик также может определить его по контексту.
streamlink "hls://<адрес_плейлиста>" best
streamlink "dash://<адрес_манифеста>" best
Встроенные протоколы полезны, когда реальный медиаплейлист уже известен. Они не выполняют логику сайта: не ищут скрытый манифест на HTML-странице, не получают специфический токен сервиса и не повторяют сценарии авторизации плагина. Если прямой адрес короткоживущий или привязан к cookies и заголовкам, эти требования всё равно придётся передать.
Для HLS можно задавать параметры прямо в строке встроенного протокола, включая смещение старта, длительность и принудительный перезапуск. Значения интерпретируются как строки или Python-литералы в соответствии с синтаксисом Streamlink. Такой режим больше подходит для опытных пользователей и скриптов, где параметры формируются программно.
Локальные плейлисты тоже могут использоваться через схему file:// внутри поддерживаемого протокола. Это полезно для проверки HLS-манифеста на диске или воспроизведения уже подготовленного набора сегментов. На Windows в таком адресе используются прямые слеши, даже если обычный путь в проводнике записан с обратными.
Прямой протокол — хороший диагностический приём. Если плагин сервиса не работает, но известный HLS-плейлист открывается напрямую, значит проблема находится на этапе извлечения адреса из сайта. Если не работает и прямой плейлист, искать причину нужно в доступе к CDN, заголовках, шифровании, прокси, сертификатах или параметрах HLS.
HTTP-заголовки, cookies, параметры запроса и SSL
Некоторые потоки доступны только при тех же условиях, что и запросы браузера. Streamlink позволяет добавлять HTTP-заголовки, cookies и параметры строки запроса. Эти настройки применяются на уровне HTTP-сессии и могут быть необходимы для Referer, User-Agent, токена авторизации или других требований сервиса.
streamlink --http-header "Referer=<значение>" --http-header "Authorization=<значение>" "<URL>" best
Заголовок сам по себе не обходит систему доступа. Если токен просрочен, привязан к сессии или IP-адресу, сервер всё равно вернёт отказ. Поэтому копирование команды из чужого примера часто не работает: нужные cookies и токены формируются динамически.
Cookies можно задавать отдельными параметрами или загружать из файла, если используемый сценарий и версия CLI поддерживают такой источник. При работе с реальными учётными данными конфигурационный файл удобнее длинной команды, но его необходимо защищать правами доступа. Пароли, cookies и bearer-токены в истории оболочки — лишний риск, особенно на общем компьютере.
--http-timeout контролирует ожидание HTTP-операций. Увеличение помогает при медленном ответе сервера, но не исправляет ошибки авторизации. Аналогично --http-no-ssl-verify отключает проверку сертификата только как диагностический или вынужденный обход; постоянно использовать такой режим небезопасно, потому что исчезает проверка подлинности TLS-соединения.
Для клиентского сертификата предусмотрены отдельные HTTP-опции. Они нужны редко, но позволяют подключаться к источникам, где доступ построен на взаимной TLS-аутентификации. В корпоративных сетях также может понадобиться пользовательский центр сертификации или корректная настройка прокси; отключение SSL-проверки не должно быть первым шагом.
Параметр --http-ignore-env полезен, если переменные окружения автоматически задают прокси или другие сетевые значения, которые мешают прямому соединению. Это помогает отличить проблему Streamlink от конфигурации Requests и системной среды.
Прокси, IPv4, IPv6 и выбор интерфейса
--http-proxy задаёт прокси для HTTP и HTTPS-запросов Streamlink, включая WebSocket-соединения. Поддерживаются обычные HTTP-прокси и SOCKS. Для SOCKS различается место DNS-разрешения: схемы с суффиксом a или h передают DNS-запрос прокси, тогда как базовые варианты могут разрешать имя локально.
Прокси помогает только там, где это разрешено правилами сервиса и законодательством. Он также становится дополнительной точкой отказа: недостаточная скорость, высокий RTT, нестабильный DNS или ограничение числа соединений напрямую влияют на HLS/DASH-сегменты.
--ipv4 и --ipv6 принудительно выбирают семейство адресов. Эти опции полезны, когда DNS возвращает оба варианта, но один маршрут на конкретной сети работает плохо. Вместо изменения системных настроек можно проверить источник через каждое семейство прямо в Streamlink.
--interface привязывает соединения к выбранному сетевому интерфейсу. Это актуально для машин с несколькими сетевыми адаптерами, VPN, отдельным каналом для записи или специфической маршрутизацией. Если указать неправильный интерфейс, Streamlink может не иметь маршрута до сервера даже при нормальной работе браузера через другой адаптер.
В диагностике полезно менять по одному фактору. Одновременное включение прокси, принудительного IPv4, нестандартных заголовков и увеличенных таймаутов затрудняет поиск причины. Сначала проверяют обычный путь, затем конкретное семейство адресов, затем прокси, после чего уже трогают таймауты и сегментные параметры.
Повторные попытки и устойчивость к временно офлайн-каналам
Если трансляция ещё не началась, однократный запрос вернёт отсутствие доступных потоков. --retry-streams заставляет Streamlink повторять получение списка через указанный интервал. --retry-max ограничивает количество повторов; значение ноль при включённом повторе означает продолжение попыток без заданного лимита.
streamlink --retry-streams 10 --retry-max 30 "<URL>" best
Это не то же самое, что переподключение к уже открытому потоку после длительного сетевого обрыва. Опция относится прежде всего к стадии поиска доступных потоков. Для ошибки непосредственно при открытии есть --retry-open, который повторяет попытку открыть уже найденный поток заданное число раз.
Сегментированные протоколы имеют собственные повторные попытки загрузки сегментов и обновления плейлиста. Поэтому полезно различать три уровня: канал пока не публикует поток; поток найден, но его не удалось открыть; поток открыт, но отдельные HLS/DASH-сегменты скачиваются с ошибками. У каждого уровня свой параметр и свой журнал.
Для автоматической записи запланированных эфиров --retry-streams особенно полезен в сочетании с шаблоном имени файла. Скрипт можно запустить немного заранее, и он дождётся появления потока. Но если сервис требует обновляющийся токен или интерактивную авторизацию, слишком ранний запрос может получить данные, которые истекут к моменту старта; это уже зависит от плагина.
Плагины: проверка поддержки и расширение возможностей
Команда --plugins выводит имена встроенных плагинов. Для автоматизации удобнее --can-handle-url: Streamlink проверяет, найден ли плагин для адреса, и возвращает код завершения, пригодный для скрипта. Вариант --can-handle-url-no-redirect делает ту же проверку без следования перенаправлениям.
streamlink --can-handle-url "<URL>"
streamlink --plugins
Наличие плагина следует проверять по конкретному типу страницы. Один домен может содержать прямые эфиры, клипы, архив, личный кабинет и рекламные страницы; плагин сопоставляет только известные шаблоны адресов. Сообщение No plugin can handle URL часто означает именно неподдерживаемый тип страницы, а не полное отсутствие поддержки сервиса.
Streamlink поддерживает sideloading пользовательских плагинов. Файлы сторонних обработчиков можно положить в стандартный каталог данных или указать каталог через --plugin-dir. Если пользовательский плагин имеет то же имя, что встроенный, он получает приоритет и может переопределить штатный обработчик.
Это мощный механизм, но он расширяет доверенную кодовую базу. Сторонний плагин выполняется как Python-код с правами пользователя. Его нельзя рассматривать как безобидный текстовый шаблон. Кроме того, синтаксическая ошибка в загружаемом модуле способна остановить запуск Streamlink ещё до проверки того, относится ли текущий URL к этому плагину.
--no-plugin-sideloading отключает автоматическую загрузку сторонних плагинов из стандартных директорий. Это хороший диагностический режим, если после добавления пользовательского плагина Streamlink начал падать на любых адресах. --no-plugin-cache отключает хранилище плагинов, из-за чего обработчики не смогут читать или сохранять данные вроде cookies и служебных токенов.
Плагинная архитектура объясняет, почему сайт может внезапно перестать работать без изменений в общей части программы: сервис изменил API, подпись, HTML или схему токена. В таком случае прямой HLS/DASH может оставаться рабочим, но плагин перестаёт находить его до адаптации логики.
Особенности Twitch
Плагин Twitch относится к наиболее функциональным: он умеет работать с прямыми эфирами и отдельными видами VOD, публикует метаданные автора, категории и заголовка, поддерживает режим низкой задержки и дополнительные настройки кодеков. Однако доступ к некоторым качествам и поведение рекламы зависят от условий Twitch и состояния авторизации.
--twitch-supported-codecs позволяет ограничить список кодеков, которые плагин объявляет как поддерживаемые клиентом. Это влияет на то, какие варианты Twitch предложит. Указывать кодек, который затем не способен декодировать проигрыватель, бессмысленно: получение потока и воспроизведение — разные этапы.
Для части запросов Twitch использует client-integrity token. Streamlink умеет получать такой токен с помощью браузера, если это требуется после отказа обычного доступа. Поэтому даже при командном запуске определённые операции плагина могут задействовать установленный браузер. Для управления этим поведением существуют специальные параметры плагина и общие настройки webbrowser.
Режим низкой задержки, как уже отмечалось, уменьшает HLS live edge и включает раннюю передачу данных сегмента. Он рассчитан на эфиры, где низкая задержка включена самим вещателем. Программно определить это заранее не всегда возможно, поэтому при буферизации стоит вернуться к обычному режиму.
При проблемах Twitch полезно сначала выполнить команду без best и посмотреть фактический список качеств. Если отсутствует ожидаемое высокое разрешение, причина может быть в доступных вариантах канала, авторизации, поддерживаемых кодеках или изменениях сервиса. Если качество есть в списке, но не открывается, следующая проверка — FFmpeg, сетевой доступ и журнал уровня debug.
Старые команды из форумов для Twitch часто содержат параметры, которые уже были удалены или изменили назначение. Переносить их целиком опасно: лучше взять только цель настройки и найти её современный эквивалент через --help и раздел параметров Twitch.
Особенности YouTube
Плагин YouTube в Streamlink ориентирован на прямые эфиры. Это принципиальное ограничение: обычные VOD и защищённые видео не относятся к целевому сценарию плагина. Если задача состоит в скачивании ролика или плейлиста YouTube, инструмент другого класса, например yt-dlp, обычно подходит лучше.
У прямого эфира YouTube могут быть отдельные аудио- и видеопредставления. В таком случае Streamlink формирует muxed-поток, а для объединения нужен FFmpeg. По выводу терминала это заметно по типу потока и сообщениям о создании каналов или запуске muxer.
Не следует ориентироваться на старые скриншоты с определённым набором разрешений как на гарантированный результат. YouTube меняет доступные форматы, методы подписи и правила выдачи. Streamlink выводит только то, что его плагин смог получить для конкретной трансляции в текущей сессии.
Если страница канала не распознаётся, используйте адрес самой трансляции, когда он известен. Плагины обычно сопоставляют конкретные форматы страниц, и адрес профиля не обязан означать текущий live-поток. Это особенно важно для автоматизации: проверка канал существует и проверка прямой эфир доступен — разные операции.
При выборе между Streamlink и yt-dlp стоит отталкиваться от конечного действия. Streamlink удобнее, когда эфир надо немедленно передать в плеер с управлением HLS, задержкой и транспортом. yt-dlp сильнее как загрузчик большого числа видеосервисов, VOD, плейлистов и форматов, хотя он тоже может писать медиа в stdout.
Учётные записи, региональные ограничения и доступ к сервису
В списке плагинов Streamlink встречаются сервисы, для которых требуется учётная запись, подписка, пароль конкретного потока или нахождение в определённом регионе. Эти условия задаёт источник. Streamlink не отменяет проверку прав, а лишь предоставляет параметры, через которые плагин может передать разрешённые учётные данные.
Для некоторых плагинов существуют отдельные пары аргументов с логином и паролем, для других — токены или cookies. Способ авторизации нельзя переносить между сервисами: параметры именуются по плагину и отражают его конкретный API.
Региональная ошибка часто выглядит так же, как отсутствие потока: плагин успешно распознаёт страницу, но не получает воспроизводимого варианта. Перед изменением десятков сетевых параметров полезно проверить, доступен ли тот же эфир в обычном браузере из той же сети и под той же учётной записью.
Если в браузере сервис работает только после принятия условий, подтверждения возраста или прохождения интерактивного входа, одной пары логин/пароль может быть недостаточно. Современные сайты используют OAuth, одноразовые токены и проверки клиента. Плагин либо реализует поддерживаемый путь, либо доступ к такому контенту останется ограниченным.
Конфигурационный файл: постоянные настройки без длинных команд
Повторять --player, качество, прокси и параметры HLS при каждом запуске неудобно. Streamlink читает текстовый конфигурационный файл, где каждая строка содержит имя опции без ведущих дефисов. Для опции со значением используется форма option=value, для флага достаточно имени.
player=mpv
default-stream=720p,best
retry-open=3
player-no-close
Кавычки в конфигурации не выполняют роль синтаксического экранирования оболочки: они становятся частью значения. Это одна из частых ошибок при переносе готовой команды в конфиг. Если в командной строке кавычки нужны PowerShell или bash, в конфигурационном файле их необходимость надо оценивать по правилам самого Streamlink.
Стандартное расположение зависит от системы. В Windows файл находится в каталоге Streamlink внутри %APPDATA%; в macOS — в Library/Application Support/streamlink домашнего каталога; в Linux и BSD — в каталоге конфигурации XDG, обычно ~/.config/streamlink/config. Конкретный путь можно переопределить опцией --config.
--config разрешается указывать несколько раз. Файлы объединяются, и более поздняя конфигурация имеет более высокий приоритет. Это удобно для схемы общие настройки + профиль записи + временные параметры конкретного запуска.
--no-config отключает чтение стандартных и явно указанных конфигураций. Опция особенно полезна в диагностике: если команда неожиданно использует прокси, нестандартный плеер или жёстко заданное качество, запуск без конфигов показывает, вызвано ли это скрытой постоянной настройкой.
Конфиги конкретных плагинов
К основному файлу можно добавить конфигурацию вида config.имя_плагина. Она применяется только когда URL сопоставлен с этим плагином и переопределяет общие значения. Например, низкую задержку и отдельный выбор плеера можно держать только для Twitch, не меняя поведение других источников.
Такой подход лучше огромного универсального конфига с параметрами, которые имеют смысл только для одного сервиса. Он также упрощает диагностику: достаточно временно переименовать файл конкретного плагина, чтобы проверить поведение со стандартными значениями.
Журнал, уровни сообщений и JSON для диагностики
Обычный вывод Streamlink показывает ключевые события: найденный плагин, список потоков, выбранный вариант, тип протокола, запуск плеера и завершение. Когда этого недостаточно, повышают уровень журнала. Debug-режим показывает больше деталей о среде, плагине, HTTP-операциях и внутренних решениях.
streamlink --loglevel debug "<URL>" best
Лог можно направить в файл, чтобы сохранить полный контекст сбоя. Это особенно полезно для проблем, возникающих после десятков минут работы или при запуске из планировщика, где окно терминала закрывается. При публикации такого журнала необходимо удалить токены, cookies, адреса приватных источников и другие секреты.
--player-verbose добавляет вывод дочернего плеера. Для muxed-потоков аналогично полезен подробный stderr FFmpeg. Ошибка декодера или контейнера часто видна именно там, тогда как Streamlink считает передачу данных успешной.
--json предназначен не для более красивого журнала, а для программ. Он позволяет скрипту получить список потоков, метаданные и другую структурированную информацию без привязки к цвету, префиксам и человеческой формулировке сообщений. В автоматизации следует предпочитать JSON и коды завершения парсингу обычного текста.
Для проверки плагина без воспроизведения можно использовать --can-handle-url, а для вывода разрешённого медиадреса — --stream-url, когда тип потока допускает преобразование в прямой URL. Не каждый составной поток имеет один готовый URL, поэтому эта опция иногда закономерно не может вернуть результат.
Систематическая диагностика выглядит так: сначала адрес без качества, затем конкретный поток, затем debug-журнал, затем проверка плеера и FFmpeg. Такой порядок отделяет проблему распознавания сайта от проблемы загрузки сегментов и от проблемы воспроизведения.
Запуск Streamlink из скриптов и планировщика
Streamlink хорошо подходит для автоматизации благодаря предсказуемой командной строке, кодам возврата, JSON и возможности писать медиаданные в stdout. Скрипт может сначала проверить, поддерживается ли адрес, затем получить список потоков, выбрать вариант по собственной логике и запустить запись.
Для планировщика важно исключить интерактивные вопросы. Если файл может существовать, надо заранее выбрать стратегию: генерировать уникальное имя по времени либо осознанно использовать --force. Для временно офлайн-трансляции задают --retry-streams и конечный --retry-max, чтобы задача не висела бесконечно при ошибочном адресе.
Параметры с секретами лучше получать из защищённого окружения или файла конфигурации с ограниченными правами. В Windows аргументы процесса могут быть видны другим инструментам администратора; в Unix они доступны через системные списки процессов в пределах разрешений. Поэтому длинная команда с паролем — не лучший способ хранения учётных данных.
Если медиаданные передаются дальше через --stdout, скрипт должен различать stdout и stderr. Перенаправление обоих потоков в один файл испортит видео текстовыми сообщениями. Для журналов следует использовать отдельное перенаправление или опцию лог-файла.
При запуске без пользовательской сессии, например как служба, могут отличаться PATH, домашний каталог и доступность графического плеера. FFmpeg, Streamlink и конфиг, которые находятся при ручном запуске, не обязательно будут найдены планировщиком. Поэтому в автоматизированных задачах полезны абсолютные пути и явный рабочий каталог.
На сервере без графической среды логичнее использовать --output или --stdout, а не пытаться запустить VLC. На рабочей станции, наоборот, --record удобен тем, что сохраняет эфир параллельно с обычным просмотром.
Практические сценарии
Смотреть эфир в лучшем качестве
streamlink "<URL>" best
Это базовый сценарий: плагин определяет источник, Streamlink выбирает верхний вариант и запускает внешний плеер. Если воспроизведение нестабильно, первым делом стоит вывести список потоков и выбрать более низкий уровень вручную.
Всегда предпочитать 720p, но иметь запасной вариант
streamlink "<URL>" "720p60,720p,best"
Команда подходит для каналов с разным набором частоты кадров. Она не падает только потому, что конкретное имя 720p60 отсутствует.
Смотреть и одновременно записывать
streamlink --record "records/{time:%Y%m%d_%H%M%S}.ts" "<URL>" best
Плеер получает обычный поток, а копия записывается в файл. При длительных эфирах следует заранее оценить свободное место: Streamlink не вводит искусственного лимита размера.
Только записывать на сервере
streamlink --output "capture.ts" "<URL>" best
Графический проигрыватель не запускается. Для автоматической серии записей вместо постоянного имени лучше использовать метаданные и время.
Передать данные в FFmpeg
streamlink --stdout "<URL>" best | ffmpeg -i pipe:0 ...
Такой конвейер нужен, когда поток надо сразу ремультиплексировать, перекодировать, выделить аудио или отправить в другой протокол. Параметры после ffmpeg относятся уже к FFmpeg и должны подбираться отдельно.
Дождаться запланированного эфира
streamlink --retry-streams 15 --retry-max 80 "<URL>" best
Streamlink повторяет получение списка потоков. Интервал и лимит следует выбирать так, чтобы не создавать лишние запросы и одновременно не пропустить начало.
Попробовать низкую задержку Twitch
streamlink --twitch-low-latency "<URL>" best
Если появляются остановки, вернитесь к обычному режиму или увеличьте буфер проигрывателя. Низкая задержка — компромисс между запасом данных и близостью к живому краю.
Ограничить автоматический best
streamlink --stream-sorting-excludes ">720p" "<URL>" best
Команда удобна на соединении с ограниченной пропускной способностью: конкретные названия потоков могут меняться, а верхняя граница остаётся.
Типичные ошибки и способы их исправления
No plugin can handle URL
Streamlink не нашёл обработчик для адреса. Сначала проверьте, что передана страница поддерживаемого типа, а не главная страница сайта, профиль или сокращённая ссылка необычного формата. Затем посмотрите список плагинов и при необходимости попробуйте реальный HLS/DASH-адрес через встроенный протокол. Если используется сторонний плагин, запустите без sideloading, чтобы исключить его сбой.
No playable streams found
Плагин распознал URL, но не получил воспроизводимые потоки. Канал может быть офлайн, контент может требовать учётную запись, находиться вне региона, быть защищённым или использовать формат, который плагин не поддерживает. Для запланированного эфира уместен --retry-streams; для постоянного отказа нужен debug-журнал.
Указанное качество не найдено
Выведите список без второго позиционного аргумента. Не полагайтесь на то, что вчерашний 1080p60 будет присутствовать сегодня. Используйте несколько запасных имён через запятую или best с фильтром сортировки.
Player executable not found
Streamlink успешно получил поток, но не нашёл исполняемый файл плеера. Проверьте PATH или задайте абсолютный путь через --player. В пути с пробелами обязательны корректные кавычки оболочки.
VLC is unable to open fd://0
Это известный класс проблем stdin-ввода VLC. Переключитесь на --player-fifo или --player-http. Если другой транспорт работает, сетевые настройки Streamlink менять не требуется.
FFmpeg не найден
Ошибка проявляется прежде всего на muxed-потоках с раздельным видео и аудио. Убедитесь, что FFmpeg установлен, запускается из того же терминала и доступен Streamlink. При необходимости задайте путь к бинарному файлу соответствующей опцией.
403 Forbidden или 401 Unauthorized
Сервер отвергает запрос. Причиной могут быть истёкший токен, неправильные cookies, отсутствующий Referer, привязка к IP, неподходящая учётная запись или регион. Увеличение таймаута ничего не меняет. Сравните запрос с условиями, при которых поток открывается в браузере, и используйте поддерживаемую авторизацию плагина.
Постоянная буферизация HLS
Верните стандартный live edge, уменьшите качество и уберите чрезмерный параллелизм сегментов. Затем проверьте буфер плеера и сеть. Низкая задержка и устойчивость противоречат друг другу: чем меньше запас, тем сильнее видны колебания скорости.
Поток внезапно заканчивается
Проверьте, завершился ли эфир на стороне источника, не истёк ли манифест и не было ли ошибки обновления плейлиста. Журнал debug помогает отличить нормальный конец от серии неудачных загрузок. Для сегментированных потоков обратите внимание на параметры повторов и таймаутов.
В файл попали странные данные или он не открывается
Расширение не конвертирует контейнер. Если вы назвали HLS-выход .mp4, это не означает, что внутри автоматически появился корректный MP4. Сначала сохраните поток в подходящем контейнере либо пропустите его через FFmpeg с явным muxing. При использовании stdout убедитесь, что текст журнала не был перенаправлен в тот же файл.
Как читать старые инструкции из интернета
Streamlink существует давно, поэтому поисковая выдача содержит команды с параметрами, которых больше нет, старые имена опций и примеры для сервисов, полностью изменивших API. Самый надёжный ориентир — смысл команды, а не буквальное копирование.
Если встречается старый HLS-параметр для числа попыток, потоков или таймаута сегментов, его современный эквивалент часто находится среди общих --stream-segment-* опций. Если используется --fifo, современная форма называется --player-fifo. Старое --record-and-pipe заменяется сочетанием записи и stdout.
Плагин-специфичные параметры меняются особенно часто, потому что зависят от внешних сервисов. Команда, которая когда-то отключала определённый режим Twitch или передавала старый OAuth-токен, может теперь быть не только бесполезной, но и мешать новой логике плагина.
Практический метод миграции: сначала выполнить минимальную команду streamlink "<URL>"; затем добавить выбор потока; затем плеер; затем только один дополнительный параметр за раз. Если минимальный вариант работает, а длинный нет, проблема почти наверняка в одном из перенесённых аргументов.
Производительность, нагрузка и выбор буфера
Streamlink в обычном сценарии не декодирует видеокадры, поэтому основная тяжёлая работа воспроизведения ложится на плеер и аппаратный декодер. Однако программа активно работает с сетью, плейлистами, сегментами и, при muxing, запускает FFmpeg. Нагрузка заметно растёт при параллельной загрузке нескольких потоков, записи нескольких каналов или транскодировании.
Если процессор занят сильнее ожидаемого, разделите источник нагрузки. Сначала запустите поток без записи и без пользовательских FFmpeg-опций, затем проверьте загрузку плеера. Если высокий расход появляется только на muxed DASH, посмотрите процесс FFmpeg. Если CPU невысок, а изображение дёргается, проблема вероятнее в сети, буфере или декодировании конкретного кодека.
Количество потоков загрузки сегментов не следует повышать до упора. Один поток является безопасной отправной точкой; большее значение имеет смысл только при доказанной пользе. У многих CDN сегменты короткие, и последовательная загрузка успевает за эфиром без дополнительного параллелизма.
При записи на медленный диск или сетевую папку выходная скорость тоже становится ограничением. Если процесс-получатель stdout читает медленно, обратное давление распространяется по конвейеру. В результате Streamlink может не успевать выгружать новые сегменты. Поэтому запись на локальный быстрый диск с последующей передачей иногда надёжнее прямой записи на перегруженное сетевое хранилище.
Для слабого устройства наиболее эффективная оптимизация — выбрать более лёгкий поток и плеер с аппаратным декодированием, а не пытаться ускорить Streamlink. Утилита передаёт те данные, которые получил источник; снижение 1080p60 до 720p обычно уменьшает сетевую нагрузку и сложность декодирования намного сильнее, чем тонкая настройка внутренних очередей.
Безопасность и аккуратная работа с доступом
Конфигурация Streamlink может содержать приватные данные: cookies, токены, имена учётных записей, адреса закрытых трансляций и прокси с паролем. Такой файл следует хранить с правами, ограничивающими чтение другими пользователями системы. Перед отправкой журнала в форум секреты нужно удалить.
Сторонние плагины требуют такого же доверия, как любой запускаемый Python-код. Они могут читать файлы пользователя и выполнять сетевые запросы. Скачивать случайный модуль только потому, что он обещает поддержку сайта, небезопасно. Если сторонний плагин не нужен, --no-plugin-sideloading гарантирует использование встроенных обработчиков.
Отключение проверки TLS через --http-no-ssl-verify допустимо только как временная диагностика. Если после отключения соединение появляется, правильное решение — исправить сертификат, цепочку доверия, корпоративный прокси или системное время, а не оставлять проверку выключенной.
Запись трансляций должна учитывать права на контент, условия сервиса и местное законодательство. Техническая возможность получить поток не означает разрешение на публикацию, распространение или коммерческое использование записи.
Сравнение Streamlink с аналогами
| Программа | Лучше подходит для | Главное ограничение |
|---|---|---|
| Streamlink | Просмотра и записи прямых эфиров через внешний плеер, работы с HLS/DASH и низкой задержкой | Поддержка сайтов зависит от плагинов, VOD не является главным приоритетом |
| yt-dlp | Загрузки видео, аудио, плейлистов и большого числа VOD-сервисов; при необходимости может писать медиа в stdout | Передача live-потока в плеер не является его основной моделью работы |
| FFmpeg | Прямой работы с известными медиапротоколами, записи, remuxing, транскодирования и ретрансляции | Не имеет плагинов сайтов уровня Streamlink для извлечения потока из обычной страницы сервиса |
| ytarchive | Архивации прямых эфиров YouTube с попыткой захватить эфир от его начала | Сфокусирован на YouTube и требует FFmpeg для итогового объединения |
| svtplay-dl | Загрузки передач и потоков поддерживаемых play-сервисов, особенно скандинавских | Набор сайтов и сценариев заметно уже универсальных загрузчиков, а воспроизведение через плеер не является центральной функцией |
Практический выбор простой. Если нужно открыть поддерживаемый прямой эфир в VLC или mpv, переключать качество, управлять HLS-задержкой и при желании параллельно записывать, Streamlink наиболее естественно соответствует задаче. Если главная цель — скачать ролик, канал или плейлист с большим числом вариантов форматов, удобнее yt-dlp. Если уже известен прямой HLS/DASH/RTMP/SRT-адрес и требуется перекодирование или ретрансляция, FFmpeg предоставляет больше низкоуровневого контроля. Для специализированного сохранения YouTube Live с начала эфира разумно рассматривать ytarchive.
ВидеоМАСТЕР в таблицу не включён, потому что его основная задача — конвертация и редактирование файлов, а не извлечение прямых потоков из сайтов и передача их внешнему проигрывателю. Сравнивать эти программы как прямые замены было бы некорректно.
Частые вопросы о Streamlink
Есть ли у Streamlink собственное окно просмотра?
Нет. Он получает поток и передаёт его внешнему плееру либо в другой выход. Для обычного просмотра используют VLC, mpv или совместимый проигрыватель.
Можно ли просто указать страницу сайта?
Да, если для неё существует подходящий плагин и этот тип страницы поддерживается. Если плагина нет, нужен прямой адрес HLS, DASH или HTTP либо сторонний обработчик.
Почему команда без качества ничего не воспроизводит?
Такой вызов специально выводит доступные потоки. Добавьте имя варианта, best или настройте --default-stream.
Можно ли всегда писать в MP4?
Расширение файла не конвертирует поток. Для MP4 может понадобиться remuxing или транскодирование через FFmpeg. Сначала учитывайте реальный тип входных дорожек.
Чем --output отличается от --record?
--output заменяет обычный вывод в плеер записью в файл. --record добавляет запись параллельно с обычным воспроизведением или stdout.
Можно ли передать поток другой программе?
Да. Используйте --stdout и стандартный конвейер оболочки. Так Streamlink часто связывают с FFmpeg или специализированными обработчиками.
Почему best иногда даёт слишком тяжёлый поток?
best выбирает наиболее высоко ранжированный вариант, а не лучший для моего компьютера. Ограничьте качество через --stream-sorting-excludes или перечислите предпочтения вручную.
Можно ли уменьшить задержку Twitch?
Да, предусмотрен --twitch-low-latency. Для эффекта также важен буфер проигрывателя. Слишком агрессивные значения увеличивают риск остановок.
Почему нужен FFmpeg, если Streamlink сам скачивает поток?
FFmpeg нужен не для каждого источника. Он требуется, когда надо объединить отдельные видео- и аудиодорожки или выполнить дополнительные операции с muxed-потоком.
Можно ли загрузить архивный ролик YouTube?
Плагин YouTube Streamlink ориентирован на live. Для обычных VOD лучше использовать загрузчик, рассчитанный на такие ролики.
Что делать, если сайт изменился и плагин перестал работать?
Проверьте минимальную команду и debug-журнал. Если прямой манифест известен, попробуйте его через встроенный протокол. Временный сторонний плагин допустим только из доверенного источника; иначе разумнее дождаться исправления штатного обработчика.
Можно ли держать разные настройки для Twitch и других сайтов?
Да. Создайте основной конфиг и файл config.twitch для параметров плагина Twitch. Аналогичная схема работает с именами других плагинов.
Можно ли использовать прокси только для Streamlink?
Да, через --http-proxy. Для сложной схемы с разными прокси по протоколам используются также переменные окружения HTTP-клиента.
Как понять, что проблема в плеере, а не в Streamlink?
Если Streamlink находит плагин, открывает поток и сообщает запуск проигрывателя, включите --player-verbose или попробуйте другой транспорт — HTTP либо FIFO. Ошибка декодера и MRL в таком случае появляется на стороне плеера.
Как проверить поддержку URL из скрипта?
Используйте --can-handle-url и код возврата. Для чтения списка потоков и метаданных применяйте --json.
Рекомендованный порядок настройки
- Проверьте команду
streamlink --version, чтобы убедиться, что оболочка видит исполняемый файл. - Запустите
streamlink "<URL>"без качества и убедитесь, что найден правильный плагин и показан список потоков. - Откройте один конкретный поток. Если плеер не запускается, задайте его путь через
--player. - Только после базовой проверки добавляйте
best, фильтры качества, запись, прокси и низкую задержку. - Если выбранный поток muxed, убедитесь, что FFmpeg доступен.
- Перенесите стабильные параметры в конфиг, а настройки одного сервиса — в plugin-specific конфиг.
- Для автоматизации замените разбор обычного текста на
--jsonи коды завершения. - При ошибке включите debug и изменяйте по одному параметру, чтобы причина оставалась видимой.
Этот порядок предотвращает типичную ситуацию, когда в одной длинной команде одновременно смешаны старый параметр Twitch, неправильный путь к VLC, прокси и агрессивный HLS live edge. Минимальная рабочая команда становится контрольной точкой, от которой легко определить, какое изменение вызвало сбой.
Streamlink особенно полезен там, где нужен прозрачный и управляемый тракт страница сервиса → реальный поток → внешний плеер или файл. Его сильная сторона — не графическая оболочка, а точный контроль над качеством, способом передачи данных, HLS/DASH, сетью, записью и автоматизацией. Если источник поддерживается плагином и ограничения сервиса соблюдены, несколько аргументов командной строки заменяют ручной поиск манифеста и сложную настройку плеера.
Точная настройка сетевых и сегментных таймаутов
У Streamlink есть несколько таймаутов, и их нельзя сводить к одному времени ожидания. --http-timeout относится к HTTP-запросам сессии. --stream-timeout определяет, сколько ждать чтения данных из уже открытого потока. --stream-segment-timeout относится к соединению и чтению отдельного сегмента HLS или DASH. Если увеличить только HTTP timeout, проблема зависшего сегмента может остаться без изменений.
Слишком большие таймауты тоже вредны в автоматизации: задача долго остаётся занята на заведомо недоступном сервере и позже замечает окончательный отказ. Поэтому значение выбирают из характера сети. Для домашнего стабильного канала обычно разумнее оставить значения по умолчанию; для спутникового соединения, мобильной сети или удалённого CDN может понадобиться больший запас.
Количество попыток сегмента --stream-segment-attempts определяет, сколько раз Streamlink повторит неудачную загрузку конкретной части. Увеличение помогает при редких кратких потерях пакетов, но не исправляет устойчивый 403, 404 или неправильный токен. Если каждый повтор получает тот же ответ сервера, дополнительные попытки лишь отодвигают ошибку.
Отдельный параметр очереди сегментированного потока управляет дедлайном ожидания появления новых сегментов. Его изменение нужно только при понимании поведения манифеста. В обычном случае встроенные значения согласованы с длительностью сегментов и live edge лучше, чем произвольная большая цифра.
Выбор локали, языка аудио и субтитров
--locale переопределяет системную локаль в формате языка и страны. Некоторые плагины используют её при выборе предпочтительной аудиодорожки или субтитров. Это не перевод интерфейса Streamlink и не меняет язык самого сайта; параметр сообщает обработчику языковое предпочтение.
Если HLS-манифест содержит несколько аудиодорожек и автоматический выбор локали даёт не тот результат, --hls-audio-select позволяет явно назвать язык или вариант. Для нескольких дорожек значения перечисляются через запятую; звёздочка выбирает все. Когда включается несколько дорожек, для их объединения может понадобиться FFmpeg.
Параметр --mux-subtitles позволяет поддерживаемым плагинам добавлять доступные субтитры в выходной muxed-поток. Эта возможность зависит от плагина и наличия субтитров у источника. Она не означает автоматическое распознавание речи или загрузку субтитров с любого сайта.
В сценарии записи с несколькими языками лучше заранее проверить фактический результат коротким тестовым фрагментом. Один и тот же контейнер может по-разному поддерживаться проигрывателями, а дорожки могут иметь разные кодеки. Если конечная цель — монтаж, сохранение всех нужных дорожек предпочтительнее раннего необратимого выбора одной.
Когда использовать HTTP-режим плеера вместо stdin
stdin — самый простой транспорт: не нужен временный файл и не открывается сетевой порт. Но часть проигрывателей хуже работает с неищущимся стандартным вводом, особенно когда им требуется повторно открыть источник, определить формат по URL или выполнить внутренний seek. В таких случаях локальный HTTP-режим часто совместимее.
--player-http заставляет Streamlink открыть временный локальный HTTP-сервер и передать плееру адрес этого сервера. Плеер видит обычный HTTP-источник, хотя данные по-прежнему получает Streamlink. Это отличается от passthrough: при HTTP-режиме внешний плеер не обращается к удалённому CDN напрямую.
--player-continuous-http нужен плеерам, которые закрывают и повторно открывают соединение. Streamlink продолжает обслуживать локальную точку, а не завершает работу после первого подключения. Для обычного VLC такая схема требуется не всегда, поэтому её лучше включать только при конкретной несовместимости.
FIFO занимает промежуточное положение: проигрыватель получает путь к именованному каналу, а не stdin. На системах, где такой механизм хорошо поддерживается, это удобный обход проблем файлового дескриптора. Выбор транспорта не меняет качество исходного потока; он меняет только границу между Streamlink и процессом воспроизведения.
Что означает поток audio_only
Если плагин публикует audio_only, это вариант без видеодорожки. Его удобно передавать аудиоплееру или использовать в конвейере FFmpeg для записи радиоподобной трансляции. Но сохранение такого выхода с расширением .mp3 не гарантирует MP3: исходный аудиокодек может быть AAC, Opus или другим.
Для получения именно MP3 поток надо декодировать и перекодировать через подходящий инструмент. Это увеличивает нагрузку и является отдельной операцией. Если цель — архив без потери качества, часто лучше сохранить исходный аудиопоток или remux-нуть его в контейнер, который поддерживает данный кодек.
При работе через stdout нужно учитывать завершение конвейера. Если FFmpeg прекращает чтение из-за ошибки, Streamlink получит закрытый канал и тоже завершится. Диагностировать надо оба процесса, а не только первый в цепочке.
Проверка прямого адреса через --stream-url
--stream-url пытается вывести разрешённый адрес выбранного потока вместо обычной передачи данных. Это удобно, когда нужно передать URL другому инструменту, который сам загрузит медиа. Однако опция работает только для потоков, которые можно выразить одним адресом.
Muxed-представление с отдельными видео- и аудиодорожками, временными заголовками или внутренней обработкой не всегда сводится к одному URL. В таких случаях отказ --stream-url не означает, что Streamlink не умеет воспроизводить поток: обычный режим может открыть несколько источников и объединить их.
Выведенный URL часто имеет короткий срок действия и может зависеть от cookies, заголовков или IP-адреса. Сохранить его на будущее обычно нельзя. Если другой процесс запускается на другой машине, ему могут потребоваться те же HTTP-условия, что использовал Streamlink.
Почему Streamlink не заменяет видеоредактор и конвертер
Streamlink решает задачу получения и транспортировки потоков. Он не предоставляет монтажную шкалу, покадровую обрезку, титры, переходы, цветокоррекцию или профили экспорта для устройств. Даже наличие FFmpeg в цепочке не превращает Streamlink в графический конвертер: FFmpeg вызывается прежде всего для технического объединения дорожек.
Если после записи нужно удалить паузы, склеить фрагменты, изменить кодек, нормализовать громкость или подготовить файл для публикации, это следующий этап. Такой разделение полезно: сначала получают максимально целостный исходный поток, затем редактируют копию. Попытка одновременно ловить нестабильный live и выполнять тяжёлое перекодирование усложняет поиск причин пропусков.
Поэтому Streamlink лучше оценивать по тому, насколько надёжно он находит поддерживаемый источник, выбирает нужный вариант и отдаёт медиаданные в требуемый выход. Качество монтажа или скорость кодирования не являются его собственными критериями.
Ручная проверка перед длительной записью
Перед многочасовой записью полезно выполнить короткий контрольный запуск. Сначала убедитесь, что выбран нужный язык и качество. Затем проверьте, открывается ли записанный фрагмент в целевом проигрывателе, есть ли звук и не образуется ли неожиданно две отдельные дорожки, которые ваш последующий процесс не умеет читать.
Проверьте свободное место и путь. Streamlink способен создавать подкаталоги, но не может гарантировать, что сетевой ресурс останется доступным несколько часов. Если запись критична, локальный диск с последующим переносом обычно меньше зависит от кратковременного обрыва файлового сервера.
Для автоматического имени файла используйте время и устойчивую переменную. Заголовок трансляции может измениться во время эфира или содержать необычные символы; идентификатор и timestamp надёжнее для уникальности.
Наконец, сохраните debug-журнал отдельно от медиаданных. Если запись оборвётся, по нему можно определить, закончился ли эфир, перестал обновляться плейлист, истёк токен или отказал диск. Без журнала все эти причины выглядят одинаково — просто неполный файл.
Использование Streamlink в связке с OBS
Streamlink сам не является источником захвата OBS, но часто используется как первый этап: поток открывается во внешнем плеере, а OBS захватывает окно плеера. Такой подход отделяет получение трансляции от композиции сцены. Он полезен для зеркалирования удалённого эфира, когда браузерный интерфейс и его элементы не должны попадать в кадр.
Для нескольких источников можно запускать несколько процессов Streamlink с отдельными окнами плеера и понятными заголовками через --title. Это облегчает выбор окна в OBS. При этом каждый процесс независимо загружает поток, поэтому суммарная пропускная способность равна сумме битрейтов всех каналов.
Альтернативный путь — передавать Streamlink в локальный HTTP-режим и использовать медиавход, который умеет читать такой источник. Конкретная совместимость зависит от OBS и выбранного модуля, поэтому схема с VLC или mpv остаётся более прозрачной: если картинка есть в плеере, дальше диагностируется уже захват окна.
Для синхронизации нескольких трансляций задержка плееров имеет значение. Низкая задержка не всегда желательна: иногда удобнее получить стабильный буфер и выровнять источники средствами производственного тракта. Streamlink даёт контроль HLS live edge, но общая синхронизация уже находится за пределами его задач.
Поддержка прямых файлов и локальных плейлистов
Встроенные HLS и DASH-обработчики могут читать локальные манифесты через file://. Это полезно разработчикам, тестировщикам и администраторам CDN: можно сохранить плейлист, отредактировать его и проверить, как Streamlink видит варианты качества без участия сайта-плагина.
Относительные и абсолютные пути допустимы, но сам формат URL сохраняется. На Windows путь диска записывается с прямыми слешами внутри file://. Если локальный HLS-плейлист ссылается на относительные сегменты, они должны реально находиться в ожидаемом месте.
Такой тест помогает отделить ошибку манифеста от сетевой ошибки. Если локальная копия открывается, а удалённая нет, проверьте HTTP-заголовки, сертификат, перенаправления и доступность сегментов. Если не открывается и локальная, проблема вероятнее в структуре HLS/DASH или неподдерживаемой особенности потока.
Когда не стоит использовать Streamlink
Если задача — массово скачать VOD, плейлисты и метаданные с десятков видеохостингов, Streamlink не является оптимальным выбором: его приоритет — прямые потоки. Если задача — перекодировать локальную коллекцию, лучше использовать FFmpeg или графический конвертер. Если нужно просто посмотреть один эфир без настройки и браузер работает нормально, командная строка может быть избыточной.
Streamlink становится оправданным, когда важны внешний плеер, автоматизация, запись, контроль HLS-параметров, скриптуемый выбор качества, headless-сценарий или отказ от тяжёлой веб-страницы. Именно эти свойства отличают его от обычного расширения браузера или загрузчика файлов.
Также не стоит рассчитывать на Streamlink как на средство обхода DRM. Поддержка плагина и сетевого протокола не означает возможность расшифровать защищённый коммерческий контент. При наличии DRM и требований лицензии корректным путём остаётся официальный клиент сервиса.
Диагностическая матрица: на каком этапе возникает сбой
| Наблюдение | Вероятный этап | Что проверить |
|---|---|---|
| Команда не запускается | Окружение | PATH, способ установки, новый терминал, абсолютный путь |
| Нет подходящего плагина | Распознавание URL | Тип страницы, список плагинов, прямой HLS/DASH, sideloading |
| Плагин найден, потоков нет | Доступ сервиса | Онлайн-статус, аккаунт, регион, cookies, токены |
| Качество найдено, но не открывается | Протокол или muxing | FFmpeg, HTTP-ошибки, сегменты, кодеки |
| Streamlink пишет Starting player, но окна нет | Плеер | Путь к исполняемому файлу, player-verbose, аргументы |
| Окно есть, но нет картинки | Декодирование | Поддержка кодека, транспорт stdin/FIFO/HTTP, аппаратный декодер |
| Идут остановки | Сеть и буфер | Качество, live edge, буфер плеера, прокси, сегментные таймауты |
| Файл создаётся, но не читается | Контейнер | Реальный формат, muxing, расширение, stdout без смешанного лога |
Матрица полезна тем, что не смешивает уровни. Ошибка распознавания URL не лечится сменой VLC, а ошибка декодера в VLC не исправляется повторной авторизацией плагина. Чем точнее определён этап, тем меньше случайных параметров приходится менять.
В debug-журнале ищите переходы между этими этапами: разрешение плагина, получение списка, открытие выбранного потока, создание muxer, старт плеера, загрузка сегментов. Последняя успешно выполненная операция обычно указывает границу проблемы. Для сложных случаев стоит сохранить короткий воспроизводимый пример без секретов и сторонних конфигов: он полезнее огромной команды со множеством неизвестных зависимостей.
Передача потока внешнему устройству через HTTP
Кроме запуска плеера на том же компьютере, Streamlink умеет раздавать получаемые данные по HTTP без автоматического старта проигрывателя. Для этого предназначен --player-external-http. В отличие от обычного --player-http, сервер слушает не только loopback-интерфейс и рассчитан на подключение внешнего клиента — например медиаплеера на другом компьютере, смартфона или приставки в той же сети.
Такой режим полезен, когда внешнее устройство умеет читать обычный HTTP-поток, но не поддерживает сайт-плагин Streamlink. Сложная часть — извлечение реального потока и его обновление — остаётся на компьютере со Streamlink, а клиент получает уже единый локальный адрес. Это не делает недоступный формат автоматически совместимым: проигрыватель всё равно должен декодировать кодек и контейнер, которые отдаёт Streamlink.
Поскольку HTTP-сервер становится доступен по сети, важно учитывать безопасность. Не стоит без необходимости открывать такой порт в интернет или на недоверенную сеть. Если нужно ограничить интерфейс, проверьте параметры адреса прослушивания и правила брандмауэра. Для домашней сети достаточно разрешить вход только с нужного сегмента.
Continuous HTTP и external HTTP рассчитаны на повторные подключения. Это удобно для клиентов, которые при паузе или ошибке закрывают сокет и открывают его заново. Обычный одноразовый HTTP-режим проще, но не всегда переживает такие переподключения.
Режим внешнего HTTP особенно удобен для временного просмотра на устройстве, где нельзя установить Streamlink. Однако он не превращает компьютер в полноценный медиасервер с каталогом, авторизацией и историей. Сервер существует в рамках процесса и конкретной сессии потока.
Файловые имена, безопасные символы и сетевые диски
При подстановке метаданных Streamlink заменяет символы, которые нельзя использовать в имени файла. Правила зависят от целевой файловой системы. На POSIX запрещён прежде всего слеш и управляющие символы; Windows имеет гораздо более широкий набор недопустимых знаков, включая двоеточие, вопросительный знак, звёздочку и вертикальную черту.
--fs-safe-rules позволяет явно выбрать правила POSIX или Windows. Это полезно, когда Streamlink запущен на Linux, но пишет на NTFS, exFAT, VFAT или CIFS-ресурс, который применяет ограничения Windows. Без этой опции имя может быть допустимо для локальной Unix-файловой системы, но отвергнуто сетевым сервером или флеш-накопителем.
streamlink --fs-safe-rules Windows --record "archive/{author}-{title}-{time:%Y%m%d_%H%M%S}.ts" "<URL>" best
Есть два способа избежать случайной перезаписи: обычное подтверждение и --skip. --skip запрещает запись, если файл уже существует, и имеет приоритет над --force. Для планировщика это часто безопаснее, чем безусловная перезапись: дубликат задачи не уничтожит уже готовую запись.
--progress управляет индикатором записи. В интерактивном терминале прогресс виден автоматически. Режим force заставляет показывать его и там, где Streamlink не видит обычный терминал, а no отключает. В лог-файл прогресс не попадает так же, как пользовательские запросы подтверждения.
На сетевой файловой системе дополнительно важна семантика переименований и блокировок. Streamlink просто пишет в выбранный путь; гарантию атомарности, резервирования свободного места и восстановления после обрыва должен обеспечивать сам ресурс. Для критичной записи безопаснее писать локально, а потом переносить файл.
Настройка журнала для длительных задач
--loglevel поддерживает градации от полного отключения до максимально подробных trace и all. В повседневной работе достаточно info; debug нужен для анализа плагина и окружения; trace и all могут создавать очень большой объём данных и используются только для сложной диагностики.
--logfile пишет журнал в отдельный файл. Если вместо имени указать дефис, Streamlink сам формирует имя на основе времени и выбирает стандартный каталог логов для системы. Это удобно в планировщике: не нужно генерировать путь вручную, а несколько запусков не перетирают один и тот же файл.
Формат журнала меняется параметром --logformat, а формат времени — --logdateformat. При verbose-уровнях в стандартном формате появляются время, имя потока выполнения, имя логгера и уровень сообщения. Такая детализация помогает видеть параллельные загрузки сегментов и порядок событий при гонках.
--quiet подавляет обычные сообщения и пользовательские запросы. Это удобно, если процесс используется как часть большого конвейера, но опасно вместе с записью в существующий файл: без запроса нужно заранее определить поведение через --skip или --force. Иначе автоматизация может остановиться или выполнить не то действие, которое ожидал оператор.
При подготовке отчёта об ошибке лучше сохранять debug-журнал от минимальной команды. Огромный trace с десятками пользовательских параметров сложнее анализировать и чаще содержит секреты. Сначала воспроизведите проблему без конфигов и сторонних плагинов, затем при необходимости добавляйте детали.
Переменные окружения дочернего проигрывателя
--player-env добавляет переменную окружения процессу, который запускается через --player. Опция повторяется для нескольких пар ключ-значение. Это полезно, если mpv, VLC или другой проигрыватель должен использовать отдельную конфигурацию, библиотеку, устройство вывода либо параметр, который читается именно из окружения, а не из аргументов.
streamlink --player-env "KEY=VALUE" --player mpv "<URL>" best
Наследуются и обычные переменные процесса Streamlink, поэтому --player-env нужен только для добавления или явного переопределения значения. Такой способ чище глобального изменения системного окружения, если настройка относится к одному запуску.
Не следует использовать переменные плеера для передачи секретов, если сам проигрыватель их не требует. Они доступны дочернему процессу и иногда отображаются средствами диагностики системы. Для учётных данных сайта правильное место — параметры HTTP-сессии или плагина.
Встроенный запуск браузера и client-integrity проверки
Некоторые современные сервисы требуют действия, которое трудно воспроизвести обычным HTTP-клиентом: запуск JavaScript, получение токена через браузерный контекст или взаимодействие с механизмом, который проверяет реальный пользовательский агент. Для таких сценариев Streamlink имеет webbrowser API и параметры управления браузером.
Можно указать конкретный исполняемый файл браузера, таймаут запуска и параметры CDP — адрес, порт и ожидание ответа. Есть также headless-режим, при котором окно не показывается. Однако сайты могут отличать headless-браузер и блокировать его, поэтому скрытый режим не является универсальной заменой обычному.
Эта часть особенно важна для Twitch client-integrity token. Если обычный способ получения доступа не срабатывает, плагин может задействовать браузер. Пользователь видит это как часть одной команды Streamlink, но технически токен получается через отдельный браузерный процесс.
Если браузер не установлен, заблокирован политикой безопасности или не может открыть нужный профиль, проблема проявится именно на этом этапе. В debug-журнале стоит искать сообщения webbrowser, а не менять HLS live edge или сегментные таймауты: медиаплейлист ещё не получен.
При запуске на сервере без графической среды headless может быть единственным вариантом, но сайты с антибот-проверками способны его отвергать. В таком случае автоматическая headless-схема объективно ограничена условиями сервиса.
Проверка URL через matchers
--show-matchers выводит шаблоны адресов выбранного плагина. Это помогает понять, какие именно страницы распознаёт обработчик: домен сам по себе может поддерживаться, но конкретный путь — нет. Для чтения человеком вывод достаточно нагляден, а для программы рекомендуется сочетать опцию с JSON.
Matcher может иметь приоритет и имя, поэтому несколько шаблонов одного плагина способны различать прямой эфир, архив, вложенный плеер или другой тип страницы. Если URL не проходит ни один matcher, Streamlink даже не загружает страницу для дальнейшего разбора этим плагином.
Внешний редирект добавляет ещё одну переменную. --can-handle-url может следовать перенаправлению, а --can-handle-url-no-redirect проверяет исходный адрес как есть. Разница полезна для сокращённых ссылок: одна команда подтвердит конечный сервис, другая покажет, что сам сокращённый домен не является поддерживаемым источником.
Для разработчика стороннего плагина matchers — первый слой тестирования. Если URL сопоставляется, но потоки не извлекаются, ошибка уже внутри логики плагина; если сопоставления нет, менять парсер HLS бессмысленно.
Дополнительные параметры FFmpeg при muxing
--ffmpeg-fout меняет формат выхода FFmpeg для потоков, которые требуют muxing. По умолчанию используется формат, выбранный разработчиками Streamlink как совместимый для составных потоков. Менять его стоит только если плеер или следующий этап конвейера требует другой контейнер.
--ffmpeg-video-transcode и --ffmpeg-audio-transcode включают перекодирование соответствующей дорожки вместо копирования. Это уже тяжёлая операция: нагрузка на CPU/GPU может резко вырасти, а задержка — увеличиться. Если контейнер принимает исходные кодеки, копирование предпочтительнее.
--ffmpeg-copyts сохраняет входные временные метки, а --ffmpeg-start-at-zero в сочетании с ним сдвигает старт к нулю. Эти опции нужны в специальных производственных схемах, где временная шкала должна быть согласована с другими источниками. Для обычного просмотра их трогать не требуется.
--ffmpeg-validation-timeout управляет временем, которое Streamlink ждёт проверку FFmpeg при запуске. На очень слабой системе бинарный файл может стартовать медленно; увеличение этого таймаута уместнее, чем отключение валидации. --ffmpeg-no-validation оставляют для случаев, когда пользователь точно понимает последствия.
Если требуется увидеть stderr FFmpeg, включают --ffmpeg-verbose или записывают его в отдельный путь через --ffmpeg-verbose-path. Изменение --ffmpeg-loglevel само по себе не даст видимого эффекта, пока stderr не выведен одним из этих способов.
Зашифрованные сегменты и что Streamlink делает с ними
HLS может использовать шифрование сегментов. Streamlink содержит механизмы для работы с поддерживаемыми схемами и ключами, но это не равнозначно поддержке DRM. Обычный ключ HLS и коммерческая система цифровых прав — разные уровни защиты.
--hls-segment-key-uri позволяет переопределить адрес ключа HLS. В строке доступны шаблонные части URL сегмента, поэтому можно заменить хост или путь, если сервер публикует неправильный или недоступный адрес ключа. Это узкоспециализированная опция и должна использоваться только при ясном понимании структуры плейлиста.
--stream-passthrough-encrypted разрешает передавать зашифрованные сегменты дальше без попытки расшифрования. Такой выход полезен лишь если следующий компонент знает, что с ним делать. Обычный плеер может не воспроизвести поток, если ему не передан способ получить ключ.
Если контент защищён DRM, наличие зашифрованных сегментов и манифеста само по себе недостаточно. Streamlink не позиционируется как средство обхода DRM, и такой сценарий следует отделять от обычного HLS-шифрования.
Отдельные плагины и различия их аргументов
В общей справке видны параметры, привязанные к конкретным сервисам: логин и пароль, пароль приватной трансляции, режим низкой задержки, timeshift-offset, очистка сохранённых credentials и другие. Набор таких аргументов формируется самим плагином. Поэтому наличие опции у одного сервиса ничего не говорит о другом.
Например, Kick имеет собственный low-latency переключатель, который, подобно Twitch, уменьшает HLS live edge и включает раннюю передачу сегмента. Но фактическая поддержка low latency зависит от самого вещателя. У Niconico встречаются параметры учётной записи, user session и timeshift. У Twitcasting может понадобиться пароль приватного эфира. Это не универсальные функции Streamlink, а интерфейс к конкретным правилам источника.
В plugin-specific конфиге удобно хранить именно такие параметры. Общий config остаётся нейтральным — плеер, базовое качество, логирование — а файл сервиса содержит только его аргументы. При смене источника меньше риск случайно отправить чужому сайту неподходящий заголовок или учётное значение.
Если параметр плагина исчез из справки, не следует принудительно продолжать его передавать. Возможно, сервис изменил API или логика стала автоматической. Неизвестный аргумент должен восприниматься как сигнал обновить команду, а не как повод искать старый бинарный файл.
Разбор проблем по симптомам прямого эфира
Если эфир работает в браузере, но Streamlink не находит поток, проблема обычно находится в плагине, авторизации или matcher URL. Если Streamlink показывает список качеств, но ни одно не открывается, слой распознавания уже пройден: нужно смотреть сетевые ответы CDN, FFmpeg и тип потока.
Если одно качество открывается, а другое нет, сравнивайте типы. Высокий вариант может быть DASH с раздельным аудио и требовать FFmpeg, а низкий — готовым HLS. Это объясняет ситуацию, когда 720p работает, а 1080p60 падает при том же адресе.
Если поток идёт несколько минут и обрывается, смотрите на повторные ошибки playlist reload и сегментов. Постоянный одинаковый HTTP-код указывает на серверное ограничение или истёкший токен; случайные таймауты — на сеть; завершение с ENDLIST — на нормальный конец HLS.
Если только изображение отстаёт, а звук идёт ровно, причина чаще находится в декодере и плеере, не в извлечении URL. Если одновременно замирают звук и видео, вероятнее нехватка данных. Такой простой симптом помогает выбрать правильную сторону диагностики.
Если запись короче времени работы процесса, проверьте, не было ли повторного открытия потока или закрытия дескриптора файла. Журнал с точными временными метками важнее субъективного наблюдения: он показывает, когда закончилась запись и что происходило непосредственно перед этим.