Egyszerű internetes rádióoszlop "Kodi" vagy a "Málna" kocka megmentése

Egyszerű internetes rádióoszlop "Kodi" vagy a "Málna" kocka megmentése

Alapvető követelmények:

  1. Van egy régi, kihasználatlan Raspberry Pi első generációs lapka;
  2. A lapka a szekrényben hever, mint holt teher – „Tégla” lapka;

Amit szeretnénk elérni:

  1. Egy adott pillanatban (például kedv alapján)
    a lapka nem lesz többé „Tégla”, és egy varázslatos memóriakártyát helyezünk bele;
  2. Ethernet kábel csatlakozik a lapkához, és egy hanglejátszó vagy fülhallgató csatlakozó dugója;
  3. A tápellátás bekapcsolása után a korábbi „Tégla” – zenél

A fő ötlet:

  1. Minimális mozdulat a bármilyen beállításhoz, a legideálisabb esetben csak az „Ethernet” kábelt, a tápellátást és a hangfalakat csatlakoztatjuk, és nem csinálunk mást, semmit, mint a szó „teljesen”;
  2. A volt „Tégla” a dobozból például 20 internetes rádióadót támogat, amelyeket körbe tudunk váltani az egér görgőjének megnyomásával vagy egy adott GPIO tűhöz (két vezetéket csatlakoztatni és összekapcsolni (ez az álmom gyermekként));
  3. Az irányítás rádiócsatornán keresztül történik, és ez a rádiócsatorna egy hagyományos rádióegér is lehet;
  4. Egy kész rendszert, disztribúciót egy „Yocto Project”-ben összeszerelni
    azaz mint általában, semmit sem fogunk csinálni, hiszen minden készen áll.
    (elég, ha egy külső megfigyelőt helyezünk a másik oldalra „Televízió”);

Leírás

Egyszerű Internet Rádió hangszóró „KODI”
Ez a felépítés régi Raspberry Pi 1 lapkáknak készült
(amelyek valahol a szekrényben porosodnak, de még mindig készen állnak a működésre)

Alapértelmezés szerint egy 12 internetes rádióállomás m3u8 listája van használatban.

Feltételezzük, hogy a lapka HDMI kimenet nélkül működik, és a kikapcsolásához elegendő kihúzni a tápegységet a konnektorból. A modern, vezeték nélküli távirányítóként használhatja szuper rádióegérét (vagy csatlakoztathat egy hagyományos szürke, vezetékkel rendelkező egér).

A hálózati interfész alapértelmezés szerint DHCP protokollon keresztül van beállítva, és a legutoljára eltárolt rádióállomás kezdődik eljátszani a listából, a hangerőszabályozás hagyományos egérrel történik:
(végre nevezze el a saját egérét „irányítás főnökének”, és gratuláljon neki, megérdemli)

  előre léptetés - a hangerő növelése
hátra léptetés - a hangerő csökkentése
hosszan lenyomva (3 másodperc vagy több) a jobb egérgombot - a következő rádióállomás kiválasztása
hosszan lenyomva (3 másodperc vagy több) a bal egérgombot - az előző rádióállomás kiválasztása

Saját internetes rádióállomás lista hozzáadásához
mindig csatlakoztathat HDMI kábelt a tévétől
és használhatja a beépített grafikus felületet a Kodi 17.6-hoz
(kapcsolja ki a modulot, csatlakoztassa a HDMI-t, és kapcsolja be a tápegységet)

Főmenü Kodi => «Kiegészítők» => «Saját kiegészítők»
          => «PVR kliensek» => «PVR IPTV Egyszerű kliens»

Kezdeti megvalósítás

(lehetséges)
Eredetileg, amikor eldöntöttem, hogy készítek egy «Internetes Rádióoszlopot», a következőt terveztem:

  • Minimalista konzolos disztribúció a Yocto Project-ben;
  • A hangfolyam a GStreamer-en keresztül játszódik le;
  • A hálózati interfész DHCP-n keresztül van beállítva;

Ez a megoldás számos előnnyel jár:

  1. Elég gyors (30-40 másodperc alatt éri el a munkamódot a tápellátástól számítva);
  2. Elég megbízható (kevesebb program, kevesebb hiba lehetőség);
  3. A konzolos disztribúció sokkal egyszerűbben átkonfigurálható csak olvasási módra
    azaz a programok nem írnak a gyökér fájlrendszerbe
    (a fájlrendszer a SDHC tárolón számomra az első számú hiba forrás);

Megjegyzés:

    A Yocto rendszerben a gyökér fájlrendszert (rootfs) 
    csak olvasható módba viszonylag egyszerűen lehet átállítani, 
    ha a build során megváltoztatunk egy beállítást.

    Alapértelmezés szerint a Yocto két lehetőséget kínál:
    1) A fájlrendszer működése normál olvasás/írás módban 
    (ahogy azt a közönséges disztribúciók, például az Ubuntu is teszi)
    2) A fájlrendszer működése csak olvasható módban
    (ahogy a specializált disztribúciók, például az útválasztók)

    Csak olvasható módban minden olyan könyvtár, amelybe általában 
    adatok íródnak be az alkalmazások és szolgáltatások működése során, 
    az operatív memóriába van csatolva (például a /var/log könyvtár stb.)
    Az adatok csak az aktuális munkamenetre érvényesek, és áramkimaradás során 
    az adatok elvesznek.

    Ha a Yocto Project-ben a build során megadja a "read only" 
    használatát, akkor a build befejezése után az Ön disztribúciója 
    csak olvasásra lesz konfigurálva, de mindig hozzáadhatja a 
    dinamikus átkapcsolás lehetőségét a "read only" és "read/write" között, de ez már egy teljesen más történet ...
    

És van egy fő hátrány:

„Meg kell csinálni”, azaz szükséges, hogy N mennyiségű estét áldozzak rá
(általában munka után, és ez a legkevésbé hatékony időszak, ilyenkor az agy már nem gondolkodik, általában alszik)

Ezen kívül a korábbi cikkemet a Habr-on a multimédia központról írtam Kodi és Yocto project
és a lehetőség, hogy ebben az irányban folytassam, felülkerekedett a kutatási vágyamon. Erről a következő fejezetben.

A Kodi átalakítása internetes rádióoszlopként

A szükséges funkcionalitás hozzáadásához egy új módszert fogok hozzáadni a disztribúció build receptjéhez, amelyről az előzőben írtam. a Spotify döntéshozatali módszertanáról. Egyre több felhasználó preferálja a zenehallgatást mobilon a streaming szolgáltatásban, de a cégnél túlnyomórészt webprogramozók dolgoznak. A Spotify elemezte ezt a helyzetet, és úgy döntött, hogy több mobilfejlesztőt vesz fel, valamint átnevezi a webes szakembereket új irányba: lásd a berserk-image.bb fájlt

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

# az utoljára választott TV-csatorna indítási konfigurációja (1-háttér 2-előtér)
F1_LINE = "0"
R1_LINE = "1"
# a hang kimeneti konfigurációja, mindig csak az analóg audio kimenet csatlakoztatva
F2_LINE = "PI:HDMI"
R2_LINE = "PI:Analogue"
# mivel az HDMI alapértelmezés szerint nincs használatban, kikapcsolom az automatikus frissítést
# mert előfordulhat, hogy az áram elment, de az adatok nem lettek mentve
F3_LINE = "0"
R3_LINE = "2"


# a metódus felelős a konfiguráció hozzáadásáért:
# ami az "Okos TV-t" "egyszerű Internet Rádió hangsugárzóvá" alakítja
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"
# mivel az HDMI kimenet nem biztos, hogy használatban van, 
# tiltsuk le a "kezdő üdvözletet"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}

A módszerek a gyökér fájlrendszer módosítására szolgálnak egy disztribúciós kép létrehozása előtt, amely egyetlen raw fájlként íródik a memóriakártyára a parancs segítségével. dd

Ez így történik:
ROOTFS_POSTPROCESS_COMMAND += "add_radio_guisettings; off_kodi_welcome;"

Röviden, a Kodi 17.6 alapértelmezett konfigurációs fájljában három pontot változtatunk meg.

  • Az utoljára választott TV-csatorna indítása;
  • A hang kimenetének konfigurálása, mindig csak az analóg audio kimenet csatlakoztatva;
  • Az automatikus frissítés kikapcsolása;
  • Megjegyzés:
        Az egyetlen dolog, amivel nehézségem volt, az az, hogy még egy adatbázis fájlt is be kellett hozni sqlite formátumban => TV29.db, amely meghatározza az aktuálisan lejátszott TV csatornát
        (mivel alapértelmezés szerint egyik csatorna sem választott),
        és ezt xml konfiguráción keresztül a Kodi-ban nem lehet megtenni.
        

Részletesebb lépések minden ponthoz:

1) Kattintson a bal felső sarokban található "fogaskerék" ikonra.
és válassza az "PVR és TV beállítások" lehetőséget (TV ikonnal, két antennával).
Ezután a bal menüben válassza a "Lejátszás" pontot, a középső szekcióban pedig a "Általános"-t.
Állítsa be a legördülő listában a "Folytassa az utolsó csatornánál indításkor" lehetőséget.
válassza az "Előtér" beállítást.

vagy még szemléletesebben:

      "PVR és TV beállítások" 
       => "Lejátszás" 
       => "Folytatás az utolsó csatornán indításkor" => "Előtér"

2) Kattintson a képernyő bal felső sarkában lévő "fogaskerék" ikonra, és válassza a következőt:

       "Rendszerbeállítások"  
       => "Kiegészítők" => "Frissítések" => "Soha ne ellenőrizze a frissítéseket"

3) Kattintson a képernyő bal felső sarkában lévő "fogaskerék" ikonra, és válassza a következőt:

       "Rendszerbeállítások" 
       => "Hang" => "Hangkimeneti eszköz" => "PI: Analóg"

Két éve tévét nézek rosszul.

Be kell vallanom, hogy két év alatt nem tanultam meg helyesen tévét nézni.

Általában a konyhában nézek tévét. A tévéhez egy Raspberry Pi 2B modul van csatlakoztatva, amelyhez Ethernet és HDMI portok is tartoznak. Az áramot a modul normál USB kábellel kapja, amely be van dugva a tévé USB portjába, tehát valójában a tévé távvezérlőjének bekapcsolásakor áramot kap a Raspberry Pi is, és ha a tévét a távvezérlőn kikapcsolom, akkor azonnal megszűnik az áramellátás a Raspberry Pi számára is.

Tudom, hogy ezt nem szabadna csinálni, mert a Kodi multimédia központ gyökér fájlrendszere (ext3) normál olvasási/írási módban működik. De én lusta ember vagyok, és először csak azt akartam ellenőrizni, mennyi ideig lehet így kikapcsolni a rendszert, amíg végül teljesen le nem áll, de sajnos két év alatt ezt sosem sikerült megtennem (talán csak szerencsém volt, nem tudom).

Úgy vélem, ha ez a mód megfelel a tévémnek, akkor egy "egyszerű internetes rádióoszlop" számára is megfelelő lesz, mivel kézzel letiltottam a Kodi bővítmények automatikus frissítését, ezért a fájlrendszer meghibásodásának valószínűsége még kisebbé válik. Egyelőre nem látok ezzel problémát.

Megjegyzés:

    De ha szeretné, egyetlen yocto parancs segítségével 
    IMAGE_FEATURES += "read-only-rootfs"

    és egy kis varázslattal átállíthatja a disztribúcióját "csak olvasható" módra.
    

A cikkben ismertetett "internet rádió oszlop" disztribúció egy otthoni rendszer, és ami a legfontosabb egy otthoni disztribúció esetében — ez egy szép GUI. Véleményem szerint nagyon nehéz vagy szinte lehetetlen megtanítani a szokásos felhasználót, hogy beírjon bármiféle érthetetlen varázslatos parancsot a konzolba, hiszen azt sem tudja, hogy mi az. De a GUI, az rendben van.

Ez valószínűleg a legfőbb érvem, ami a nem konzolos disztribúció mellett szól. A Kodi meleg, barátságos grafikus felhasználói felülete nem feltétlenül szükséges, de mégis rendelkezésre áll.
(Még azt is elfelejtettem megemlíteni, hogy a Kodit távolról, például okostelefonról is lehet irányítani a „Yatse” alkalmazás telepítésével, és ez talán néhányak számára előny lehet.)

A Kodi konfigurálása, egér használatával

Most pedig a Rakéta

VolumeUp
          VolumeDown
          ChannelDown
          ChannelDown
          ChannelUp
          

A konfiguráció felülbírálja a következő elemek általános (global) eseményeit:

  • egérkerék előre gördítése
  • egérkerék hátra gördítése
  • középső egérgomb megnyomása
  • hosszan nyomva tartott egérgomb kezelése (3 másodperc és több),
    0 a jobb gomb azonosítója, 1 a bal gomb azonosítója

részletesebb információk az egér események beállításáról:

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

Mi a teendő, ha a kábelrendszer nem érkezett meg hozzád

„De otthon nincsenek szabad Ethernet portjaim (vagy sosem voltak)” – mondhatják a régi Raspberry Pi 1 tulajdonosok egy része (lehet, hogy az alaplapot kutatás céljából vásárolták, és azóta csak a polcon áll).

