Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
internetradio [2020/11/24 16:05] admin |
internetradio [2023/11/17 13:46] (aktuell) admin |
||
|---|---|---|---|
| Zeile 11: | Zeile 11: | ||
| ===== Vorbereitung ===== | ===== Vorbereitung ===== | ||
| - | Zuerst laden wir uns das aktuelle Raspbian herunter. Zur Erstellung dieser Anleitung war es Raspbian Buster. Ich habe mich für die Variante mit Desktop entschieden. [[https://www.raspberrypi.org/downloads/raspbian/]] | + | Zuerst laden wir uns das aktuelle Raspbian herunter. Zur Erstellung dieser Anleitung war es Raspbian Bullseye. Ich habe mich für die Variante mit Desktop entschieden. [[https://www.raspberrypi.org/downloads/raspbian/]] |
| Das heruntergeladene Image wird mit einer geeigneten Software (z.B. Etcher) auf die SD-Karte übertragen. Weitere Infos dazu unter [[https://www.raspberrypi.org/documentation/installation/installing-images/README.md]]. | Das heruntergeladene Image wird mit einer geeigneten Software (z.B. Etcher) auf die SD-Karte übertragen. Weitere Infos dazu unter [[https://www.raspberrypi.org/documentation/installation/installing-images/README.md]]. | ||
| Zeile 66: | Zeile 66: | ||
| nehmen wir nun folgende Einstellungen vor. | nehmen wir nun folgende Einstellungen vor. | ||
| - | - 2 Network Option -> Hostname -> raspberrypi ändern in **musicbox** | + | - 1 System Options -> S4 Hostname -> raspberrypi ändern in **musicbox** |
| - | - 4 Localisation Options -> I1 Change Locale -> **de_DE.UTF-8 UTF-8** aktivieren und **en_GB.UTF-8 UTF-8** deaktivieren | + | - 5 Localisation Options -> L1 Locale -> **de_DE.UTF-8 UTF-8** aktivieren und **en_GB.UTF-8 UTF-8** deaktivieren |
| - | - 4 Localisation Options -> I1 Change Timezone -> Europe -> Berlin | + | - 5 Localisation Options -> L2 Change Timezone -> Europe -> Berlin |
| - | - 5 Interfacing Option -> P3 VNC - VNC aktivieren | + | - 3 Interface Options -> P3 VNC - VNC aktivieren |
| Die abschließende Frage ob der RaspberryPi neu gestartet werden soll beantworten wir mit **Yes**. Nach dem Neustart verbinden wir uns via SSH wieder mit dem RaspberryPi. | Die abschließende Frage ob der RaspberryPi neu gestartet werden soll beantworten wir mit **Yes**. Nach dem Neustart verbinden wir uns via SSH wieder mit dem RaspberryPi. | ||
| Zeile 81: | Zeile 81: | ||
| sudo apt-get install samba | sudo apt-get install samba | ||
| - | |||
| - | Die Abfrage ob das Paket dhcp-client installiert werden soll beantworten wir mit **Ja**. | ||
| Nun legen wir noch ein paar Verzeichnisse an, in welches wir später die Musikdateien, Playlisten etc. ablegen wollen. | Nun legen wir noch ein paar Verzeichnisse an, in welches wir später die Musikdateien, Playlisten etc. ablegen wollen. | ||
| Zeile 125: | Zeile 123: | ||
| Zuerst fügen wir die Mopidy Quellen der Anwendungsverwaltung hinzu und installieren das Basispaket in dem wir folgende Befehle nacheinander im Terminal eingeben: | Zuerst fügen wir die Mopidy Quellen der Anwendungsverwaltung hinzu und installieren das Basispaket in dem wir folgende Befehle nacheinander im Terminal eingeben: | ||
| - | wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add - | + | sudo mkdir -p /etc/apt/keyrings |
| - | sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/buster.list | + | sudo wget -q -O /etc/apt/keyrings/mopidy-archive-keyring.gpg https://apt.mopidy.com/mopidy.gpg |
| + | |||
| + | sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/bullseye.list | ||
| sudo apt-get update | sudo apt-get update | ||
| Zeile 144: | Zeile 144: | ||
| sudo adduser mopidy video | sudo adduser mopidy video | ||
| + | | ||
| + | Nun müssen wir **pip** installieren um die nachfolgenden Module laden zu können. | ||
| + | sudo apt-get install python3-pip | ||
| + | | ||
| Damit wir Mopidy später über eine Weboberfläche (Webclients) steuern können muss diese entsprechend auch installiert sein. Ich haben mich für **Iris** und **Mobile** entschieden. | Damit wir Mopidy später über eine Weboberfläche (Webclients) steuern können muss diese entsprechend auch installiert sein. Ich haben mich für **Iris** und **Mobile** entschieden. | ||
| Zeile 152: | Zeile 156: | ||
| Weitere mögliche Webclients wären //MusicBox-Webclient//, //Simple-Webclient//, //Moped// oder //Mopify// um nur einige zu benennen. Eine Übersicht gibt es [[https://mopidy.com/ext/|hier]]. | Weitere mögliche Webclients wären //MusicBox-Webclient//, //Simple-Webclient//, //Moped// oder //Mopify// um nur einige zu benennen. Eine Übersicht gibt es [[https://mopidy.com/ext/|hier]]. | ||
| - | Wer auf Mopidy auch mit externen MPD-Clients (z.B. ncmpcpp) zugreifen möchte sollte sich unbedingt noch //Mopidy-MPD// installieren. | + | Wer später auf Mopidy auch mit externen MPD-Clients (z.B. ncmpcpp) zugreifen möchte sollte sich unbedingt noch //Mopidy-MPD// installieren. |
| sudo python3 -m pip install Mopidy-MPD | sudo python3 -m pip install Mopidy-MPD | ||
| Zeile 209: | Zeile 213: | ||
| [logging] | [logging] | ||
| verbosity = 1 | verbosity = 1 | ||
| - | format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)s\n %(message)s\ | + | format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)s\n %(message)s |
| color = true | color = true | ||
| + | | ||
| [audio] | [audio] | ||
| mixer = software | mixer = software | ||
| Zeile 217: | Zeile 221: | ||
| output = autoaudiosink | output = autoaudiosink | ||
| buffer_time = 1000 | buffer_time = 1000 | ||
| + | | ||
| + | Wer später den Sound von Mopidy zusätzlich noch an einen Streamingserver (z.B. Icecast) ausgeben will verwendet in der Zeile //output = // folgende Parameter: | ||
| + | |||
| + | output = tee name=t ! queue ! audioresample ! autoaudiosink t. ! queue ! lamemp3enc ! shout2send async=false mount=mopidy ip=127.0.0.1 port=8000 password=yxasqw123EDC | ||
| + | |||
| [local] | [local] | ||
| media_dir = /music | media_dir = /music | ||
| + | | ||
| [file] | [file] | ||
| enabled = true | enabled = true | ||
| Zeile 238: | Zeile 247: | ||
| follow_symlinks = false | follow_symlinks = false | ||
| metadata_timeout = 1000 | metadata_timeout = 1000 | ||
| + | | ||
| [http] | [http] | ||
| enabled = true | enabled = true | ||
| Zeile 246: | Zeile 255: | ||
| csrf_protection = true | csrf_protection = true | ||
| default_app = mopidy | default_app = mopidy | ||
| + | | ||
| [mpd] | [mpd] | ||
| enabled = true | enabled = true | ||
| Zeile 260: | Zeile 269: | ||
| default_playlist_scheme = m3u | default_playlist_scheme = m3u | ||
| - | ''[m3u]\\ | + | [m3u] |
| - | enabled = true\\ | + | enabled = true |
| - | base_dir = /music\\ | + | base_dir = /music |
| - | default_encoding = latin-1\\ | + | default_encoding = latin-1 |
| - | default_extension = .m3u8\\ | + | default_extension = .m3u8 |
| - | playlists_dir = /music/playlists\\ '' | + | playlists_dir = /music/playlists |
| - | ''[softwaremixer]\\ | + | [softwaremixer] |
| - | enabled = true\\ '' | + | enabled = true |
| - | ''[tunein]\\ | + | [tunein] |
| - | enabled = true\\ | + | enabled = true |
| - | timeout = 5000\\ '' | + | timeout = 5000 |
| Um Mopidy-Spotify nutzen zu können benötigen wir API Zugriff auf Spotify. Die //client_id// und das //client_secret// bekommt ihr [[https://auth.mopidy.com/spotify/|hier]]. | Um Mopidy-Spotify nutzen zu können benötigen wir API Zugriff auf Spotify. Die //client_id// und das //client_secret// bekommt ihr [[https://auth.mopidy.com/spotify/|hier]]. | ||
| - | ''[spotify]\\ | + | [spotify] |
| - | enabled = true\\ | + | enabled = true |
| - | username = DEIN_SPOTIFY_USERNAME\\ | + | username = DEIN_SPOTIFY_USERNAME |
| - | password = DEIN_SPOTIFY_PASSWORT\\ | + | password = DEIN_SPOTIFY_PASSWORT |
| - | client_id = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\ | + | client_id = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| - | client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\\ | + | client_secret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| - | bitrate = 160\\ | + | bitrate = 160 |
| - | volume_normalization = true\\ | + | volume_normalization = true |
| - | private_session = false\\ | + | private_session = false |
| - | timeout = 10\\ | + | timeout = 10 |
| - | allow_cache = true\\ | + | allow_cache = true |
| - | allow_network = true\\ | + | allow_network = true |
| - | allow_playlists = true\\ | + | allow_playlists = true |
| - | search_album_count = 20\\ | + | search_album_count = 20 |
| - | search_artist_count = 10\\ | + | search_artist_count = 10 |
| - | search_track_count = 50\\ | + | search_track_count = 50 |
| - | toplist_countries =\\ '' | + | toplist_countries = |
| Ähnlich ist es bei SoundCloud. Hier benötigen wir einen auth_token welchen wir [[https://secure.soundcloud.com/connect?client_id=93e33e327fd8a9b77becd179652272e2&scope=non-expiring&response_type=code_and_token&redirect_uri=https://www.mopidy.com/soundcloud_callback|hier]] bekommen. | Ähnlich ist es bei SoundCloud. Hier benötigen wir einen auth_token welchen wir [[https://secure.soundcloud.com/connect?client_id=93e33e327fd8a9b77becd179652272e2&scope=non-expiring&response_type=code_and_token&redirect_uri=https://www.mopidy.com/soundcloud_callback|hier]] bekommen. | ||
| - | ''[soundcloud]\\ | + | [soundcloud] |
| - | enabled = true\\ | + | enabled = true |
| - | explore_songs = 25\\ | + | explore_songs = 25 |
| - | auth_token = x-xxxxx-xxxxxxxxx-xxxxxxxxxxxxxxx\\ '' | + | auth_token = x-xxxxx-xxxxxxxxx-xxxxxxxxxxxxxxx |
| Für den Zugriff auf Last.FM genügen Benutzername und Passwort. | Für den Zugriff auf Last.FM genügen Benutzername und Passwort. | ||
| - | ''[scrobbler]\\ | + | [scrobbler] |
| - | enabled = true\\ | + | enabled = true |
| - | username = DEIN_LASTFM_USERNAME\\ | + | username = DEIN_LASTFM_USERNAME |
| - | password = DEIN_LASTFM_PASSWORT\\ '' | + | password = DEIN_LASTFM_PASSWORT |
| Etwas komplizierter wird es bei Youtube. Hierfür benötigen wir einen //youtube_api_key//. Eine einfaches Videotutorial wie man diesen erstellt bzw. bekommt gibt es [[https://youtu.be/ozOmQGDVwKQ|hier]]. | Etwas komplizierter wird es bei Youtube. Hierfür benötigen wir einen //youtube_api_key//. Eine einfaches Videotutorial wie man diesen erstellt bzw. bekommt gibt es [[https://youtu.be/ozOmQGDVwKQ|hier]]. | ||
| - | ''[youtube]\\ | + | [youtube] |
| - | enabled = true\\ | + | enabled = true |
| - | youtube_api_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\\ | + | youtube_api_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| - | api_enabled = false\\ | + | api_enabled = false |
| - | threads_max = 16\\ | + | threads_max = 16 |
| - | search_results = 15\\ | + | search_results = 15 |
| - | playlist_max_videos = 20\\ '' | + | playlist_max_videos = 20 |
| Nun werden noch die Podcast-Quellen eingerichtet. Die Datei //podcasts.opml// ist eine XML-Datei welche in meinem Beispiel im Ordner ///music/podcasts// liegt. Diese kann man ganz leicht selbst erstellen oder z.B. in iTunes erzeugen. | Nun werden noch die Podcast-Quellen eingerichtet. Die Datei //podcasts.opml// ist eine XML-Datei welche in meinem Beispiel im Ordner ///music/podcasts// liegt. Diese kann man ganz leicht selbst erstellen oder z.B. in iTunes erzeugen. | ||
| - | ''[podcast]\\ | + | [podcast] |
| - | enabled = true\\ | + | enabled = true |
| - | browse_root = /music/podcasts/podcasts.opml\\ | + | browse_root = /music/podcasts/podcasts.opml |
| - | browse_order = desc\\ | + | browse_order = desc |
| - | lookup_order = asc\\ | + | lookup_order = asc |
| - | cache_size = 64\\ | + | cache_size = 64 |
| - | cache_ttl = 86400\\ | + | cache_ttl = 86400 |
| - | timeout = 10\\ '' | + | timeout = 10 |
| Noch einfacher geht es bei diesem Addon. Hier übernimmt Apple die Verwaltung des Podcast-Verzeichnisse und sortiert dieses für uns nach Genres. Da das Verzeichnis öffentlich ist wird auch keine weitere Authentifizierung benötigt. | Noch einfacher geht es bei diesem Addon. Hier übernimmt Apple die Verwaltung des Podcast-Verzeichnisse und sortiert dieses für uns nach Genres. Da das Verzeichnis öffentlich ist wird auch keine weitere Authentifizierung benötigt. | ||
| - | ''[podcast-itunes]\\ | + | [podcast-itunes] |
| - | enabled = true\\ | + | enabled = true |
| - | base_url = http://itunes.apple.com/\\ | + | base_url = http://itunes.apple.com/ |
| - | country = DE\\ | + | country = DE |
| - | explicit = Yes\\ | + | explicit = Yes |
| - | charts = audioPodcasts\\ | + | charts = audioPodcasts |
| - | charts_limit = 20\\ | + | charts_limit = 20 |
| - | search_limit = 20\\ | + | search_limit = 20 |
| - | timeout = 10\\ | + | timeout = 10 |
| - | retries = 3\\ '' | + | retries = 3 |
| Wurde Mopidy für einen User z.B. pi eingerichtet so lässt sich Mopidy durch einfach durch Eingabe von | Wurde Mopidy für einen User z.B. pi eingerichtet so lässt sich Mopidy durch einfach durch Eingabe von | ||
| - | ''mopidy'' | + | mopidy |
| starten. Möchtet ihr Mopidy als Service starten bzw. später beim Hochfahren des RaspberryPis starten lassen so müssen wir es zunächst in die Liste der Systemdienste aufnehmen. Das geschieht ganz einfach mit | starten. Möchtet ihr Mopidy als Service starten bzw. später beim Hochfahren des RaspberryPis starten lassen so müssen wir es zunächst in die Liste der Systemdienste aufnehmen. Das geschieht ganz einfach mit | ||
| - | ''sudo systemctl enable mopidy'' | + | sudo systemctl enable mopidy |
| Danach können wir Mopidy mit | Danach können wir Mopidy mit | ||
| - | ''sudo systemctl start mopidy'' | + | sudo systemctl start mopidy |
| starten. Das Programm läuft nun als Prozess im Hintergrund. | starten. Das Programm läuft nun als Prozess im Hintergrund. | ||
| Zeile 378: | Zeile 387: | ||
| Die Installation wird mit | Die Installation wird mit | ||
| - | ''sudo apt-get install ncmpcpp'' | + | sudo apt-get install ncmpcpp |
| gestartet und das war es auch schon. Wichtig ist, dass //Mopidy-MPD// installiert und der entsprechende Konfigurationsabschnitt in der //mopidy.conf// vorhanden ist. Eine Übersicht der Tastaturbelegung findet ihr {{ :ncmpcpp_cheat_sheet.pdf | hier}}. | gestartet und das war es auch schon. Wichtig ist, dass //Mopidy-MPD// installiert und der entsprechende Konfigurationsabschnitt in der //mopidy.conf// vorhanden ist. Eine Übersicht der Tastaturbelegung findet ihr {{ :ncmpcpp_cheat_sheet.pdf | hier}}. | ||
| + | |||
| + | ==== Voreingestellte Playlist beim Start ==== | ||
| + | |||
| + | Betreibt man seine Mopidy-Server "headless", also ohne angeschlossene Tastatur oder Monitor, so lässt sich mit diesem Plugin eine Default-Playlist setzen. Diese wird beim Start automatisch abgespielt. In meinem Fall ist es eine Playlist vordefinierter Radiosender mit dem Namen //Radio-Favoriten//. | ||
| + | |||
| + | Installiert wird das Plugin mit | ||
| + | |||
| + | sudo python3 -m pip install Mopidy-DefaultPlaylist | ||
| + | | ||
| + | Der entsprechende Abschnitt in der mopidy.conf sieht dann so aus | ||
| + | |||
| + | [defaultplaylist] | ||
| + | enabled = true | ||
| + | defaultplaylist_name = Radio-Favoriten | ||
| + | autoplay = true | ||
| + | shuffle = true | ||
| + | |||
| + | Die Option //shuffle =// sorgt dafür das bei jedem Neustart ein anderer Sender abgespielt wird. | ||
| Zeile 387: | Zeile 414: | ||
| Um noch weitere Clients im LAN (oder wahlweise auch weltweit) mit Musik zu versorgen kann man zusätzlich noch einen Streamingserver aufsetzen. Dieser läuft parallel zu //Mopidy// und stellt für angeschlossene Geräte einen MP3-Stream bereit. | Um noch weitere Clients im LAN (oder wahlweise auch weltweit) mit Musik zu versorgen kann man zusätzlich noch einen Streamingserver aufsetzen. Dieser läuft parallel zu //Mopidy// und stellt für angeschlossene Geräte einen MP3-Stream bereit. | ||
| - | ''sudo apt-get install icecast2'' | + | sudo apt-get install icecast2 |