rndce
Well-Known Member
Mình update # 3 lên smpd 0.9.6:Học từ bài của anh @tml3nr , thanks anh!
SMPD 0.96 Update #3
Các bác đam mê cải tiến SMPD có thể theo cách sau để tối ưu hệ thống tắt các service khi đang play TC.
Lệnh kiểm tra TC
Khi TC đang idle, kết quả là số 14Mã:pgrep -wc tidal_connect
Khi TC có phone kết nối, kết quả là số 16
Khi TC đang play, kết quả là số 17
Nhờ vào điều trên mình làm 2 việc:
1. Mod lại file /home/pi/misc/ympd_event.sh
Những phần mod:
#START ADDON
#STOP ADDON
#CHECK PLAY (2 vị trí)
---------
Mã:#!/bin/bash urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } parse() { echo `cat "$1" | sed -n "s/^[ \t]*$2[ \t]*[=]*[ \t]*//p" | head -n1 | sed -e "s/\"//g"` } case "$1" in r) # read conf (plain text) parse $2 $3 ;; w) # write conf tmp=$(urldecode "$3") if [[ $tmp == *=* ]];then key=`echo $tmp | cut -f1 -d'='` val=`echo $tmp | cut -f2 -d'='` else key=$tmp val="" fi if [ "$key" = "" ];then echo error elif [ "$val" = "" ];then # read parse $2 $key else # write line=`grep -nE "^\s*$key(\s|=)+" "$2" | head -n1 |sed -e 's/:.*//g'` echo $2 $key $val $line sed -i -e "$line s|\(^\s*$key\s*[\s|=|\"]\{1\}\s*\)[^\"]*\(\"*\)|\1$val\2|" "$2" sync fi ;; p) # list plugins (json) TARGET=.$2 cd /home/pi/plugins CMD="" i=0 for dir in `ls -d $TARGET/*` do CMD=$CMD'.['$i'].path="'$dir'"|' let ++i done CMD=$CMD. cat $TARGET/*/app.json|jq -s -c '.'| jq $CMD ;; isolate) systemd-run --nice=19 systemctl stop spotifyd systemd-run --nice=19 systemctl stop shairport-sync systemd-run --nice=19 systemctl stop tidal systemd-run --nice=19 systemctl stop aprenderer systemd-run --nice=19 systemctl stop minidlna #systemd-run --nice=19 systemctl stop upmpdcli sleep 0.4 ;; #STOP ADDON addon-stop) systemd-run --nice=19 systemctl stop shairport-sync systemd-run --nice=19 systemctl stop aprenderer systemd-run --nice=19 systemctl stop minidlna #systemd-run --nice=19 systemctl stop upmpdcli sleep 1 systemctl start soundcheck.service sleep 1 systemctl stop ympd systemctl stop ympd.socket systemctl stop mpd umount /var/lib/mpd/music/NAS/* sync sleep 0.4 exit ;; ###### END STOP ADDON ###### #START ADDON addon-start) sleep 2 if [ "`pgrep -wc tidal_connect`" = "16" ];then #echo "It's start addon" systemctl start ympd.socket mount -a systemctl start mpd systemctl start shairport-sync systemctl start aprenderer systemctl start minidlna fi sync sleep 0.4 exit ;; ###### END START ADDON ###### stop-avahi) #systemd-run --nice=19 systemctl stop avahi-daemon #systemd-run --nice=19 systemctl stop avahi-daemon.socket sleep 0.4 ;; pause) #CHECK PLAY if [ "`pgrep -wc tidal_connect`" = "17" ];then echo "It's play" systemd-run /home/pi/misc/ympd_event.sh addon-stop fi ###### END CHECK PLAY ###### if [ "`pidof spotifyd`" = "" ];then if [ `journalctl -u spotifyd|grep "Authenticated as" | wc -l` -gt 0 ];then systemd-run /home/pi/misc/ympd_event.sh spotifyd-start fi fi ;; spotifyd-start) sleep 2 systemctl start spotifyd ;; stop) if [ $(mpc|grep "\[playing\]"|wc -l) = 1 -o $(mpc|grep "\[paused\]"|wc -l) = 1 ];then exit fi #CHECK PLAY if [ "`pgrep -wc tidal_connect`" = "17" ];then echo "It's play" systemd-run /home/pi/misc/ympd_event.sh addon-stop fi ###### END CHECK PLAY ###### if [ "`pidof spotifyd`" = "" ];then if [ `journalctl -u spotifyd|grep "Authenticated as" | wc -l` -gt 0 ];then systemd-run /home/pi/misc/ympd_event.sh spotifyd-start fi fi ;; browse) ls /var/lib/mpd/music/RAM/* >/dev/null 2>&1 if [ $? -eq 0 ]; then mpc update RAM fi ;; dashboard) /home/pi/util-plot.sh /home/pi/util-dashboard.sh ;; esac exit
2. Tạo thêm file soundcheck (Không enable service)
Mã:sudo nano /lib/systemd/system/soundcheck.service
Mã:[Unit] Description=Sound check for Addon After=sound.target [Service] Type=simple ExecStart=/home/pi/misc/ympd_event.sh addon-start Restart=always StartLimitInterval=5 User=root Group=root [Install] WantedBy=multi-user.target
Mã:sudo chmod -R 777 /lib/systemd/system/soundcheck.service sudo reboot
Kết quả việc này là khi bấm play TC, giao diện YMPD, MPD, AP, DLNA... sẽ tắt đi.
Khi stop TC thì những cái trên tự động bật trở lại.
Các bác test thử nhé! Hy vọng con đường này sáng sủa.
--------
Nếu không muốn chỉnh code, các bác download mấy file này, dùng WinSCP copy vào thư mục /tmp/ rồi chạy từng dòng sau:
Mã:sudo tar -xf /tmp/ympd.tgz --overwrite -C /home/pi/misc/ sudo tar -xf /tmp/configs.tgz --overwrite -C /home/pi/configs/ sudo tar -xf /tmp/soundcheck.tgz --overwrite -C /lib/systemd/system/ sudo tar -xf /tmp/service.tgz --overwrite -C /etc/systemd/system/
https://drive.google.com/drive/folders/1KSxHF75me0sdcqSSQmx32bDSpt25h4Zo?usp=sharing
- Chiều thuận: Tidal stream qua Smpd ok, webUI bị vô hiệu, dừng Tidal WebUI sống lại nghe nhạc Offline qua NAS ok.
- Chiều ngược lại, play nhạc Offline, dừng để nghe Tidal stream qua, chờ hoài ko thấy Tidal service sống lại.
Kiểm tra Tidal.service khi dừng nhạc offline, ra kết quả như dưới :
Mã:
symphonic-mpd
pi@smpd:~ $ sudo systemctl status tidal
● tidal.service - Tidal Connect Service
Loaded: loaded (/etc/systemd/system/tidal.service; enabled)
Active: inactive (dead) since Sat 2021-05-15 23:10:07 JST; 9min ago
Process: 1093 ExecStart=/opt/tidal/bin/tidal_connect --tc-certificate-path /opt/tidal/id_certificate/IfiAudio_ZenStream.dat -f smpd 096 --codec-mpegh true --codec-mqa false --model-name Streamer --disable-app-security false --disable-web-security false --enable-mqa-passthrough false --playback-device default --log-level 3 --enable-websocket-log 0 (code=killed, signal=TERM)
Process: 388 ExecStartPre=/bin/sleep 15 (code=exited, status=0/SUCCESS)
Main PID: 1093 (code=killed, signal=TERM)
May 15 23:06:51 smpd tidal_connect[1093]: Cannot connect to server socket err = No such file or directory
May 15 23:06:51 smpd tidal_connect[1093]: Cannot connect to server request channel
May 15 23:06:51 smpd tidal_connect[1093]: jack server is not running or cannot be started
May 15 23:06:51 smpd tidal_connect[1093]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
May 15 23:06:51 smpd tidal_connect[1093]: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
May 15 23:06:51 smpd tidal_connect[1093]: STARTED TidalConnect services.
May 15 23:07:33 smpd tidal_connect[1093]: [2021-05-15 23:07:33.949] [tisoc] [warning] [PlaybackControllerImpl.cpp:472] Illegal state:1
May 15 23:07:45 smpd sudo[2728]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/bin/systemctl restart pipe
May 15 23:10:07 smpd systemd[1]: Stopping Tidal Connect Service...
May 15 23:10:07 smpd systemd[1]: Stopped Tidal Connect Service.
Mã:
pi@smpd:~ $ sudo systemctl status soundcheck
● soundcheck.service - Sound check for Addon
Loaded: loaded (/lib/systemd/system/soundcheck.service; disabled)
Active: active (running) since Sat 2021-05-15 23:32:12 JST; 1s ago
Main PID: 15807 (ympd_event.sh)
CGroup: /system.slice/soundcheck.service
├─15807 /bin/bash /home/pi/misc/ympd_event.sh addon-start
└─15808 sleep 2
May 15 23:32:12 smpd systemd[1]: soundcheck.service holdoff time over, scheduling restart.
May 15 23:32:12 smpd systemd[1]: Stopping Sound check for Addon...
May 15 23:32:12 smpd systemd[1]: Starting Sound check for Addon...
May 15 23:32:12 smpd systemd[1]: Started Sound check for Addon.
Chỉnh sửa lần cuối: