mirror of
https://github.com/openwrt/packages.git
synced 2025-12-21 23:34:31 +04:00
snapcast: add package snapserver and snapclient
Snapcast [1] is a multiroom client-server audio player, where all clients are time synchronized with the server to play perfectly synced audio. It's not a standalone player, but an extension that turns your existing audio player into a Sonos-like multiroom solution. Audio is captured by the server and routed to the connected clients. Several players can feed audio to the server in parallel and clients can be grouped to play the same audio stream. One of the most generic ways to use Snapcast is in conjunction with the music player daemon (MPD) [2] or Mopidy [3]. The inclusion starts with version 0.28.0 because of OpenSSL dependency issues of version 0.29.0. Newer versions (e.g. 0.32.3, see [4]) with optional OpenSSL support, will be incorporated with flavours, like "-mini" and "-full" in the upcoming PRs. More about this topic please check the inclusion PR at [5]! [1]: https://github.com/badaix/snapcast [2]: http://www.musicpd.org/ [3]: https://www.mopidy.com/ [4]: https://github.com/badaix/snapcast/blob/develop/changelog.md [5]: https://github.com/openwrt/packages/pull/23956#discussion_r2330463363 Fixes: #23924 Suggested-by: Tianling Shen <cnsztl@immortalwrt.org> Suggested-by: George Sapkin <george@sapk.in> Signed-off-by: Szabolcs Hubai <szab.hu@gmail.com>
This commit is contained in:
committed by
Tianling Shen
parent
e5a64aadca
commit
eeb8d131fc
@@ -1,22 +1,20 @@
|
||||
#
|
||||
# Copyright (C) 2015 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=snapcast
|
||||
PKG_VERSION := 0.27.0
|
||||
PKG_RELEASE := $(PKG_SOURCE_VERSION)
|
||||
PKG_USE_MIPS16 := 0
|
||||
PKG_VERSION:=0.28.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
# PKG_MIRROR_HASH=skip
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/badaix/snapcast.git
|
||||
PKG_SOURCE_VERSION:=v0.27.0
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/snapcast-$(PKG_VERSION)
|
||||
PKG_SOURCE_VERSION:=v$(PKG_VERSION)
|
||||
PKG_MIRROR_HASH=288325fc8b134502adb522711c18210794734675684cf5d8eba8a0a82778f6c9
|
||||
|
||||
PKG_MAINTAINER:=Szabolcs Hubai <szab.hu@gmail.com>, David Andreoletti <david@andreoletti.net>
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_CPE_ID:=cpe:/a:badaix:snapcast
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
@@ -27,70 +25,55 @@ define Package/snapcast/Default
|
||||
SECTION:=sound
|
||||
CATEGORY:=Sound
|
||||
TITLE:=Synchronous multiroom audio player
|
||||
DEPENDS := +AUDIO_SUPPORT:alsa-lib +libstdcpp +libavahi-client +libatomic +libogg +libflac +libopus +boost +libsoxr
|
||||
DEPENDS:=+AUDIO_SUPPORT:alsa-lib +libavahi-client +libatomic +libogg +libflac +libopus +boost +libsoxr
|
||||
URL:=https://github.com/badaix/snapcast
|
||||
endef
|
||||
|
||||
define Package/snapcast/description/Default
|
||||
Synchronous audio player
|
||||
endef
|
||||
define Package/snapcast/Default/description
|
||||
Synchronous audio player - Snapcast
|
||||
|
||||
define Package/snapcast
|
||||
$(call Package/snapcast/Default)
|
||||
TITLE += packages
|
||||
endef
|
||||
|
||||
define Package/snapcast/description
|
||||
$(call Package/snapcast/description/Default)
|
||||
Snapcast is a multi-room client-server audio player,
|
||||
where all clients are time synchronized with the server
|
||||
to play perfectly synced audio
|
||||
to play perfectly synced audio.
|
||||
It's not a standalone player, but an extension that turns
|
||||
your existing audio player into a Sonos-like multiroom solution.
|
||||
Audio is captured by the server and routed to the connected clients.
|
||||
Several players can feed audio to the server in parallel
|
||||
and clients can be grouped to play the same audio stream.
|
||||
One of the most generic ways to use Snapcast is in conjunction
|
||||
with the Music Player Daemon (MPD) or Mopidy.
|
||||
|
||||
endef
|
||||
|
||||
define Package/snapserver
|
||||
$(call Package/snapcast/Default)
|
||||
TITLE += Snapserver
|
||||
DEPENDS += +AUDIO_SUPPORT:alsa-lib +libvorbis +libsoxr
|
||||
HIDDEN := 1
|
||||
TITLE+= (server)
|
||||
DEPENDS+=+libvorbis
|
||||
endef
|
||||
|
||||
define Package/snapclient
|
||||
$(call Package/snapcast/Default)
|
||||
TILE += Snapclient
|
||||
DEPENDS += +libvorbisidec +libsoxr
|
||||
HIDDEN := 1
|
||||
TITLE+= (client)
|
||||
DEPENDS+=+libvorbisidec
|
||||
endef
|
||||
|
||||
define Package/snapserver/description
|
||||
$(call Package/snapcast/description/Default)
|
||||
Snapcast server
|
||||
$(call Package/snapcast/Default/description)
|
||||
This package contains the Snapcast server.
|
||||
endef
|
||||
|
||||
define Package/snapclient/description
|
||||
$(call Package/snapcast/description/Default)
|
||||
Snapcast client
|
||||
$(call Package/snapcast/Default/description)
|
||||
This package contains the Snapcast client.
|
||||
endef
|
||||
|
||||
define Package/snapcast/config
|
||||
menu "Select Snapcast Options"
|
||||
depends on PACKAGE_snapcast
|
||||
comment "Choose server or client"
|
||||
config PACKAGE_snapserver
|
||||
prompt "Snapserver"
|
||||
help
|
||||
Snapcast server
|
||||
default n
|
||||
|
||||
config PACKAGE_snapclient
|
||||
prompt "Snapclient"
|
||||
help
|
||||
Snapcast client
|
||||
default y
|
||||
endmenu
|
||||
define Package/snapserver/conffiles
|
||||
/etc/config/snapserver
|
||||
/etc/snapserver.conf
|
||||
endef
|
||||
|
||||
define Package/snapcast/Default/install
|
||||
true
|
||||
define Package/snapclient/conffiles
|
||||
/etc/config/snapclient
|
||||
endef
|
||||
|
||||
define Package/snapserver/install
|
||||
@@ -98,8 +81,6 @@ define Package/snapserver/install
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/snapserver $(1)/usr/bin/
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/snapserver.init $(1)/etc/init.d/snapserver
|
||||
$(INSTALL_DIR) $(1)/etc/default
|
||||
$(INSTALL_BIN) $(CURDIR)/../../debian/snapserver.default $(1)/etc/default/snapserver
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/server/etc/snapserver.conf $(1)/etc/snapserver.conf
|
||||
endef
|
||||
|
||||
@@ -108,10 +89,7 @@ define Package/snapclient/install
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/snapclient $(1)/usr/bin/
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/snapclient.init $(1)/etc/init.d/snapclient
|
||||
$(INSTALL_DIR) $(1)/etc/default
|
||||
$(INSTALL_BIN) $(CURDIR)/../../debian/snapclient.default $(1)/etc/default/snapclient
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,snapserver))
|
||||
$(eval $(call BuildPackage,snapclient))
|
||||
$(eval $(call BuildPackage,snapcast))
|
||||
|
||||
4
sound/snapcast/files/snapclient.conf
Normal file
4
sound/snapcast/files/snapclient.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
config snapclient 'config'
|
||||
option enabled '0'
|
||||
option log_sink 'system'
|
||||
option opts ''
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Author: Johannes Pohl <johannes.pohl@badaix.de>
|
||||
# Co-Author: Szabolcs Hubai <szab.hu@gmail.com>
|
||||
START=90
|
||||
|
||||
USE_PROCD=1
|
||||
@@ -7,21 +8,22 @@ USE_PROCD=1
|
||||
NAME=snapclient
|
||||
PROG=/usr/bin/$NAME
|
||||
PID_FILE=/var/run/$NAME.pid
|
||||
CONFIG_FILE=/etc/default/$NAME
|
||||
|
||||
|
||||
start_service()
|
||||
{
|
||||
local autostart opts
|
||||
config_load "$NAME"
|
||||
|
||||
autostart=$(grep ^START_SNAPCLIENT $CONFIG_FILE |cut -d= -f2)
|
||||
[ "$autostart" != "true" ] && logger -t $NAME "Not starting due to START_SNAPCLIENT" && exit 0
|
||||
local enabled
|
||||
config_get_bool enabled "config" enabled 0
|
||||
[ "$enabled" -ne "1" ] && logger -t $NAME "Disabled in /etc/config/$NAME" && return 1
|
||||
|
||||
opts=$(grep ^SNAPCLIENT_OPTS $CONFIG_FILE |cut -d "\"" -f2)
|
||||
opts="--logsink system $opts"
|
||||
local log_sink opts
|
||||
config_get log_sink "config" log_sink system
|
||||
config_get opts "config" opts ""
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command $PROG
|
||||
procd_append_param command --logsink $log_sink
|
||||
procd_append_param command $opts
|
||||
procd_set_param pidfile $PID_FILE
|
||||
procd_set_param respawn # use the defaults for respawing crashed process
|
||||
|
||||
4
sound/snapcast/files/snapserver.conf
Normal file
4
sound/snapcast/files/snapserver.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
config snapserver 'config'
|
||||
option enabled '0'
|
||||
option log_sink 'system'
|
||||
option opts ''
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Author: Johannes Pohl <johannes.pohl@badaix.de>
|
||||
# Co-Author: Szabolcs Hubai <szab.hu@gmail.com>
|
||||
START=90
|
||||
|
||||
USE_PROCD=1
|
||||
@@ -7,21 +8,22 @@ USE_PROCD=1
|
||||
NAME=snapserver
|
||||
PROG=/usr/bin/$NAME
|
||||
PID_FILE=/var/run/$NAME.pid
|
||||
CONFIG_FILE=/etc/default/$NAME
|
||||
|
||||
|
||||
start_service()
|
||||
{
|
||||
local autostart opts
|
||||
config_load "$NAME"
|
||||
|
||||
autostart=$(grep ^START_SNAPSERVER $CONFIG_FILE |cut -d= -f2)
|
||||
[ "$autostart" != "true" ] && logger -t $NAME "Not starting due to START_SNAPSERVER" && exit 0
|
||||
local enabled
|
||||
config_get_bool enabled "config" enabled 0
|
||||
[ "$enabled" -ne "1" ] && logger -t $NAME "Disabled in /etc/config/$NAME" && return 1
|
||||
|
||||
opts=$(grep ^SNAPSERVER_OPTS $CONFIG_FILE |cut -d "\"" -f2)
|
||||
opts="--logging.sink system $opts"
|
||||
local log_sink opts
|
||||
config_get log_sink "config" log_sink system
|
||||
config_get opts "config" opts ""
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command $PROG
|
||||
procd_append_param command --logging.sink $log_sink
|
||||
procd_append_param command $opts
|
||||
procd_set_param pidfile $PID_FILE
|
||||
procd_set_param respawn # use the defaults for respawing crashed process
|
||||
|
||||
3
sound/snapcast/test.sh
Executable file
3
sound/snapcast/test.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
"$1" --version | grep -F "$PKG_VERSION"
|
||||
Reference in New Issue
Block a user