A coluna de rádio da Internet mais simples "Kodi" ou a salvação do "tijolo framboesa"

A coluna de rádio da Internet mais simples "Kodi" ou a salvação do "tijolo framboesa"

Premissas principais:

  1. Há uma antiga placa Raspberry Pi de primeira geração não utilizada;
  2. A placa está parada em uma prateleira, sem uso - a placa "Tijolo";

O que gostaria de obter:

  1. Em um determinado momento (por exemplo, de acordo com o humor)
    a placa deixa de ser um "Tijolo" e um cartão de memória mágico é inserido;
  2. Um cabo Ethernet é conectado à placa e um plugue de coluna doméstica comum ou fones de ouvido;
  3. Depois de ligar, o ex-"Tijolo" - canta

A ideia principal:

  1. Mínima movimentação necessária para qualquer configuração, no caso ideal, conectamos apenas o cabo "Ethernet", alimentação e colunas, e não fazemos mais nada, de jeito nenhum; "de forma alguma";
  2. O ex-"Tijolo" suportará por exemplo 20 estações de rádio da Internet de fábrica, a mudança entre elas pode ser acionada ao pressionar a roda do mouse ou em um determinado pino GPIO (conectar dois fios e fechá-los (meu sonho de infância));
  3. O controle é feito através de um canal de rádio, e esse canal de rádio pode ser um mouse sem fio comum;
  4. Pegar um sistema já pronto, distribuir no "Yocto Project"
    ou seja, como sempre, não faremos nada, pois tudo já está feito.
    (basta colocar um observador externo do outro lado "da TV");

Descrição

A coluna de rádio da Internet mais simples "KODI"
A montagem é destinada a placas Raspberry Pi 1 antigas
(empoeiradas em algum lugar na prateleira, mas ainda prontas para trabalhar)

Por padrão, é usada uma lista m3u8 com 12 estações de rádio da Internet.

Supõe-se que a placa funcione sem saída HDMI, e para desligá-la, basta desconectar o adaptador de energia da tomada. E como controle remoto ultramoderno e sem fio, você pode usar seu super mouse sem fio (ou conectar um mouse comum com fio).

Ao ligar, a interface de rede é configurada por padrão via protocolo DHCP, e a última estação de rádio lembrada da lista é tocada, o controle de volume da reprodução é feito com um mouse comum:
(finalmente, defina seu mouse como a "gerente de controle" e parabenize-a, ela merece)

  rolagem para frente - aumentar o volume
  rolagem para trás - diminuir o volume
  pressionar e segurar (3 segundos ou mais) o botão direito do mouse
                   - selecionar a próxima estação de rádio
  pressionar e segurar (3 segundos ou mais) o botão esquerdo do mouse
                   - selecionar a estação de rádio anterior

Para adicionar sua própria lista de estações de rádio da Internet
você sempre pode conectar um cabo HDMI da TV
e usar a interface gráfica padrão do Kodi 17.6
(desligue a placa, conecte o HDMI e ligue o adaptador de energia)

Menu principal do Kodi => "Complementos" => "Meus Complementos"
          => "Clientes PVR" => "PVR IPTV Simple Client"

Implementação inicial

(possível)
Inicialmente, quando decidi criar a "Caixa de Som de Internet", eu planejava o seguinte:

  • Uma distribuição minimalista de console no Yocto Project;
  • O fluxo de áudio é reproduzido através do GStreamer;
  • A interface de rede é configurada via DHCP;

E essa solução tem várias vantagens:

  1. Bastante rápida (tempo de inicialização de 30-40 segundos após a alimentação);
  2. Bastante confiável (menos programas, menos pontos de falha);
  3. A distribuição de console é muito mais fácil de ser convertida para o modo somente leitura
    ou seja, os programas não gravam nada no sistema de arquivos raiz
    (e o sistema de arquivos em um cartão SDHC é, na minha opinião, o primeiro candidato a falhas);

Nota:

    No Yocto, é possível converter o sistema de arquivos raiz (rootfs) para o modo somente leitura de maneira bastante simples, alterando um parâmetro durante a construção. De forma padrão, o Yocto oferece duas opções: 1) Operação do sistema de arquivos no modo normal de leitura/gravação (como funciona em todas as distribuições de propósito geral, por exemplo, Ubuntu) 2) Operação do sistema de arquivos no modo somente leitura (como funciona em distribuições especializadas, por exemplo, em roteadores). No modo somente leitura, todos os diretórios onde normalmente os dados de aplicativos e serviços são gravados durante a operação são montados na memória RAM (por exemplo, o diretório /var/log e assim por diante). Os dados são válidos apenas para a sessão atual e após o desligamento, os dados são perdidos. Se no Yocto Project você especificar durante a construção para usar "somente leitura", então após a construção sua distribuição será configurada apenas para leitura, mas você sempre pode adicionar a possibilidade de uma transição dinâmica de "somente leitura" para "leitura/gravação", mas essa é uma história completamente diferente ...
    

E uma desvantagem principal:

"É preciso fazê-lo", ou seja, eu preciso gastar N noites
(geralmente após o trabalho, e esse é o momento mais ineficiente, nesse horário o cérebro já não pensa, geralmente está dormindo)

E ainda, meu artigo anterior no Habr eu escrevi sobre o centro multimídia Kodi e Yocto projeto
e a possibilidade de continuar na mesma linha superou meu impulso de pesquisa. Isso será abordado no próximo capítulo.

Transformando o Kodi em uma coluna de rádio da internet

Para adicionar a funcionalidade que preciso, adicionarei mais um método na receita de construção da distribuição descrita anteriormente artigo veja o arquivo berserk-image.bb

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

# configuração do último canal de TV selecionado (1-fundo 2-prévia)
F1_LINE = "0"
R1_LINE = "1"
# configuração de saída de som, apenas a saída de áudio analógica está sempre conectada
F2_LINE = "PI:HDMI"
R2_LINE = "PI:Analogue"
# já que o HDMI não é utilizado por padrão, desativo a atualização automática
# para evitar que a energia vá embora e os dados permaneçam não gravados
F3_LINE = "0"
R3_LINE = "2"


# método responsável por adicionar a configuração:
# que transforma "Smart TV" em "simples coluna de rádio da Internet"
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"
# já que a saída HDMI pode não ser utilizada,
# é necessário desativar a "boas-vindas do Kodi"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}

Os métodos são destinados a modificar o sistema de arquivos raiz antes da formação da imagem do distribuidor em um único arquivo raw, que é gravado no cartão de memória com o comando dd

Isso é feito da seguinte maneira:
ROOTFS_POSTPROCESS_COMMAND += «add_radio_guisettings; off_kodi_welcome;»

Em resumo, no arquivo de configuração principal do Kodi 17.6, três itens são alterados

  • Configuração do último canal de TV selecionado;
  • Configuração da saída de som, apenas a saída de áudio analógica está sempre conectada;
  • Desativação da atualização automática;
  • Nota:
        A única dificuldade que tive foi que eu precisei trazer o arquivo do banco de dados no formato sqlite => TV29.db, que indica o canal de TV atualmente sendo reproduzido (já que por padrão nenhum canal está selecionado), e isso não pode ser feito através da configuração xml no Kodi.
        

sequência de ações mais detalhada para cada item:

1) Clique no ícone "engrenagem" no canto superior esquerdo da tela
e selecione o item "Configurações PVR e TV" (imagem de uma televisão com duas antenas)
em seguida, no lado esquerdo do menu, escolha o item "Reprodução" e na seção central "Geral"
especifique no menu suspenso "Continuar com o último canal ao iniciar"
selecionando a configuração "Prévia"

ou de maneira mais visual:

      "Configurações PVR e TV" 
       => "Reprodução" 
       => "Continuar do último canal ao iniciar" => "Em primeiro plano"

2) Clique no ícone de 'engrenagem' no canto superior esquerdo da tela e selecione:

       "Configurações do sistema"  
       => "Complementos" => "Atualizações" => "Nunca verificar atualizações"

3) Clique no ícone de 'engrenagem' no canto superior esquerdo da tela e selecione:

       "Configurações do sistema" 
       => "Áudio" => "Dispositivo de saída de áudio" => "PI: Analógico"

Como passei dois anos assistindo TV de forma errada.

Devo admitir que ao longo de dois anos não aprendi a assistir TV corretamente.

Normalmente assisto TV na cozinha. A TV está conectada a uma placa Raspberry Pi 2B, e a placa possui conectores Ethernet e HDMI. A energia da placa é fornecida através de um cabo USB comum, que está conectado à porta USB da TV; ou seja, basicamente, ligar a TV com o controle remoto também fornece energia à placa Raspberry Pi, e desligar a TV pelo controle, imediatamente desliga a energia da placa Raspberry Pi.

Sim, estou bem ciente de que isso não é o ideal, porque o sistema de arquivos raiz do centro de mídia Kodi (ext3) opera em um modo normal de leitura/escrita. Mas sou uma pessoa preguiçosa, e por enquanto decidi verificar por quanto tempo posso desligar o sistema antes que ele pare de inicializar completamente, mas, infelizmente, em dois anos não consegui fazer isso (talvez eu só tenha tido sorte, não sei).

E, na minha opinião, se esse modo funcionou para minha TV, ele também funcionará para uma 'simples caixa de rádio pela Internet', e como forcei a desativação das atualizações automáticas de plugins do Kodi, a probabilidade de falha no sistema de arquivos se torna ainda menor. Até agora, não vejo problemas com isso.

Nota:

    Mas você sempre pode, se desejar, usar um comando yocto 
    IMAGE_FEATURES += "read-only-rootfs"

    e um pouco de mágica para alterar seu sistema em modo 'somente leitura'.
    

A distribuição 'caixa de rádio pela Internet' descrita neste artigo é destinada ao uso doméstico, e o principal para uma distribuição doméstica é ter uma interface gráfica bonita. Na minha opinião, é muito difícil ou quase impossível ensinar um usuário comum a digitar comandos mágicos incompreensíveis no console, além de que eles nem sabem o que é isso. Mas uma interface gráfica é perfeitamente aceitável.

E este é, sem dúvida, meu principal argumento a favor de uma distribuição não console. A interface gráfica do usuário acolhedora do Kodi, embora não seja estritamente necessária, está disponível.
(Eu quase me esqueci de mencionar que é possível controlar o Kodi remotamente, por exemplo, pelo smartphone, instalando o aplicativo "Yatse", e isso pode ser uma vantagem para alguns.)

Configuração do Kodi para controle via mouse

Agora, a Rocket

VolumeUp
          VolumeDown
          ChannelDown
          ChannelDown
          ChannelUp
          

A configuração redefine eventos globais para os seguintes elementos:

  • rolagem do botão do mouse para a frente
  • rolagem do botão do mouse para trás
  • clique do botão do meio do mouse
  • processamento de um clique longo no mouse (3 segundos ou mais),
    0 identificador do botão direito, 1 identificador do botão esquerdo

informações mais detalhadas sobre a configuração dos eventos do mouse:

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

O que fazer se o sistema a cabo não chegar até você

"Mas eu não tenho portas Ethernet livres em casa (ou nunca tive)" — pode exclamar alguns dos felizes proprietários de placas Raspberry Pi 1 antigas (talvez a placa tenha sido comprada para pesquisa e acabou ficando guardada no armário)

E como a placa não possui Wifi embutido, sem conexão Ethernet ela não é muito funcional.

Claro que existe a possibilidade de usar a placa Raspberry Pi 1 sem Ethernet, mas isso exigirá alguns esforços de sua parte. Normalmente, essas coisas são interessantes apenas no contexto do aprendizado de algo novo, ou seja, não é algo voltado para o usuário.

Assim, vamos considerar uma hipótese de uso da placa sem Ethernet:

É possível conectar um adaptador USB - Wifi externo, partindo do princípio
de que o adaptador deve funcionar bem no Linux

Nota:

    Infelizmente, alguns adaptadores WiFi não funcionarão, isso não é uma característica da distribuição apresentada neste artigo, mas sim um problema específico de certos drivers de adaptadores WiFi no núcleo Linux. Pode-se afirmar que, neste momento, você não pode simplesmente ir a uma loja e comprar qualquer adaptador WiFi. Em vez disso, você deve escolher um adaptador WiFi de uma lista de menos problemáticos e que funcionem bem no Linux. 

    Eu verifiquei apenas os seguintes modelos:
    - Adaptador WiFi com chip Atheros D-Link DWA-126 802.11n (AR9271)
    - Adaptador WiFi NetGear WNDA3200
    - Adaptador WiFi NetGear WNA1100
    - Adaptador WiFi TP-Link TL-WN722N (AR9271)
    - Adaptador WiFi TL-WN322G v3
    - Adaptador WiFi TL-WN422G
    - Adaptador WiFi Asus USB-N53 com chip Ralink RT3572 
    

Se você já tem um adaptador WiFi USB, pode verificar se ele funciona bem no Linux da seguinte maneira:

  • Instale uma distribuição Linux amplamente utilizada
    , como o "Ubuntu Desktop"
  • Inicie o sistema
  • Conecte seu adaptador WiFi USB
  • Inicie o gerenciador de rede e tente se conectar ao seu ponto de acesso WiFi
  • Se tudo funcionar bem e sua conexão de internet estiver estável, isso significa que seu adaptador é bem suportado e você pode continuar seu trabalho de conexão desse adaptador em uma distribuição especializada e possivelmente com outras versões do núcleo
    (se não funcionar, melhor não tentar)

Suporte a adaptador WiFi externo no "Raspberry PI"

Para o funcionamento correto do adaptador WiFi no Linux: precisamos de duas coisas:
1) Suporte no núcleo Linux para o adaptador WiFi específico
2) A presença no sistema de um módulo do núcleo para o adaptador WiFi específico

Vamos usar como exemplo o adaptador TP-Link TL-WN722N. Ele tem uma antena simplesmente magnífica.
Vamos identificar o chip no qual a placa está baseada — no meu caso, é o "AR9271", nota:

    o mais interessante é que, para o mesmo modelo de um mesmo fabricante, o chip WiFi pode variar. Por exemplo, já me deparei com o fato de que para o TL-WN722N versão 2, já é usado um chip diferente, o Realtek RTL8188, e ele funcionava mal no Linux (naquele momento), infelizmente, é assim, ou seja, às vezes é preciso ficar atento aos pequenos números da versão no verso (escuro) do adaptador.    
    

Agora vamos encontrar o nome do parâmetro na configuração do núcleo referente ao driver do chip AR9271, é melhor procurar pela combinação de palavras "AR9271 cateee.net".
     onde «cateee.net» — um site incrível com descrição das configurações dos módulos do kernel Linux

Imediatamente encontramos o nome da configuração do kernel — CONFIG_ATH9K_HTC
e o nome do módulo do kernel que precisamos ath9k_htc

e, em seguida, é suficiente indicar o nome do módulo necessário no arquivo de fragmento de configuração
do kernel Linux => recipes-kernel/linux/files/rbpi.cfg, adicione a linha:
CONFIG_ATH9K_HTC=m

Assim, no futuro, você poderá conectar qualquer hardware adicional ao seu sistema (desde que já seja suportado no kernel Linux)

O que fazer se você é um construtor do Habr Geek

E cria coisas incríveis, como aqui ou se você é um estudante e sonha em criar algo parecido.

Logo, pode-se rapidamente pegar algum tipo de tela Touch Screen para RPI no aliexpress, também encomendar uma bateria adequada, conectar tudo isso à placa Raspberry Pi 1, 2 ou 3 (preferencialmente à 3, pois possui Wi-Fi embutido), escolher um tema de interface gráfica no Kodi, projetado para telas sensíveis ao toque, e voilà => você pode ter um simples reprodutor de áudio. Claro, ele será bastante volumoso, mas será seu.

  Observação:
  Para montar um centro multimídia Kodi para a placa mais econômica 
  Raspberry Pi Zero Wifi no yocto, basta alterar duas linhas:

  arquivo de configuração => build/conf/local.conf
      MACHINE = 'raspberrypi0-wifi'

  receita de montagem do Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
      EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 
                            'raspberrypi0-wifi', '${BS_RPI}',  '', d)}"

  Se a responsividade do GUI Kodi 17.6
  devido a um núcleo de processador no Zero parecer
  enigmática, você pode contornar isso e compilar uma versão mais antiga,
  mas muito rápida, como Kodi 15.2, que é mais
  "amigável" nesse aspecto (às vezes o legado resolve tudo)

Infelizmente, não tenho a placa, então não posso verificar, mas pelo que sinto, isso deve funcionar.

Instruções resumidas para a montagem

    1) Instale as dependências do Yocto Project (por exemplo, no 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) Baixe e instale o Repo:
        mkdir ~/bin
        curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
        chmod a+x ~/bin/repo

    3) Baixe o projeto do 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) Compile o projeto:
        ./shell.sh
        bitbake berserk-image
        
    Você pode compilar o mesmo para as placas Raspberry Pi 3B Plus, 3B e 2B:
    repo init -u https://github.com/berserktv/bs-manifest 
              -m raspberry/rocko/radio-0.2.8.xml
    

instruções mais detalhadas sobre a construção
e gravação no cartão microSDHC no artigo anterior

Pós-escrito

Claro, a ideia de uma coluna de rádio pela Internet é comum e você encontrará muitos artigos sobre esse tópico no Habr, por exemplo aqui

E você pode pensar que eu apenas adaptei os requisitos para a solução pronta. Para isso, posso responder e dizer que não, honestamente.

A história do Sr. Ervi

    Acredite se quiser, a história foi assim:

    Nosso escritório se encontra próximo a uma empresa que fabrica diversos equipamentos de som, e um dia o diretor dessa empresa, vamos chamá-lo de senhor "Ervi", se aproximou do nosso vice-diretor da filial, o senhor "Arseniy", e perguntou a ele quão difícil seria reproduzir um fluxo de áudio em uma placa Raspberry Pi, ou seja, a placa se conecta à rede e às caixas de som, e "um som característico é ouvido".

    Depois disso, o senhor Arseniy se dirigiu ao vice-chefe do meu chefe - o senhor "Boris" - e redirecionou a pergunta a ele, e eu, como espectador, acabei decorando essa ideia e a chamei de "A tarefa dos três chefes".

    Em suma, tentamos fazer o melhor, mas aconteceu, citação - "Mas o senhor Ervi, como sempre, ajudou."

    Algum tempo depois, perguntei ao senhor "Boris" sua opinião sobre escrever uma pequena nota sobre esse tema no "Habr", ao que "Boris" respondeu que a alteração de "três itens de menu" no Kodi não trazia nenhuma nova informação e não merecia uma menção separada. Certamente, concordo plenamente com ele, e por isso não vou contar a ele que escrevi algo a esse respeito.

    O artigo foi escrito exclusivamente para a placa "Raspberry Pi 1" que peguei do senhor "Boris" durante o experimento, e qualquer semelhança com outras placas "Raspberry Pi 1" é mera coincidência.
    

Desejo muitas compilações boas e variadas, e que até mesmo um antigo "tijolo" cante para você este ano.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster