Распознавание речи¶
Совещание, лекция и обучение приходят в Agora голосом и ничем больше: дорожки субтитров, какую привозит эфир вещателя, здесь нет и взяться ей неоткуда. При этом именно такие записи потом ищут в архиве и смотрят в записи. Распознавание речи закрывает этот разрыв: сервер сам читает звук записанного эфира и дописывает к нему субтитровую дорожку.
Живой эфир при этом не трогается вовсе. Распознавание работает поверх архива: читает записанный звук и туда же кладёт субтитры. Отсюда два следствия, о которых стоит знать заранее.
- Эфиру обязателен архив. Без записи распознаванию неоткуда брать звук и некуда писать результат.
- Отставание безопасно. Если распознавание не поспевает за эфиром, субтитры отстают и потом догоняют; на самом эфире это не сказывается никак.
Как включить¶
Распознавание живёт на вкладке Обработка карточки эфира — там же, где субтитры, телетекст и превью, — в секции Распознавание речи. Включает его переключатель Распознавать речь в субтитры.

Полей четыре, и все они не обязательны — умолчаний хватает, чтобы включить распознавание одним переключателем.
| Поле | Что задаёт |
|---|---|
| Модель | Размер распознавателя. Крупная модель точнее, но медленнее и требует больше памяти. |
| Язык | Код ISO-639-1, например ru. Пусто — определить по звуку. |
| Источник звука | Дорожка эфира, которую слушать. По умолчанию первая. |
| Окно распознавания, с | До 120 секунд. Длинное окно точнее по смыслу, но реплика появляется позже. |
Язык лучше задать, если он известен. Автоопределение решает по первым секундам звука и на записи, которая начинается с музыки или тишины, ошибается — а ошибка в языке портит всю дорожку, а не одну реплику.
Источник звука нужен там, где эфир везёт несколько языков: распознавание слушает ровно одну дорожку. Если выбранной дорожки в эфире нет, состояние так и скажет — «Выбранная аудиодорожка в эфире не найдена».
Без записи архива не запускается¶
Если включить распознавание на эфире без записи, панель отвечает сразу, не дожидаясь сохранения:

Это не запрет сохранить настройку, а предупреждение о том, что она не заработает. Включите эфиру архив — он живёт на соседней вкладке DVR той же карточки, — и распознавание поднимется само.
Состояние распознавания¶
Под формой панель показывает, что происходит на самом деле. Это единственное место, где видно живую работу распознавания: карточка эфира берёт состояние с той ноды, где эфир записывается.

- Работает / Не работает — поднято ли распознавание. «Не работает» всегда сопровождается причиной текстом.
- Отставание — на сколько распознанное отстаёт от текущего момента. На живом краю это секунды; на архиве, который распознавание догоняет с начала, — часы, и это нормальный рабочий режим, а не сбой.
- Распознано звука — сколько звука уже прошло через распознаватель.
- Реплик — сколько строк субтитров написано.
- Ошибок — сбои чтения архива и распознавания. Ноль здесь — обычное состояние.
- Последняя реплика — когда распознавание в последний раз что-то написало.
Причины, по которым распознавание не поднимается, панель называет прямо:
| Что написано | Что делать |
|---|---|
| У стрима нет записи архива | Включить архив на вкладке DVR. |
| Файл модели не найден или не загрузился | Положить файл модели на сервер (ниже). |
| Выбранная аудиодорожка в эфире не найдена | Выбрать другой источник звука или оставить умолчание. |
| Такой язык распознавателю неизвестен | Проверить код языка или очистить поле. |
| Сборка сервера без распознавания речи | Обратиться в поддержку: коробка собрана без движка. |
Работающее распознавание со свежей ошибкой — это предупреждение, а не авария: один непрочитанный кусок не останавливает работу, распознавание продолжается со следующего.
Файл модели¶
Сама модель на сервер не поставляется: пригодная весит больше гигабайта, и какая нужна — решает владелец коробки. Сервер ищет её в каталоге состояния продукта — /var/lib/agora/whisper-models — и ждёт там файла ggml-<модель>.bin, то есть ggml-medium.bin для модели medium.
Пока файла нет, состояние распознавания честно говорит «Файл модели не найден или не загрузился», а эфир продолжает идти и записываться как ни в чём не бывало.
Один файл обслуживает все эфиры коробки: модель читается в память один раз на процесс, сколько бы эфиров её ни просило.
Что получает зритель¶
Распознанное становится обычной субтитровой дорожкой эфира: она видна в медиаинформации, уезжает в HLS и DASH и включается в плеере наравне с любой другой.
Смотреть её имеет смысл по архиву. На живом краю субтитров ещё нет — они появляются с тем самым отставанием, которое показывает состояние, — а вот запись совещания открывается уже с текстом.
Что дальше¶
- Архив — без чего распознавание не запускается.
- Эфиры — карточка, на вкладках которой всё это живёт.
- Просмотр и доступ — как зритель открывает запись.