Den enklaste Internetradiokolumnen "Kodi" eller räddningen av "hallon" tegelstenen

Den enklaste Internetradiokolumnen "Kodi" eller räddningen av "hallon" tegelstenen

Grundläggande förutsättningar:

  1. Det finns ett gammalt oanvänt första generationens Raspberry Pi-kort;
  2. Skivan ligger på skåpet som en dödvikt och används inte - "Brick" -brädan;

Vad jag skulle vilja få:

  1. Vid en viss tidpunkt (till exempel beroende på humör)
    brädet upphör att vara en "Brick" och ett magiskt minneskort sätts in i det;
  2. En Ethernet-kabel och en kontakt från en vanlig hushållshögtalare eller hörlurar är anslutna till kortet;
  3. Efter att strömmen har lagts på, den tidigare "Brick" - sjunger

Huvudidé:

  1. Det minsta antalet gester för alla inställningar, i det mest idealiska fallet ansluter vi endast "Ethernet"-kabeln, strömmen och högtalarna, och gör inget annat, från ordet "alls";
  2. Den tidigare "Brick" ur lådan stöder till exempel 20 internetradiostationer, som kan växlas i en cirkel genom att trycka på mushjulet eller på ett specifikt GPIO-stift (anslut två ledningar och kortslut dem (min dröm sedan barndomen) );
  3. Styrningen sker via en radiokanal, och denna radiokanal kan vara en vanlig radiomus;
  4. Ta ett färdigt system och montera distributionen till "Yocto Project"
    de där. som vanligt kommer vi inte att göra dig något, eftersom allt redan har gjorts.
    (det räcker att bara placera en utomstående observatör på andra sidan "TV");

beskrivning

Den enklaste Internetradiokolumnen "KODI"
Monteringen är designad för äldre Raspberry Pi 1-brädor
(samlar damm någonstans på garderoben, men som är redo att göra lite mer arbete)

Som standard används m3u8-listan med 12 internetradiostationer.

Det antas att kortet fungerar utan HDMI-utgång, och för att stänga av det behöver du bara koppla ur nätadaptern från uttaget. Och som en ultramodern trådlös kontrollpanel kan du använda din superradiomus (eller ansluta en vanlig grå med en svans).

När den är påslagen konfigureras standardnätverksgränssnittet via DHCP-protokollet och den senast lagrade radiostationen från listan spelas upp, uppspelningsvolymen styrs med en vanlig mus:
(utse äntligen din mus till "ledningschef", och gratulera den, den förtjänar det)

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

För att lägga till din egen lista över internetradiostationer
du kan alltid ansluta en HDMI-kabel från din TV
och använd det grafiska standardgränssnittet för Kodi 17.6
(stäng av kortet, anslut HDMI och sätt på strömadaptern)

Kodi huvudmeny => “Tillägg” => “Mina tillägg”
          => “PVR-klienter” => “PVR IPTV Simple Client”

Inledande genomförande

(möjlig)
Från början, när jag bestämde mig för att göra en "Internet Radio Column", planerade jag följande:

  • Minimalistisk konsoldistribution i Yocto-projektet;
  • Ljudströmmen spelas upp via GStreamer;
  • Nätverksgränssnittet konfigureras via DHCP;

Och denna lösning har ett antal fördelar:

  1. Ganska snabbt (det tar 30-40 sekunder att nå driftläge från strömförsörjningen);
  2. Ganska pålitlig (färre program, färre felpunkter);
  3. En konsoldistribution är mycket lättare att byta till skrivskyddat läge
    de där. program skriver inget till rotfilsystemet
    (och filsystemet på SDHC-media är, enligt min mening, den första kandidaten för misslyckande);

Notera:

    В Yocto перевести корневую файловую систему (rootfs) 
    в режим только чтение можно сделать достаточно просто, 
    изменив один параметр во время сборки 

    Из коробки Yocto предлагает два варианта:
    1) Работа файловой системы в обычном режиме чтение/запись 
    (так работают все дистрибутивы общего назначения, например Ubuntu)
    2) Работа файловой системы в режиме только чтение
    (так работают специализированные дистрибутивы, например в маршрутизаторах)

    В режиме только чтение все каталоги, в которые обычно 
    записываются данные приложений и сервисов во время работы монтируются 
    в оперативную память (например каталог /var/log и т.п.)
    Данные актуальны только для текущего сеанса работы и после сброса питания
    данные теряются.

    Если в Yocto Project вы укажете при сборке использовать "read only", 
    то после сборки ваш дистрибутив будет настроен только на чтение, 
    но вы всегда можете добавить возможность динамического перевода 
    из "read only"  в "read/write", но это уже совсем другая история ...
    

Och en stor nackdel:

”Det måste göras” d.v.s. Jag behöver spendera N antal kvällar
(vanligtvis efter jobbet, och detta är den mest ineffektiva tiden, vid den här tiden tänker inte hjärnan längre, den brukar sova)

Och ändå skrev jag min tidigare artikel på Habré om multimediacentret Kodi och Yocto projektet
och möjligheten att fortsätta i samma veva övermannade min forskningsimpuls. Mer om detta i nästa kapitel.

Förvandla Kodi till en internetradiohögtalare

För att lägga till den funktionalitet jag behöver, kommer jag att lägga till ytterligare en metod till receptet för att bygga distributionen som beskrivs i föregående artikeln se filen 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}
}

Metoderna är avsedda för att modifiera rotfilsystemet innan en distributionsbild bildas i form av en råfil, som skrivs till minneskortet med kommandot dd

Detta görs så här:
ROOTFS_POSTPROCESS_COMMAND += "add_radio_guisettings; off_kodi_welcome;"

Kort sagt, i huvudkonfigurationsfilen för Kodi 17.6 ändras "tre punkter".

  • Konfiguration för att starta den senast valda TV-kanalen;
  • Ljudutgångskonfiguration, endast analog ljudutgång är alltid ansluten;
  • Inaktivera automatiska uppdateringar;
  • Notera:
        Единственное с чем у меня возникли сложности, 
        это то, что пришлось еще подтащить файл базы данных 
        в формате sqlite => TV29.db, в котором указывается 
        текущий проигрываемый ТВ канал 
        (так как по умолчанию никакой из каналов не выбран), 
        а через xml конфигурацию в Kodi этого не сделать.
        

en mer detaljerad sekvens av åtgärder för varje objekt:

1) Klicka på kugghjulsikonen i det övre vänstra hörnet av skärmen
och välj "PVR och TV-inställningar" (bild av en TV med två horn)
sedan på vänster sida av menyn, välj "Uppspelning" och i mitten "Allmänt"
välj "Fortsätt från senaste kanal vid uppstart" i rullgardinsmenyn
genom att välja inställningen "Förgrund".

eller tydligare:

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

2) Klicka på "kugghjulsikonen" i det övre vänstra hörnet av skärmen och välj objektet:

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

3) Klicka på "kugghjulsikonen" i det övre vänstra hörnet av skärmen och välj objektet:

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

Hur jag har tittat på tv på fel sätt i två år.

Jag måste erkänna för dig att jag på två år fortfarande inte har lärt mig hur man ser på TV på rätt sätt.

Jag brukar titta på tv i köket. Ett Raspberry Pi 2B-kort är anslutet till TV:n och Ethernet- och HDMI-kontakter är anslutna till kortet. Kortet drivs via en vanlig USB-kabel, som kopplas in i USB-porten på TV:n, d.v.s. Faktum är att om du slår på TV:n med standardfjärrkontrollen försörjs Raspberry Pi-kortet med ström, och om du stänger av TV:n från fjärrkontrollen återställs också omedelbart strömmen från Raspberry Pi-kortet.

Ja, jag är väl medveten om att detta inte kan göras, eftersom rotfilsystemet för Kodi mediacenter (ext3) fungerar i normalt läs-/skrivläge. Men jag är en lat person, och först bestämde jag mig för att kolla hur länge jag kunde stänga av systemet så här, tills det slutade ladda helt, men tyvärr, efter två år lyckades jag aldrig göra det här (kanske hade jag bara tur, jag vet inte).

Och enligt min åsikt, om det här läget var lämpligt för min TV, skulle det också vara lämpligt för en "enkel internetradiohögtalare", och eftersom jag tvångsinaktiverade automatisk uppdatering av Kodi-plugins, kommer sannolikheten för ett filsystemfel att bli jämnt mindre. Än så länge ser jag inga problem med detta

Notera:

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

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

Distributionen av "Internetradiohögtalare" som beskrivs i artikeln är en hushållsdistribution, och det som är viktigast för en hushållsdistribution är ett vackert GUI. Enligt min mening är det mycket svårt eller nästan omöjligt att lära en vanlig användare att ange några obegripliga magiska kommandon i konsolen, och han kan inte ens ordet. Men GUI, tack.

Och detta är kanske mitt främsta argument för en icke-konsoldistribution. Det grafiska användargränssnittet för varma lampor i Kodi, det behövs egentligen inte, men det finns där.
(Jag glömde också helt bort att nämna att Kodi kan fjärrstyras, till exempel från en smartphone, genom att installera Yatse-applikationen, och kanske för vissa är detta ett plus)

Kodi-konfiguration för muskontroll

och nu Rocket

<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>

Konfigurationen åsidosätter globala händelser för följande element:

  • rulla mushjulet framåt
  • rulla mushjulet bakåt
  • klicka på mitten av musknappen
  • bearbeta långa musklick (3 sekunder eller mer),
    0 höger knapp-ID, 1 vänster knapp-ID

Mer detaljerad information om hur du ställer in mushändelser:

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

Vad ska man göra om kabelsystemet inte kommer fram till dig

"Men jag har inga lediga Ethernet-portar hemma (eller har aldrig)", kanske några av de glada ägarna av gamla Raspberry Pi 1-kort utbrister (kanske köptes kortet för forskning och blev liggande på skåpet)

Och eftersom kortet inte har inbyggt Wifi är det inte särskilt funktionellt utan Ethernet-anslutning.

Naturligtvis är det möjligt att använda Raspberry Pi 1-kortet utan Ethernet, men det kommer att kräva lite ansträngning från din sida. Vanligtvis är sådana saker intressanta att göra endast som en del av att lära sig något nytt, d.v.s. Detta är inte specialarbete.

Så låt oss överväga ett hypotetiskt användningsfall för ett kort utan Ethernet:

Du kan ansluta en extern USB - Wifi-adapter, styrd av hänsynen
att adaptern ska fungera bra under Linux

Notera:

    К сожалению часть 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 
    

Om du redan har en USB Wifi-adapter kan du kontrollera om den fungerar bra under Linux enligt följande:

  • Installera någon allmänt använd Linux-distribution
    allmänna ändamål, till exempel "Ubuntu Desktop"
  • Starta systemet
  • Anslut din wifi usb-adapter
  • Starta nätverkshanteraren och försök ansluta till din WiFi-åtkomstpunkt
  • Om allt fungerar bra och din internetanslutning är stabil, stöds din adapter väl och du kan fortsätta ditt arbete med att ansluta denna adapter i en specialiserad distribution och eventuellt med andra versioner av kärnan
    (om inte, så nej, tyvärr, det är bättre att inte ens försöka)

Stöd för extern Wifi-adapter i Raspberry PI

För att WiFi-adaptern ska fungera korrekt i Linux behöver vi två saker:
1) Linux-kärnastöd för specifik Wifi-adapter
2) Närvaron av en kärnmodul i systemet för en specifik Wifi-adapter

Ta till exempel TP-Link TL-WN722N-adaptern. Den har en helt enkelt magnifik antenn.
Låt oss hitta chipsetet som kortet fungerar på - för mig är det "AR9271", notera:

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

Låt oss nu hitta namnet på parametern i kärnkonfigurationen som är ansvarig för AR9271-chipset-drivrutinen, det är bäst att leta efter kombinationen av ord "AR9271 catee.net"
     där "cateee.net" är en cool sida som beskriver konfigurationer av Linux-kärnmoduler

Vi hittar omedelbart namnet på kärnkonfigurationen - CONFIG_ATH9K_HTC
och namnet på kärnmodulen vi behöver ath9k_htc

och ange sedan bara namnet på den nödvändiga modulen i konfigurationsfragmentfilen
Linux-kärna => recept-kärna/linux/filer/rbpi.cfg, lägg till raden:
CONFIG_ATH9K_HTC=m

Således kan du i framtiden ansluta all ytterligare utrustning till ditt system (ja, naturligtvis, om det redan stöds i Linux-kärnan)

Vad du ska göra om du är en habra-nörd - designer

Och man skapar de coolaste sakerna, som t.ex här eller så är du student och drömmer om att skapa något liknande.

Direkt kan du ta någon form av pekskärm för RPI på aliexpress, beställa ett passande batteri där, ansluta allt till ett Raspberry Pi 1,2 eller 3 kort (helst 3, eftersom det har inbyggt wifi), välj ett gränssnitt för grafisk designtema i Kodi, designat för en pekskärm och voila => du kan få en enkel ljudspelare. Naturligtvis kommer det att vara ganska skrymmande, men det blir ditt.

  Примечание:
  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)}"

  Om lyhördheten hos GUI Kodi 17.6 på grund av den enda processorkärnan i Zero verkar mystisk för dig, då kan du lura dina öron och bygga en äldre, men mycket snabb version, till exempel Kodi 15.2, den är mer "vänlig" i detta avseende (ibland löser arv allt)

Tyvärr har jag inte tavlan, så jag kan inte kolla, men jag känner att det borde fungera.

Korta monteringsanvisningar

    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
    

mer detaljerade monteringsanvisningar
och inspelning på ett microSDHC-kort, se i föregående artikel

postscript

Naturligtvis är idén med en internetradiohögtalare typisk, alla vet det och på Habré hittar du många artiklar om detta ämne, till exempel här

Och du kanske också tycker att jag helt enkelt skräddarsytt kraven till en färdig lösning. Till detta kan jag kontra och säga att nej, ärligt talat.

Mr Erveys historia

    Хотите верьте, хотите нет, а дело было так:

    Наш рабочий офис граничит с фирмой по производству разного звукового
    оборудования, и однажды директор этой фирмы, назовем его мистер "Эрви"
    подошел к нашему заместителю директора филиала мистеру "Арсению"
    и спросил у него, насколько сложно повесить на плату Raspberry Pi 
    проигрывание звукового потока т.е. плата подключается к сети 
    и колонкам, и "слышен характерный звук".

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

    В общем хотели как лучше, 
    а получилось, цитата - "Но мистер Эрви, как всегда, помог."

    Через некоторое время я поинтересовался у мистера "Бориса" 
    его мнением по поводу написания небольшой заметки на эту тему 
    на "Хабре", на что "Борис" ответил, что изменение 
    "трех пунктов меню" в Kodi, особо не привносит никакой 
    новой информации и не заслуживает отдельного упоминания. 
    Конечно я с ним полностью согласен и поэтому, я не расскажу ему, 
    что что-то написал по этому поводу.

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

Fler bra och annorlunda sammanställningar för dig, och låt även den tidigare tegelstenen sjunga för dig i år.

Källa: will.com

Lägg en kommentar