KODI: собираем удобный и функциональный медиацентр для дома. Часть 6. MariaDB и синхронизация медиатеки

  • Tutorial

Лирическое отступление

Уже более года в качестве медиацентра использую KODI. Начиналось всё с каких-то базовых вещей, но даже от такого функционала я был в полном восторге. Просмотр ТВ, фильмов и сериалов теперь не выглядит каким-то квестом, а все мои домашние также полюбили KODI, и я даже не представляю, как раньше могли справляться без него.

Но я все больше погружался в его возможности и постепенно наращивал функционал. Реализовал, казалось бы, простые вещи, но, если сложить все мелкие детали воедино – понимаешь, насколько все комфортно, логично и продумано, а главное - функционально. Именно такую оценку я даю всему конечному результату. Для кого-то это будет вовсе не так, конечно, ведь у всех «свои фломастеры». Но после первых публикаций я получил массу положительных откликов от аудитории и гостей хабра, и понял, что кому-то пригодился мой опыт. Это приятно. Поэтому, хочется продолжать.

Если вы пропустили предыдущие публикации – обязательно загляните в них, возможно и для вас найдется что-то интересное. Если в двух словах – установили и настроили с нуля ОС и KODI, настроили просмотр торрент-контента, YouTube, IPTV. Поговорили об управлении с других устройств, резервном копировании, анализе трафика и даже научили KODI запускать ретро-игры.

Все предыдущие публикации:

KODI: собираем удобный и функциональный медиацентр для дома. Часть 1
KODI: собираем удобный и функциональный медиацентр для дома. Часть 2
KODI: собираем удобный и функциональный медиацентр для дома. Часть 3. Ретро-игры
KODI: собираем удобный и функциональный медиацентр для дома. Часть 4. Архив IPTV
KODI: собираем удобный и функциональный медиацентр для дома. Часть 5. Яндекс.Музыка

Зачем это все затевалось?

Среди медиаустройств, в моем домашнем обиходе – два телевизора. Основной – в гостиной работает с KODI, второй – на кухне под управлением Tizen OS. Мысль о том, что последнего также нужно посадить на KODI возникла спустя пару недель после запуска медиацентра на основном телевизоре. Но руки все никак не доходили…

Каждый раз, переключая ужасного качества каналы кабельного ТВ на кухне, я вспоминал о своей затее. И вот пришло время воплотить ее в жизнь. Для этой задачи в поднебесной был заказан Raspberry Pi 3 и все та же аэромышь, как и для основного телевизора (подробнее о ней в первой части).

Итого, в гостиной – KODI на базе неттопа с Kubuntu 20.04 на борту, на кухне – LibreELEC на базе третьей малинки.

«Кухонный» медиацентр должен выполнять всего две задачи:

  • просмотр IPTV. Буду использовать все тот же сервис ilook и дополнение PVR IPTV Simple Client. К слову, сервис позволяет использовать плейлист на двух устройствах без дополнительной платы за тариф.

  • просмотр торрент-видео. Потому как локальной библиотеки фильмов и сериалов у меня нет.

О том, как установить LibreELEC на малинку описывать, думаю, не стоит. А как подключить IPTV и Elementum для просмотра торрентов я рассказывал в другой публикации.

Общее понимание архитектуры есть, причем же здесь MariaDB в заголовке? Представьте, вы смотрите фильм в гостиной, идете обедать на кухню и продолжаете просмотр ровно с того места, на котором остановились. Здорово, не правда ли?

KODI позволяет реализовать синхронизацию медиатеки на разных устройствах. Для этого потребуется MySQL-сервер, на котором и будет храниться эта медиатека. Сервер может быть поднят на совершенно сторонней машине, хоть под управлением Windows. В моем случае, основной медиацентр работает 24/7, аппаратные ресурсы позволяют – сервером назначаем его, на нем и будем поднимать базу данных.

Надеюсь, суть и прелести такой архитектуры домашних медиацентров понятна.

Подготовка серверной части. MariaDB

Прочитав Wiki на официальном сайте KODI, решил, что все довольно просто и понятно – бери и делай. Но на практике оказалось все иначе – БД не наполняется моей медиатекой, в логах ошибки не поддаются пониманию или записей нет вообще, от того понять, что сделано не так – достаточно трудно. Второе устройство подключать к БД смысла нет – синхронизировать нечего.

В комментариях к предыдущей публикации был затронут этот вопрос и @vyacheslavteplyakov дал понять, что Wiki не обновляется и информация, вероятно, устарела. Но и указал на основные подводные камни и как их обойти.

Особенности:

  • Использовать MariaDB;

  • Медиатека должна быть размещена в сетевом каталоге;

  • Все пути к медиатеке на всех устройствах должны быть абсолютные;

  • Сетевые каталоги – NFS или SMB, если вынуждены использовать NTFS, то только с авторизацией по учетной записи с паролем;

  • Версии KODI на всех устройствах должны быть одинаковы.

С задачей и подводными камнями разобрались – приступаем к работе. Напомню, сервером у нас будет KODI на неттопе с Kubuntu 20.04.

Устанавливаем сервер MariaDB

sudo apt update
sudo apt install mariadb-server

Cледующим шагом является запуск встроенного скрипта безопасности. Этот скрипт меняет ряд наименее защищенных опций, используемых по умолчанию, для таких функций, как, например, удаленный вход для пользователя root и тестовые пользователи.

Запускаем скрипт безопасности

sudo mysql_secure_installation

Откроется серия диалогов, где можно внести некоторые изменения в параметры безопасности установки MariaDB. Параметры установите, исходя из собственной безопасности. Учитывая, что моя БД будет наполняться лишь медиатекой и находится она в изолированной домашней сети – сделал так:

root@kodi-pc:/# sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

Оставляем пользователя root без пароля. Ничего не вводим, нажимаем ENTER.

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n]

Отклоняем (N).

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]

Удаляем анонимных пользователей (Y).

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]

Оставим возможность удаленного подключения для пользователя root. Отклоняем (N).

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]

Удаляем тестовую БД, она нам ни к чему (Y).

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]

Обновляем таблицу привилегий. Соглашаемся (Y).

Теперь создадим пользователя, из-под которого будут работать с БД наши медиацентры. Для создания пользователя kodi с паролем kodi запускаем оболочку MariaDB и выполняем команду

sudo mariadb
GRANT ALL ON *.* TO 'kodi'@'localhost' IDENTIFIED BY 'kodi' WITH GRANT OPTION;

Разрешаем доступ с любого хоста ко всем базам данных на сервере для пользователя kodi

GRANT ALL PRIVILEGES ON *.* TO kodi@'%' IDENTIFIED BY 'kodi';

Очищаем привилегии, чтобы они были сохранены и доступны в текущем сеансе

FLUSH PRIVILEGES;

Оболочку MariaDB можно закрывать, выполнив команду

exit

Для организации доступа вне локального хоста, необходимо указать порт 3306 и bind-address 0.0.0.0. Открываем конфигурационный файл MariaDB

sudo mcedit /etc/mysql/mariadb.conf.d/50-server.cnf

Раскомментировать параметр

port = 3306

Для параметра bind-address установить 0.0.0.0 (вместо 127.0.0.1)

bind-address = 0.0.0.0

Для применения изменений перезапускаем MySQL-сервер

sudo service mysql restart

На данном этапе можно проверить, верно ли мы все сделали. Для этого лучше всего подключиться к нашему серверу со сторонней машины. Это гарантирует работоспособность доступа к БД вне локального хоста.

Как вариант, можно использовать MySQL Workbench.

Создаем новое подключение:

Connection Method - Standart (TCP/IP)
Hostname – 192.168.0.50 (заменить на адрес вашего сервера)
Port – 3306
Username – kodi (имя пользователя, если создавали своего)

Нажимаем «Test Connection», вводим пароль и в случае, если все корректно – получаем соответствующее сообщение:

Подключение к серверу также должно быть успешным. Вы должны увидеть «ничего». Это тоже хороший знак. Настройка сервера MariaDB завершена, сейчас мы займемся наполнением базы данных нашей медиатекой.

Подготовка серверной части. KODI

Как и говорил выше, медиатека должна быть размещена в сетевом каталоге, так как она будет одна на все устройства. В моем случае библиотека фильмов и сериалов состоит не из локальных медиафайлов, а наполняется из торрент-трекеров дополнения Elementum.

Библиотеку мы настраивали еще в первой части. Никуда ее не переносим, пути оставляем прежние:
/mnt/kodi/library/Movies – библиотека фильмов
/mnt/kodi/library/Shows – библиотека сериалов

Необходимо лишь расшарить каталог /mnt/kodi/library. Конфигурируем samba

sudo mcedit /etc/samba/smb.conf

В конец конфигурационного файла вставляем:

[library]
comment = library
path = /mnt/kodi/library/
browsable = yes
writable = yes
guest ok = yes
read only = no
force user = nobody
force group = nogroup
force create mode = 0777
force directory mode = 0777

И перезапускаем сервис samba

sudo /etc/init.d/smbd restart

Теперь наша библиотека будет доступна всем устройствам в домашней сети.

Важно! В источниках медиатеки также необходимо указать абсолютный путь к директории с файлами библиотеки! Хоть она и находится локально на этом устройстве (сервере).

Переходим в «Настройки/Медиа/Медиатека/Видео» и в существующих источниках Movies и Shows изменяем пути на нужные, выбрав «Добавить сетевой адрес». В качестве логина и пароля используйте данные вашей учетной записи в Kubuntu.

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

Теперь дадим понять KODI, что мы хотим работать с базой данных. Для этого в файле advancedsettings.xml (/home/имя_пользователя/.kodi/userdata/) добавить:

<advancedsettings>
  <videodatabase>
    <type>mysql</type>
    <host>192.168.0.50</host>
    <port>3306</port>
    <user>kodi</user>
    <pass>kodi</pass>
  </videodatabase>
  <videolibrary>
    <importwatchedstate>true</importwatchedstate>
    <importresumepoint>true</importresumepoint>
  </videolibrary>
</advancedsettings>

Если файл advancedsettings.xml отсутствует – создайте его вручную. Параметры изменить в соответствии с вашими настройками, где:
Host – IP-адрес вашего MySQL-сервера;
User – имя пользователя MariaDB;
Pass – пароль пользователя MariaDB.

На стороне сервера всё готово. Можно проверить. Перезапускаем KODI и, в зависимости от объема вашей медиатеки, ждем какое-то время, пока KODI ее обработает.

Информация о моей медиатеке:

Фильмов – 322
Сериалов – 68
Сезонов сериалов - 319
Эпизодов сериалов - 2254
Размер библиотеки - 380 Кб
Общее количество файлов (nfo и strm) – 3826

Медиатека такого размера обрабатывалась порядка 10 минут. По завершении обновления, давайте посмотрим на нашу БД. Снова подключаемся к серверу с помощью MySQL Workbench.

Как видим, KODI самостоятельно создал БД «MyVideos119» и наполнил ее всеми нашими фильмами и сериалами. Например, в таблице «Movie» - фильмы. Значит, мы все сделали правильно.

После завершения импорта медиатеки в БД, можно еще оценить и ее ресурсопотребление. Моя медиатека заняла в ОЗУ чуть более 100 Мб. Это дает понять, что, даже значительный рост количества фильмов и сериалов, не скажется на производительности основного моего медиацентра.

Настройка клиентской части

Настройки других устройств, которые необходимо синхронизировать с сервером, очень просты:

  • advancedsettings – настраиваем, также как на сервере;

  • добавляем источники в «Настройки/Медиа/Медиатека/Видео» также, как и на сервере, указывая абсолютные сетевые пути;

  • если вы, как и я используете дополнение Elementum – в его настройках также изменить пути на абсолютные до сервера (путь к библиотеке и путь к торрент-файлам). Таким образом, где бы вы не начали смотреть (скачивать) фильм, сохранится он на сервере. Да и в моем случае, не рационально было бы для малинки иметь свое файловое хранилище.

Для упрощения настройки своей малинки я просто перенес конфигурационные файлы с основного медиацентра:

/home/kodi/.kodi/userdata/advancedsettings.xml
/home/kodi/.kodi/userdata/sources.xml
/home/kodi/.kodi/userdata/addon_data/plugin.video.elementum/settings.xml
/home/kodi/.kodi/userdata/addon_data/script.elementum.burst/settings.xml

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

Дополнительные возможности

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

Для этого в файле advancedsettings.xml укажите параметры для musicdatabase

  <musicdatabase>
    <type>mysql</type>
    <host>192.168.0.50</host>
    <port>3306</port>
    <user>kodi</user>
    <pass>kodi</pass>
  </musicdatabase>

Конфигурационный файл advancedsettings.xml достаточно гибко настраивается, например наша секция videolibrary может принять еще несколько параметров. Я их не использовал, но кому-то это может и пригодится - ссылка.

Заключение

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

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

Всем хорошего времяпрепровождения с медиацентром KODI!

Средняя зарплата в IT

120 000 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 7 479 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 25

    0

    имхо samba и mariadb для такой задачи перебор, вот nfs и sqlite было бы самое оно. вопрос только поддерживает ли он sqlite, а nfs точно будет лучше (проверено).

      0
      Почему перебор?
        0

        Может я не прав, но samba структурного сложнее и накладывает больше оверхэда
        Попробуй банально fio тест по самбе и nfsv4 разница обычно очень заметна невооружённым взглядом
        Ну а монструозная субд против одно файловой самоесебе базы вообще несравнимы.

          0
          Насколько знаю, с sqlite kodi работает. Именно в ней ведь kodi и хранит все данные локально. Но для синхронизации она не поддерживается.
            0

            жаль
            но в целом если больше одной точки использования то я бы заменил kodi на emby или plex


            UPD: а что если (да знаю что костылизм, но интересный эксперимент) не настраивать синхронизацию а сделать им общий локальный sqlite db файл? например на шаре или синхронизируемый?

              0
              Была такая же мысль по подобному костылю, но не нашёл, где можно изменить путь хранения db. Вероятно, это глубоко в коде, а не конф. файлах.
                +1

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


                господи какие же костыли я придумываю непонятно зачем))

                  –1

                  Да, это уже точно перебор))

            0
            Погуглил тесты. В ближайшем будущем, думаю, стоит отойти от самбы.

            NAS Performance: NFS vs. SMB vs. SSHFS
              0

              В моих тестах самба показывала себя прилично хуже (увы результатов не сохранилось). Либо я что-то не так делал либо железо имеет большое значение либо за эти пару лет самба подтянулась…

          0
          Возможно я не прав. Пролистал все возможные параметры advancedsettings.xml на оф. сайте.

          И обнаружил:

          2) Configure a database for an sqlite database.
          Note: The videodatabase, musicdatabase, tvdatabase, epgdatabase, and adspdatabase tags are interchangeable here.
          <musicdatabase>
            <type>sqlite3</type>
            <host>/usr/local/share/kodi/databases</host>
          </musicdatabase>

          Вероятно, kodi все же работает с SQLite. Но мне уже как-то не хочется переизобретать…
          0
          Вроде элементум не позволяет в своих настройках использовать сетевой адрес как место хранения библиотеки. По крайней мере на андроиде (тв приставка) нельзя это сделать, если не примонтировать сетевую папку, а не каждая тв приставка, к сожалению, имеет samba клиент. Мне вот пришлось это обходить «костылями» через синхронизацию Syncthing, так как samba клиент отсутствовал на приставках, а использовать кастомные прошивки не хотелось.
            0
            На платформе Android — возможно. На Linux Elementum позволяет использовать сетевые адреса, только прежде этот сетевой источник необходимо добавить в систему все через теже настройки медиатеки.

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

                  image
              0

              Имеется ли возможность хранить в базе позицию просмотра фильма? Хочется для возможности просмотра с разных устройств.


              Коди для андроида имеет свой самба клиент. Но, версия 19 меня порадовала, самба клиент работать перестал, после чего последовало удаление коди и возврат к 18.9, естественно отметки просмотренных фильмов в моей 48 терабайтной библиотеке пропали.


              В shield TV самба клиент есть, только если перезагрузить комп с фильмами — шары надо отремонтировать. Клиент внутри коди тоже виснет и надо коди перезапускать.

                0
                Да, позиция просмотра будет храниться и в БД MySQL. Об этом и речь в публикации, что бы синхронизировать просмотр на разных устройствах.
                0
                Серия статей увлекательна, но для себя я выбрал сервер jellyfin + нативный плагин для kodi
                jellyfin.org/docs/general/clients/kodi.html

                emby.media вроде должен быть даже попроще. Plex в kodi тоже интегрируется, но выглядит как отдельное приложение внутри kodi
                  0
                  прочитал статью, мои ссылки несколько не в тему
                    0

                    несколько лет держал свой plex (для себя и для друзей) очень крутая штука и для моих задач подходил куда больше kodi
                    но есть у него одно НО: отсутствие аппаратного ускорения, собсна насколько я понимаю emby грешит тем же

                      0
                      в случае с jellyfin.org/docs/general/clients/kodi.html фоку с в том что клиентом выступает KODI со всеми вытекающими.

                      с emby не уверен, но вроде так же emby.media/emby-for-kodi.html

                      на plex сам долго сидел и использовал нативные приложения на теликах, но на проэктор нормально встал только kodi и мне его интеграция с jellyfin понравилась больше
                        0

                        я не углублялся, но ЕМНИП плагин plex внутри kodi по сути был браузером есстесно без хардварного ускорения..


                        ну а я его потыкал ровно две секунды, чисто из праздного интереса, потому как сам по себе plex сделал kodi ненужным для меня.

                    0
                    сервис позволяет использовать плейлист на двух устройствах без дополнительной платы за тариф.

                    у вас же есть машина 24х7, загоните себе в прокси и будет мультирум на сколько захотите
                      0
                      Если будет нужда в третьем устройстве — именно так и сделаю :)

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое