Яндекс Браузер в Ubuntu 26.04 не показывал HLS-видео: как я починил кодеки

После замены SSD на старом Dell Latitude E7470 я поставил свежую Kubuntu 26.04 и начал заново собирать рабочую систему. Xray поднялся, OpenCode завёлся, Thunderbird после небольшого танца с профилями тоже ожил. Оставалось проверить привычные сайты, в том числе страницу с онлайн-камерой на bolotnaya.online.

И вот тут Яндекс Браузер решил напомнить, что Linux без маленького квеста не считается установленным. Сайт открылся, плеер появился, HLS-поток вроде начал буферизоваться, но вместо видео браузер показал сообщение: «Отсутствует видеокодек. Для воспроизведения видео данного формата установите библиотеки».

На первый взгляд всё странно. Система свежая, браузер свежий, ffmpeg установлен. Но потоковое видео не играет. Разбираемся, где именно закопался кодек и почему обычной установки системного ffmpeg оказалось мало.

Симптом: сайт открывается, но HLS-видео не воспроизводится

Проблема выглядела так: страница с камерой открывается нормально, плеер отображается, но вместо живой картинки висит предупреждение Яндекс Браузера об отсутствующем видеокодеке.

Яндекс Браузер в Ubuntu 26.04 не показывал HLS-видео: как я починил кодеки
Яндекс Браузер открыл сайт с камерой, но вместо HLS-видео показал ошибку об отсутствующем видеокодеке.

Для начала я запустил Яндекс Браузер из терминала. Это хороший способ быстро понять, что происходит под капотом. В выводе сразу появилась важная подсказка:

/usr/lib64/ffmpeg-plugin-browser/libffmpeg.so: Ffmpeg not found. /opt/yandex/browser/libffmpeg.so: Ffmpeg not found. find_ffmpeg failed, using the integrated library.

Вот это уже не абстрактное «видео не работает», а конкретная проблема. Яндекс Браузер не нашёл подходящую библиотеку libffmpeg.so, которая нужна ему для нормальной работы с мультимедийными форматами.

Почему установленного ffmpeg оказалось мало

В Linux легко попасть в ловушку. Ставишь системный ffmpeg, видишь, что пакет установлен, и думаешь, что теперь все браузеры обязаны проигрывать всё на свете. Но Chromium-подобные браузеры часто живут по своим правилам.

Им может понадобиться отдельная сборка libffmpeg.so, которую браузер ищет в своих путях. То есть системный ffmpeg может быть установлен, но конкретный браузер всё равно не найдёт нужную библиотеку или не сможет использовать её из-за несовместимости.

Проверяем системные пакеты:

apt policy ffmpeg libavcodec-extra kubuntu-restricted-extras

На моей системе ffmpeg и libavcodec-extra уже были доступны из репозитория Ubuntu 26.04:

ffmpeg: Установлен: 7:8.0.1-3ubuntu2 libavcodec-extra: Установлен: 7:8.0.1-3ubuntu2

Но это не решило проблему автоматически. Браузер продолжал искать собственный libffmpeg.so в двух местах:

/usr/lib64/ffmpeg-plugin-browser/libffmpeg.so /opt/yandex/browser/libffmpeg.so

Если этих файлов нет или они неподходящей версии, HLS-видео может не стартовать. В моём случае именно это и произошло.

Что такое HLS и почему тут важны кодеки

HLS это потоковая передача видео небольшими фрагментами. Браузер получает плейлист, потом по нему загружает куски видео и собирает воспроизведение на лету. Такая схема часто используется для онлайн-камер, трансляций и адаптивного видео.

Но сам HLS это только способ доставки. Внутри потока всё равно лежит видео в конкретном кодеке, часто H.264. Если браузер не умеет декодировать этот формат, плеер может быть на месте, плейлист может открываться, а картинки всё равно не будет.

Поэтому проблема может быть не в сайте, не в HLS.js и не в самом потоке камеры. Иногда всё упирается в то, что браузер не нашёл нужную ffmpeg-библиотеку. Маленький файл, большое настроение.

Подключаем universe и multiverse

Первым делом стоит убедиться, что в системе подключены компоненты репозиториев universe и multiverse. Без них часть мультимедийных пакетов может быть недоступна.

sudo add-apt-repository universe sudo add-apt-repository multiverse sudo apt update

После этого ставим системные мультимедийные пакеты:

sudo apt install -y ffmpeg libavcodec-extra

При желании можно добавить набор restricted extras для Kubuntu:

sudo apt install -y kubuntu-restricted-extras

Если установщик спросит про лицензию Microsoft fonts, нужно принять её через Tab и Enter. Да, хотел просто камеру посмотреть, а оказался на переговорах со шрифтами. Добро пожаловать в Linux.

Проверяем служебные скрипты Яндекс Браузера

У Яндекс Браузера есть несколько полезных служебных скриптов в каталоге /opt/yandex/browser. Они как раз помогают работать с ffmpeg-кодеками.

ls -lah /opt/yandex/browser/update-ffmpeg ls -lah /opt/yandex/browser/update_codecs ls -lah /opt/yandex/browser/find_ffmpeg

Проверить, видит ли браузер ffmpeg-библиотеку, можно так:

/opt/yandex/browser/find_ffmpeg

В моём случае вывод был плохой:

/usr/lib64/ffmpeg-plugin-browser/libffmpeg.so: Ffmpeg not found. /opt/yandex/browser/libffmpeg.so: Ffmpeg not found. find_ffmpeg failed, using the integrated library.

Значит браузер не видит подходящий libffmpeg.so и пытается пользоваться встроенной библиотекой. Для моего HLS-потока этого оказалось недостаточно.

Почему update-ffmpeg не помог

Логичный следующий шаг: запустить штатный скрипт обновления ffmpeg-кодеков.

sudo /opt/yandex/browser/update-ffmpeg

Но он завершился ошибкой:

FFMPEG codecs installation failed: there are no download urls for the current browser version: 146.0.7680

То есть скрипт Яндекса не нашёл адреса для загрузки кодеков под текущую версию Chromium, на которой собран браузер. Проблема была не в сети. Даже запуск через локальный SOCKS-прокси ничего не менял.

Для контекста, версия браузера была такая:

yandex-browser-stable --version
Yandex 26.4.1.1101 stable

На этом месте можно было бы начать ругаться на браузер, но ругань кодеки не ставит. Поэтому пошёл дальше.

Главная тонкость: update_codecs нужно запускать на каталог

Дальше я попробовал второй скрипт: update_codecs. И тут есть важный нюанс. Его нужно запускать с путём к каталогу, а не с путём к будущему файлу libffmpeg.so.

Неправильный вариант:

sudo /opt/yandex/browser/update_codecs \ /usr/lib64/ffmpeg-plugin-browser/libffmpeg.so

Такой запуск дал ошибку:

Target path for codecs does not exist.

Правильная схема такая:

sudo mkdir -p /usr/lib64/ffmpeg-plugin-browser sudo /opt/yandex/browser/update_codecs \ /usr/lib64/ffmpeg-plugin-browser

Если нужен доступ через локальный прокси, например через Xray на 127.0.0.1:1080, можно запустить так:

sudo env \ ALL_PROXY=socks5h://127.0.0.1:1080 \ HTTPS_PROXY=socks5h://127.0.0.1:1080 \ HTTP_PROXY=socks5h://127.0.0.1:1080 \ /opt/yandex/browser/update_codecs /usr/lib64/ffmpeg-plugin-browser

После этого снова проверяем, появился ли файл и видит ли его браузер:

find /usr/lib64/ffmpeg-plugin-browser -maxdepth 2 -type f -ls /opt/yandex/browser/find_ffmpeg

Потом полностью перезапускаем браузер. Просто закрыть окно иногда недостаточно, потому что процесс может остаться висеть в фоне.

pkill -f yandex 2>/dev/null || true yandex-browser-stable &

Что я пробовал, но не советую как основной путь

В процессе я также попробовал вручную взять libffmpeg.so из сборки nwjs-ffmpeg-prebuilt. Архив скачался, файл распаковался, я положил его туда, где Яндекс Браузер ищет библиотеку.

sudo install -m 0644 /tmp/nwffmpeg/libffmpeg.so \ /usr/lib64/ffmpeg-plugin-browser/libffmpeg.so sudo install -m 0644 /tmp/nwffmpeg/libffmpeg.so \ /opt/yandex/browser/libffmpeg.so

Но этот вариант не подошёл. Проверка показала ошибку:

dlsym fail : /usr/lib64/ffmpeg-plugin-browser/libffmpeg.so: undefined symbol: avcodec_version /usr/lib64/ffmpeg-plugin-browser/libffmpeg.so: Found ffmpeg of unknown version.

То есть файл был на месте, но браузер не смог нормально использовать эту библиотеку. Поэтому я откатил её и вернулся к штатному update_codecs.

sudo mv /usr/lib64/ffmpeg-plugin-browser/libffmpeg.so \ /usr/lib64/ffmpeg-plugin-browser/libffmpeg.so.bad-nwjs 2>/dev/null || true sudo mv /opt/yandex/browser/libffmpeg.so \ /opt/yandex/browser/libffmpeg.so.bad-nwjs 2>/dev/null || true

Вывод простой: вручную подсовывать libffmpeg.so можно только если вы точно понимаете, какая сборка подходит к вашей версии Chromium. Иначе браузер может увидеть файл, но не сможет его использовать. Получится как запчасть от другой машины: похожа, блестит, но мотор не заводится.

Отдельная проблема: VAAPI и старый Intel

В логах Яндекс Браузера также были ошибки аппаратного видеодекодирования:

vaapi_video_decoder.cc: failed Initialize()ing the frame pool Failed to create video pipeline.

Это уже другая часть истории. На старых Intel-видеочипах Chromium-браузеры иногда ломаются на аппаратном декодировании. Если кодек уже установлен, но видео всё равно не запускается, можно проверить запуск с отключённым ускоренным видеодекодированием:

pkill -f yandex 2>/dev/null || true yandex-browser-stable \ --disable-accelerated-video-decode \ --disable-features=VaapiVideoDecoder,VaapiVideoDecodeLinuxGL &

Если с такой командой видео заработало, значит кодеки уже на месте, а мешает именно аппаратное декодирование. В таком случае можно отключить аппаратное ускорение в настройках браузера или сделать отдельный ярлык для запуска камер.

Как понять, что проблема именно в кодеках

Перед тем как чинить всё подряд, полезно отделить проблему сайта от проблемы браузера. В моём случае признаки были такие:

  • страница с камерой открывалась нормально;
  • плеер загружался;
  • ошибка была именно про отсутствующий видеокодек;
  • в терминале браузер писал, что не нашёл libffmpeg.so;
  • системный ffmpeg был установлен, но браузер всё равно не видел нужную библиотеку;
  • после обновления браузерных кодеков HLS-поток заработал.

Если HLS-видео не работает только в одном браузере, а в другом открывается нормально, это тоже хороший намёк. Значит сайт и поток, скорее всего, живые, а проблема в конкретном браузере или его кодеках.

Результат: HLS-поток заработал

После установки кодеков и правильного обновления браузерной ffmpeg-библиотеки HLS-поток на сайте заработал. Камера снова показала картинку, а плеер получил нормальный статус подключения.

Яндекс Браузер в Ubuntu 26.04 не показывал HLS-видео: как я починил кодеки
После установки подходящих кодеков HLS-видео снова заработало в Яндекс Браузере.

Короткая памятка команд

Если нужно быстро повторить рабочую схему на Kubuntu или Ubuntu 26.04, команды такие:

sudo add-apt-repository universe sudo add-apt-repository multiverse sudo apt update sudo apt install -y ffmpeg libavcodec-extra kubuntu-restricted-extras pkill -f yandex 2>/dev/null || true sudo mkdir -p /usr/lib64/ffmpeg-plugin-browser sudo /opt/yandex/browser/update_codecs \ /usr/lib64/ffmpeg-plugin-browser /opt/yandex/browser/find_ffmpeg yandex-browser-stable &

Если обновление кодеков нужно выполнить через локальный SOCKS-прокси:

sudo env \ ALL_PROXY=socks5h://127.0.0.1:1080 \ HTTPS_PROXY=socks5h://127.0.0.1:1080 \ HTTP_PROXY=socks5h://127.0.0.1:1080 \ /opt/yandex/browser/update_codecs /usr/lib64/ffmpeg-plugin-browser

Где обычно ломается

По итогам этой возни можно выделить несколько типичных мест, где всё идёт не туда:

  • не подключены universe и multiverse;
  • не установлен libavcodec-extra;
  • Яндекс Браузер не видит libffmpeg.so;
  • update-ffmpeg не находит URL для текущей версии браузера;
  • update_codecs запускают на файл, а не на каталог;
  • вручную подсовывают неподходящую сборку libffmpeg.so;
  • мешает аппаратное декодирование VAAPI на старом Intel.

То есть проблема может быть не одна. Но начинать лучше с простого: системные пакеты, find_ffmpeg, потом update_codecs, потом уже VAAPI и ручные эксперименты.

Вывод

Проблема была не в сайте, не в HLS.js и не в самом потоке камеры. Яндекс Браузер в свежей Kubuntu 26.04 просто не видел подходящий libffmpeg.so, хотя системный ffmpeg уже был установлен.

Главная мысль: для Chromium-подобных браузеров в Linux иногда мало поставить системные мультимедийные пакеты. Нужно ещё проверить, видит ли сам браузер свою ffmpeg-библиотеку. В случае Яндекс Браузера это удобно делать через /opt/yandex/browser/find_ffmpeg, а исправлять через /opt/yandex/browser/update_codecs.

После этого потоковое HLS-видео снова заработало. А старый Dell с новым SSD получил ещё одну маленькую победу над реальностью. В Linux такие победы надо ценить. Они иногда достаются дороже, чем сам SSD.

Полезные ссылки