Авторские статьи

AceStreamPlayer 3.2.3 или как очень старое впихнуть в новое.


Снова появились запросы от пользователей с указанием на существование новой версии 3.2.3 движка AceStream. Но чем новее движок (engine), который только и пилят разработчики для Linux систем, то тем больше пропасть между ним и плеером. Но обо всём по порядку в статье.

Дебют

Представьте на дворе 2017 год. Я нашёл проект AceStream и, как уверенный снапкрафтер, который уже потренировался на кошках, решил представить его в удобном snap формате. Почему удобном? А уже тогда было видно что разработчики AceStream что-то вяло обращают внимание на Linux системы и более-менее нормально будет с движком, но не с плеером на базе патченного VLC 2.

Бодрый и динамичный мир разработки софта в Linux экосистеме очень суров и беспощаден к сторонним разработчикам. Чтобы через механизм репозиториев им представить своё детище, они обязаны отслеживать и актуализировать зависимости своего программного продукта. Вчера в условном Debian были Python2, GTK2, Qt4, а сегодня Python3, GTK3 и Qt5.

Рекомендую прочесть статью про активный драйв в мире Линукс - Разработчики GTK хотят разрушить Linux desktop. Обратная совместимость? Поддержка на 30 лет нескольких альтернативных версий? Нет, не слышали - это к Microsoft.

Snap из-за своей самодостаточности и независимости от наличия чего-либо в операционной системе Linux (не обязательно Ubuntu), может предложить способ упаковки программы вместе с её зависимостями. Пройдут годы, сменятся версии библиотек, тулкитов, фреймворков, но программа будет работать.

В те годы сама технология snap делала первые шаги и только на горизонте маячили идеи, как быть с тяжёлыми по размеру фреймворками, библиотеками, рантаймом и т.д. Тащить их внутрь snap пакета с программой, радости мало. Элегантный выход был найден и это коннекты между snap пакетами.

Но это было позже того как я сел паковать acestream в snap. То есть в те далёкие года мне безальтернативно пришлось упаковать две программы (плеер и движок версии 3.0.х) вместе с необходимым им в едином snap пакете.

Официальный скриншот программы AceStreamPlayer в Ubuntu Store. Бородатые годы выдаёт графическая среда Unity.

AceStreamPlayer в Ubuntu Store

Миттельшпиль

Шли годы. Движок развивался, а плеер, как заброшенное дитя, стал похож на якорь, который забыли поднять со дна перед выходом в море. Люди просили представить новую версию AceStreamPlayer в snap. Обновил версию движка, добавил третьего игрока в лице MPV, возможность использовать ALSA напрямую, навёл визуальный лоск для всё стареющего плеера на базе VLC 2 (qt4) в различных графических рабочих средах типа KDE (мир современного Qt), Xfce (GTK2), GNOME (мир эталонного GTK) и т.д. Через API AceStream для удобства пользователя формируется плейлист playlist_acestream.m3u с различными каналами (~2800 шт.).

В данный период была предпринята нужная, но сложная процедура внедрения механизма аппаратного ускорения с помощью GPU хоста внутри snap пакета, где программы работают в изоляции под присмотром обязательных профилей AppArmor.

Требовалось тщательное тестирование, а у меня нет технической возможности создать многочисленные аппаратные стенды из всех сочетаний основных игроков на рынке видеокарт, их свободных/закрытых видеодрайверов, актуальных архитектур и т.д. Кое как проверил работу аппаратного ускорения на доступных мне видеокартах Intel, NVidia, AMD не-помню-ни-названия-ни-версии. В целом, это решение было тяжёлое, но его нужно было принять. Разрешение в пикселях медиаконтента традиционно ползёт только вверх. Джинна всё равно нужно было выпускать из бутылки.

С 2019 года именно эта версия 3.1.x была основной рабочей лошадкой.

Статистика AceStreamPlayer в Ubuntu Store 2018 год

Эндшпиль?

Движок

