squeezelite.init (3565B)
1 #!/bin/sh /etc/rc.common 2 # Copyright (C) 2015 OpenWrt.org 3 4 START=99 5 STOP=1 6 7 USE_PROCD=1 8 PROG=/usr/bin/squeezelite 9 10 # 11 # Auto config checks for existing codec installations if not specified in config 12 # Explicit disable (override) by setting appropriate "decode_xxx" in config 13 # 14 checkcodec() { 15 config_get_bool auto_conf options "decoder_auto_conf" 1 16 config_get_bool codec options "$1" $auto_conf 17 18 if [ $codec -ne 0 ] ; then 19 if [ $auto_conf -eq 0 ] ; then 20 #force use requested 21 echo "$4" 22 else 23 if [ -e "/usr/lib/${2}" ] ; then 24 # Use codec (it exists) 25 echo "$4" 26 else 27 #exclude non-existant 28 if [ -z "$4" ] ; then 29 echo "-e $3" 30 else 31 echo "$4,$3" 32 fi 33 fi 34 fi 35 else 36 # explicitly excluded 37 if [ -z "$4" ] ; then 38 echo "-e $3" 39 else 40 echo "$4,$3" 41 fi 42 fi 43 } 44 45 make_cmdline() { 46 cmdline="" 47 48 config_get name options name "SqueezeWrt" 49 cmdline="$cmdline -n $name" 50 51 config_get model_name options model_name "SqueezeLite" 52 cmdline="$cmdline -M $model_name" 53 54 config_get interface options interface "" 55 [ -n "$interface" ] && cmdline="$cmdline -I $interface" 56 57 config_get device options device "" 58 [ -n "$device" ] && cmdline="$cmdline -o $device" 59 60 config_get alsa_buffer options alsa_buffer 200 61 [ $alsa_buffer -eq 0 ] && alsa_buffer="200" 62 63 config_get alsa_period options alsa_period 4 64 [ $alsa_period -eq 0 ] && alsa_period="4" 65 66 config_get alsa_format options alsa_format 16 67 [ $alsa_format = "0" ] && alsa_format="16" 68 69 config_get alsa_mmap options alsa_mmap 0 70 cmdline="$cmdline -a $alsa_buffer:$alsa_period:$alsa_format:$alsa_mmap" 71 72 config_get stream_bufsiz options stream_bufsiz 2048 73 config_get out_bufsiz options out_bufsiz 3763 74 cmdline="$cmdline -b $stream_bufsiz:$out_bufsiz" 75 76 config_get max_sr options max_sr 0 77 if [ $max_sr -ne 0 ] ; then 78 max_sr="-r $max_sr" 79 80 config_get sr_delay options sr_delay 0 81 [ $sr_delay -ne 0 ] && max_sr="$max_sr:$sr_delay" 82 cmdline="$cmdline $max_sr" 83 fi 84 85 86 config_get close_delay options close_delay 0 87 [ $close_delay -ne 0 ] && cmdline="$cmdline -C $close_delay" 88 89 config_get server_addr options server_addr "" 90 if [ -n "$server_addr" ] ; then 91 config_get server_port options server_port 3483 92 cmdline="$cmdline -s $server_addr:$server_port" 93 fi 94 95 config_get priority options priority 0 96 [ $priority -ne 0 ] && cmdline="$cmdline -p $priority" 97 98 # 99 # ***NOTE: codec lib names are in squeezelite.h (set decode_auto_conf to 0 to ignore) 100 # 101 local excl_codecs="" 102 local vorbis_lib="libvorbisidec.so.1" 103 104 excl_codecs=`checkcodec decode_flac "libFLAC.so.8" flac "$excl_codecs"` 105 excl_codecs=`checkcodec decode_mp3 "libmad.so.0" mp3 "$excl_codecs"` 106 excl_codecs=`checkcodec decode_aac "libfaad.so.2" aac "$excl_codecs"` 107 108 [ -e "/usr/lib/$vorbis_lib" ] || vorbis_lib="libvorbisfile.so.3" 109 110 excl_codecs=`checkcodec decode_ogg "$vorbis_lib" ogg "$excl_codecs"` 111 excl_codecs=`checkcodec decode_wma_alac "libavcodec.so.56" wma,alac "$excl_codecs"` 112 cmdline="$cmdline $excl_codecs" 113 114 config_get dop options dsd_over_pcm 0 115 [ $dop -eq 1 ] && cmdline="$cmdline -D" 116 } 117 118 start_service() { 119 config_load squeezelite 120 121 config_get_bool enabled options 'enabled' 0 122 [ $enabled -eq 0 ] && return 123 124 # Build command params 125 make_cmdline 126 127 procd_open_instance 128 logger -t 'squeezelite' "$cmdline" 129 procd_set_param command "$PROG" $cmdline 130 procd_close_instance 131 } 132 133 # Wait for service to exit and release sockets 134 reload_service() { 135 stop 136 sleep 2 137 start 138 } 139 140 restart() { 141 reload_service 142 }