staging.inyokaproject.org

Radiostream mit MPlayer klappt nur manuell, nicht nach Boot

Status: Gelöst | Ubuntu-Version: Lubuntu 20.04 (Focal Fossa)
Antworten |

mangkut

Anmeldungsdatum:
4. Juli 2020

Beiträge: Zähle...

Ich möchte meinen favorisierten Radiosender den ganzen Tag zur Vwerfügung stellen. Derzeit nutze ich einen Soundblaster wirless USB Stick dafür.

Die "Karte" kann man auch per aplay -l ermitteln:

 aplay -l 

card 1: iTunesR [SB for iTunes(R)], device 0: USB Audio [USB Audio] Subdevices: 0/1 Subdevice #0: subdevice #0

Manuell klappt das aber nur manuell im Terminal mit

 mplayer https://liveradio.swr.de/sw282p3/swr3/play.mp3 

oder auch

 mplayer -ao alsa:device=hw=1.0 https://liveradio.swr.de/sw282p3/swr3/play.mp3 

um das audio device direkt zu spezifizieren.

Wenn ich das ganze aber via gnome-session-properties in den autostart setze wird zwar mplayer gestartet (man kann es dann in der processliste finden), aber es erfolgt keine Ausgabe. Ich hatte auch schon ein Script, dass erst den Radiosender anpingt und auf Antwort wartet, auch ohne Erfolg.

Was kann ich tun zum debuggen oder woran kann das liegen.

Ich bin Linux Neuling

Gruß Marcus

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

mangkut schrieb:

es erfolgt keine Ausgabe. Ich hatte auch schon ein Script, dass erst den Radiosender anpingt und auf Antwort wartet, auch ohne Erfolg.

Evtl. schauen ob es eine device-unit für alsa gibt:

systemctl list-units --type=device

und dann das Script mit einer timer-/service-unit (... mit Abhängigkeit von der device-unit) starten.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Könnte mir vorstellen, dass es an den Redirects liegt. Wenn Du den mplayer nicht dazu bringen kannst, location Header auszuwerden, versuch doch mal folgendes:

1
2
3
4
#!/bin/sh

urL=$(curl --silent -IL 'https://liveradio.swr.de/sw282p3/swr3/play.mp3' | sed -n 's#^location: ##p' | tail -1)
mplayer "$url"

mangkut

(Themenstarter)

Anmeldungsdatum:
4. Juli 2020

Beiträge: 24

lubux schrieb:

mangkut schrieb:

es erfolgt keine Ausgabe. Ich hatte auch schon ein Script, dass erst den Radiosender anpingt und auf Antwort wartet, auch ohne Erfolg.

Evtl. schauen ob es eine device-unit für alsa gibt:

systemctl list-units --type=device

und dann das Script mit einer timer-/service-unit (... mit Abhängigkeit von der device-unit) starten.

danke für deine Antwort!

ja gibt es: sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

und dann das Script mit einer timer-/service-unit (... mit Abhängigkeit von der device-unit) starten

das sagts du so einfach 😀

mangkut

(Themenstarter)

Anmeldungsdatum:
4. Juli 2020

Beiträge: 24

rklm schrieb:

Könnte mir vorstellen, dass es an den Redirects liegt. Wenn Du den mplayer nicht dazu bringen kannst, location Header auszuwerden, versuch doch mal folgendes:

1
2
3
4
#!/bin/sh

urL=$(curl --silent -IL 'https://liveradio.swr.de/sw282p3/swr3/play.mp3' | sed -n 's#^location: ##p' | tail -1)
mplayer "$url"

Danke!

das klappt leider auch nicht

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

mangkut schrieb:

ja gibt es: sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

Ist diese Beizeichnung "sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1" fest/persistent? ... oder ändert die sich mit jedem booten?

EDIT:

Hier funktioniert es mit wget:

wget -4 --limit-rate=128k -c  http://liveradio.swr.de/sw282p3/swr3/play.mp3 -q -U "" -O - | buffer -s 512 -b 6 -p 75 | mpg321 --aggressive -
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3.
Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew,
now maintained by Nanakos Chrysostomos and others.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!
tcgetattr(): Inappropriate ioctl for device

Playing MPEG stream from - ...
MPEG 1.0 layer III, 128 kbit/s, 48000 Hz joint-stereo

mangkut

(Themenstarter)

Anmeldungsdatum:
4. Juli 2020

Beiträge: 24

lubux schrieb:

mangkut schrieb:

ja gibt es: sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

Ist diese Beizeichnung "sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1" fest/persistent? ... oder ändert die sich mit jedem booten?

EDIT:

Hier funktioniert es mit wget:

wget -4 --limit-rate=128k -c  http://liveradio.swr.de/sw282p3/swr3/play.mp3 -q -U "" -O - | buffer -s 512 -b 6 -p 75 | mpg321 --aggressive -
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3.
Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew,
now maintained by Nanakos Chrysostomos and others.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!
tcgetattr(): Inappropriate ioctl for device

Playing MPEG stream from - ...
MPEG 1.0 layer III, 128 kbit/s, 48000 Hz joint-stereo

das mit wget funktioniert leider auch nur manuell

die Bezeichnung bleibt immer gleich

sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

ich hatte auch mal sleep 60 probiert um zu warten, bis das system oben ist. Klappt aber auch nicht.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

mangkut schrieb:

die Bezeichnung bleibt immer gleich

sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

Dann versuch mal mit einer usereigenen service-unit, zum starten deines Scriptes, mit u. a. auch:

Requires=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device
After=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

(als Abhängigkeit) in der [Unit]-Section der service-unit. Diese service-unit kannst Du auch manuell ausführen und wenn es funktioniert, kannst Du eine timer-unit schreiben, die die service-unit, z. B. 30 Sekunden nach aktiv-werden der timer-unit, startet.

EDIT:

BTW: Wie ist z. Zt. die Ausgabe von:

sh -x /<Pfad>/<dein-Script>

?

Marantkurz

Anmeldungsdatum:
7. September 2023

Beiträge: 941

Setze das mal an Anfang des Scriptes.(unter bash) Dann in die .log schauen was los ist.

exec 2>> $HOME/autostart.log

Eine Karte angeben ist nur nötig, wenn Diese nicht die Standardausgabe ist. Ist aber die (momentane) Standardausgabe sonst wäre das

mplayer https://liveradio.swr.de/sw282p3/swr3/play.mp3

nicht mit der SB gelaufen. Also

mplayer <Stream>

reicht.

mangkut

(Themenstarter)

Anmeldungsdatum:
4. Juli 2020

Beiträge: 24

lubux schrieb:

mangkut schrieb:

die Bezeichnung bleibt immer gleich

sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

Dann versuch mal mit einer usereigenen service-unit, zum starten deines Scriptes, mit u. a. auch:

Requires=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device
After=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

(als Abhängigkeit) in der [Unit]-Section der service-unit. Diese service-unit kannst Du auch manuell ausführen und wenn es funktioniert, kannst Du eine timer-unit schreiben, die die service-unit, z. B. 30 Sekunden nach aktiv-werden der timer-unit, startet.

EDIT:

BTW: Wie ist z. Zt. die Ausgabe von:

sh -x /<Pfad>/<dein-Script>

?

Danke für deine Hilfe!

Was hab ich als Anfänger ohne viel Ahnung nun gemacht?

Ich hab ein neues Script angelegt ~marcus/start-swr3.sh (deine Lösung zum starten des Streams ist viel besser, das sie nicht nach 6h abbricht, wie beim mplayer)

#!/bin/sh
wget -4 --limit-rate=128k -c  http://liveradio.swr.de/sw282p3/swr3/play.mp3 -q -U "" -O - | buffer -s 512 -b 6 -p 75 | mpg321 --aggressive -

Das habe ich dann das Attribut x gegeben und getestet. Funktioniert!

 sudo chmod +x start-swr3.sh 

Da bei mir kein Verzeichnis systemd und sytemd/user im .config existiert, habe ich beide angelegt und dann die Datei start-swr3.service mit folgendem Inhalt angelegt:

[Unit]
Description=Start SWR3 Stream
Requires=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device
After=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

[Service]
Type=simple
ExecStart=~marcus/start-swr3.sh
Restart=always

[Install]
WantedBy=default.target

Nun habe ich versucht, den Service zu starten

systemctl --user enable start.swr3.service

oder auch

sudo systemctl --user enable start.swr3.service

Leider kommt dann nur der Fehler: Failed to connect to bus: No such file or directory

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

mangkut schrieb:

Da bei mir kein Verzeichnis systemd und sytemd/user im .config existiert, habe ich beide angelegt und dann die Datei start-swr3.service mit folgendem Inhalt angelegt:

[Unit]
Description=Start SWR3 Stream
Requires=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device
After=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

[Service]
Type=simple
ExecStart=~marcus/start-swr3.sh
Restart=always

[Install]
WantedBy=default.target

Versuch mal mit dem absoluten Pfad, statt "~marcus/start-swr3.sh".

... und benutze "systemctl --user enable start-swr3.service" und nicht "systemctl --user enable start.swr3.service".

mangkut

(Themenstarter)

Anmeldungsdatum:
4. Juli 2020

Beiträge: 24

lubux schrieb:

mangkut schrieb:

Da bei mir kein Verzeichnis systemd und sytemd/user im .config existiert, habe ich beide angelegt und dann die Datei start-swr3.service mit folgendem Inhalt angelegt:

[Unit]
Description=Start SWR3 Stream
Requires=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device
After=sys-devices-pci0000:00-0000:00:15.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1.device

[Service]
Type=simple
ExecStart=~marcus/start-swr3.sh
Restart=always

[Install]
WantedBy=default.target

Versuch mal mit dem absoluten Pfad, statt "~marcus/start-swr3.sh".

... und benutze "systemctl --user enable start-swr3.service" und nicht "systemctl --user enable start.swr3.service".

ist schon spät 😀

ExecStart=/home/marcus/start-swr3.sh

dann bekam ich

Failed to enable unit: Unit file /home/marcus/.config/systemd/user/default.target.wants/start-swr3.service does not exist.

Also hab ich noch das Verzeichnis default.target.wants angelegt Dann bekomme ich:

~$ systemctl --user enable start-swr3.service
Failed to enable unit: Access denied

und mit das gleiche mit sudo wieder

~$ sudo systemctl --user enable start-swr3.service
[sudo] password for marcus: 
Failed to connect to bus: No such file or directory

Linux ist schon ne Nervensache 😀

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

mangkut schrieb:

Linux ist schon ne Nervensache

Du musst dich einlesen.
Siehe z. B.: https://wiki.ubuntuusers.de/systemd/User_Units/
https://wiki.ubuntuusers.de/systemd/User_Units/#User-Units-ohne-Anmeldung-starten

EDIT:

BTW: Statt der service-/timer-unit kannst auch mit at und einer user crontab probieren:

sudo apt install at
sudo dpkg --configure -a
sudo systemctl enable atd
sudo systemctl start atd
systemctl status atd

als user:

crontab -e

cronjob:

@reboot echo "/home/marcus/start-swr3.sh" | at now +2 minutes

2 Minuten nach dem booten sollte das Script gestartet werden.
In der user crontab wird die PATH-variable per default nicht gesetzt, d. h. für alle Befehle im Script absolute Pfade benutzen oder die PATH-variable setzen.

mangkut

(Themenstarter)

Anmeldungsdatum:
4. Juli 2020

Beiträge: 24

lubux schrieb:

mangkut schrieb:

Linux ist schon ne Nervensache

Du musst dich einlesen.
Siehe z. B.: https://wiki.ubuntuusers.de/systemd/User_Units/
https://wiki.ubuntuusers.de/systemd/User_Units/#User-Units-ohne-Anmeldung-starten

EDIT:

BTW: Statt der service-/timer-unit kannst auch mit at und einer user crontab probieren:

sudo apt install at
sudo dpkg --configure -a
sudo systemctl enable atd
sudo systemctl start atd
systemctl status atd

als user:

crontab -e

cronjob:

@reboot echo "/home/marcus/start-swr3.sh" | at now +2 minutes

2 Minuten nach dem booten sollte das Script gestartet werden.
In der user crontab wird die PATH-variable per default nicht gesetzt, d. h. für alle Befehle im Script absolute Pfade benutzen oder die PATH-variable setzen.

Ich hab nun den neu angelegten Verzeichnissen die Berechtigung marcus gegeben, anstatt root Nun bekomme ich

$ systemctl --user enable start-swr3.service
Created symlink /home/marcus/.config/systemd/user/default.target.wants/start-swr3.service → /home/marcus/.config/systemd/user/start-swr3.service

Den service kann ich nun manuell starten und ich hab Radio. Das klappt wuderbar.

Das mit der Timer Unit finde ich schon klasse ... funktioniert aber noch nicht

Ich hab ich eine Timer Unit start-swr3.timer angelegt im Verzeichnis /etc/systemd/system

[Unit]
Description=Startet die User Service Unit start-swr3.service 2min nach Boot

[Timer]
OnBootSec=2min
Unit=start-swr3.service

[Install]
WantedBy=multi-user.target

das Laden klappt auch

$ sudo systemctl enable start-swr3.timer
Created symlink /etc/systemd/system/multi-user.target.wants/start-swr3.timer → /etc/systemd/system/start-swr3.timer.

Das Starten nicht

$ sudo systemctl start start-swr3.timer
Job failed. See "journalctl -xe" for details.

und im journalctl:

systemd[1]: start-swr3.timer: Refusing to start, unit start-swr3.service to trigger not loaded.
systemd[1]: Failed to start Startet die User Service Unit start-swr3.service 2min nach Boot.
-- Subject: A start job for unit start-swr3.timer has failed
-- Defined-By: systemd

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

mangkut schrieb:

Das Starten nicht

Wenn die timer-unit den identischen Namen wie die service-unit hat, muss die service-unit nicht in der timer-unit eingetragen werden.
Wenn die service-unit via timer-unit gestartet wird, muss die service-unit deaktiviert (disabled) sein.
Benutze statt "OnBootSec=2min" "OnActiveSec=2min". Die timer-unit muss nur aktiviert sein, Du musst diese nicht manuell starten, denn das passiert nach dem booten automatisch.

Antworten |