Найпростая інтэрнэт радыё калонка «Kodi» або выратаванне «Малінавай» цэглы

Найпростая інтэрнэт радыё калонка «Kodi» або выратаванне «Малінавай» цэглы

Асноўныя перадумовы:

  1. Ёсць стары нявыкарыстаны поплатак Raspberry Pi першага пакалення;
  2. Поплатак ляжыць на шафе мёртвым грузам і не выкарыстоўваецца - поплатак «Цагліна»;

Што хацелася б атрымаць:

  1. У пэўны момант часу (напрыклад па настроі)
    плата перастае быць «Цаглінай», і ў яе ўстаўляецца чароўная карта памяці;
  2. Да платы падключаецца Ethernet кабель і штэкер ад звычайнай бытавой калонкі або навушнікаў;
  3. Пасля падачы харчавання былы «Цагліна» спявае

Асноўная ідэя:

  1. Мінімальная колькасць рухаў цела для якой-небудзь налады, у самым ідэальным выпадку, падлучальны толькі «Ethernet» кабель, сілкаванне і калонкі, і больш нічога не які робіцца, ад слова "зусім";
  2. Былы «Цэгла» са скрынкі падтрымліваем напрыклад 20 інтэрнэт радыёстанцый, пераключэнне якіх па крузе можна павесіць на націск колца мышы ці ж на пэўны pin GPIO (падлучыць два правады і іх замкнуць (мая мара з дзяцінства));
  3. Кіраванне ажыццяўляецца па радыё канале, і гэтым радыё каналам можа стаць звычайная радыё мыш;
  4. Узяць ужо гатовую сістэму, дыстрыбутыў сабраць у "Yocto Project"
    г.зн. як звычайна мы з вамі нічога рабіць не будзем, бо ўсё ўжо зроблена.
    (дастаткова толькі змясціць іншага назіральніка з другога боку «Тэлевізара»);

Апісанне

Найпростая Інтэрнэт Радыё калонка «KODI»
Зборка прызначана для старых Raspberry Pi 1 плат
(якія пыляцца дзесьці на шафе, але якія гатовыя яшчэ папрацаваць)

Па змаўчанні выкарыстоўваецца спіс m3u8 з 12 Інтэрнэт-радыёстанцый.

Мяркуецца, што поплатак працуе без HDMI вынахаду, і для яе выключэння досыць выдраць адаптар сілкавання з разеткі. А ў якасці ультра сучаснага бесправаднога пульта кіравання, вы можаце выкарыстоўваць вашу супер радыё мыш (ну ці падключыць звычайную шэрую з хвастом).

Пры ўключэнні сеткавы інтэрфейс па змаўчанні наладжваецца праз DHCP пратакол і прайграваецца апошняя запомненая радыёстанцыя са спісу, кіраванне гучнасцю прайгравання ажыццяўляецца звычайнай мышшу:
(прызначыце нарэшце сваю мыш "начальніцай кіравання", і павіншуйце яе, яна гэта заслужыла)

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

Для дадання ўласнага спісу Інтэрнэт радыёстанцый
вы заўсёды можаце падключыць HDMI кабель ад тэлевізара
і скарыстацца штатным графічным інтэрфейсам Kodi 17.6/XNUMX
(выключыце плату, падключыце HDMI і ўключыце адаптар харчавання)

Асноўнае меню Kodi => «Дадаткі» => «Мае дадаткі»
          => "Кліенты PVR" => "PVR IPTV Simple Client"

Першапачатковая рэалізацыя

(магчымая)
Першапачаткова, калі я вырашыў зрабіць «Інтэрнэт Радыё калонку», я планаваў наступнае:

  • Мінімалістычны кансольны дыстрыбутыў у Yocto Project;
  • Аўдыё паток прайграваецца праз GStreamer;
  • Сеткавы інтэрфейс наладжваецца па DHCP;

І такое рашэнне мае шэраг пераваг:

  1. Досыць хуткае (выхад на працоўны рэжым ад падачы харчавання 30-40сек);
  2. Досыць надзейнае (менш праграм, менш кропак адмовы);
  3. Кансольны дыстрыбутыў нашмат прасцей перавесці ў рэжым толькі чытанне
    г.зн. праграмы нічога не запісваюць у каранёвую ў файлавую сістэму
    (a файлавая сістэма на носьбіце 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/XNUMX, змяняюцца «тры пункта»

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

больш падрабязная паслядоўнасць дзеянняў для кожнага пункта:

1) Націсніце на значок «шасцярэнькі» у левым верхнім куце экрана
і абярыце пункт «Налады PVR і ТБ» (малюнак тэлевізара з двума рожкамі)
далей у левай частцы меню, вылучыце пункт "Прайграванне", а ў цэнтральнай секцыі "Агульныя"
укажыце ў выпадаючым спісе «Працягнуць з апошняга канала пры запуску»
выбраўшы настройку «Пярэдні план»

ці больш наглядна:

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

2) Націсніце на значок «шасцярэнькі» у левым верхнім куце экрана і абярыце пункт:

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

3) Націсніце на значок «шасцярэнькі» у левым верхнім куце экрана і абярыце пункт:

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

Як я два гады няправільна гляджу тэлевізар.

Павінен вам прызнацца, што я за два гады так і не навучыўся правільна глядзець тэлевізар.

Звычайна я гляджу тэлевізар на кухні. Да тэлевізара падлучаны поплатак Raspberry Pi 2B, а да платы Ethernet і HDMI раздымы. Сілкаванне платы падаецца праз звычайны USB кабель, які ўторкнуць у USB порт тэлевізара г.зн. у сутнасці, уключэнне тэлевізара з дапамогай штатнага пульта дыстанцыйнага кіравання, падае сілкаванне і на поплатак Raspberry Pi, а адключэнне тэлевізара з пульта, таксама адразу скідае сілкаванне і з поплатка Raspberry Pi.

Ды я выдатна ўсведамляю, што так рабіць нельга, таму што каранёвая файлавая сістэма мультымедыя цэнтра Kodi (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>

Канфігурацыя перавызначае агульныя (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 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 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/15.2 з за аднаго працэсарнага ядра ў Zero вам здасца загадкавай, то можна зрабіць фінт вушамі і сабраць больш старую, але вельмі хуткую версію, напрыклад Kodi XNUMX/XNUMX, ён у гэтым плане больш "прыязны" (часам legacy вырашае ўсё)

Нажаль платы ў мяне няма, таму праверыць не магу, але па маіх адчуваннях гэта павінна зарабіць.

Кароткая інструкцыя па зборцы

    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

Дадаць каментар