На момент написания статьи доступно на официальном сайте два тарбола: acestream_3.2.3_ubuntu_22.04_x86_64_py3.10.tar.gz и acestream_3.2.3_ubuntu_18.04_x86_64_py3.8.tar.gz.

Я немного обрадовался версии с Ubuntu 18.04, так как текущая упаковка основана на core18 и для плеера меньше хлопот собрать необходимое ему в загробной жизни для нормальной работы. Но жизнь частенько приподносит сюрпризы. Анализ файлов install_dependencies_gui.sh, install_dependencies.sh, requirements.txt внутри тарболов вроде ясно объяснял какие именно пакеты нужны для работы движка и что нужно установить через pip.

Для работы GUI движка нужен пакет python3-gi, но при старте движка выводится сообщение об ошибке:

ImportError: _gi.cpython-38-x86_64-linux-gnu.so: undefined symbol: g_assertion_message_cmpint

Я не настолько спец по Питону, гуглёж проблемы ни к чему внятному не приводил. Выяснил что системный пакет python3-gi и PyGObject через pip это одно и тоже. Попробовал пойти путём установки через pip вместо системного пакета python3-gi, но получил ошибку от GUI движка что не найден gi.

Убив достаточно времени, плюнул на всё и решил попробовать собрать версию из тарбола acestream_3.2.3_ubuntu_22.04_x86_64_py3.10.tar.gz. Оказалось что использование core22 вместо core18 заставляет использовать топовую версию инструмента упаковки snapcraft 8. Но на удивление проблемы с запуском GUI движка не было!

Так как движок использует современные версии Python, то хотелось бы максимально ускорить его работу. Напомню что snap пакет - это архив в формате squashfs, который просто монтируют без распаковки в систему. Поэтому любая программа внутри snap не может чисто технически ничего записать туда, откуда она стартует. Другими словами и ещё раз - откуда стартуем, то нам доступно только на чтение (readonly).

Python по умолчанию при первом старте программы пытается создать для последующего ускорения *.pyc файлы с байт-кодом в том каталоге где находится программа, а туда писать невозможно! С версии питона 3.8 появилась переменная PYTHONPYCACHEPREFIX, с помощью которой можно указать доступную на запись папку. В моём стартовом run.sh скрипте, который вы можете изучить по адресу /snap/acestreamplayer/current/bin/run.sh, есть строка

export PYTHONPYCACHEPREFIX="$SNAP_USER_COMMON/.cache/"

Переменная $SNAP_USER_COMMON указывает на ~/snap/acestreamplayer/common/ и там после первого старта программы вы сможете найти *.pyc в подпапках .cache/Python-Eggs/ и .cache/usr/

Движок на современном Python быстр настолько, насколько это возможно!

Плеер

Впереди была трудная задача организовать работу старого плеера VLC 2 в такой резко обновлённой среде для него как Ubuntu 22.04.

Поставил в виртуальной среде Ubuntu 22.04 и наваял bash скрипт, который, вызывая в цикле команду LANG=C apt show "^${name_pkg}$" 2>&1 | grep -F 'Maintainer'`, проверил огромный список требуемых deb пакетов для VLC 2 на предмет доступности в официальных репозиториях 22.04. На выходе получил списки: good.txt и bad.txt.

Имена deb пакетов из good.txt, ещё доступные в Ubuntu 22.04, были просто добавлены в stage-packages, чтобы snapcraft их упаковал сам при сборке. Требуемые deb пакеты из bad.txt ещё одним bash скриптом были выкачены из официального репозитория в виртуальной машине с Ubuntu 18.04 и распакованы, чтобы стать частью той папки где обитает плеер на сборочном сервере. С помощью такой-то матери удалось слепить для старого VLC 2 в новой среде всё что ему нужно для работы. Я был приятно удивлён что плеер вообще запустился в новой среде.

Статистика AceStreamPlayer в Ubuntu Store 2024 год

Итоговая сборка

Рад что удалось перейти на использование core22, как фундамента на долгие годы. Не знаю планов Canonical и сроков поддержки ими всех своих snap пакетов с рантаймом core* (Runtime environment based on Ubuntu *), но, учитывая что до сих пор активно обновляется core18, думаю что до 2030 года точно не стоит беспокоиться за устаревание core22 и за работоспособность AceStreamPlayer.

Ниже в цифрах вы увидите что эпопея с упаковкой AceStream в snap началась 7 лет назад в 2017 году. Не устану повторять что можно не любить snap, но если автор программы активно не обновляет программу вслед за изменениями в репозиториях основных линус дистрибутивов, то мало что ещё может спасти программу от забвения. Согласен, что старенький плеер с поддержкой торрентов (AceStream Content ID) лучше и безопаснее не становится на фоне движка и ещё одного плеера MPV, но он худо-бедно работает!

AceStreamPlayer в цифрах

Знаковые вехи

  1. Начало - 3.0.х
    1 ревизия
    Версия: 3.0.2-snap2
    Размер: 199,7 МБ
    Дата публикации: 2017-02-14 07:54
    Пройдено автоматических тестов: 72 Passes
  2. 9 ревизия
    Версия: 3.1.49-snap1
    Размер: 259,4 МБ
    Дата публикации: 2019-11-16 06:52
    Пройдено автоматических тестов: 166 Passes
  3. 14 ревизия
    Версия: 3.1.74-snap1
    Размер: 328,3 МБ
    Дата публикации: 2023-05-26 11:56
    Пройдено автоматических тестов: 164 Passes
  4. 17 ревизия
    Версия: 3.2.3-snap2
    Размер: 387,5 МБ
    Дата публикации: 2024-05-14 13:43
    Пройдено автоматических тестов: 166 Passes


Установка AceStream в Linux

Если у вас Убунту, то вам сразу доступна в графических установщиках и/или через CLI - sudo snap install acestreamplayer возможность поставить пакет без лишних телодвижений.

Если у вас дистрибутив Linux, который поддерживает установку snapd, то на сайте проекта snapcraft.io вы можете ознакомиться с мини-инструкцией для вашего дистрибутива как поставить нужное.

Установка AceStreamPlayer в Linux

Например, следующие команды для установки AceStream в Fedora из инструкции https://snapcraft.io/install/acestreamplayer/fedora

sudo dnf install snapd
sudo reboot
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install acestreamplayer


Если наблюдаются проблемы в работе AceStream

  1. Закройте плеер и движок.
  2. Удалите полностью каталог ~/snap/acestreamplayer/ в вашей домашней папке.
  3. Запустите движок в отдельной вкладке Терминала в CLI режиме (прервать его работу Ctrl + C): acestreamplayer.engine --client-console
  4. Запустите плеер в отдельной вкладке Терминала с увеличением количества сообщений (-v --verbose): acestreamplayer -v
    Можно увеличивать количество v до 4 для ещё большего вывода сообщений -vvvv
  5. При графических искажениях и/или артефактах на экране попробуйте отключить поддержку аппаратного ускорения в плеере:
    Инструменты - Настройки - Ввод/кодеки - Декодирование с аппаратным ускорением = отключить
    Tools - Preferences - Input & Codecs - Codecs - Hardware-accelerated decoding = Disable
  6. AceStream Player (vlc 2 на базе qt4) - это морально и физически устаревшее ПО. Если вы его реально используете ради AceStream CID, то настоятельно рекомендую присмотреться к более актуальному и продвинутому плееру MPV, который так же запакован внутри.

    MPV не обладает возможностями в GUI по аналогии с патченным VLC, но в Терминале вы сможете указывать как InfoHash, так и AceStream CID - acestreamplayer.mpv [infohash] or [acestream://CID]

    Более подробно acestreamplayer.mpv --help

    AceStreamPlayer MPV

Дополнительные материалы:
Мои snap пакеты.
Мои статьи о технологии snap и её конкурентах.
AceStreamPlayer в snap.
Новая версия AceStreamPlayer в snap.

Дата последней правки: 2024-06-04 09:35:28

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта