Най-простата интернет радио колона "Коди" или спасението на тухлата "Малина".

Най-простата интернет радио колона "Коди" или спасението на тухлата "Малина".

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

  1. Има стара неизползвана платка Raspberry Pi от първо поколение;
  2. Дъската лежи върху шкафа като собствена тежест и не се използва - дъската “Brick”;

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

  1. В определен момент от време (например според настроението)
    дъската престава да бъде „тухла“ и в нея се поставя магическа карта с памет;
  2. Ethernet кабел и щепсел от обикновен домакински високоговорител или слушалки са свързани към платката;
  3. След подаване на захранване бившата „Тухла“ - пее

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

  1. Минималният брой жестове за всяка настройка, в най-идеалния случай свързваме само кабела „Ethernet“, захранването и високоговорителите и не правим нищо друго, от думата "изобщо";
  2. Бившият “Brick” извън кутията поддържа например 20 интернет радиостанции, които могат да се превключват в кръг чрез натискане на колелото на мишката или на конкретен GPIO щифт (свържете два проводника и ги окъсете (моята мечта от детството) );
  3. Управлението се осъществява чрез радиоканал, като този радиоканал може да бъде обикновена радиомишка;
  4. Вземете готова система и сглобете дистрибуцията в „Проект Yocto“
    тези. както обикновено, няма да ви направим нищо, тъй като всичко вече е направено.
    (достатъчно е просто да поставите външен наблюдател от другата страна "телевизор");

описание

Най-простата интернет радио колона „KODI“
Сглобката е предназначена за по-стари платки Raspberry Pi 1
(събират прах някъде в килера, но са готови да свършат още малко работа)

По подразбиране се използва списъкът m3u8 от 12 интернет радиостанции.

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

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

  колесико вперед  - увеличение громкости звука
  колесико назад   - уменьшение громкости звука
  длительное нажатие (3сек и более) на правую кнопку мыши
                   - выбор следующий радиостанции
  длительное нажатие (3сек и более) на левую кнопку мыши
                   - выбор предыдущей радиостанции

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

Главно меню на Kodi => „Добавки“ => „Моите добавки“
          => „PVR клиенти“ => „PVR IPTV прост клиент“

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

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

  • Минималистично разпространение на конзоли в проекта Yocto;
  • Аудио потокът се възпроизвежда чрез 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 на брой вечери
(обикновено след работа и това е най-неефективното време, по това време мозъкът вече не мисли, обикновено спи)

И все пак написах предишната си статия на Habré за мултимедийния център Коди и Йокто проект
и възможността да продължа в същия дух надделя над изследователския ми импулс. Повече за това в следващата глава.

Превръщане на 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}
}

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

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

Накратко, в основния конфигурационен файл на Kodi 17.6 се променят „три точки“.

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

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

1) Щракнете върху иконата на зъбно колело в горния ляв ъгъл на екрана
и изберете „PVR и TV настройки“ (изображение на телевизор с два клаксона)
след това в лявата част на менюто изберете „Възпроизвеждане“ и в централната секция „Общи“
изберете „Продължаване от последния канал при стартиране“ в падащия списък
избиране на настройката „Преден план“.

или по-ясно:

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

2) Кликнете върху иконата „зъбно колело“ в горния ляв ъгъл на екрана и изберете елемента:

       "Системные настройки"  
       => "Дополнения" => "Обновления" => "Никогда не проверять обновления"

3) Кликнете върху иконата „зъбно колело“ в горния ляв ъгъл на екрана и изберете елемента:

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

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

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

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

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

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

Забележка:

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

    и определенной магии перевести ваш дистрибутив в режим "read only"
    

Разпределението на „Интернет радио високоговорители“, описано в статията, е домакинско, а най-важното за едно домакинско разпространение е красивият GUI. Според мен е много трудно или почти невъзможно да се научи обикновен потребител да въвежда всякакви неразбираеми магически команди в конзолата и той дори не знае думата. Но GUI, моля.

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

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

и сега Ракета

<keymap>
    <global>
        <mouse>
          <wheelup>VolumeUp</wheelup>
          <wheeldown>VolumeDown</wheeldown>
          <middleclick>ChannelDown</middleclick>
          <longclick id="0">ChannelDown</longclick>
          <longclick id="1">ChannelUp</longclick>
          <!-- конфигурационный rocket -->
        </mouse>
    </global>
</keymap>

Конфигурацията отменя глобалните събития за следните елементи:

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

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

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 chipset Ralink RT3572 
    

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

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

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

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

Вземете например адаптера TP-Link TL-WN722N. Има просто великолепна антена.
Да намерим чипсета, на който работи платката - за мен това е "AR9271", Забележка:

    что самое интересное, это то, что для одной и той же модели
    одного и того же производителя, чипсет Wifi может отличаться.
    Я например сталкивался с тем, что для TL-WN722N версии 2, 
    используется уже другой чипсет Realtek RTL8188, а он уже 
    плохо работал под Linux (на тот момент), увы такие вот дела, 
    т.е. иногда нужно еще приглядываться к маленьким цифрам 
    версии на обратной (темной) стороне адаптера.    
    

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

Веднага намираме името на конфигурацията на ядрото - CONFIG_ATH9K_HTC
и името на модула на ядрото, от който се нуждаем ath9k_htc

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

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

Какво да направите, ако сте хабра маниак - дизайнер

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

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

  Примечание:
  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" случайны.
    

Повече добри и различни сглобки за вас и нека дори бившата тухла пее за вас тази година.

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

Добавяне на нов коментар