Яндекс Браузер в 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.

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


Комментарии загружаются…

blank
Обзор конфиденциальности

На этом сайте используются файлы cookie, что позволяет нам обеспечить наилучшее качество обслуживания пользователей. Информация о файлах cookie хранится в вашем браузере и выполняет такие функции, как распознавание вас при возвращении на наш сайт и помощь нашей команде в понимании того, какие разделы сайта вы считаете наиболее интересными и полезными.