最简单的网络广播专栏“Kodi”或“树莓派”砖头的救赎

最简单的网络广播专栏“Kodi”或“树莓派”砖头的救赎

基本前提条件:

  1. 有一块旧的未使用的第一代 Raspberry Pi 板;
  2. 该板作为自重放置在柜子上且未使用 - “砖”板;

我想收到什么:

  1. 在某个时间点(例如,根据心情)
    板子不再是一块“砖块”,并且插入了一张神奇的存储卡;
  2. 将以太网电缆和普通家用扬声器或耳机的插头连接到该板上;
  3. 通电后,原来的“砖头”——

主要思想:

  1. 任何设置的最小移动次数,在最理想的情况下,我们只连接“以太网”电缆、电源和扬声器,不做其他任何事情,从这个词 “完全”;
  2. 前一个“Brick”开箱即用,支持例如 20 个网络广播电台,可以通过按鼠标滚轮或在特定的 GPIO 引脚上循环切换(连接两根线并短接它们(我从小的梦想) );
  3. 通过无线电通道进行控制,该无线电通道可以是普通的无线电鼠标;
  4. 采取现成的系统并将发行版组装到“Yocto Project”中
    那些。 像往常一样,我们不会对你做任何事,因为一切都已经完成了。
    (只需在另一边放置一个外部观察者就足够了 “电视”);

使用说明

最简单的网络广播栏目“KODI”
该组件专为较旧的 Raspberry Pi 1 板设计
(壁橱某处积满灰尘,但已准备好做更多工作)

默认情况下,使用 3 个网络广播电台的 m8u12 列表。

假设该板在没有 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个晚上
(通常是下班后,这是最没有效率的时间,这时候大脑不再思考,它通常会睡觉)

然而,我之前写过关于哈布雷关于多媒体中心的文章 科迪和约克托 项目
继续以同样的方式继续下去的机会压倒了我的研究冲动。 下一章将详细介绍这一点。

将 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_欢迎;”

总之,Kodi 17.6的主配置文件中,“三点”改变

  • 用于启动最后选择的电视频道的配置;
  • 音频输出配置,只有模拟音频输出始终连接;
  • 禁用自动更新;
  • 注:
        Единственное с чем у меня возникли сложности, 
        это то, что пришлось еще подтащить файл базы данных 
        в формате sqlite => TV29.db, в котором указывается 
        текущий проигрываемый ТВ канал 
        (так как по умолчанию никакой из каналов не выбран), 
        а через xml конфигурацию в Kodi этого не сделать.
        

每个项目的更详细的操作顺序:

1) 单击屏幕左上角的齿轮图标
并选择“PVR 和电视设置”(带有两个喇叭的电视图像)
然后在菜单左侧选择“播放”,然后在中间部分选择“常规”
在下拉列表中选择“启动时从上一个频道继续”
选择“前景”设置

或者更清楚地说:

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

2) 单击屏幕左上角的“齿轮”图标并选择项目:

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

3) 单击屏幕左上角的“齿轮”图标并选择项目:

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

两年来我看电视的方式都是错误的。

我必须向你承认,两年来我仍然没有学会如何正确地看电视。

我通常在厨房看电视。 Raspberry Pi 2B 板连接到电视,以太网和 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>

该配置会覆盖以下元素的全局事件:

  • 向前滚动鼠标滚轮
  • 向后滚动鼠标滚轮
  • 单击鼠标中键
  • 处理长时间的鼠标点击(3秒或更长时间),
    0 右按钮 ID,1 左按钮 ID

有关设置鼠标事件的更多详细信息:

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

如果有线系统没有到达您该怎么办

“但我家里没有任何空闲的以太网端口(或者从来没有),”一些旧 Raspberry Pi 1 板的快乐所有者可能会惊呼(也许该板是为了研究而购买的,并仍然躺在柜子上)

而且由于该板没有内置 Wifi,因此如果没有以太网连接,它的功能就不是很好。

当然,可以在没有以太网的情况下使用 Raspberry Pi 1 板,但这需要您付出一些努力。 通常,这些事情只有作为学习新东西的一部分才有趣,即这不是定制工作。

因此,让我们考虑一个没有以太网的主板的假设用例:

您可以连接外部 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 接入点
  • 如果一切正常并且您的互联网连接稳定,那么您的适配器得到了很好的支持,您可以继续在专门的发行版中连接此适配器,并且可能与其他版本的内核连接
    (如果没有,那就不,唉,最好还是不要尝试)

支持 Raspberry PI 中的外部 Wifi 适配器

为了使 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 内核模块的配置

我们立即找到内核配置的名称—— 配置_ATH9K_HTC
以及我们需要的内核模块的名称 ath9k_htc

然后只需在配置片段文件中指定所需模块的名称
Linux kernel => Recipes-kernel/linux/files/rbpi.cfg,添加以下行:
CONFIG_ATH9K_HTC=米

因此,将来您可以将任何附加设备连接到您的系统(当然,如果 Linux 内核已经支持的话)

如果你是哈布拉极客该怎么办 - 设计师

你创造了最酷的东西,比如 这里 或者您是一名学生并梦想创造类似的东西。

顺便说一下,您可以在速卖通上购买某种用于 RPI 的触摸屏,在那里订购合适的电池,将其全部连接到 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 的响应速度对您来说似乎很神秘,那么您可以欺骗您的耳朵并构建一个较旧但非常快的版本,例如 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 卡上进行录制,请参阅 在上一篇文章中

后记

当然,网络广播扬声器的想法是典型的,每个人都知道它,在 Habré 上您会找到很多关于这个主题的文章,例如 这里

您可能还认为我只是将需求定制为现成的解决方案。 对此我可以反驳并说不,老实说。

埃维先生的故事

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

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

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

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

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

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

更多精彩、不一样的集会等你来,今年甚至让以前的砖头为你歌唱。

来源: habr.com

添加评论