Mivel az alaplapon nincs integrált Wifi, Ethernet csatlakozás nélkül nem túl funkcionális.

Természetesen létezik lehetőség a Raspberry Pi 1 Ethernet nélküli használatára, de ez bizonyos erőfeszítéseket igényel tőled. Az ilyen dolgokat általában csak új dolgok megtanulása keretein belül érdekesen elvégezni, tehát ez nem felhasználói feladat.

Tehát nézzük meg a hipotetikus lehetőséget az alaplap Ethernet nélküli használatára:

Külső USB – Wifi adaptert lehet csatlakoztatni, figyelembe véve azt a megfontolást,
hogy az adapternek jól kell működnie Linux alatt.

Megjegyzés:

    Sajnos a WiFi adapterek egy része nem fog működni, ez nem a jelen cikkben bemutatott disztribúció sajátossága, hanem inkább a Linux kernelben található konkrét WiFi adapterek illesztőprogramjának problémája. Megállapítható, hogy jelenleg nem tud egyszerűen bemenni a boltba és bármilyen WiFi adaptert megvenni. Inkább olyan WiFi adaptert kell választania, amely kevésbé problémás és jól működik Linux alatt.

    Csak a következő modelleket ellenőriztem:
    - WiFi adapter Atheros D-Link DWA-126 802.11n chippel (AR9271)
    - WiFi adapter NetGear WNDA3200
    - WiFi adapter NetGear WNA1100
    - WiFi adapter TP-Link TL-WN722N (AR9271)
    - WiFi adapter TL-WN322G v3
    - WiFi adapter TL-WN422G
    - Wifi adapter Asus USB-N53 chippel Ralink RT3572 
    

Ha már van USB Wifi adaptere, akkor a következőképpen ellenőrizheti, hogy jól működik-e Linux alatt:

  • Telepítsen egy elterjedt Linux disztribúciót
    általános célokra, például az „Ubuntu Desktop”-ot
  • Indítsa el a rendszert
  • Csatlakoztassa a Wifi USB adaptert
  • Indítsa el a hálózati menedzsert, és próbáljon csatlakozni a WiFi hozzáférési ponthoz
  • Ha minden jól működik, és az internetkapcsolata stabil, akkor az adapterét jól támogatják, és folytathatja a munkát az adapter speciális disztribúciójának csatlakoztatásával, esetleg más kernelverziókkal is.
    (ha nem, akkor sajnos nem — a legjobb még csak meg se próbálni)

Külső Wifi adapter támogatása a „Raspberry PI”-n

A WiFi adapter megfelelő működéséhez Linux alatt: két dologra van szükségünk:
1) A Linux kernel támogatása egy adott Wifi adapterhez
2) Egy adott Wifi adapterhez szükséges kernel modul megléte a rendszerben

Vegyünk például egy TP-Link TL-WN722N adaptert. Csodálatos antennája van.
Keressük meg a chipsetet, amin az áramkör működik — nekem ez az „AR9271”, megjegyzés:

    A legérdekesebb dolog az, hogy ugyanannak a modellnek a gyártójától a Wifi chipset eltérhet. Például találkoztam azzal, hogy a TL-WN722N 2. verziójában már egy másik Realtek RTL8188 chipset található, és az már rosszul működött Linux alatt (abban az időben), sajnos ez van, tehát néha érdemes figyelni a hátoldalon található kis számokra is.    
    

Most keressük meg a kernel konfigurációban azt a paramétert, amely felelős az AR9271 chipset illesztőprogramjáért, legjobban az „AR9271 cateee.net” szavakat keresve.
     ahol a «cateee.net» egy klassz webhely, amely bemutatja a Linux kernellek moduljainak konfigurációit

Azonnal megtaláljuk a kernel konfiguráció nevét — CONFIG_ATH9K_HTC
és a szükséges kernel modul nevét ath9k_htc

és ezután elegendő bemásolni a szükséges modul nevét a konfigurációs töredék fájlba
Linux kernel => recipes-kernel/linux/files/rbpi.cfg, adja hozzá a következő sort:
CONFIG_ATH9K_HTC=m

Így a jövőben bármilyen kiegészítő hardvert csatlakoztathat a rendszeréhez (ha persze a Linux kernel már támogatja azt)

Mi a teendő, ha ön Habr geek — konstruktor

És fantasztikus dolgokat hoz létre, például ilyesmiket itt vagy ha ön diák, és arról álmodik, hogy valami hasonlót alkot.

Akkor hirtelen ötlettől vezérelve vásárolhat egy Touch Screen képernyőt az RPI-hez az aliexpress-en, ott egy megfelelő akkumulátort is megrendelhet, csatlakoztathat mindent a Raspberry Pi 1, 2 vagy 3 alaplaphoz (jobb a 3, mivel van beépített Wifi), válassza ki a grafikus felület témáját a Kodi-ban, amely érzékeny a touchscreenre, és voilá => elkészíthet egy egyszerű audio lejátszót. Természetesen elég nagy lesz, de a tiéd lesz.

  Megjegyzés:
  A Kodi multimédia központ összegyűjtéséhez a legolcsóbb Raspberry Pi Zero Wifi alaplaphoz a yocto-ban elegendő két sort megváltoztatni:

  konfigurációs fájl => build/conf/local.conf
      MACHINE = 'raspberrypi0-wifi'

  Kodi összegyűjtési recept => recipes-mediacentre/kodi/kodi_17.bbappend
      EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 
                            'raspberrypi0-wifi', '${BS_RPI}',  '', d)}"

  Ha a Kodi 17.6 GUI válaszideje 
  az egy processzormag miatt a Zero-ban rejtélyesnek tűnik, 
  akkor egy kis trükközéssel összeállíthat egy régebbi, 
  de nagyon gyors verziót, például a Kodi 15.2-t, amely ebből a szempontból "barátságosabb" (néha a legacy megold minden problémát)

Sajnos nincs alaplapom, így nem tudom kipróbálni, de érzéseim szerint működnie kell.

Rövid útmutató az összegyűjtéshez

    1) Telepítse a Yocto Project függőségeit (például Ubuntu alatt): 
    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) Töltse le és telepítse a Repo-t:
        mkdir ~/bin
        curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
        chmod a+x ~/bin/repo

    3) Töltse le a projektet a github-ról:
        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) Építse meg a projektet:
        ./shell.sh
        bitbake berserk-image
        
    ugyanezt meg lehet csinálni a Raspberry Pi 3B Plus, 3B és 2B platformokhoz:
    repo init -u https://github.com/berserktv/bs-manifest 
              -m raspberry/rocko/radio-0.2.8.xml
    

részletesebb útmutató az összeszereléshez
és a microSDHC kártyára való íráshoz lásd. az előző cikkben

Utóirat

Persze, az internetes rádiószórok ötlete tipikus, mindenkinek ismerős, és a hvg-n sok cikket talál erről, például itt

És még gondolhatja, hogy csak a követelményeket igazítottam a kész megoldáshoz. Erre azt tudom mondani, hogy nem, tényleg nem.

Mr. Ervi története

    Akár higgyék, akár nem, a dolog így történt:

    Az irodánk határos egy különböző hangtechnikai eszközöket gyártó céggel, és egy nap a cég igazgatója, nevezzük Mr. "Ervin"-nek, megkereste a fiókunk helyettes igazgatóját, Mr. "Arszenyij"-t, és megkérdezte tőle, mennyire nehéz elindítani egy hangáramot Raspberry Pi lapkán, azaz a lapka csatlakozik a hálózathoz és a hangfalakhoz, és "hallható egy jellegzetes hang".

    Ezt követően Mr. Arszenyij megkereste a főnököm helyettesét - Mr. "Borisz"-t, és átirányította neki a kérdést, én pedig, mint külső szemlélő, véletlenül megjegyeztem ezt az ötletet, és elneveztem "A három főnök feladata"-nak.

    Végül is jót akartak tenni, 
    de az lett, idézem - "De Mr. Ervin, mint mindig, segített."

    Néhány idő múlva megkérdeztem Mr. "Borisz"-t a véleményéről egy rövid cikk írásával kapcsolatban erről a témáról a "Habr"-on, amire "Borisz" válaszolt, hogy a Kodi-ban "három menüpont" módosítása nem hoz semmilyen új információt, és nem érdemel külön említést. 
    Természetesen teljesen egyetértek vele, és ezért nem mondom el neki, 
    hogy írtam erről.

    A cikk kizárólag a Mr. "Borisz"-től kölcsönzött "Raspberry Pi 1" lapkára készült kísérlet céljából, 
    a többi "Raspberry Pi 1" lappal való egybeesés véletlenszerű.
    

Több jó és különböző összeállítást kívánok önnek, és legyen a régi téglától kezdve az idén akármi — énekeljen.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster