Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Smalltalk
Antworten
uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 02.12.2024 06:42:33

In diesem Jahr präsentiere ich euch im Debianforum Adventskalender 2024 im Namen von Santa Claus drei interessante Softwareprodukte und damit Einblicke in die webbasierte Softwareprogrammierung. Der heute vorgestellte Weihnachtsplayer nutzt HTML, CSS, DOM-Strukturen und JavaScript. Der Adventskalender in ein paar Tagen verwendet zusätzlich PHP und die Fetch API zur Interaktion mit einem Webserver, um die Adventskalendertürchen aus der Cloud zu laden. In einem weiteren Türchen stellt euch Santa Claus mit seinem Rentier Rudolph zusammen eine auf Leaflet basierte Navigationssoftware für die Verteilung von Weihnachtsgeschenken mit dem Weihnachtsschlitten vor.

Weihnachtsplayer
Beim Weihnachtsplayer handelt es sich um einen webbasierten Player zum Abspielen von weihnachtlichen Radiostreams. Santa Claus hat nämlich kein Spotify, mocp (Debianmoc) oder Audials Play, sondern nur vorausgewählte Internet-Streams mit Weihnachtsliedern in einem Browser mit einer Software, die er selbst geschrieben hat. So kann er die Weihnachtssender mit seinem Browser überall mit hin nehmen. Der Weihnachtsplayer hat einen Lautstärkeregler, jeder Radiostream wird über einen Button repräsentiert und zusätzlich hat Santa Claus einen SleepTimer eingebaut. Aktuell hört er FFN Tannenbaum.

5206

Der Weihnachtsplayer ist wie jedes HTML-Programm aufgebaut. Interessant sind der CSS-Teil, der Haupt-Teil sowie der JavaScript-Teil.

Code: Alles auswählen

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <title>Weihnachtsplayer</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="Weihnachtsplayer">    
<style>
        /* CSS-Teil*/
    </style>
</head>
<body>
<!—Haupt-Teil -->
    <script>
        // JavaScript-Teil
    </script>
</body>
</html>
CSS-Teil
CSS definiert diverse Gestaltungselemente wie Typografie, Farbgebung, Schaltflächen und Steuerelemente. Strukturelle Komponenten wie Container sorgen für eine klare Anordnung. Mittels CSS Grid und Media Queries wird eine responsive Darstellung realisiert, die sich unterschiedlichen Bildschirmgrößen anpasst. Als Alternativen hätte Santa Claus auch FlexBox, W3.CSS oder responsive Frameworks wie Bootstrap nutzen können.

Verwendet werden die folgenden CSS-Elemente:

Code: Alles auswählen

:root, *, body, #container, h1, #volume, #timer, #volumeControl, #timerControl, #streamContainer, .button, .button.active, #green-border, @media (min-width: 600px), @media (min-width: 900px), @media (min-width: 1200px)

Auf die genauere Konfiguration der einzelnen Elemente möchte Santa Claus nicht eingehen, da das Hauptaugenmerk auf JavaScript gelegt wird. Unterschieden wird vor allen zwischen CSS-Klassen (.) und CSS-Objekte (#). Die Verwendung von CSS-Objekten ist dann sinnvoll, wenn es dieses Objekt genau einmal existiert. Interessant vor allem für die JavaScript-Funktionen sind die Variablen #volume und #volumeControl für den Lautstärkeregler, #timer und #timerControl für den SleepTimer sowie #streamContainer für die Erstellung und Steuerung der Button für die in diesem Beispiel 24 Radio-Streams.

Haupt-Teil
Der Haupt-Teil umfasst das zentrale Container-Objekt #container mit #green-border als grüne Umrandung. Diese grüne Umrandung enthält die Überschrift <h1>, den Lautstärkeregler #volume, die Stream-Button #streamContainer sowie den SleepTimer #timer.

Code: Alles auswählen

<main id="container">
         <div id="green-border">
            <h1>&#127876; Weihnachtsplayer &#127876;</h1>
            <div id="volume">
               <input type="range" id="volumeControl" min="0" max="100" step="1" value="50">
            </div>
            <ul id="streamContainer"></ul>
            <div id="timer">
               <input type="range" id="timerControl" min="0" max="30" step="1" value="0">
            </div>
         </div>
 </main>
<audio id="audioPlayer"></audio>
 
Lautstärkeregler und SleepTimer umfassen einen Bereich von 0 bis 100 (%) bzw. 0 bis 30 (Minuten). Interessanter ist die dynamische Erweiterung des streamContainer durch JavaScript

Code: Alles auswählen

<ul id="streamContainer">
                <li><button class="button" data-url="https://0n-christmas.radionetz.de/0n-christmas.aac">0N - Christmas</button></li>
</ul>
<ul><li></li></ul> definiert die Radiosender als eine Art Liste. Alternativ hätte Santa Claus jedoch auch <div>, <article>, <section> oder eine eigene CSS-Klasse verwenden können.

<body> enthält abschließend noch das HTML5-Objekt <audio id="audioPlayer"></audio>, welches ein nicht sichtbares Audio-Element ist, welches durch JavaScript erzeugt und gesteuert wird.

DOM
Das Document Object Model (DOM) (Wikipedia) ist eine standardisierte Programmierschnittstelle für HTML- und XML-Dokumente. Es stellt Webseiten als hierarchische, navigierbare Baumstruktur dar. Das DOM fungiert als Bindeglied zwischen statischem HTML und dynamischem JavaScript. Es ermöglicht JavaScript auf alle Elemente zuzugreifen und diese ohne Neuladen der Seite zu manipulieren. Zudem stellt das DOM eine Schnittstelle für Event Listener bereit. Hierdurch können statische Webseiten in interaktive, dynamische Anwendungen umgewandelt werden.

In unserem Programmbeispiel sieht die DOM-Struktur so aus:

Code: Alles auswählen

<!DOCTYPE html>
html (lang="de")
│
├── head
│   │
│   ├── meta (charset="UTF-8")
│   ├── title
│   ├── meta (name="viewport")
│   ├── meta (name="description")
│   │
│   └── style
│       └── (CSS-Regeln)
│
└── body
    │
    ├── main#container
    │   │
    │   └── div#green-border
    │       │
    │       ├── h1
    │       │
    │       ├── div#volume
    │       │   └── input#volumeControl
    │       │
    │       ├── ul#streamContainer
    │       │   ├── li
    │       │   │   └── button.button
    │       │   ├── li
    │       │   │   └── button.button
    │       │   └── ... (weitere li-Elemente für jeden Stream)
    │       │
    │       └── div#timer
    │           └── input#timerControl
    │
    ├── audio#audioPlayer
    │
    └── script (defer)
        └── (JavaScript-Code)

Initialisierung JavaScript-Variablen und JavaScript-Objekte:

Code: Alles auswählen

<script defer>
 
const STREAMS = [

    { "name": "0N - Christmas", "url": "https://0n-christmas.radionetz.de/0n-christmas.aac" },
// im Beispiel weitere 22 Streams
    { "name": "Krasse Weihnachten by Rautemusik", "url": "https://rautemusik-de-hz-fal-stream17.radiohost.de/weihnachten" }
];
const INITIAL_VOLUME = 0.5;
const MAX_SLEEP_TIMER = 30;
let currentVolume = INITIAL_VOLUME;
let sleepTimerInterval;
let sleepTimerEndTime;

const audioPlayer = document.getElementById('audioPlayer');
const volumeControl = document.getElementById('volumeControl');
const sleepTimer = document.getElementById('sleepTimer');
const streamContainer = document.getElementById('streamContainer');

volumeControl.value = INITIAL_VOLUME * 100;
sleepTimer.value = 0;
Zu Beginn werden Variablen initialisiert. audioPlayer, volumeControl, sleepTimer und streamContainer sind hierbei Variablen auf Referenzen von DOM-Elementen oder kürzer DOM-Elemente. audioPlayer ist vom Typ HTMLAudioElement, volumeControl und sleepTimer sind vom Typ HTMLInputElement und streamContainer ist vom Typ HTMLUListElement. Das Programm verwendet globale Variablen wie z. B. den JavaScript-Array STREAMS. Das ist nicht unbedingt Best Practice vereinfacht aber ein wenig den JavaScript-Code.


Hauptprogramm

Code: Alles auswählen

document.addEventListener('DOMContentLoaded', () => {
    SantasCreateStreamButtons();
    volumeControl.addEventListener('input', function() {
        SantasSetVolume(this.value);
    });
    timerControl.addEventListener('input', function() {
        SantasSetSleepTimer(parseInt(this.value));
    });
    streamContainer.addEventListener('click', function(event) {
        const button = event.target.closest('.button');
        if (button) {
            const url = button.dataset.url;
            SantasStartOrStopStream(event, url);
        }
    });
});
Das Programm verfügt über insgesamt vier Event Listener. Ein Event Listener wartet auf ein bestimmtes Ereignis (wie einen Mausklick oder eine Tastatureingabe) und führt dann eine definierte Funktion aus, wenn dieses Ereignis eintritt.

Der erste Event Listener wird ausgeführt, wenn DOM vollständig geladen ist ('DOMContentLoaded'). Mit der Funktion SantasCreateStreamButtons() werden die Button erstellt, welches kein Event Listener ist. Anschließend werden die drei weitere Event Listener für den Lautstärkeregler, den SleepTimer-Regler sowie für die Button-Steuerung aktiviert.

Weiter unten gehen wir vor allen auf den letzten Event-Listener ein, da das Click-Event für die Button die Hauptfunktion des Weihnachtsplayers ist. Tritt das Ereignis ein wird an die Funktion SantasStartOrStopStream (event, url) das Event sowie der Wert button.dataset.url also die URL des angeklickten Buttons übergeben.

DOM um Radiosender erweitern

Code: Alles auswählen

function SantasCreateStreamButtons() {
    streams.forEach(stream => {
        const li = document.createElement('li');
        li.appendChild(SantasCreateButton(stream));
        streamContainer.appendChild(li);
    });
}

function SantasCreateButton(stream) {
    const button = document.createElement('button');
    button.classList.add('button');
    button.dataset.url = stream.url;
    button.innerHTML = stream.name.length > 16 ? stream.name.slice(0, 16) + '...' : stream.name;
    return button;
}
Vor der Aktivierung der drei Event Listener wird mit SantasCreateStreamButtons() der DOM und damit das vom Browser verarbeitete HTML um die einzelnen Streams erweitert.

Wie oben beschrieben ist streamContainer im HTML bzw. DOM definiert:

Code: Alles auswählen

<ul id="streamContainer"></ul>
const streamContainer = document.getElementById('streamContainer');
Über die Variable streamContainer hat JavaScript Zugriff auf diesen Teil der DOM-Struktur. Wie oben beschrieben ist streamContainer vom Typ HTMLUListElement und enthält <ul></ul>. Auf Basis der Streamliste STREAMS wird die DOM-Struktur für <ul></ul> um <li></li> für jeden einzelnen Radiosender erweitert. Die Funktion SantasCreateStreamButtons() durchläuft alle Streams und fügt <li></li> hinzu (streamContainer.appendChild(li) ). Innerhalb von <li></li> ist wiederum ein <button></button> enthalten, welches mit SantasCreateButton(stream) erzeugt wird.

Code: Alles auswählen

<ul id="streamContainer">
  <li><button class="button" data-url="https://0n-christmas.radionetz.de/0n-christmas.aac">0N - Christmas</button></li>           
</ul>
Lautstärke und SleepTimer:

Code: Alles auswählen

function SantasSetVolume(value) {
    currentVolume = value / 100;
    audioPlayer.volume = currentVolume;
}
Diese Funktion setzt die Lautstärke

Code: Alles auswählen

function SantasUpdateSleepTimer() {
  if (!sleepTimerEndTime) {
    clearInterval(sleepTimerInterval);
    sleepTimerInterval = null;
    return;
  }

  const remainingTime = Math.max(0, sleepTimerEndTime - Date.now());
  timerControl.value = Math.ceil(remainingTime / 60000);

  if (remainingTime <= 0) {
    clearInterval(sleepTimerInterval);
    sleepTimerInterval = null;
    sleepTimerEndTime = null;
    SantasStopAllStreams();
    timerControl.value = 0;
  }
}

function SantasSetSleepTimer(minutes) {
  clearInterval(sleepTimerInterval);
  sleepTimerInterval = null;
  
  if (minutes === 0) {
    sleepTimerEndTime = null;
    timerControl.value = 0;
    return;
  }
  
  sleepTimerEndTime = Date.now() + minutes * 60 * 1000;
  sleepTimerInterval = setInterval(SantasUpdateSleepTimer, 1000);
}
Diese Funktionen aktualisieren bzw. initialisieren den SleepTimer. Um Hintergrundanfragen bei nicht Nichtverwendung des SleepTimers zu unterbinden, wird er in diesen Fall auf „null“ gesetzt. Die Aktualisierung des SleepTimers verfolgt aktuell jede Sekunde. Anzumerken ist, dass setInterval statt requestAnimationFrame verwendet wird, damit der SleepTimer auch bei deaktiviertem Display funktioniert. Die verwendete JavaScript-Funktion „SantasStopAllStreams()“ beim Ablauf des Timers wird weiter unten erklärt.

Starten oder Stoppen von Radio-Streams

Code: Alles auswählen

function SantasStopAllStreams() {
    audioPlayer.pause();
    audioPlayer.currentTime = 0;
    audioPlayer.src = '';
    const buttons = Array.from(document.querySelectorAll('.button'));
    buttons.forEach(btn => {
        btn.classList.remove('active');
    });
}

function SantasStartOrStopStream(event, url) {
    const clickedButton = event.target.closest('[data-url]');
    const currentButtonPlaying = audioPlayer.src === url && !audioPlayer.paused;
    SantasStopAllStreams();
    if (!currentButtonPlaying) {
        audioPlayer.src = url;
        audioPlayer.volume = currentVolume;
        audioPlayer.play().then(() => {
            clickedButton.classList.add('active');
        });
    }
}
Die Funktion SantasStartOrStopStream(event, url) ist die Hauptfunktion des Weihnachtsplayers. Gesteuert durch das Click-Event wird für den Button mit button.dataset.url die URL ermittelt. Egal ob ein Radiosender aktiviert, deaktiviert oder gewechselt wird, werden sicherheitshalber zuvor alle (eigentlich nur ein Stream) über die Funktion SantasStopAllStreams() gestoppt. Wenn zuvor der angeklickte Stream nicht aktiv war, wird er gestartet.

Gesamtcode
Der Gesamtcode aus HTML, CSS und JavaScript stellt einen Radio-Player auf Basis von JavaScript bereit. Die Button des Weihnachtsplayer werden dynamisch aus einer Liste aufgebaut. Die Sender können leicht gestartet, gestoppt und gewechselt werden. Es kann die Lautstärke verändert und ein SleepTimer mit 30 Minuten genutzt werden. Bei Interesse könnt ihr den Gesamtcode NoPaste-Eintrag42261 als weihnachtsplayer.html lokal auf eurem Rechner oder auf einen Webserver speichern. Natürlich könnt ihr sowohl die Senderliste als auch das Design anpassen. So kann man z. B. den Player in einen Klassikplayer umbauen, der unterschiedliche Klassiksender spielt siehe Diskussion hier.

Ich hoffe euch hat der Weihnachtsplayer von Santa Claus gefallen. Hört ihr in der Weihnachtszeit Weihnachtslieder? Hört ihr auch Radiosender oder Radio-Streams? Welche Radiosender hört ihr?

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von Liffi » 02.12.2024 08:12:40

:hail: Großartig. Kein großes Framework benutzt, einfach die schon vorhandenen Fähigkeiten des Browsers. Sowohl CSS als auch HTML und JavaScript sind gut verständlich und zeigen, dass man mit gutem Code schon schnell gute Ergebnisse und Applikationen erzeugen kann. Dazu läuft noch alles lokal (ja, gut, die Sender müssen natürlich gestreamt werden :-)).
uname hat geschrieben: ↑ zum Beitrag ↑
02.12.2024 06:42:33
Hört ihr in der Weihnachtszeit Weihnachtslieder? Hört ihr auch Radiosender oder Radio-Streams? Welche Radiosender hört ihr?
Ich höre vorwiegend dann Weihnachtsmusik, wenn ich mit meiner Frau im Auto bin. Und wenn es draußen schön kalt ist und ein paar Flock am Himmel sind, genieße ich das auch. Da aber überwiegend von Platte vom Handy.

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von whisper » 02.12.2024 10:41:26

Jo, wirklich gute Idee und Umsetzung!
Ich bin Radio Bob Hörer, wenn mal Bedarf für Xmas sein sollte gibt es ja den Stream.
Der ist ja bereits in der Liste.
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 02.12.2024 13:18:21

Danke für das Lob von euch beiden.
whisper hat geschrieben:Ich bin Radio Bob Hörer, wenn mal Bedarf für Xmas sein sollte gibt es ja den Stream.
Der ist ja bereits in der Liste.
Oder du nimmst einfach alle RadioBOB!-Sender siehe NoPaste-Eintrag42262. :mrgreen:

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von whisper » 02.12.2024 13:52:06

uname hat geschrieben: ↑ zum Beitrag ↑
02.12.2024 13:18:21
Oder du nimmst einfach alle RadioBOB!-Sender siehe NoPaste-Eintrag42262. :mrgreen:
Im Wohnzimmer kann ich sowieso Dab und Internet Streams hören, und einige der RB Streams liegen auf Favoriten.
Aber als Demo, was man so alles mit 'nem Browser anstellen kann, ist dein „Player" einfach perfekt.
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 02.12.2024 16:16:19

whisper hat geschrieben:Im Wohnzimmer kann ich sowieso Dab und Internet Streams hören
Ich habe kein DAB+ - Radio. Ich mache mir wenig Hoffnung Radio BOB! über DAB+ zu empfangen, da Radio BOB! über den Ersten Bundesmux 5C und nicht über meinen Landesweiten Multiplex 10A sendet. Auch ist die Verwendung des alten VHF-Band III in Innenräumen nicht ideal, wobei 5C mit 178,352 MHz noch ziemlich vorne im Frequenzband liegt. 10A liegt sogar bei 209,936 MHz. Da höre ich lieber über UKW jedoch kein Radio BOB!. Radio BOB! empfange ich somit nur über Internet.

https://de.wikipedia.org/wiki/Liste_der ... eutschland
https://www.dabplus.de/empfang
https://dabmap.nicocoweb.de
Zuletzt geändert von uname am 02.12.2024 16:39:00, insgesamt 1-mal geändert.

Benutzeravatar
ralli
Beiträge: 4380
Registriert: 02.03.2008 08:03:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von ralli » 02.12.2024 16:35:53

Suuuupiii, und Chapeau! :THX:

Es wird sofort mein Lieblingsplayer. Funktioniert einwandfrei. Ich werde mal den Code studieren, um zu lernen ....

Klassik ist auch dabei! :hail:

Gruß ralli

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 02.12.2024 16:40:10

Toll, dass der Player dir gefällt. Du kannst z. B. Klassik-Sender über https://fmstream.org/index.php?s=Klassik suchen, die URLs in das JavaScript-Array kopieren und du hast den gestern versprochenen Klassikplayer mit vielen Klassik-Radiosendern.

Code: Alles auswählen

const STREAMS = [
{ name: "Klassik Radio - Christmas", url: "https://stream.klassikradio.de/christmas/mp3-128" },
{ name: "Klassik1", url: "https://icepool.silvacast.com/KLASSIK1.mp3" },
{ name: "MDR Klassik", url: "https://mdr-284350-0.sslcast.mdr.de/mdr/284350/0/mp3/high/stream.mp3" },  
];

Benutzeravatar
ralli
Beiträge: 4380
Registriert: 02.03.2008 08:03:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von ralli » 02.12.2024 16:53:17

Danke! Das ist ja perfekt!

Gruß ralli

Benutzeravatar
ralli
Beiträge: 4380
Registriert: 02.03.2008 08:03:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von ralli » 02.12.2024 16:56:30

Wo für ist denn der untere Schieberegler?

Gruß ralli

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von whisper » 02.12.2024 17:46:59

Die Zeit bis zum Ausschalten?
Hier fehlt eine Anmerkung ...
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 02.12.2024 18:30:36

Such "SleepTimer" im ersten Beitrag. Defaultmäßig nicht aktiviert. Maximal 30 Minuten. Er läuft Richtung Null und bei Null geht der Weihnachtsplayer aus. Hätte ich besser beschreiben können. Ich dachte es wäre logisch und Beschriftungen an den Reglern mag ich nicht.

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von whisper » 02.12.2024 18:49:25

uname hat geschrieben: ↑ zum Beitrag ↑
02.12.2024 18:30:36
und Beschriftungen an den Reglern mag ich nicht.
:P Ziemlich ungewöhnlich! :mrgreen:
Aber okay !
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 02.12.2024 19:02:58

Wozu sollte man die Kennzeichnung brauchen? Wer die Senderliste anpasst, kann doch kurz den Quellcode durchschauen. :mrgreen:

Aber erweitert die Software gerne um eine Markierung und postet es hier. Auch kann man das Weihnachs-Design entfernen. Grüner Rand, Überschrift, Weihnachtsbäume und die Farben rot und grün braucht man auch nicht.

chrbr
Beiträge: 624
Registriert: 29.10.2022 15:53:26

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von chrbr » 02.12.2024 21:33:28

Hallo uname,
erst einmal sage ich Danke für Dein Türchen! Ich muss zugeben, dass ich von der Technik dahinter keine Ahnung habe. Ich hoffe, Du verzeihst mir die folgende Frage.

Früher(TM) konnte man mit mplayer Webradio-Streams hören. Nach meinem Verständnis brauch man heute die Funktionalität mit Java usw, die Du hier beschrieben hast, damit man dem Webradio Befehle geben kann.

Wäre es auch möglich, Deine Funktionen zu verwenden, den Stream aber mit mplayer oder ähnlich abzuspielen? Wenn ja, wie ginge das? Das wäre dann ein Kommandozeilen-Webradio.
Viele Grüße,
Christoph

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 02.12.2024 22:02:30

Java ist nicht JavaScript. Aber Browser können clientseitig viel mit JavaScript wie z.B. der Weihnachtsplayer zeigt. Ganze Spiele oder interaktive Karten wurden mit JavaScript geschrieben. Es folgt dafür noch ein Türchen mit Leaflet und der Schlittenfahrt von Santa Claus und Rudolph, wo eine interaktive Karte mit JavaScript erzeugt wird.

Aber relevant ist das alles nicht für Radio-Streaming. Ohne Browser kann man z.B mplayer nutzen. Benutze ich auch neben mocp und Audials Play. Ich kann morgen wohl mal schauen, ob man mehrere Streams mit mplayer oder mocp verwalten kann.

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 07.12.2024 10:17:51

chrbr hat geschrieben:Wäre es auch möglich, Deine Funktionen zu verwenden, den Stream aber mit mplayer oder ähnlich abzuspielen? Wenn ja, wie ginge das? Das wäre dann ein Kommandozeilen-Webradio.
uname hat geschrieben:Ich kann morgen wohl mal schauen, ob man mehrere Streams mit mplayer oder mocp verwalten kann.
Leider hat sich meine Antwort verzögert, da ich erst heute Zeit hatte. Man kann ein Shellscript schreiben. Ich verwende aber den Ncurses-Player Music On Console (MOC). Für die Funktion müssen die Pakete Debianmoc und Debianmoc-ffmpeg-plugin installiert werden. Streams können evtl. auch direkt geladen werden. Sinnvoller ist aber die Verwendung einer m3u-Datei wie in meinen Beispielen unten. Der ganze HTML-Code meines Adventskalender-Türchen ist dann natürlich nicht notwendig.


mocp hat viele Funktionen siehe auch MOC - music on console (Ubuntuusers Wiki). Viele Benutzer spielen damit wahrscheinlich nur ihre MP3-Dateien ab. Du kannst nun links zu der m3u-Datei (Beispiele siehe unten) wechseln und wenn du sie öffnest, werden die Internetstreams rechts angezeigt. Beachte, dass du beim Beenden erst "s" für Beenden des Streams und dann "q" für das Beenden von mocp benutzt. "mocp" läuft sogar in Debiantmux- und Debianscreen-Sitzungen.

Aufruf auf der Kommandozeile: 5225


/home/username/Musik/weihnachtsplayer.m3u

Code: Alles auswählen

#EXTM3U
#EXTINF:-1, 0N - Weihnachten
https://0n-weihnachten.radionetz.de/0n-weihnachten.mp3
#EXTINF:-1, 1A Weihnachten
https://1a-weihnachten.radionetz.de/1a-weihnachten.mp3
#EXTINF:-1, 89.0 RTL - X-MAS
https://stream.89.0rtl.de/christmas/mp3-256
#EXTINF:-1, Antenne Bayern - Weihnachtshits
https://s6-webradio.antenne.de/weihnachts-hits
#EXTINF:-1, Antenne MV - Cool Christmas
https://streams.antennemv.de/amv-christmas/mp3-128
#EXTINF:-1, Antenne Niedersachsen - X-Mas
https://stream.antenne.com/antenne-nds-event01/mp3-128
#EXTINF:-1, Antenne Thüringen - Weihnachtshits
https://edge21.streamonkey.net/antthue-weihnachtshits/stream/mp3?aggregator=rewrite
#EXTINF:-1, Bob! - Christmas
http://streams.radiobob.de/bob-christmas/mp3-192/mediaplayer/
#EXTINF:-1, Dein Weihnachtsradio
https://addrad.io/4455stj
#EXTINF:-1, Ego - ego Snow FM
https://egofm-snow.cast.addradio.de/egofm/snow/mp3/high/stream.mp3
#EXTINF:-1, FFN Tannenbaum
https://ffn-de-hz-fal-stream02-cluster01.radiohost.de/tannenbaum_mp3-192
#EXTINF:-1, Hamburg ZWEI Weihnachtssongs Nonstop
https://edge11.streamonkey.net/hh2-weihnachten
#EXTINF:-1, Harmony Weihnachten
https://mp3.harmonyfm.de/hrmplus/hqxmas.mp3
#EXTINF:-1, Hit Radio FFH
https://mp3.ffh.de/ffhplus/hqxmas.mp3
#EXTINF:-1, Hit Radio N1 Weihnachtsradio
https://edge59.streamonkey.net/fhn-hitradion1weihnachten/stream/mp3
#EXTINF:-1, Hitradio Antenne 1 - Weihnachtshits
https://stream.antenne1.de/weihnachtshits/livestream1.aac
#EXTINF:-1, Hitradio Buxtehude Christmas
https://stream.hitradio-buxtehude.de/hitradio-buxtehude-christmas
#EXTINF:-1, HITRADIO RTL - Weihnachtsradio
https://hermes.bcs-systems.de/hitradio-rtl_XMAS_192k_mp3
#EXTINF:-1, Klassik Radio - Christmas
https://stream.klassikradio.de/christmas/mp3-128
#EXTINF:-1, Krasse Weihnachten by Rautemusik
https://rautemusik-de-hz-fal-stream17.radiohost.de/weihnachten
#EXTINF:-1, Landeswelle Thüringen - Weihnachtswelle
https://edge61.streamonkey.net/landeswelle-weihnachtswelle?aggregator=rewrite/mp3-192
#EXTINF:-1, Ostseewelle - Weihnachtshits
https://streamosw.ir-media-tec.com/weihnachtshits/mp3-128
#EXTINF:-1, RSA - Weihnachtsradio
https://streams.rsa-sachsen.de/rsa-event01/mp3-128
#EXTINF:-1, Radio Charivari - X-Mas
https://rs24.stream24.net/x-mas

/home/username/Musik/klassik.m3u

Code: Alles auswählen

#EXTM3U
#EXTINF:-2, Klassik Radio - Christmas
https://stream.klassikradio.de/christmas/mp3-128
#EXTINF:-1, Klassik1
https://icepool.silvacast.com/KLASSIK1.mp3
#EXTINF:-1, MDR Klassik
https://mdr-284350-0.sslcast.mdr.de/mdr/284350/0/mp3/high/stream.mp3

chrbr
Beiträge: 624
Registriert: 29.10.2022 15:53:26

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von chrbr » 07.12.2024 10:50:03

uname hat geschrieben: ↑ zum Beitrag ↑
07.12.2024 10:17:51
Leider hat sich meine Antwort verzögert, da ich erst heute Zeit hatte. Man kann ein Shellscript schreiben. Ich verwende aber den Ncurses-Player Music On Console (MOC). Für die Funktion müssen die Pakete Debianmoc und Debianmoc-ffmpeg-plugin installiert werden. Streams können evtl. auch direkt geladen werden. Sinnvoller ist aber die Verwendung einer m3u-Datei wie in meinen Beispielen unten. Der ganze HTML-Code meines Adventskalender-Türchen ist dann natürlich nicht notwendig.
Vielen Dank für die ausführliche Antwort. Den Ncurses-Player werde ich auf jeden Fall mal ausprobieren. Die Wiki-Seite motiviert auch. Mit Deinem HTML-Code werde ich mich auch mal befassen. Da habe ich große Wissenslücken.
Nochmals vielen Dank,
Christoph

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 07.12.2024 11:06:30

Danke für deine Rückmeldung. Sowohl mocp als auch JavaScript lohnen sich.

Falls du zufällig Debianopenbox als Window-Manager nutzt, könnte ich dir noch meine menu.xml-Lösung anbieten. In der Auswahl startet man ganz einfach den Stream mit mplayer und zudem gibt es einen Eintrag, um alle mplayer-Streams zu beenden. Ist aber eigentlich nicht textuell.

/etc/xdg/openbox/menu.xml oder /home/user/.config/openbox/menu.xml

Code: Alles auswählen

		<item label="FFN Tannenbaum">
			<action name="Execute">
				<execute>
					/usr/bin/mplayer -really-quiet -prefer-ipv4 https://ffn-de-hz-fal-stream02-cluster01.radiohost.de/tannenbaum_mp3-192
				</execute>
			</action>
		</item>
		<item label="Radio beenden">
			<action name="Execute">
				<execute>
					/usr/bin/killall mplayer
				</execute>
			</action>
		</item>

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 16.12.2024 12:32:40

Ich habe noch ein kleines Update zum Weihnachtsplayer. Ich habe das CSS so geändert, dass die Rahmen der Button immer schwarz sind. Hierfür habe ich den Code neu hochgeladen: NoPaste-Eintrag42268

Darstellung mit schwarzen Rahmen

5241

Die Änderung habe ich vor allen gemacht, da ich selbst weißen Inhalt mit schwarzem Rand für inaktive Button und grünen Inhalt nun auch mit schwarzen Rändern für aktive Button verwende. Das sah vorher etwas komisch aus.

In meinem ähnlichen Beitrag Adventskalender 14. Dezember 2024 - Fetch API - der Adventskalender von Santa Claus habe ich für die Kalendertürchen diese Änderung nicht durchgeführt.

Benutzeravatar
ralli
Beiträge: 4380
Registriert: 02.03.2008 08:03:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von ralli » 16.12.2024 13:57:53

Danke, das gefällt mir noch besser.

Gruß ralli

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 2. Dezember 2024 - HTML, CSS, JavaScript - der Weihnachtsplayer von Santa Claus

Beitrag von uname » 27.12.2024 07:22:21

Leider ist Weihnachten schon wieder vorbei. Daher hier nun der Radioplayer NoPaste-Eintrag42291 ohne Weihnachts-Design. Gerne könnt ihr die Senderliste selbst anpassen.

5302

Antworten