FAQ
Короткие ответы на вопросы, которые возникают при первой установке и в эксплуатации: перекодирование, звук, метрики, лицензия, нагрузка, архив, доступ.
Вопросы сгруппированы по темам. Ответ здесь короткий и прямой; ссылка «подробнее» ведёт туда, где разобраны детали и настройки.
Общее#
Можно ли перекодировать поток на сервере?#
Нет. Сервер не меняет кодек, разрешение, частоту кадров и битрейт. Он принимает поток,
переупаковывает его в нужный контейнер и раздаёт — кадры доходят до зрителя такими, какими пришли
от источника. Директивы перекодирования в конфигурации нет: transcode …; — это ошибка
unknown directive.
Что делать вместо этого:
- Задайте нужный профиль на камере или кодировщике. Почти все камеры отдают два-три профиля
одновременно — заведите два потока (
cam1с основного профиля иcam1-subсо второго) и используйте их для крупного окна и для мозаики. - Нужен другой кодек (например H.264 вместо H.265 для старых браузеров) — переключите его на источнике, второго пути нет.
- Нужна адаптивная раздача по качеству для живого видео — она требует перекодирования и поэтому недоступна. Для файлов VoD несколько заранее подготовленных качеств собираются в один набор.
Подробнее: О продукте, Архитектура.
Нужны ли база данных, брокер сообщений или отдельный веб-сервер?#
Нет. Один исполняемый файл и один текстовый файл конфигурации. HTTP-слушатель сам отдаёт панель управления, API, плеер и медиа — ставить рядом веб-сервер не нужно. Подробнее: О продукте.
Сколько потоков потянет один сервер?#
Ограничителей три, и процессор среди них обычно последний — перекодирования нет, поэтому приём и раздача стоят дёшево, и счёт потоков на хост идёт на тысячи. Реальные границы:
| Ограничитель | Как считать |
|---|---|
| Лицензия | max_streams — жёсткий предел числа потоков, сверх него поток не примется |
| Сеть | сумма битрейтов источников + битрейт × число зрителей на каждом потоке |
| Диск | если ведётся запись: суммарный поток записи и объём под глубину архива |
Считайте по трафику и дискам, затем проверяйте на своём оборудовании. Подробнее: Производительность, Требования.
Источники и приём#
Как проверить установку, если камеры ещё нет?#
Используйте встроенный синтетический источник demo:// — тест-таблицу с часами и звуком. Ему не
нужны ни камера, ни сеть, ни диск, и он годится в том числе для нагрузочных проверок.
Подробнее: Быстрый старт.
Кодировщик умеет только отправлять поток сам. Как его принять?#
Объявите поток с источником publish:// и включите слушатель rtmp. Сервер будет ждать
подключения по RTMP; из браузера тот же поток можно прислать по WHIP.
Подробнее: Приём публикации: RTMP и WHIP.
Можно ли раздавать один принятый поток под несколькими именами?#
Да: источник copy://<имя исходного потока> заводит второе имя поверх уже принятого потока — без
второго подключения к камере и без повторной упаковки. Записи у такого потока нет, а права
доступа он наследует у оригинала.
Подробнее: Приём видео: обзор.
Что происходит при обрыве связи с камерой?#
Сервер переподключается сам; зрители при этом не отключаются, а в потоке появляется отметка разрыва. Отдельно отслеживается более коварный случай, когда соединение с камерой живо, а кадры идти перестали, — сторожевой таймер перезапустит приём. Подробнее: Резервирование источников.
Поток не поднимается, в состоянии "source_error":"Timeout"#
Сервер не смог подключиться к источнику: чаще всего камера недоступна с этого сервера, закрыт порт или неверен путь в ссылке. Проверьте доступность камеры с самого сервера, затем сверьте ссылку в её веб-интерфейсе. Подробнее: Диагностика неисправностей.
Можно ли не держать камеру подключённой постоянно?#
Да, это режим по требованию: поток поднимается при первом зрителе и отключается через заданное время после последнего. На потоках с записью режим не действует — архив с дырами не имеет смысла. Подробнее: Приём видео: обзор.
Раздача и плееры#
Чем HLS отличается от LL-HLS и MSE-WS и что выбрать?#
Все три доставляют один и тот же поток, отличается способ и задержка:
| Протокол | Как устроен | Доставка | Когда выбирать |
|---|---|---|---|
| HLS | плеер скачивает сегменты по списку | секунды | максимальная совместимость, раздача через кэширующие узлы |
| LL-HLS | тот же список, но кусками поменьше и с ожиданием на сервере | доли секунды | тот же HLS там, где важна оперативность |
| MSE-WS | постоянное соединение, сервер сам шлёт куски | доли секунды | наблюдение в браузере, мозаики, много окон |
| WebRTC | отдельный медиаканал поверх UDP | минимальная | реакция «здесь и сейчас», звук G.711 в браузере |
Измеренная разница в доставке между низкой задержкой и обычным HLS на одинаковых условиях — 317 мс против 2605 мс; итог у зрителя задаёт буфер плеера — целевая задержка встроенного плеера: ≈4 с на LL-HLS против ≈8 с на обычном HLS. Практическое правило: для видеонаблюдения в браузере берите MSE-WS, для широкой аудитории и внешних кэшей — HLS, для минимальной задержки и звука с камер — WebRTC. Подробнее: Протоколы раздачи.
Нужно ли включать протоколы раздачи по одному?#
Нет. Поток упаковывается один раз, и все протоколы читают один и тот же результат, поэтому HLS, DASH, MSE-WS и RTSP доступны сразу, без отдельных настроек. Отдельно включаются только варианты на основе MPEG-TS и многоадресная раздача. Подробнее: Архитектура.
Можно ли смотреть поток в обычном плеере или на видеостене?#
Да, по RTSP: rtsp://media.example.com:8554/<поток>. Этот путь не ограничен браузерными
возможностями — по нему передаётся в том числе звук G.711.
Подробнее: Протоколы раздачи.
Приставка или телевизор не играют поток#
Такие устройства часто требуют «склеенный» вариант потока вместо раздельных дорожек видео и звука. Для них у мастер-плейлиста есть отдельные варианты выдачи, а на потоке включается вариант на основе MPEG-TS. Подробнее: Протоколы раздачи.
Почему в браузере не играет H.265?#
Потому что браузер не умеет его декодировать — это ограничение клиента, а не сервера, и перекодированием оно не обходится (его нет). Решение — отдавать таким зрителям H.264 со второго профиля камеры. Подробнее: Протоколы раздачи.
Как встроить видео в свою страницу?#
Вставьте <iframe> со ссылкой на /<поток>/embed.html. У плеера есть режимы без заголовка и без
вкладок — для плиток и мозаик, — а также выбор протокола прямо в адресе.
Подробнее: Встраиваемый плеер.
Звук#
Почему у потока нет звука в браузере?#
Почти всегда потому, что камера отдаёт звук в G.711 — этот кодек браузеры не умеют декодировать в обычном режиме воспроизведения. Сервер в такой ситуации намеренно не создаёт звуковую дорожку: если объявить её и не отдать, у плеера встанет и видео. Поэтому вы получаете чистое видео без звука, а не сломанный поток.
Что можно сделать:
- Переключить камеру на AAC, если модель это позволяет, — самое надёжное решение;
- смотреть через WebRTC — единственный браузерный путь, который G.711 воспроизводит;
- слушать вне браузера — по RTSP звук передаётся как есть;
- выгрузить файл из архива — в скачанном фрагменте звук сохраняется полностью, даже если в браузере запись играет молча.
Серверного преобразования G.711 в AAC нет и не будет: это перекодирование. Подробнее: Протоколы раздачи.
Звук пропал именно в WebRTC, в HLS он был#
Обратный случай: WebRTC не передаёт AAC. Если источник отдаёт AAC, зритель WebRTC получит только видео — выберите для него HLS или MSE-WS. Подробнее: Протоколы раздачи.
Архив#
Как включить запись?#
Добавьте в блок потока одну строку с именем хранилища и глубиной хранения, например
dvr local 24h 40G; — запись по времени и по объёму, что наступит раньше. Хранилище local
создаёт установщик.
Подробнее: Запись архива (DVR).
Куда девается архив, когда заканчивается место?#
Старые записи удаляются, новые продолжают писаться. Рубежей три, они работают вместе:
- Срок хранения — всё, что старше заданного времени, удаляется.
- Объём на поток — если оставшееся всё ещё превышает заданный объём, удаляются самые старые записи этого потока.
- Заполненность диска — когда диск переходит порог, удаляются самые старые записи по всем потокам этого хранилища, пока не освободится запас.
Самая свежая запись каждого потока не удаляется никогда — поток не может остаться совсем без архива. Если хранилищу задан признак тома, сервер вдобавок проверяет, что архивный диск действительно смонтирован: при непройденной проверке он не пишет и сообщает об ошибке, а не показывает пустой архив. Подробнее: Хранилища и S3.
Указал 30m, а записалось тридцать минут вместо тридцати месяцев#
Так и есть: m — это минуты, месяцы обозначаются mo. Полный набор: s — секунды,
m — минуты, h — часы, d — сутки, w — недели, mo — месяцы (по 30 суток), y — годы.
Подробнее: Запись архива (DVR).
Можно ли скачать кусок архива одним файлом?#
Да, экспортом клипа за указанный интервал — получится обычный MP4 со звуком. Выгрузка ограничена по объёму, поэтому длинные интервалы забирают не файлом, а плейлистом архива. Подробнее: Просмотр и экспорт.
Можно ли хранить архив в объектном хранилище?#
Да: диск работает как быстрый ярус, а S3-совместимое хранилище — как холодный, со своими сроком и объёмом. Указатель на записи остаётся локальным, поэтому перемотка по холодным данным не замедляется. Подробнее: Хранилища и S3.
Доступ#
Я задал пароль администратора. Видео теперь закрыто?#
Нет. Это два независимых замка: пароль администратора закрывает панель и API, а доступ к видео настраивается отдельно. Пока авторизация просмотра не настроена, любой, кто дотянулся до порта, может смотреть любой поток. Подробнее: Модель доступа.
Как отдать поток наружу на время?#
Включите авторизацию просмотра и выдавайте зрителю ссылку с токеном, у которого задан срок действия: по истечении срока ссылка перестаёт работать сама. В токене можно дополнительно ограничить доступ одним потоком, набором протоколов, адресом зрителя и сайтом, с которого разрешено смотреть. Токен подписывает ваша система — сервер только проверяет подпись и содержимое.
Ссылка выглядит как http://media.example.com:8080/cam1/index.m3u8?token=<токен>; дальше плеер
работает сам — сервер вписывает в плейлист короткий пропуск, и токен в каждом сегменте не нужен.
Подробнее: Авторизация просмотра,
Генераторы токенов на Python.
Плейлист открывается, а сегменты отвечают 401 или 403#
Токен предъявляется один раз — при запросе плейлиста; в ссылки на сегменты сервер сам вписывает короткий пропуск. Ошибка почти всегда означает, что ссылки на сегменты собираются в обход плейлиста и пропуск теряется. Вторая причина — запрос пришёл из другого браузера, чем тот, для которого пропуск выдан (пропуск привязан к нему), а при включённой привязке к адресу — ещё и с другого адреса. Подробнее: Авторизация просмотра.
Можно ли запретить встраивание потока на чужие сайты?#
Да, на потоке задаётся список разрешённых сайтов. Помните две вещи: это защита от встраивания в браузере, а не авторизация (программа-клиент её обходит), и она отключает кэширование сегментов для этого потока. Подробнее: Авторизация просмотра.
Почему без лицензии не идёт видео, хотя панель работает?#
Так задумано. Пока лицензия не действует, панель управления и API отвечают нормально, а любой
медиазапрос получает отказ 403 license restricted. Это отличает «сервер не настроен» от
«сервер сломался»: управление остаётся доступным, чтобы можно было разобраться. Ёмкость из
лицензии одновременно ограничивает число потоков. Проверить состояние: GET /api/v1/license,
поле state должно быть licensed.
Подробнее: Лицензирование.
Эксплуатация#
Почему не видно метрик?#
С версии 2026.08 адрес /metrics требует учётных данных — раньше он был открыт. Сборщик
должен присылать заголовок Authorization: Bearer <токен>; без него ответ —
{"error":"unauthorized"}. Параметр в адресе (?token=) на этом маршруте не принимается
намеренно: токен в URL попадает во все журналы по пути.
curl -sS -H "Authorization: Bearer $TOKEN" http://media.example.com:8080/metrics | head -3
# HELP hastreamer_process_cpu_cores Process CPU usage in cores (cputime-delta / cores). # TYPE hastreamer_process_cpu_cores gauge hastreamer_process_cpu_cores 0.0600
Для системы мониторинга заведите отдельный токен только на чтение — тогда сборщику не нужен
пароль администратора. Об этом же напоминает строка в журнале при старте:
/metrics is CLOSED … Set auth.api_read_token to give a scraper its own non-admin credential.
Вторая по частоте причина — порт 8080 просто не открыт для сети мониторинга.
Подробнее: Мониторинг и метрики.
Почему изменение применилось не сразу?#
Причин ровно три:
- Изменение относится к «рестартовым». Порты, число рабочих ядер и TLS-слушатели
применяются только при
systemctl restart, а не приreload. - Файл изменён, но перезагрузка настроек не сделана. Правка
hastreamer.confвступает в силу поsystemctl reload hastreamer; изменения через панель и API сервер применяет сам. - Перезапускается только затронутый поток. Изменение внутри одного блока
streamне трогает остальные потоки и их зрителей — это не «не применилось», а точечное применение.
Проверить, что сервер увидел новую конфигурацию, можно по журналу: строка
config reload: applied epoch <N> появляется при каждом успешном применении.
Подробнее: Применение изменений.
Можно ли поставить сервер за обратным прокси?#
Можно, но не обязательно: сервер сам умеет HTTPS и получение сертификатов. Если прокси всё же нужен, обязательно перечислите его адреса в списке доверенных — иначе все функции, зависящие от адреса зрителя (привязка токенов, учёт сессий, ограничение частоты запросов, журнал), увидят адрес прокси вместо адреса клиента. Прокси должен пропускать вебсокеты (для MSE-WS) и запросы диапазонов байт. Подробнее: TLS и сертификаты, Порты и сеть.
Как узнать, кто сейчас смотрит?#
В панели — раздел Sessions: протокол, адрес клиента, объём отданных байт и качество приёма по каждому зрителю. То же самое доступно через API, а ненужную сессию можно завершить принудительно. Подробнее: Веб-интерфейс.
Как перезапустить один поток, не трогая остальные?#
Кнопкой в карточке потока или запросом POST /api/v1/streams/{id}/restart. Это перезапуск
приёма, конфигурация при этом не меняется.
Подробнее: Потоки.
Где смотреть журнал?#
На сервере — journalctl -u hastreamer -f. Те же записи доступны в панели (раздел Logs) и
через API, но там они хранятся в кольцевом буфере и не переживают перезапуск — то, что нужно
хранить долго, забирайте из системного журнала.
Подробнее: Мониторинг и метрики.
Правки через панель и правки в файле не поссорятся?#
Нет: панель и API пишут в тот же самый hastreamer.conf, что и вы, — это один источник истины.
Если конфигурацию нужно защитить от изменений через интерфейс, её можно заблокировать; тогда
попытка записи получает отказ, а чтение продолжает работать.
Подробнее: Применение изменений, Конфигурация и система.
Как обновить сервер?#
Установщиком новой версии: он заменяет исполняемый файл и оставляет ваши конфигурацию, лицензию и архив нетронутыми. Подробнее: Обновление и удаление.