{"id":54774,"date":"2020-01-04T00:00:00","date_gmt":"2020-01-03T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/prostejshaya-internet-radio-kolonka-kodi-ili-spasenie-malinovogo-kirpicha"},"modified":"2020-02-18T14:02:49","modified_gmt":"2020-02-18T11:02:49","slug":"prostejshaya-internet-radio-kolonka-kodi-ili-spasenie-malinovogo-kirpicha","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/prostejshaya-internet-radio-kolonka-kodi-ili-spasenie-malinovogo-kirpicha","title":{"rendered":"The simplest internet radio speaker \"Kodi\" or saving the \"Raspberry\" brick","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"The simplest internet radio speaker &quot;Kodi&quot; or saving the &quot;Raspberry&quot; brick\" src=\"\/wp-content\/uploads\/2020\/01\/c20cd49d9e2ba397946a17ed24c117fd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h5> Key prerequisites: <\/h5>\n<p><\/p>\n<ol>\n<li> There\u2019s an old unused Raspberry Pi 1 board; <\/li>\n<li> The board has been sitting on a shelf as a dead weight and is not used \u2014 the \u2018Brick\u2019 board; <\/li>\n<\/ol>\n<p><\/p>\n<h5> What I would like to achieve: <\/h5>\n<p><\/p>\n<ol>\n<li> At a certain moment (for example, based on mood)<br \/>\nthe board stops being a \u2018Brick\u2019 and a magic memory card is inserted; <\/li>\n<li> An Ethernet cable and a connector from a regular speaker or headphones are plugged into the board; <\/li>\n<li> Once powered up, the former \u2018Brick\u2019 \u2014 <strong>sings<\/strong><\/li>\n<\/ol>\n<p><\/p>\n<h5> The main idea: <\/h5>\n<p><\/p>\n<ol>\n<li> Minimum amount of actions for any setup; ideally, we only connect the \u2018Ethernet\u2019 cable, power, and speakers, and do nothing else, at all <strong>\u2018at all\u2019;<\/strong><\/li>\n<li> The former \u2018Brick\u2019 out of the box supports, for example, 20 internet radio stations, switching between them can be set to a mouse wheel click or to a specific GPIO pin (connect two wires and short them (my childhood dream));<\/li>\n<li> Control is done via a radio channel, and this radio channel can be an ordinary radio mouse;<\/li>\n<li> Take an existing system, a distribution assembled in the \u2018Yocto Project\u2019<br \/>\ni.e., as usual, we won\u2019t have to do anything, as everything is already done.<br \/>\n(it\u2019s enough just to place an external observer on the other side <strong>\u2018of the TV\u2019<\/strong>);<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h5>Description<\/h5>\n<p>\nThe simplest Internet radio speaker \u2018KODI\u2019<br \/>\nThis build is intended for old Raspberry Pi 1 boards<br \/>\n(gathering dust somewhere on the shelf, but still ready to work)<\/p>\n<p>By default, it uses an m3u8 list of 12 Internet radio stations.<\/p>\n<p>It is assumed that the board operates without an HDMI output, and to turn it off, it is enough to unplug the power adapter from the socket. As a super modern wireless remote control, you can use your super radio mouse (or connect a regular one with a tail).<\/p>\n<p>When powered on, the network interface is configured by default via the DHCP protocol and plays the last remembered radio station from the list, with volume control done by a regular mouse: <br \/>\n(finally designate your mouse as \u2018the boss of control,\u2019 and congratulate it, it deserves it)<\/p>\n<pre><code class=\"html\">  Scroll wheel forward - increase volume\n  Scroll wheel backward - decrease volume\n  Long press (3 seconds or more) on the right mouse button\n                   - select the next radio station\n  Long press (3 seconds or more) on the left mouse button\n                   - select the previous radio station\n<\/code><\/pre>\n<p><\/p>\n<blockquote><p>To add your own list of Internet radio stations <br \/>\nyou can always connect an HDMI cable from the TV <br \/>\nand use the built-in graphical interface of Kodi 17.6<br \/>\n(turn off the board, connect HDMI, and turn on the power adapter)<\/p>\n<p>Main menu Kodi =&gt; 'Add-ons' =&gt; 'My Add-ons' <br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=&gt; 'PVR Clients' =&gt; 'PVR IPTV Simple Client'\n<\/p><\/blockquote>\n<p><\/p>\n<h5> Initial implementation <\/h5>\n<p> (possible)<br \/>\nInitially, when I decided to create an 'Internet Radio Speaker', I planned the following:<\/p>\n<ul>\n<li> A minimalist console distribution in the Yocto Project; <\/li>\n<li> Audio stream is played through GStreamer; <\/li>\n<li> Network interface is configured via DHCP; <\/li>\n<\/ul>\n<p>\nAnd such a solution has several advantages:<\/p>\n<ol>\n<li> Quite fast (boot time from power on 30-40 seconds);<\/li>\n<li> Quite reliable (fewer programs, fewer points of failure);<\/li>\n<li> The console distribution is much easier to switch to read-only mode<br \/>\n i.e., programs do not write anything to the root file system<br \/>\n (the file system on the SDHC card is, in my opinion, the first candidate for failures);<\/li>\n<\/ol>\n<p>\n<b class=\"spoiler_title\">Note:<\/b> <\/p>\n<pre><code class=\"bash\">    In Yocto, it is quite simple to switch the root filesystem (rootfs) to read-only mode by changing a single parameter during the build. \n\nBy default, Yocto provides two options: \n1) The filesystem operates in read\/write mode \n   (this is how all general-purpose distributions work, such as Ubuntu)\n2) The filesystem operates in read-only mode \n   (this is how specialized distributions work, for example, in routers)\n\nIn read-only mode, all directories where application and service data are usually written during operation are mounted in RAM (for instance, the directory \/var\/log, etc.). \nData is only valid for the current session, and after a power loss, the data is lost. \n\nIf you specify \"read only\" during the build in the Yocto Project, your distribution will be configured to be read-only after the build, \nbut you can always add the capability to dynamically switch from \"read only\" to \"read\/write\"; however, that is a whole different story...\n    <\/code><\/pre>\n<p>\nAnd one main drawback:<\/p>\n<p>\"It has to be done\", i.e., I need to spend N number of evenings <br \/>\n(usually after work, and this is the least effective time; at this time, the brain isn't thinking, it's usually asleep)<\/p>\n<p>Also, I wrote my previous article on Habr about the multimedia center <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467443\">Kodi and Yocto<\/a><\/noindex> project<br \/>\nand the possibility to continue in the same vein overcame my research impulse. More on this in the next chapter.<\/p>\n<h5> Turning Kodi into an Internet radio speaker <\/h5>\n<p>\nTo add the functionality I need, I will add another method to the recipe for building the distribution described in the previous <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467443#distrib_recipe_koditv\"> article <\/a><\/noindex> see file berserk-image.bb <\/p>\n<pre><code class=\"bash\">GUI_SETTINGS = \"home\/root\/.kodi\/userdata\/guisettings.xml\"\n\n# Configuration for launching the last selected TV channel (1-background 2-foreground)\nF1_LINE = \"0\"\nR1_LINE = \"1\"\n# Sound output configuration, always only the analog audio output is connected\nF2_LINE = \"PI:HDMI\"\nR2_LINE = \"PI:Analogue\"\n# Since HDMI is not used by default, I disable automatic updates\n# otherwise it may happen that the power is gone, but the data remains unwritten\nF3_LINE = \"0\"\nR3_LINE = \"2\"\n\n\n# Method responsible for adding configuration:\n# that turns \"Smart TV\" into a \"simple Internet radio speaker\"\nadd_radio_guisettings() {\n    sed -i \"s|${F1_LINE}|${R1_LINE}|\" ${IMAGE_ROOTFS}\/${GUI_SETTINGS}\n    sed -i \"s|${F2_LINE}|${R2_LINE}|\" ${IMAGE_ROOTFS}\/${GUI_SETTINGS}\n    sed -i \"s|${F3_LINE}|${R3_LINE}|\" ${IMAGE_ROOTFS}\/${GUI_SETTINGS}\n}\n\n\nFIND_STR = \"touch .\/tmp\/.FIRST_RUN.\"\nSCRIPT_FIRST_RUN = \"etc\/init.d\/first-run.sh\"\n# Since HDMI output may not be used,\n# it's necessary to disable the \"welcome message\"\noff_kodi_welcome() {\n    sed -i \"s|${FIND_STR}|#&amp;|\" ${IMAGE_ROOTFS}\/${SCRIPT_FIRST_RUN}\n}\n<\/code><\/pre>\n<p>\nThe methods are intended for modifying the root file system before the distribution image is created as a single raw file, which is written to the memory card using a command. <strong> dd <\/strong><\/p>\n<p>This is done as follows:<br \/>\n<strong>ROOTFS_POSTPROCESS_COMMAND += \"add_radio_guisettings; off_kodi_welcome;\" <\/strong><\/p>\n<p>In short, in the main configuration file of Kodi 17.6, three items are changed.<\/p>\n<ul>\n<li> Configuration for launching the last selected TV channel; <\/li>\n<li> Sound output configuration, always only the analog audio output is connected; <\/li>\n<li> Disabling automatic updates; <\/li>\n<li> <b class=\"spoiler_title\">Note:<\/b>\n<pre><code class=\"html\">    The only thing I had difficulties with was that I had to pull in a database file in sqlite format =&gt; TV29.db, which specifies the current playing TV channel (since no channel is selected by default), and this cannot be done via xml configuration in Kodi.\n    <\/code><\/pre>\n<\/li>\n<\/ul>\n<p>\nA more detailed sequence of actions for each item:<\/p>\n<p>1) Click on the \"gear\" icon in the upper left corner of the screen.<br \/>\nand select the \"PVR and TV Settings\" option (the image of a television with two horns).<br \/>\nThen in the left part of the menu, select the \"Playback\" item, and in the central section \"General\".<br \/>\nSpecify in the dropdown \"Continue with the last channel on startup\".<br \/>\nChoosing the setting \"Foreground\".<\/p>\n<p>or more visually:<\/p>\n<pre><code class=\"bash\">      \"PVR and TV Settings\" \n       =&gt; \"Playback\" \n       =&gt; \"Continue from last channel on startup\" =&gt; \"Foreground\"\n<\/code><\/pre>\n<p>\n2) Click on the gear icon in the top left corner of the screen and select:<\/p>\n<pre><code class=\"bash\">       \"System Settings\"  \n       =&gt; \"Add-ons\" =&gt; \"Updates\" =&gt; \"Never check for updates\"\n<\/code><\/pre>\n<p>\n3) Click on the gear icon in the top left corner of the screen and select:<\/p>\n<pre><code class=\"bash\">       \"System Settings\" \n       =&gt; \"Audio\" =&gt; \"Audio output device\" =&gt; \"PI: Analogue\"\n<\/code><\/pre>\n<p><\/p>\n<h5> How I've been watching television incorrectly for two years. <\/h5>\n<p>\nI must confess that I've not learned how to watch television correctly in two years.<\/p>\n<p>I usually watch television in the kitchen. A Raspberry Pi 2B board is connected to the TV, alongside Ethernet and HDMI ports. The board is powered through a regular USB cable plugged into the TV's USB port, which means turning on the TV with the remote also powers the Raspberry Pi board. Similarly, turning off the TV with the remote cuts power to the Raspberry Pi as well.<\/p>\n<p>Yes, I fully realize that this is not the right way to do it, because the root file system of the Kodi media center (ext3) operates in read\/write mode. But I'm a lazy person, and initially, I wanted to test how long I could keep turning the system off before it completely stops booting. Unfortunately, over two years, I\u2019ve failed to make that happen (perhaps I've just been lucky, I don't know).<\/p>\n<p>In my opinion, if this method works for my TV, it should also work for a \"simple Internet radio speaker\". Since I forcibly disabled the automatic update of Kodi plugins, the likelihood of file system failure is further reduced. So far, I see no issues with this.<\/p>\n<p><b class=\"spoiler_title\">Note:<\/b> <\/p>\n<pre><code class=\"bash\">    However, if you wish, you can switch your distribution to \"read-only\" mode with one yocto command: \n    IMAGE_FEATURES += \"read-only-rootfs\"\n\n    and a bit of magic.\n    <\/code><\/pre>\n<p>The distribution of the \"internet radio speaker\" described in this article is consumer-grade, and what is crucial for a consumer distribution is a beautiful GUI. In my opinion, it's very difficult or almost impossible to teach an ordinary user to type any incomprehensible magic commands in the console; they don\u2019t even know the term. But a GUI, that\u2019s another matter.<\/p>\n<p>And this is probably my main argument in favor of a non-console distribution. The warm, cozy graphical user interface of Kodi, while not strictly necessary, is nonetheless present.<br \/>\n(Oh, I completely forgot to mention that Kodi can be controlled remotely, for example, using a smartphone app like 'Yatse', which may be a plus for some.)<\/p>\n<h3> Kodi configuration for mouse control <\/h3>\n<p>\n<b class=\"spoiler_title\">and now Rocket<\/b><\/p>\n<pre><code class=\"xml\">VolumeUp\n          VolumeDown\n          ChannelDown\n          ChannelDown\n          ChannelUp\n          &lt;!--\n<\/code><\/pre>\n<p>The configuration overrides global events for the following elements:<\/p>\n<ul>\n<li> scrolling the mouse wheel up <\/li>\n<li> scrolling the mouse wheel down <\/li>\n<li> pressing the middle mouse button <\/li>\n<li> handling long mouse presses (3 seconds or more),<br \/>\n0 identifier for the right button, 1 identifier for the left button <\/li>\n<\/ul>\n<p>more detailed information on configuring mouse events:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/kodi.wiki\/view\/Alternative_keymaps_for_mice\">kodi.wiki\/view\/Alternative_keymaps_for_mice<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/kodi.wiki\/view\/Action_IDs\">kodi.wiki\/view\/Action_IDs<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/kodi.wiki\/view\/Window_IDs\">kodi.wiki\/view\/Window_IDs<\/a><\/noindex><\/p>\n<h5> What to do if the cable system hasn't reached you<\/h5>\n<p>\n\"But I don't have any free Ethernet ports at home (or never did!)\" \u2014 might exclaim some lucky holders of old Raspberry Pi 1 boards (perhaps the board was purchased for experimentation and has just been gathering dust on a shelf).<\/p>\n<p>And since the board doesn't have built-in Wi-Fi, it is not very functional without an Ethernet connection.<\/p>\n<p>Of course, using a Raspberry Pi 1 board without Ethernet is possible, but it will require some effort on your part. Usually, such things are interesting only in the context of learning something new; that is, this isn't typical user work.<\/p>\n<p>So, let's consider a hypothetical scenario of using the board without Ethernet:<\/p>\n<p>You can connect an external USB Wi-Fi adapter, bearing in mind that <br \/>\nthe adapter should work well under Linux. <\/p>\n<p><b class=\"spoiler_title\">Note:<\/b> <\/p>\n<pre><code class=\"bash\">    Unfortunately, some WiFi adapters will not work; this is not a feature of the distribution presented in this article, but rather a problem with specific WiFi adapter drivers in the Linux kernel. It can be noted that at this moment you cannot simply go to a store and buy any WiFi adapter. Instead, you should choose a WiFi adapter from a list of less problematic and well-working ones under Linux.\n\nI've only checked the following models:\n- WiFi adapter on Atheros chipset D-Link DWA-126 802.11n (AR9271)\n- WiFi adapter NetGear WNDA3200\n- WiFi adapter NetGear WNA1100\n- WiFi adapter TP-Link TL-WN722N (AR9271)\n- WiFi adapter TL-WN322G v3\n- WiFi adapter TL-WN422G\n- WiFi adapter Asus USB-N53 chipset Ralink RT3572 \n    <\/code><\/pre>\n<p>\nIf you already have a USB WiFi adapter, you can check how well it works under Linux as follows:<\/p>\n<ul>\n<li>Install a widely used Linux distribution<br \/>\n for general use, such as \u2018Ubuntu Desktop\u2019 <\/li>\n<li>Boot the system<\/li>\n<li>Connect your USB WiFi adapter<\/li>\n<li>Launch the network manager and try to connect to your WiFi access point <\/li>\n<li>If everything works well and your internet connection is stable, then your adapter is well supported, and you can continue your work on connecting this adapter in a specialized distribution and possibly with other kernel versions<br \/>\n(if not, unfortunately, it\u2019s better not to even try) <\/li>\n<\/ul>\n<p>\n<strong> Support for external WiFi adapters in \u2018Raspberry PI\u2019 <\/strong><\/p>\n<p>For the correct operation of a WiFi adapter in Linux, we need two things:<br \/>\n<strong>1)<\/strong> Support in the Linux kernel for the specific WiFi adapter<br \/>\n<strong>2)<\/strong> Availability of a kernel module for the specific WiFi adapter in the system<\/p>\n<p>Let\u2019s take the TP-Link TL-WN722N adapter as an example. It has a simply excellent antenna.<br \/>\nLet\u2019s find the chipset on which the board works \u2014 in my case, it\u2019s \u2018AR9271\u2019 <b class=\"spoiler_title\">Note:<\/b> <\/p>\n<pre><code class=\"bash\">    Interestingly, for the same model of the same manufacturer, the WiFi chipset can differ. For example, I encountered that for the TL-WN722N version 2, a different chipset Realtek RTL8188 is used, which already worked poorly under Linux (at that time). Unfortunately, that's how it goes; sometimes you need to pay attention to the small version numbers on the back (dark side) of the adapter.    \n    <\/code><\/pre>\n<p>\nNow let\u2019s find the parameter name in the kernel configuration corresponding to the driver for the AR9271 chipset; it\u2019s best to search for the combination of words \u2018AR9271 cateee.net\u2019<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0where \"cateee.net\" is a cool site with descriptions of Linux kernel module configurations<\/p>\n<p>First, we find the name of the kernel configuration \u2014 <strong>CONFIG_ATH9K_HTC<\/strong><br \/>\nand the name of the kernel module we need <strong> ath9k_htc <\/strong><\/p>\n<p>and then you just need to specify the name of the required module in the configuration fragment file <br \/>\nLinux kernel =&gt; recipes-kernel\/linux\/files\/rbpi.cfg, add the line:<br \/>\n<strong> CONFIG_ATH9K_HTC=m <\/strong><\/p>\n<p>Thus, subsequently, you can connect any additional hardware to your system (if, of course, it is already supported in the Linux kernel)<\/p>\n<h5> What to do if you are a Habr geek \u2014 a builder <\/h5>\n<p>\nAnd you create cool things, for example, like <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/477440\"> here <\/a><\/noindex> or you are a student dreaming of creating something similar. <\/p>\n<p>So, at a glance, you can pick up some Touch Screen for RPI from aliexpress, order a suitable battery there, connect it all to a Raspberry Pi 1, 2, or 3 board (better to 3, as it has built-in Wifi), choose a graphical interface theme in Kodi designed for touch screens, and voila =&gt; you could end up with a simple audio player. Of course, it will be quite bulky, but it will be yours.<\/p>\n<pre><code class=\"bash\">  Note:\n  A to build a Kodi Multimedia center for the most budget-friendly board \n  Raspberry Pi Zero Wifi in yocto, you just need to change two lines:\n\n  configuration file =&gt; build\/conf\/local.conf\n      MACHINE = 'raspberrypi0-wifi'\n\n  Kodi build recipe =&gt; recipes-mediacentre\/kodi\/kodi_17.bbappend\n      EXTRA_OECONF_append = \"${@bb.utils.contains('MACHINE', \n                            'raspberrypi0-wifi', '${BS_RPI}',  '', d)}\"\n<\/code><\/pre>\n<p><\/p>\n<pre>\n  If the responsiveness of the Kodi 17.6 GUI \n  due to one CPU core in Zero seems \n  mysterious to you, you can do a trick and build an older, \n  but very fast version, like Kodi 15.2, which is more \n  \"friendly\" in this regard (sometimes legacy solves everything)\n<\/pre>\n<p>\nUnfortunately, I don't have the board, so I can't check it, but in my experience, this should work.<\/p>\n<p><b class=\"spoiler_title\">Brief assembly instructions<\/b> <\/p>\n<pre><code class=\"bash\">    1) Install Yocto Project dependencies (for example in Ubuntu): \n    sudo apt-get install -y --no-install-suggests --no-install-recommends \n        gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential \n        chrpath socat cpio python python3 python3-pip python3-pexpect \n        xz-utils debianutils iputils-ping python3-git python3-jinja2 \n        libegl1-mesa libsdl1.2-dev xterm\n\n    2) Download and install Repo:\n        mkdir ~\/bin\n        curl http:\/\/commondatastorage.googleapis.com\/git-repo-downloads\/repo &gt; ~\/bin\/repo\n        chmod a+x ~\/bin\/repo\n\n    3) Download the project from GitHub:\n        PATH=${PATH}:~\/bin\n        mkdir radio\n        cd radio\n        repo init -u https:\/\/github.com\/berserktv\/bs-manifest \n                  -m raspberry\/rocko\/radio-rpi-0.2.8.xml\n        repo sync\n\n    4) Build the project:\n        .\/shell.sh\n        bitbake berserk-image\n        \n    You can also build the same for Raspberry Pi 3B Plus, 3B, and 2B:\n    repo init -u https:\/\/github.com\/berserktv\/bs-manifest \n              -m raspberry\/rocko\/radio-0.2.8.xml\n    <\/code><\/pre>\n<p><\/p>\n<blockquote><p> a more detailed assembly instruction <br \/>\n and recording on the microSDHC card. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467443\/#instruction_koditv\">in the previous article<\/a><\/noindex>\n <\/p><\/blockquote>\n<h5> Postscript <\/h5>\n<p>\nCertainly, the idea of an Internet radio speaker is quite common; it is well-known and you will find many articles on this topic on Habr, for example, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/475172\">here<\/a><\/noindex><\/p>\n<p>And you might think that I have simply adjusted the requirements to fit a ready-made solution. To this, I can respond and say that no, honestly.<\/p>\n<p><b class=\"spoiler_title\">The story of Mr. Ervi<\/b> <\/p>\n<pre><code class=\"html\">    Believe it or not, here's how it all happened:\n\n    Our office shares a boundary with a company that manufactures various sound equipment. One day, the director of this company, let's call him Mr. \"Ervi,\" approached our deputy branch director, Mr. \"Arseniy,\" and asked him how difficult it would be to set up a Raspberry Pi board to play sounds, meaning that the board connects to the network and speakers, and \"you can hear a characteristic sound.\"\n\n    After that, Mr. Arseniy went to my boss's deputy, Mr. \"Boris,\" and redirected the question to him. I, as a mere observer, happened to remember this idea and dubbed it the \"Task of the Three Bosses.\"\n\n    In general, they wanted to do something good, but it ended with the quote - \"But Mr. Ervi, as always, helped.\"\n\n    After a while, I asked Mr. \"Boris\" his opinion on writing a brief note on this topic for \"Habr.\" Mr. \"Boris\" replied that changing the \"three menu items\" in Kodi doesn't really add any new information and isn't worth a separate mention. Of course, I completely agree with him, so I won't tell him that I wrote something about it.\n\n    The article was written exclusively for the \"Raspberry Pi 1\" board borrowed from Mr. \"Boris\" for the duration of the experiment; any resemblance to other \"Raspberry Pi 1\" boards is purely coincidental.\n    <\/code><\/pre>\n<p>May you have plenty of great and diverse builds, and may even the former brick sing for you this year.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/482714\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438: \u0415\u0441\u0442\u044c \u0441\u0442\u0430\u0440\u0430\u044f \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u043f\u043b\u0430\u0442\u0430 Raspberry Pi \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f; \u041f\u043b\u0430\u0442\u0430 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u0448\u043a\u0430\u0444\u0443 \u043c\u0435\u0440\u0442\u0432\u044b\u043c \u0433\u0440\u0443\u0437\u043e\u043c \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u2014 \u043f\u043b\u0430\u0442\u0430 \u00ab\u041a\u0438\u0440\u043f\u0438\u0447\u00bb; \u0427\u0442\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c: \u0412 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e) \u043f\u043b\u0430\u0442\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0431\u044b\u0442\u044c \u00ab\u041a\u0438\u0440\u043f\u0438\u0447\u043e\u043c\u00bb, \u0438 \u0432 \u043d\u0435\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438; \u041a \u043f\u043b\u0430\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f Ethernet \u043a\u0430\u0431\u0435\u043b\u044c \u0438 \u0448\u0442\u0435\u043a\u0435\u0440 \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0431\u044b\u0442\u043e\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":54775,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54774","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/prostejshaya-internet-radio-kolonka-kodi-ili-spasenie-malinovogo-kirpicha\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0440\u0430\u0434\u0438\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u00abKodi\u00bb \u0438\u043b\u0438 \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u0435 \u00ab\u041c\u0430\u043b\u0438\u043d\u043e\u0432\u043e\u0433\u043e\u00bb \u043a\u0438\u0440\u043f\u0438\u0447\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/prostejshaya-internet-radio-kolonka-kodi-ili-spasenie-malinovogo-kirpicha\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-03T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:49+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47The simplest internet radio speaker 'Kodi' or the salvation of the 'Berry' brick | ProHoster","description":"Main.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/prostejshaya-internet-radio-kolonka-kodi-ili-spasenie-malinovogo-kirpicha","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0440\u0430\u0434\u0438\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u00abKodi\u00bb \u0438\u043b\u0438 \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u0435 \u00ab\u041c\u0430\u043b\u0438\u043d\u043e\u0432\u043e\u0433\u043e\u00bb \u043a\u0438\u0440\u043f\u0438\u0447\u0430 | ProHoster","og:description":"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/prostejshaya-internet-radio-kolonka-kodi-ili-spasenie-malinovogo-kirpicha","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-03T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:49+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54774","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 12:41:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:58:22","updated":"2026-01-24 12:41:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/54774","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=54774"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/54774\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/54775"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=54774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=54774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=54774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}