Най-простият интернет радио колонка «Kodi» или спасение на «Малинового» кирпича

Най-простият интернет радио колонка «Kodi» или спасение на «Малинового» кирпича

Основни предпоставки:

  1. Има стара неупотребявана платка Raspberry Pi от първо поколение;
  2. Платката лежи на шкафа като мъртво тегло и не се използва — платката е "Кирпич";

Какво бихме искали да получим:

  1. В определен момент (например на настроението)
    платката спира да бъде "Кирпич" и в нея се поставя магическа карта памет;
  2. Към платката се свързва Ethernet кабел и букса от обикновен домакински говорител или слушалки;
  3. След подаването на захранване бившият "Кирпич" — пеe

Основна идея:

  1. Минимално количество действия за каквато и да е настройка, в идеалния случай свързваме само "Ethernet" кабела, захранването и говорителите и не правим нищо друго, от думата "въобще"; Бившият "Кирпич" по подразбиране поддържа например 20 интернет радиостанции, превключването между които може да се назначи на натискане на колелото на мишката или на определен пин GPIO (да свържете два проводника и да ги замкнете (мечтата ми от детството));
  2. Управлението се осъществява по радио канал и този радио канал може да стане обикновена радио мишка;
  3. Да вземем готова система, дистрибуция, сглобена в "Yocto Project"
  4. т.е. както обикновено ние няма да правим нищо, тъй като всичко вече е направено.
    (достатъчно е само да поставим страничен наблюдател от другата страна
    "Телевизора" Най-простата интернет радио колонка "KODI");

Описание

Сглобката е предназначена за стари платки Raspberry Pi 1
(събирани прах на шкафа, но готови все още да работят)
По подразбиране се използва списък m3u8 от 12 интернет радиостанции.

Предполага се, че платката работи без HDMI изход и за нейното изключване е достатъчно да извадите адаптера от контакта. А за ултрамодерен безжичен дистанционно управление можете да използвате вашата супер радио мишка (или да свържете обикновена мишка с кабел).

При включване, мрежовият интерфейс по подразбиране се конфигурира чрез протокола DHCP и се възпроизвежда последната запомнена радиостанция от списъка, управлението на силата на звука става с обикновена мишка:

(направете най-накрая вашата мишка "шеф на управлението" и я поздравете, тя го заслужава)
(посветете накрая мишката си "началничка на управлението" и я поздравете, тя го заслужава)

  колелце напред - увеличение на звука
колелце назад - намаляване на звука
дълго натискане (3 секунди или повече) на дясното mouse бутон - избор на следваща радиостанция
дълго натискане (3 секунди или повече) на лявото mouse бутон - избор на предишна радиостанция

За добавяне на собствен списък с интернет радиостанции
винаги можете да свържете HDMI кабел от телевизора
и да използвате стандартния графичен интерфейс Kodi 17.6
(изключете платката, свържете HDMI и включете захранващия адаптер)

Основно меню Kodi => «Допълнения» => «Моите допълнения»
          => «Клиенти PVR» => «PVR IPTV Simple Client»

Първоначална реализация

(възможна)
Първоначално, когато реших да направя «Интернет радио колонка», планирах следното:

  • Минималистичен конзолен дистрибутив в Yocto Project;
  • Аудио потокът се възпроизвежда чрез GStreamer;
  • Мрежовият интерфейс се настройва по DHCP;

И такова решение има редица предимства:

  1. Достатъчно бързо (изход на работен режим от подаване на захранване 30-40 секунди);
  2. Достатъчно надеждно (по-малко програми, по-малко точки на отказ);
  3. Конзолният дистрибутив е много по-лесен за превод в режим само за четене
    т.е. програмите не записват нищо в кореновата файлова система
    (а файловата система на носителя SDHC е на мое мнение първият кандидат за откази);

