가장 단순한 인터넷 라디오 칼럼 "Kodi" 또는 "Raspberry" 브릭의 구원

가장 단순한 인터넷 라디오 칼럼 "Kodi" 또는 "Raspberry" 브릭의 구원

기본 전제 조건:

  1. 오래된 미사용 XNUMX세대 라즈베리 파이 보드가 있습니다.
  2. 보드는 캐비닛에 고정 중량으로 놓여 있으며 사용되지 않습니다. "브릭"보드;

받고 싶은 것:

  1. 특정 시점에서(예: 기분에 따라)
    보드는 더 이상 "브릭"이 아니며 마법의 메모리 카드가 보드에 삽입됩니다.
  2. 일반 가정용 스피커 또는 헤드폰의 이더넷 케이블과 플러그가 보드에 연결됩니다.
  3. 전원이 공급된 후, 이전의 "Kirpich"는 - 노래하다

주요 아이디어 :

  1. 모든 설정에 대한 최소한의 제스처, 가장 이상적인 경우 "이더넷" 케이블, 전원 및 스피커만 연결하고 다른 작업은 하지 않습니다. "조금도";
  2. 예를 들어, 마우스 휠을 누르거나 특정 GPIO 핀(20개의 와이어 연결 닫으십시오 (어린 시절의 꿈));
  3. 제어는 무선 채널을 통해 수행되며 이 무선 채널은 일반 무선 마우스일 수 있습니다.
  4. 기성품 시스템을 가져와 "Yocto 프로젝트"에서 배포 키트를 조립합니다.
    저것들. 평소와 같이 모든 것이 이미 완료되었으므로 귀하와 아무 것도하지 않을 것입니다.
    (반대편에 외부 관찰자를 배치하는 것만으로 충분하다. "TV");

기술

가장 단순한 인터넷 라디오 칼럼 "KODI"
오래된 Raspberry Pi 1 보드용으로 설계된 어셈블리
(옷장 어딘가에 먼지를 모으고 있지만 더 일할 준비가 된 사람)

3개 인터넷 라디오 방송국의 m8u12 목록이 기본적으로 사용됩니다.

보드는 HDMI 출력 없이 작동하는 것으로 가정하고 끄려면 콘센트에서 전원 어댑터를 뽑으면 됩니다. 그리고 초현대식 무선 리모콘으로 슈퍼 라디오 마우스를 사용할 수 있습니다(또는 꼬리가 있는 일반 회색 마우스 연결).

활성화되면 네트워크 인터페이스는 기본적으로 DHCP 프로토콜을 통해 구성되고 목록에서 마지막으로 기억된 라디오 방송국이 재생되며 재생 볼륨은 일반 마우스로 제어됩니다.
(마지막으로 마우스를 "관리 책임자"로 임명하고 그녀를 축하합니다. 그녀는 그럴 자격이 있습니다)

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

나만의 인터넷 라디오 방송국 목록을 추가하려면
항상 TV에서 HDMI 케이블을 연결할 수 있습니다.
재고 Kodi 17.6 GUI 사용
(보드를 끄고 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번의 저녁을 보내야 한다
(보통 퇴근 후, 가장 비효율적인 시간, 이때 뇌는 더 이상 생각하지 않고 보통 잠을 잔다)

그럼에도 불구하고 나는 멀티미디어 센터에 관한 Habré에 대한 이전 기사를 썼습니다. 코디와 욕토 프로젝트
그리고 같은 맥락에서 계속할 수 있는 기회가 나의 탐구 충동을 압도했습니다. 이에 대해서는 다음 장에서 자세히 설명합니다.

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_welcome;"

요컨대 Kodi 17.6의 기본 구성 파일에서 "three points" 변경

  • 마지막으로 선택한 TV 채널의 구성을 시작합니다.
  • 오디오 출력 구성, 아날로그 오디오 출력만 항상 연결됩니다.
  • 자동 업데이트 비활성화
  • 참고 :
        Единственное с чем у меня возникли сложности, 
        это то, что пришлось еще подтащить файл базы данных 
        в формате sqlite => TV29.db, в котором указывается 
        текущий проигрываемый ТВ канал 
        (так как по умолчанию никакой из каналов не выбран), 
        а через xml конфигурацию в Kodi этого не сделать.
        

각 항목에 대한 보다 자세한 작업 순서:

1) 화면 왼쪽 상단의 "톱니바퀴" 아이콘을 클릭합니다.
"PVR 및 TV 설정"을 선택합니다(경적이 두 개인 TV 이미지).
메뉴 왼쪽에서 "재생" 항목을 선택하고 중앙 섹션 "일반"에서
드롭다운 목록에서 "시작 시 마지막 채널에서 계속" 선택
"전경" 설정 선택

또는 더 명확하게:

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

2) 화면 왼쪽 상단 모서리에 있는 "톱니바퀴" 아이콘을 클릭하고 항목을 선택합니다.

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

3) 화면 왼쪽 상단 모서리에 있는 "톱니바퀴" 아이콘을 클릭하고 항목을 선택합니다.

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

내가 어떻게 XNUMX년 동안 TV를 잘못 보고 있었는지.

XNUMX년 동안 나는 TV를 제대로 보는 법을 배우지 못했다는 것을 고백해야 합니다.

나는 보통 부엌에서 TV를 본다. Raspberry Pi 2B 보드가 TV에 연결되고 이더넷 및 HDMI 커넥터가 보드에 연결됩니다. 보드는 TV의 USB 포트에 연결되는 일반 USB 케이블을 통해 전원이 공급됩니다. 실제로 재고 리모콘을 사용하여 TV를 켜도 라즈베리 파이 보드에 전원이 공급되고, 리모콘으로 TV를 끄면 라즈베리 파이 보드의 전원도 즉시 재설정됩니다.

예, Kodi 멀티미디어 센터(ext3)의 루트 파일 시스템이 정상적인 읽기/쓰기 모드에서 작동하기 때문에 이것이 불가능하다는 것을 잘 알고 있습니다. 하지만 나는 게으른 사람이고 우선 시스템이 완전히 멈출 때까지 시스템을 끄는 데 걸리는 시간을 확인하기로 결정했지만 불행히도 XNUMX 년 동안 이것을 할 수 없었습니다 (아마도 나는 운이 좋았는지 모르겠습니다).

그리고 내 생각에는 이 모드가 내 TV에 적합하다면 "간단한 인터넷 라디오 스피커"에도 적합하며 Kodi 플러그인의 자동 업데이트를 강제로 해제했기 때문에 파일 시스템 오류가 발생할 확률은 더 적습니다. 지금까지 나는 그것에 문제가 없다고 생각합니다.

참고 :

    Но вы всегда при желании можете с помощью одной yocto команды 
    IMAGE_FEATURES += "read-only-rootfs"

    и определенной магии перевести ваш дистрибутив в режим "read only"
    

기사에 나온 배포 키트 "인터넷 라디오 스피커"는 가정용이며 가정용 배포 키트에서 가장 중요한 것은 아름다운 GUI입니다. 제 생각에는 일반 사용자에게 콘솔에서 이해할 수없는 마법 명령을 입력하도록 가르치는 것은 매우 어렵거나 거의 불가능하며 그는 그런 단어조차 모릅니다. 그리고 여기 GUI가 있습니다.

그리고 이것은 아마도 콘솔이 아닌 배포판에 찬성하는 나의 주요 주장일 것입니다. Kodi의 따뜻한 램프 GUI, 실제로 필요하지는 않지만 있습니다.
(예를 들어 Yatse 응용 프로그램을 설치하여 스마트폰에서 Kodi를 원격으로 제어할 수 있다는 사실을 언급하는 것을 완전히 잊었습니다. 아마도 누군가에게는 이것이 플러스가 될 것입니다.)

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초 이상) 처리,
    오른쪽 버튼 ID 0개, 왼쪽 버튼 ID 1개

마우스 이벤트 구성에 대한 추가 정보:

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

케이블 시스템이 오지 않은 경우 수행할 작업

"하지만 집에 무료 이더넷 포트가 없습니다(또는 없었습니다)." 오래된 Raspberry Pi 1 보드의 행복한 소유자 중 일부는 외칠 수 있습니다(아마도 보드는 연구용으로 구입하여 벽장에 남아 있었을 것입니다)

그리고 보드에 Wi-Fi가 내장되어 있지 않기 때문에 이더넷 연결이 없으면 그다지 기능적이지 않습니다.

물론 이더넷 없이 라즈베리 파이 1 보드를 사용할 가능성은 존재하지만 약간의 노력이 필요합니다. 일반적으로 그러한 일은 새로운 연구의 일부로만 수행하는 것이 흥미 롭습니다. 이것은 커스텀 작업이 아닙니다.

따라서 이더넷이 없는 보드에 대한 가상의 사용 사례를 고려해 보겠습니다.

고려 사항에 따라 외부 USB - Wi-Fi 어댑터를 연결할 수 있습니다.
어댑터가 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"과 같은 범용
  • 시스템 부팅
  • Wi-Fi USB 어댑터 연결
  • 네트워크 관리자를 실행하고 WiFi 핫스팟에 연결해 보십시오.
  • 모든 것이 잘 작동하고 인터넷 연결이 안정적이면 어댑터가 잘 지원되며 이 어댑터를 전문 배포 및 다른 커널 버전과 연결하는 작업을 계속할 수 있습니다.
    (그렇지 않다면 아아-시도하지 않는 것이 좋습니다)

"Raspberry PI"에서 외부 Wi-Fi 어댑터 지원

WiFi 어댑터가 Linux에서 올바르게 작동하려면 다음 두 가지가 필요합니다.
1) 특정 Wifi 어댑터에 대한 Linux 커널 지원
2) 특정 Wi-Fi 어댑터용 커널 모듈이 시스템에 있음

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 커널에서 이미 지원되는 경우).

당신이 하브라 괴짜라면 해야 할 일 - 생성자

그리고 당신은 다음과 같은 가장 멋진 것을 만듭니다. 여기에 또는 당신은 학생이고 비슷한 것을 만드는 꿈을 꿉니다.

그런 다음 즉시 aliexpress에서 RPI용 터치 스크린 화면을 가져오고 거기에서 적합한 배터리를 주문하고 모두 Raspberry Pi 1,2 또는 3 보드에 연결할 수 있습니다(내장 Wi-Fi가 있으므로 3이 더 좋음). 터치 스크린용으로 설계된 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)}"

  Zero에 있는 하나의 프로세서 코어로 인한 Kodi 17.6 GUI의 응답성이 신비롭게 보인다면 귀로 페인트칠을 할 수 있고 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é에서는이 주제에 대한 많은 기사를 찾을 수 있습니다. 예를 들어 여기에

그리고 기성 솔루션에 대한 요구 사항을 방금 조정했다고 생각할 수도 있습니다. 이에 대해 반박하고 아니오라고 솔직하게 말할 수 있습니다.

Mr Ervey의 이야기

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

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

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

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

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

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

당신을 위해 더 좋고 다른 조립품을 만들고 올해는 이전 벽돌도 당신을 위해 노래하게 하십시오.

출처 : habr.com

코멘트를 추가