Проверка корректной работы мульти-язычных субтитров и их автоматического выбора по аудиодорожке — частая задача у разработчиков плееров и тестировщиков потокового видео. В этой статье я пошагово разберу, какие элементы нужно подготовить, как правильно сигнализировать язык в манифестах и контейнерах, какие тесты прогнать и на что обращать внимание в логах и поведении устройств.
- Что важно понимать перед тестированием
- Какие файлы и форматы подготовить
- Сигнализация языка в HLS и DASH
- Как собрать тестовый пакет с помощью ffmpeg
- Набор тестовых сценариев
- Проверка в разных плеерах и устройствах
- Типичные ошибки и как их диагностировать
- Инструменты отладки и полезные практики
- Примеры из практики
- Краткий план быстрого теста
Что важно понимать перед тестированием
Автоматическое переключение субтитров по аудио предполагает, что у плеера есть информация о языках аудио- и субтитровых треков, и он умеет сопоставлять эту информацию с пользовательскими настройками или текущей выбранной аудиодорожкой. Уровней ошибок несколько: неправильные теги языка, неподдерживаемый формат субтитров у конкретного плеера или отсутствие логики автопереключения в реализации клиента.
Нужно различать встроенные (чейндженные) субтитры и внешние текстовые дорожки, а также закрытые субтитры в вещательных стандартах. Браузеры и нативные SDK поддерживают разные наборы форматов, поэтому то, что работает в тестовом плеере, может не работать в Smart TV.
Какие файлы и форматы подготовить
Для корректного теста собрать минимальный набор артефактов: видеофайл или сегменты, как минимум две аудиодорожки с разными языками, и две или более дорожек субтитров. Субтитры лучше приготовить в форматах WebVTT, TTML/IMSC1 и в варианте для контейнера MP4 (timed text), чтобы покрыть большинство клиентов.
Ниже таблица с популярными форматами и краткими примечаниями по применению.
| Формат | Где стоит использовать | Особенности |
|---|---|---|
| WebVTT | Веб-плееры, HLS субтитры | Прост в текстовом виде, поддерживается большинством браузеров |
| TTML / IMSC1 | DASH, IPTV, вещание | Богатая типографика и позиционирование |
| SRT | офлайн/локальные плееры | Широко распространён, но не всегда подходит для HLS/DASH |
| CEA-608/708 | Трансляции, HLS (in-band) | Закрытые титры, требуют декодера в плеере |
Сигнализация языка в HLS и DASH
Правильная метаинформация в манифесте — ключ к автопереключению. В HLS используется директива EXT-X-MEDIA с атрибутами LANGUAGE, NAME, AUTOSELECT и DEFAULT. Для того чтобы плеер мог автоматически выбрать субтитры по аудио, необходимо согласовать группировки аудио и субтитров, указав корректные языковые коды.
Пример строки в HLS манифесте:
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",LANGUAGE="es",NAME="Spanish",AUTOSELECT=YES,DEFAULT=NO,URI="subs_es.m3u8"
В DASH язык указывают через атрибут lang в AdaptationSet. Для субтитров дополнительно можно задать роль «subtitle» или accessibility=1, чтобы клиент однозначно понимал назначение дорожки.
...
Как собрать тестовый пакет с помощью ffmpeg
Ниже приведены рабочие команды, которые помогут быстро сгенерировать тестовый MP4 с двумя аудиодорожками и двумя субтитрами. Команды ориентированы на ffmpeg и предполагают, что у вас есть исходный видеопоток и текстовые файлы субтитров.
Создание MP4 с двумя аудио и двумя WebVTT в качестве timed text:
ffmpeg -i video.mp4 -i audio_en.aac -i audio_es.aac -i subs_en.vtt -i subs_es.vtt -map 0:v -map 1:a -map 2:a -map 3 -map 4 -c:v copy -c:a copy -c:s mov_text output_multi_audio_subs.mp4
Для HLS с WebVTT используйте отдельные m3u8 и сегменты. Можно также собрать DASH пакеты с использованием MP4Box или Shaka Packager для точной сигнализации языков.
Набор тестовых сценариев
Прогоните набор сценариев, чтобы покрыть реальные кейсы пользователей. Начните с базовых проверок выборки по умолчанию и затем переходите к крайним случаям.
- Открыть поток с аудио en и es и проверить, что при переключении аудио плеер автоматически выбирает субтитры того же языка.
- Удалить субтитры для одного языка и проверить, какой происходит fallback. Должна быть логика: никакие субтитры, язык по умолчанию или пользовательские настройки.
- Проверить поведение при несовпадении кодов языка, например en-US против en; многие клиенты сравнивают префиксы.
- Проверить live-поток и VoD: авто-выбор может вести себя по-разному из-за особенностей манифестов.
Каждый тест фиксируйте: устройство, версия плеера, лог сети и поведение интерфейса. Это поможет быстро находить источник неправильной работы.
Проверка в разных плеерах и устройствах
Разные среды ведут себя по-разному: браузеры чаще всего поддерживают WebVTT прямо, iOS/AVPlayer предпочитает встроенные субтитры в HLS, Android/ExoPlayer — WebVTT и TTML в зависимости от сборки. Smart TV и приставки могут иметь собственные ограничения по форматам и максимальному числу треков.
Небольшая таблица с заметками по популярным клиентам:
| Клиент | Поддержка форматов | Особенности автопереключения |
|---|---|---|
| Chrome | WebVTT, MP4 timed text | Авто-выбор зависит от реализации плеера поверх HTML5 |
| Safari (iOS) | HLS с WebVTT/CEA-608 | AVPlayer хорошо работает с HLS-манифестами и AUTOSELECT |
| ExoPlayer (Android) | WebVTT, TTML | Хорошо поддерживает автоматические правила на уровне плеера |
Типичные ошибки и как их диагностировать
Частая проблема — несовпадение языковых тегов между аудио и субтитрами. Например, аудио помечено «en-US», а субтитры — «en-GB»; некоторые клиенты не сокращают тег до префикса и не считают это совпадением. Всегда проверяйте и консолидируйте теги.
Другие ошибки связаны с тем, что субтитры находятся в неподдерживаемом формате для конкретного плеера или неправильно инкапсулированы в контейнере. В этих случаях лучше подготовить альтернативный вариант файла в другом формате и сравнить поведение.
Инструменты отладки и полезные практики
Полезно включать подробное логирование на стороне плеера, использовать network inspector в браузере и экспорт логов ExoPlayer/AVPlayer. Shaka Player в режиме отладки дает много информации о выборе треков и причинах отказов в автоподборе.
Также я рекомендую вести небольшой набор автоматических тестов: скрипт, который поднимает HLS/DASH манифесты, программно переключает аудио и проверяет через API плеера активную дорожку субтитров. Это экономит время при регресс-тестировании.
Примеры из практики
В одном из проектов мне пришлось исправлять баг, когда на устройстве Smart TV субтитры не переключались автоматически. Проблема оказалась в том, что HLS манифест имел AUTOSELECT=NO для всех субтитров. После корректной выставки AUTOSELECT и группы субтитров поведение вернулось к ожидаемому.
Другой случай — браузер Chrome не поддерживал SRT, и тесты падали на локальной сборке. Решение — конвертировать SRT в WebVTT на этапе packaging и добавить резервную дорожку.
Краткий план быстрого теста
Если нужно быстро проверить поддержку, выполните последовательность ниже. Она охватывает основные моменты без глубокой подготовки.
- Создайте видеофайл с двумя аудио-дорожками и двумя субтитрами (WebVTT и/или mov_text).
- Соберите HLS и/или DASH манифест, укажите LANGUAGE, AUTOSELECT и соответствующие группировки.
- Запустите поток в тестовом плеере, переключите аудио и наблюдайте изменение активной дорожки субтитров через UI или API.
- Проверьте поведение при отсутствии субтитров и при несовпадении языковых кодов.
Проверка поддержки воспроизведения мульти-язычных субтитров и их автоматического выбора по аудио — это комбинация правильной упаковки контента, корректной сигнализации метаданных и тщательного тестирования на целевых клиентах. Следуя описанным шагам и прогоняя набор сценариев, вы быстро локализуете проблемы и добьётесь предсказуемого поведения на большинстве устройств.