Забележка:

    В Yocto можете лесно да преведете коренната файлова система (rootfs) в режим само за четене, променяйки един параметър по време на изграждане. Инсталирането на Yocto предлага два варианта: 1) Работа на файловата система в стандартен режим на четене/писане (такъв е режимът на работа на всички генерални дистрибуции, например Ubuntu) 2) Работа на файловата система в режим само за четене (така работят специализираните дистрибуции, например в рутери). В режим само за четене всичките директории, в които обикновено се записват данни от приложения и услуги по време на работа, се монтирват в оперативната памет (например директорията /var/log и т.н.). Данните са валидни само за текущата сесия и след спиране на захранването, те се губят. Ако в Yocto Project посочите по време на изграждане да се използва "read only", то след изграждането вашият дистрибутив ще бъде настроен само на четене, но винаги можете да добавите опцията за динамичен превод от "read only" в "read/write", но това вече е съвсем друга история...
    

И един основен недостатък:

„Трябва да го направя“, т.е. трябва да отделя N брой вечери
(обикновено след работа, и това е най-неефективното време, в което мозъкът вече не мисли, той обикновено спи)

И освен това, предишната си статия в Хабра написах за мултимедийния център Kodi и Yocto проект
и възможността да продължа в същия дух, надвива моя изследователски импулс. За това в следващата глава.

Превръщане на Kodi в интернет радио колонка

За да добавя необходимата ми функционалност, ще добавя още един метод в рецепта за изграждане на дистрибутива, описан в предишната статията вж. файл berserk-image.bb

GUI_SETTINGS = "home\/root\/.kodi\/userdata\/guisettings.xml"

# конфигурация за стартиране на последно избраният ТВ канал (1-фон 2-преден план)
F1_LINE = "<startlast default=\"true\">0<\/startlast>"
R1_LINE = "<startlast>1<\/startlast>"
# конфигурация на аудио извеждане, винаги е включен само аналоговия аудио изход
F2_LINE = "<audiodevice default=\"true\">PI:HDMI<\/audiodevice>"
R2_LINE = "<audiodevice>PI:Analogue<\/audiodevice>"
# тъй като HDMI по подразбиране не се използва, деактивирам автоматичното обновление
# иначе може да се получи, че захранването е изгубено, а данните не са записани
F3_LINE = "<addonupdates default=\"true\">0<\/addonupdates>"
R3_LINE = "<addonupdates>2<\/addonupdates>"


# методът отговаря за добавянето на конфигурацията:
# която превръща "умният телевизор" в "обикновен интернет радио колонка"
add_radio_guisettings() {
    sed -i "s|${F1_LINE}|${R1_LINE}|" ${IMAGE_ROOTFS}\/${GUI_SETTINGS}
    sed -i "s|${F2_LINE}|${R2_LINE}|" ${IMAGE_ROOTFS}\/${GUI_SETTINGS}
    sed -i "s|${F3_LINE}|${R3_LINE}|" ${IMAGE_ROOTFS}\/${GUI_SETTINGS}
}


FIND_STR = "touch .\/tmp\/.FIRST_RUN."
SCRIPT_FIRST_RUN = "etc\/init.d\/first-run.sh"
# тъй като HDMI изходът може да не се използва,
# е необходимо да деактивирате "стартовото приветствие"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}\/${SCRIPT_FIRST_RUN}
}

Методите са предназначени за модификация на кореновата файлова система преди формирование на образа на дистрибуцията под формата на един raw файл, който се записва на картата с команда dd

Това се прави по следния начин:
ROOTFS_POSTPROCESS_COMMAND += «add_radio_guisettings; off_kodi_welcome;»

Накратко, в основния конфигурационен файл на Kodi 17.6, се променят «три пункта»

  • Конфигурация за стартиране на последно избраният ТВ канал;
  • Конфигурация за извеждане на звук, винаги е активен само аналоговия аудио изход;
  • Деактивиране на автоматичното обновление;
  • Забележка:
        Единственото, с което имам затруднения, 
        е, че трябваше да пренеса файла на базата данни 
        в формат sqlite => TV29.db, в който се указва 
        текущият играещ ТВ канал 
        (тъй като по подразбиране нито един от каналите не е избран), 
        а чрез xml конфигурацията в Kodi това не може да се направи.
        

по-подробен ред на действията за всеки пункт:

1) Кликнете върху иконата «зъбно колело» в левия горен ъгъл на екрана
и изберете опцията «Настройки PVR и ТВ» (изображение на телевизор с две антенки)
след това в лявата част на менюто, изберете опцията «Възпроизвеждане», а в централната секция «Общи»
укажите в падащия списък «Продължи от последния канал при стартиране»
избирайки настройката «Преден план»

или по-ясно:

      "Настройки PVR и ТВ" 
       => "Възпроизвеждане" 
       => "Продължи от последния канал при стартиране" => "На преден план"

2) Натиснете иконата „зъбно колело“ в горния ляв ъгъл на екрана и изберете:

       "Системни настройки"  
       => "Добавки" => "Актуализации" => "Никога не проверявайте актуализации"

3) Натиснете иконата „зъбно колело“ в горния ляв ъгъл на екрана и изберете:

       "Системни настройки" 
       => "Аудио" => "Устройство за изход на звука" => "PI: Аналогово"

Как две години неправилно гледам телевизор.

Трябва да призная, че за две години не успях да науча как да гледам телевизор правилно.

Обикновено гледам телевизор в кухнята. Към телевизора е свързан Raspberry Pi 2B, а към него Ethernet и HDMI портове. Захранването на платката идва през обикновен USB кабел, който е свързан в USB порта на телевизора, т.е. по същество, включването на телевизора с помощта на стандартното дистанционно управление, включва и захранването на Raspberry Pi, а изключването на телевизора с дистанционното, също така веднага изключва захранването и на платката Raspberry Pi.

Да, осъзнавам, че така не трябва да се прави, защото кореновата файлова система на мултимедийния център Kodi (ext3) работи в режим на четене/запис. Но съм ленив човек, и за начало реших да проверя колко дълго мога да изключвам системата, преди да спре да се стартира, но за съжаление през последните две години не успях да го направя (може би просто ми е провървяло, не знам).

И според мен, ако този режим работи за телевизора ми, то ще работи и за "обикновена интернет радио колонка", а тъй като принудително деактивирах автоматичните актуализации на плъгини за Kodi, вероятността за отказ на файловата система ще бъде още по-малка. За сега нямам проблеми с това.

Забележка:

    Но винаги можете, ако желаете, с помощта на една yocto команда 
    IMAGE_FEATURES += "read-only-rootfs"

    и определена магия да преведете вашия дистрибутив в режим "само за четене".
    

Дистрибутивът "интернет радио колонка", описван в статията, е домашен, а най-важното за домашен дистрибутив — красивият GUI. Според мен е много трудно или почти невъзможно да се научи обикновен потребител да въвежда каквито и да било непознати магически команди в консолата, дори и to заглавието му да не знае. Но GUI е, моля.

И това вероятно е моят основен аргумент в полза на неконзолна дистрибуция. Топлият и уютен графичен интерфейс на Kodi, да, той не е особено необходим, но все пак го има.
(Също така забравих да спомена, че Kodi може да се управлява дистанционно, например със смартфон, инсталирайки приложението „Yatse“, и за някои хора това може да е предимство)

Конфигурацията на Kodi за управление с мишка

а сега Ракета

VolumeUp
          VolumeDown
          ChannelDown
          ChannelDown
          ChannelUp
          <!--

Конфигурацията пренаписва общите (global) събития за следните елементи:

  • периферно скролиране напред
  • периферно скролиране назад
  • натискане на средния бутон на мишката
  • обработка на дълго натискане на мишката (3 секунди или повече),
    0 идентификатор на десния бутон, 1 идентификатор на левия бутон

по-подробна информация за настройването на събитията на мишката:

kodi.wiki/view/Alternative_keymaps_for_mice
kodi.wiki/view/Action_IDs
kodi.wiki/view/Window_IDs

Какво да правим, ако кабелната система не е достигнала до вас

„Но у нас няма свободни Ethernet портове (или никога не е имало)“ — може да възкликне част от щастливите притежатели на стари платки Raspberry Pi 1 (възможно платката е купена за изследване и така и е останала на шкафа)

Тъй като платката няма вграден Wifi, без Ethernet свързване, тя не е много функционална.

Разбира се, възможността за употреба на платка Raspberry Pi 1 без Ethernet съществува, но ще изисква от вас определени усилия. Обикновено подобни неща са интересни за изпълнение само в контекста на изучаване на нещо ново, т.е. това не е потребителска работа.

И така, нека разгледаме хипотетичен вариант за употреба на платката без Ethernet:

Можете да свържете външен USB — Wifi адаптер, водейки се от предположението,
че адаптерът трябва да работи добре под Linux

Забележка:

    За съжаление, част от WiFi адаптерите няма да работят. Това не е особеност на дистрибутива, представен в тази статия, а по-скоро проблем с конкретни драйвери за WiFi адаптери в ядрото на Linux. Може да се констатира, че в момента не можете просто да отидете в магазина и да купите всеки WiFi адаптер. По-скоро, трябва да изберете WiFi адаптер от списък с по-малко проблематични и добре работещи под Linux. Проверявах само следните модели: - WiFi адаптер на чипсета Atheros D-Link DWA-126 802.11n (AR9271) - WiFi адаптер NetGear WNDA3200 - WiFi адаптер NetGear WNA1100 - WiFi адаптер TP-Link TL-WN722N (AR9271) - WiFi адаптер TL-WN322G v3 - WiFi адаптер TL-WN422G - Wifi адаптер Asus USB-N53 чипсет Ralink RT3572 
    

Ако вече имате USB WiFi адаптер, можете да проверите как работи под Linux по следния начин:

  • Инсталирайте някой широко разпространен дистрибутив на Linux
    за общо предназначение, например „Ubuntu Desktop“
  • Заредете системата
  • Свържете вашия Wifi USB адаптер
  • Стартирайте мрежовия мениджър и опитайте да се свържете с вашата WiFi точка за достъп
  • Ако всичко работи добре и интернет връзката ви е стабилна, значи вашият адаптер е добре поддържан и можете да продължите с работата по свързването на този адаптер в специализиран дистрибутив и възможно с други версии на ядрото
    (ако не, уви — по-добре дори и да не опитвате)

Поддръжка на външен Wifi адаптер в „Raspberry PI“

За правилната работа на WiFi адаптера под Linux ще ни трябват две неща:
1) Поддръжка на определен Wifi адаптер в ядрото на Linux
2) Наличие на модул на ядрото в системата за определен Wifi адаптер

Да вземем за пример адаптера TP-Link TL-WN722N. Той има просто страхотна антена.
Да намерим чипсета, на който платката работи — при мен това е „AR9271“. Забележка:

    Интересното е, че за една и съща модел на един и същи производител, чипсетът WiFi може да се различава. Аз, например, съм се сблъсквал с факта, че за TL-WN722N версия 2, се използва вече друг чипсет Realtek RTL8188, а той вече не работеше добре под Linux (в този момент), уви такива са нещата, т.е. понякога трябва да внимавате и за малките цифри на версията от обратната (тъмна) страна на адаптера.    
    

Сега да намерим името на параметъра в конфигурацията на ядрото, отговарящ за драйвера на чипсета AR9271, най-добре е да потърсите комбинацията от думи "AR9271 cateee.net"
     къде «cateee.net» — чудесен сайт с описание на конфигурациите на модулите на ядрото на Linux

Веднага намираме името на конфигурацията на ядрото — CONFIG_ATH9K_HTC
и името на необходимия ни модул на ядрото ath9k_htc

и след това е достатъчно да посочим името на необходимия модул в файла с фрагмента на конфигурацията
на ядрото на Linux => recipes-kernel/linux/files/rbpi.cfg, добавете реда:
CONFIG_ATH9K_HTC=m

По този начин след това можете да свържете всяко допълнително оборудване към вашата система (разбира се, ако то вече се поддържа в ядрото на Linux)

Какво да правите, ако сте хабра гик — конструктор

И създавате страхотни неща, например такива като тук или сте студент и мечтаете да създадете нещо подобно.

На пръв поглед можете да вземете някакъв Touch Screen екран за RPI от aliexpress, там да поръчате подходяща акумулаторна батерия, да свържете всичко това към платката Raspberry Pi 1, 2 или 3 (по-добре към 3, тъй като тя е с вграден Wifi), да изберете тема за графичния интерфейс в Kodi, проектирана за сензорен екран и воала => може да получите прост audio плейър. Разбира се, той ще е достатъчно обемен, но ще е ваш.

  Забележка:
  A за да сглобите медийния център Kodi за най-евтината платка 
  Raspberry Pi Zero Wifi в yocto, е достатъчно да промените два реда:

  конфигурационен файл => build/conf/local.conf
      MACHINE = 'raspberrypi0-wifi'

  рецептата за сглобяване на Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
      EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 
                            'raspberrypi0-wifi', '${BS_RPI}',  '', d)}"

  Ако отзивчивостта на GUI Kodi 17.6 
  заради едно процесорно ядро в Zero ви се струва 
  загадъчна, можете да направите финт ушите и да сглобите по-стара, 
  но много бърза версия, например Kodi 15.2, тя в това отношение е по- 
  "приятелска" (понякога наследството решава всичко)

За съжаление нямам платка, затова не мога да проверя, но според моите усещания това би трябвало да заработи.

Кратка инструкция за сглобяване

    1) Инсталирайте зависимостите на Yocto Project (например в Ubuntu): 
    sudo apt-get install -y --no-install-suggests --no-install-recommends 
        gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential 
        chrpath socat cpio python python3 python3-pip python3-pexpect 
        xz-utils debianutils iputils-ping python3-git python3-jinja2 
        libegl1-mesa libsdl1.2-dev xterm

    2) Изтеглете и инсталирайте Repo:
        mkdir ~\/bin
        curl http:\/\/commondatastorage.googleapis.com\/git-repo-downloads\/repo > ~\/bin\/repo
        chmod a+x ~\/bin\/repo

    3) Изтеглете проекта от github:
        PATH=${PATH}:~\/bin
        mkdir radio
        cd radio
        repo init -u https:\/\/github.com\/berserktv\/bs-manifest 
                  -m raspberry\/rocko\/radio-rpi-0.2.8.xml
        repo sync

    4) Сглобете проекта:
        .\/shell.sh
        bitbake berserk-image
        
    същото може да бъде сглобено и за платформи Raspberry Pi 3B Plus, 3B и 2B:
    repo init -u https:\/\/github.com\/berserktv\/bs-manifest 
              -m raspberry\/rocko\/radio-0.2.8.xml
    

по-подробни инструкции за сглобяване
и запис на microSDHC карта вижте в предишната статия

Постскриптум

Разбира се, идеята за интернет радио колоната е типова, тя е позната на всички и в хабра ще намерите много статии по този въпрос, например тук

И още, можете да си помислите, че просто съм нагласил изискванията към готовото решение. На това мога да отговоря, че не, честно, честно.

Историята на г-н Ерви

    Искате да вярвате или не, но всичко стана така:

    Нашият работен офис граничи с фирма, произвеждаща различно звуково
    оборудване, и един ден директорът на тази фирма, да го наречем господин "Ерви",
    се обърна към нашия заместник-директор на филиала, господин "Арсений"
    и го попита колко трудно е да се настрои Raspberry Pi за
    възпроизвеждане на звуков поток, т.е. платката се свързва с мрежата
    и колонките, и "се чува характерен звук".

    След това господин Арсений се обърна към заместника на моя
    началник - господин "Борис" и му прехвърли въпроса,
    а аз, като случайно наблюдател, запомних тази идея
    и я нарекох "Задача на тримата началници".

    В крайна сметка искахме да бъде по-добре,
    но резултатът, цитирам - "Но господин Ерви, както винаги, помогна."

    След известно време се интересувах от господин "Борис"
    за мнението му относно написването на кратка статия на тази тема
    в "Хабре", на което "Борис" отговори, че промяната
    на "тримата менюта" в Kodi не внася особена нова информация
    и не заслужава отделно споменаване.
    Разбира се, напълно се съгласих с него и затова няма да му кажа,
    че съм написал нещо по този въпрос.

    Статията е написана изключително за платката "Raspberry Pi 1",
    взета от господин "Борис" за времето на експеримента,
    съвпадението с всички други платки "Raspberry Pi 1" е случайно.
    

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

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster