kagemomiji / airsonic-advanced

airsonic-advanced
GNU General Public License v3.0
152 stars 14 forks source link

[Bug]: jukebox support broken/changed? #248

Closed arnouddekker closed 1 year ago

arnouddekker commented 1 year ago

What happened?

While trying both the latest 11.1.2 stable release and 11.1.3-SNAPSHOT.20230625224050 , when starting the jukebox (either via Ultrasonic 4.5.0 or the web-interface with jukebox configured as player) I see the below errors pop up in work/airsonic.log and no audio is being played. Playing on phone or in browser works just fine. Jukebox was working properly before on version 11.0.0-SNAPSHOT.20230217142243/ from https://github.com/airsonic-advanced/airsonic-advanced and after switching back to this version everything works fine again.

Steps to reproduce

1) Use 11.1.2 stable or 11.1.3-SNAPSHOT.20230625224050 2) configure jukebox 3) try to play over jukebox

n.b.: 1] /srv/airsonic/current is a symlink to the dir containing the currently wanted airsonic.war 2] airsonic is started as a systemd user service and shows as following in ps -fauxwww output:

airsonic  378394 44.9 15.5 4395416 602100 ?      Ssl  19:12  12:34  \_ /usr/bin/java -XX:MinHeapFreeRatio=15 -XX:MaxHeapFreeRatio=25 -Xmx512M -Djavax.sound.sampled.Clip=#default [default]                         -Djavax.sound.sampled.Port=#default [default]                         -Djavax.sound.sampled.SourceDataLine=#default [default]                         -Djavax.sound.sampled.TargetDataLine=#default [default] -Dairsonic.home=/srv/airsonic/work -Dserver.servlet.contextPath=/airsonic -Dserver.port=8081 -jar /srv/airsonic/current/airsonic.war

systemd user airsonic-user.service:

[Unit]
Description=Airsonic Media Server User Unit
After=remote-fs.target network.target
AssertPathExists=/srv/airsonic

[Service]
Type=simple
Environment=JAVA_JAR=/srv/airsonic/current/airsonic.war
Environment=JAVA_ARGS='-Djavax.sound.sampled.Clip=#default [default] \
                       -Djavax.sound.sampled.Port=#default [default] \
                       -Djavax.sound.sampled.SourceDataLine=#default [default] \
                       -Djavax.sound.sampled.TargetDataLine=#default [default]'
Environment=AIRSONIC_HOME=/srv/airsonic/work
Environment=PORT=8081
Environment=CONTEXT_PATH=/airsonic
ExecStart=/usr/bin/java -XX:MinHeapFreeRatio=15 -XX:MaxHeapFreeRatio=25 -Xmx512M ${JAVA_ARGS} -Dairsonic.home=${AIRSONIC_HOME} -Dserver.servlet.contextPath=${CONTEXT_PATH} -Dserver.port=${PORT} -jar ${JAVA_JAR}

# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
# for details
BindReadOnlyPaths=/proc
DevicePolicy=closed
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap
ReadWritePaths=/srv/airsonic/work

# You can uncomment the following line if you're not using the jukebox
# This will prevent airsonic from accessing any real (physical) devices
PrivateDevices=yes

# You can change the following line to `strict` instead of `full`
# if you don't want airsonic to be able to
# write anything on your filesystem outside of AIRSONIC_HOME.
ProtectSystem=strict

# You can uncomment the following line if you don't have any media
# in /home/…. This will prevent airsonic from ever reading/writing anything there.
#ProtectHome=true
ProtectHome=false

# You can uncomment the following line if you're not using the OpenJDK.
# This will prevent processes from having a memory zone that is both writeable
# and executeable, making hacker's lifes a bit harder.
#MemoryDenyWriteExecute=yes

[Install]
WantedBy=default.target

Version

11.1.x (Edge)

Version Detail

11.1.2 (Stable) and 11.1.3-SNAPSHOT.20230625224050

Operating System

Debian 12 (Bookworm) Linux 6.1.0-9-arm64 #1 SMP Debian 6.1.27-1 (2023-05-08) aarch64 GNU/Linux (in an lxc unprivileged container)

Java Version

openjdk version "17.0.7" 2023-04-18 OpenJDK Runtime Environment (build 17.0.7+7-Debian-1deb12u1) OpenJDK 64-Bit Server VM (build 17.0.7+7-Debian-1deb12u1, mixed mode, sharing)

Database

Other

DB Detail

postgresql-15 15.3-0+deb12u1 (Debian package)

Configuration paramter

Airsonic preferences. NOTE: This file is automatically generated. Do not modify while application is running

DatabaseConfigType=embed DatabaseConfigEmbedDriver=org.postgresql.Driver DatabaseConfigEmbedUrl=jdbc:postgresql://127.0.0.1:5432/airsonic?stringtype=unspecified DatabaseConfigEmbedUsername=airsonic DatabaseConfigEmbedPassword=[REDACTED] DatabaseUsertableQuote=" spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/airsonic?stringtype=unspecified spring.datasource.username=airsonic spring.datasource.password=[REDACTED] EncryptionKeyPassword=[REDACTED] EncryptionKeySalt=[REDACTED] SettingsChanged=1685351213660 JWTKey=[REDACTED] IndexCreationInterval=1 IndexCreationHour=3 FastCacheEnabled=true OrganizeByFolderStructure=true UploadsFolder=%{['USER_MUSIC_FOLDERS'][0]}/Incoming ExcludePattern= IgnoreSymLinks=false FullScan=true ClearFullScanSettingAfterScan=true GettingStartedEnabled=false DownsamplingCommand4=ffmpeg -i %s -map 0:0 -b:a %bk -v 0 -f mp3 - HlsCommand4=ffmpeg -ss %o -i %s -s %wx%h -async 1 -c:v libx264 -flags +cgop -b:v %vk -maxrate %bk -preset superfast -copyts -b:a %rk -bufsize 256k -map 0:0 -map 0:%i -ac 2 -ar 44100 -v 0 -threads 0 -force_key_frames expr:gte(t,n_forced*10) -start_number %j -hls_time %d -hls_list_size 0 -hls_segment_filename %n %p JukeboxCommand2=ffmpeg -ss %o -i %s -map 0:0 -v 0 -ar 44100 -ac 2 -f s16be - VideoImageCommand=ffmpeg -r 1 -ss %o -t 1 -i %s -s %wx%h -v 0 -f mjpeg - SubtitlesExtractionCommand=ffmpeg -i %s -map 0:%i -f %f - TranscodeEstimateTimePadding=2000 TranscodeEstimateBytePadding=0 HideIndexedFiles=true IndexString=A B C D E F G H I J K L M N O P Q R S T U V W X-Z(XYZ) IgnoredArticles=The El La Los Las Le Les GenreSeparators=; Shortcuts=New Incoming Podcast PlaylistFolder=/srv/airsonic/playlists MusicFileTypes=mp3 ogg oga aac m4a m4b flac wav wma aif aiff ape mpc shn mka opus alm 669 mdl far xm mod fnk imf it liq wow mtm ptm rtm stm s3m ult dmf dbm med okt emod sfx m15 mtn amf gdm stx gmc psm j2b umx amd rad hsc flx gtk mgt mtp wv VideoFileTypes=flv avi mpg mpeg mp4 m4v mkv mov wmv ogv divx m2ts webm CoverArtFileTypes2=cover.jpg cover.png cover.gif folder.jpg jpg jpeg gif png CoverArtSource=FILETAG CoverArtConcurrency=4 CoverArtQuality=90 SortAlbumsByYear=true WelcomeTitle=Welcome to Airsonic! WelcomeSubtitle= WelcomeMessage2=Welcome to Airsonic!\r\n\\ \\\r\nAirsonic is a free, web-based media streamer, providing ubiquitous access to your music. \r\n\\ \\\r\nUse it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.\r\n\\ \\\r\nTo change or remove this message, log in with administrator rights and go to Settings > General. LoginMessage= server.servlet.session.timeout=3600m Theme=default LocaleLanguage=en LocaleCountry= LocaleVariant= DownloadBitrateLimit=0 UploadBitrateLimit=0 LdapEnabled=false LdapUrl=ldap://host.domain.com:389/cn=Users,dc=domain,dc=com LdapSearchFilter=(sAMAccountName={0}) LdapManagerDn= LdapAutoShadowing=false SmtpServer=[REDACTED] SmtpEncryption=None SmtpPort=25 SmtpUser= SmtpFrom=airsonic@[REDACTED] CaptchaEnabled=false ReCaptchaSiteKey=[REDACTED]

Proxy Server

None

client detail

web: firefox-esr 102.12.0esr-1~deb12u1 / Android app: Ultrasonic: 4.5.0 on Lineagos 18.1

language

None

Relevant log output

===WEB INTERFACE PLAY===
2023-07-01 18:50:44.543 ERROR --- o.a.p.s.LoggingExceptionResolver         : [CLIENTIP]: An exception occurred while loading http://[SERVERIP]:8081/airsonic/websocket/496/0vpiejsu/xhr_streaming?t=<hidden>

org.springframework.web.socket.sockjs.SockJsException: Uncaught failure in SockJS request, uri=http://[SERVERIP]:8081/airsonic/websocket/496/0vpiejsu/xhr_streaming?t=1688230235948; nested exception is org.springframework.web.socket.sockjs.SockJsTransportFailureException: Failed to open session; nested exception is org.springframework.web.socket.sockjs.SockJsTransportFailureException: Failed to write SockJsFrame content='o'; nested exception is org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
        at org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler.handleRequest(SockJsHttpRequestHandler.java:137) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:517) ~[jakarta.servlet-api-4.0.4.jar!/:4.0.4]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) ~[jakarta.servlet-api-4.0.4.jar!/:4.0.4]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.airsonic.player.filter.MetricsFilter.doFilter(MetricsFilter.java:30) ~[classes!/:11.1.3-SNAPSHOT]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.airsonic.player.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:45) ~[classes!/:11.1.3-SNAPSHOT]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.airsonic.player.filter.ParameterDecodingFilter.doFilter(ParameterDecodingFilter.java:64) ~[classes!/:11.1.3-SNAPSHOT]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.airsonic.player.filter.BootstrapVerificationFilter.doFilter(BootstrapVerificationFilter.java:63) ~[classes!/:11.1.3-SNAPSHOT]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:106) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:97) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:223) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:166) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:223) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.7.11.jar!/:2.7.11]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: org.springframework.web.socket.sockjs.SockJsTransportFailureException: Failed to open session; nested exception is org.springframework.web.socket.sockjs.SockJsTransportFailureException: Failed to write SockJsFrame content='o'; nested exception is org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
        at org.springframework.web.socket.sockjs.transport.session.AbstractHttpSockJsSession.handleInitialRequest(AbstractHttpSockJsSession.java:237) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        at org.springframework.web.socket.sockjs.transport.handler.AbstractHttpSendingTransportHandler.handleRequestInternal(AbstractHttpSendingTransportHandler.java:76) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        at org.springframework.web.socket.sockjs.transport.handler.AbstractHttpSendingTransportHandler.handleRequest(AbstractHttpSendingTransportHandler.java:66) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        at org.springframework.web.socket.sockjs.transport.TransportHandlingSockJsService.handleTransportRequest(TransportHandlingSockJsService.java:317) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        at org.springframework.web.socket.sockjs.support.AbstractSockJsService.handleRequest(AbstractSockJsService.java:484) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        at org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler.handleRequest(SockJsHttpRequestHandler.java:134) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        ... 117 common frames omitted
Caused by: org.springframework.web.socket.sockjs.SockJsTransportFailureException: Failed to write SockJsFrame content='o'; nested exception is org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
        at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:343) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        at org.springframework.web.socket.sockjs.transport.session.StreamingSockJsSession.handleRequestInternal(StreamingSockJsSession.java:64) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        at org.springframework.web.socket.sockjs.transport.session.AbstractHttpSockJsSession.handleInitialRequest(AbstractHttpSockJsSession.java:231) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        ... 122 common frames omitted
Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:271) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.connector.Response.flushBuffer(Response.java:491) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.connector.ResponseFacade.flushBuffer(ResponseFacade.java:265) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:166) ~[jakarta.servlet-api-4.0.4.jar!/:4.0.4]
        at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:166) ~[jakarta.servlet-api-4.0.4.jar!/:4.0.4]
        at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:166) ~[jakarta.servlet-api-4.0.4.jar!/:4.0.4]
        at org.springframework.security.web.util.OnCommittedResponseWrapper.flushBuffer(OnCommittedResponseWrapper.java:166) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at javax.servlet.ServletResponseWrapper.flushBuffer(ServletResponseWrapper.java:166) ~[jakarta.servlet-api-4.0.4.jar!/:4.0.4]
        at org.springframework.security.web.util.OnCommittedResponseWrapper.flushBuffer(OnCommittedResponseWrapper.java:166) ~[spring-security-web-5.7.8.jar!/:5.7.8]
        at org.springframework.http.server.ServletServerHttpResponse.flush(ServletServerHttpResponse.java:104) ~[spring-web-5.3.27.jar!/:5.3.27]
        at org.springframework.web.socket.sockjs.transport.session.AbstractHttpSockJsSession.writeFrameInternal(AbstractHttpSockJsSession.java:361) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:326) ~[spring-websocket-5.3.27.jar!/:5.3.27]
        ... 124 common frames omitted
Caused by: java.io.IOException: Broken pipe
        at java.base/sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[na:na]
        at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:62) ~[na:na]
        at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:132) ~[na:na]
        at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:97) ~[na:na]
        at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:53) ~[na:na]
        at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) ~[na:na]
        at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:136) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1431) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:775) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:739) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:723) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:566) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:157) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:220) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1244) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:398) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.coyote.Response.action(Response.java:207) ~[tomcat-embed-core-9.0.74.jar!/:na]
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:305) ~[tomcat-embed-core-9.0.74.jar!/:na]
        ... 136 common frames omitted

====ULTRASONIC===
2023-07-01 18:47:09.411 ERROR --- o.a.p.s.LoggingExceptionResolver         : [CLIENTIP]: An exception occurred while loading http://[SERVERIP]:8081/airsonic/rest/jukeboxControl.view?action=skip&index=0&offset=2&c=Ultrasonic&f=json&v=1.15.0&p=<hidden>&u=<hidden>

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    org/airsonic/player/service/jukebox/AudioPlayer$AudioDataWriter.run()V @28: invokevirtual
  Reason:
    Type 'java/lang/Object' (current frame, stack[1]) is not assignable to 'org/airsonic/player/service/jukebox/AudioPlayer$State'
  Current Frame:
    bci: @28
    flags: { }
    locals: { 'org/airsonic/player/service/jukebox/AudioPlayer$AudioDataWriter', '[B' }
    stack: { '[I', 'java/lang/Object' }
  Bytecode:
    0000000: 2ab4 000f b400 21b9 0027 0100 bc08 4cb8
    0000010: 002d 2ab4 000f b400 30b6 0034 b600 3a2e
    0000020: aa00 0000 0000 005e 0000 0001 0000 0004
    0000030: 0000 0028 0000 0031 0000 0020 0000 0020
    0000040: 2ab4 000f b600 3fb1 1400 42b8 0044 a7ff
    0000050: c12a 2bb6 0048 3d1c 02a0 0015 2ab4 000f
    0000060: b200 4cb6 0050 2ab4 000f b600 3fb1 2ab4
    0000070: 000f b400 212b 031c b900 5404 0057 a7ff
    0000080: 914c b200 58bb 005c 5912 5eb7 0060 2bb6
    0000090: 0063 b600 672b b900 6b03 002a b400 0fb6
    00000a0: 003f a700 0d4e 2ab4 000f b600 3f2d bfb1
    00000b0:                                        
  Exception Handler Table:
    bci [0, 64] => handler: 129
    bci [72, 102] => handler: 129
    bci [110, 129] => handler: 129
    bci [0, 64] => handler: 165
    bci [72, 102] => handler: 165
    bci [110, 155] => handler: 165
  Stackmap Table:
    append_frame(@15,Object[#122])
    same_frame(@64)
    same_frame(@72)
    same_frame(@81)
    append_frame(@110,Integer)
    chop_frame(@126,1)
    full_frame(@129,{Object[#1]},{Object[#113]})
    same_locals_1_stack_item_frame(@165,Object[#113])
    same_frame(@175)

    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1087) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) ~[jakarta.servlet-api-4.0.4.jar!/:4.0.4]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) ~[jakarta.servlet-api-4.0.4.jar!/:4.0.4]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.airsonic.player.filter.MetricsFilter.doFilter(MetricsFilter.java:30) ~[classes!/:11.1.3-SNAPSHOT]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.airsonic.player.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:45) ~[classes!/:11.1.3-SNAPSHOT]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.airsonic.player.filter.RESTFilter.doFilter(RESTFilter.java:49) ~[classes!/:11.1.3-SNAPSHOT]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.airsonic.player.filter.ParameterDecodingFilter.doFilter(ParameterDecodingFilter.java:64) ~[classes!/:11.1.3-SNAPSHOT]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.airsonic.player.filter.BootstrapVerificationFilter.doFilter(BootstrapVerificationFilter.java:63) ~[classes!/:11.1.3-SNAPSHOT]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:106) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:97) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.airsonic.player.security.RESTRequestParameterProcessingFilter.successfulAuthentication(RESTRequestParameterProcessingFilter.java:136) ~[classes!/:11.1.3-SNAPSHOT]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:237) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:166) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:223) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.8.jar!/:5.7.8]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.7.11.jar!/:2.7.11]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.74.jar!/:na]
    at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    org/airsonic/player/service/jukebox/AudioPlayer$AudioDataWriter.run()V @28: invokevirtual
  Reason:
    Type 'java/lang/Object' (current frame, stack[1]) is not assignable to 'org/airsonic/player/service/jukebox/AudioPlayer$State'
  Current Frame:
    bci: @28
    flags: { }
    locals: { 'org/airsonic/player/service/jukebox/AudioPlayer$AudioDataWriter', '[B' }
    stack: { '[I', 'java/lang/Object' }
  Bytecode:
    0000000: 2ab4 000f b400 21b9 0027 0100 bc08 4cb8
    0000010: 002d 2ab4 000f b400 30b6 0034 b600 3a2e
    0000020: aa00 0000 0000 005e 0000 0001 0000 0004
    0000030: 0000 0028 0000 0031 0000 0020 0000 0020
    0000040: 2ab4 000f b600 3fb1 1400 42b8 0044 a7ff
    0000050: c12a 2bb6 0048 3d1c 02a0 0015 2ab4 000f
    0000060: b200 4cb6 0050 2ab4 000f b600 3fb1 2ab4
    0000070: 000f b400 212b 031c b900 5404 0057 a7ff
    0000080: 914c b200 58bb 005c 5912 5eb7 0060 2bb6
    0000090: 0063 b600 672b b900 6b03 002a b400 0fb6
    00000a0: 003f a700 0d4e 2ab4 000f b600 3f2d bfb1
    00000b0:                                        
  Exception Handler Table:
    bci [0, 64] => handler: 129
    bci [72, 102] => handler: 129
    bci [110, 129] => handler: 129
    bci [0, 64] => handler: 165
    bci [72, 102] => handler: 165
    bci [110, 155] => handler: 165
  Stackmap Table:
    append_frame(@15,Object[#122])
    same_frame(@64)
    same_frame(@72)
    same_frame(@81)
    append_frame(@110,Integer)
    chop_frame(@126,1)
    full_frame(@129,{Object[#1]},{Object[#113]})
    same_locals_1_stack_item_frame(@165,Object[#113])
    same_frame(@175)

    at org.airsonic.player.service.jukebox.AudioPlayer.<init>(AudioPlayer.java:69) ~[classes!/:11.1.3-SNAPSHOT]
    at org.airsonic.player.service.jukebox.AudioPlayerFactory.createAudioPlayer(AudioPlayerFactory.java:12) ~[classes!/:11.1.3-SNAPSHOT]
    at org.airsonic.player.service.JukeboxLegacySubsonicService.play(JukeboxLegacySubsonicService.java:128) ~[classes!/:11.1.3-SNAPSHOT]
    at org.airsonic.player.service.JukeboxLegacySubsonicService.updateJukebox(JukeboxLegacySubsonicService.java:96) ~[classes!/:11.1.3-SNAPSHOT]
    at org.airsonic.player.service.JukeboxService.skip(JukeboxService.java:124) ~[classes!/:11.1.3-SNAPSHOT]
    at org.airsonic.player.service.PlayQueueService.skip(PlayQueueService.java:98) ~[classes!/:11.1.3-SNAPSHOT]
    at org.airsonic.player.controller.SubsonicRESTController.jukeboxControl(SubsonicRESTController.java:877) ~[classes!/:11.1.3-SNAPSHOT]
    at jdk.internal.reflect.GeneratedMethodAccessor192.invoke(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.27.jar!/:5.3.27]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.27.jar!/:5.3.27]
    ... 119 common frames omitted
kagemomiji commented 1 year ago

@arnouddekker Thank you for reporting issue.

From your airsonic-user.service, it appears that the sound device access is restricted in the service configuration. To allow access, please make the following changes in the service file:

Set DevicePolicy to auto to allow access to the sound device and also set PrivateDevices to no.

After modifying the service file, please restart the service to apply the changes.

arnouddekker commented 1 year ago

@kagemomiji thanks for checking in to this so quickly. I've tested your suggestions for the unit-file but as expected the result (at least to me) is the same. Attached the logs: airsonic.log

For completeness, I did (as the airsonic user) the systemctl edit --user airsonic-user.service AND an systemctl --user daemon-reload just for good measure and checked the airsonic-user service and corresponding java-process was indeed stopped in between).

The ONLY thing changing when switching between the working 'upstream' version and your version is that I stop the service, change the /srv/airsonic/current symlink to point to the dir containing airsonic.war I wish to use and start the service again..

I.e. (now pointing to working version again):

airsonic@server:~$ ls -alhR /srv/airsonic/current /srv/airsonic/airsonic-advanced/
lrwxrwxrwx 1 root root 63 Jul  3 20:28 /srv/airsonic/current -> /srv/airsonic/airsonic-advanced/11.0.0-SNAPSHOT.20230217142243/

/srv/airsonic/airsonic-advanced/:
total 20K
drwxr-xr-x 4 root     root      4 Jul  1 18:39 .
drwxr-x--- 7 airsonic airsonic 14 Jul  3 20:28 ..
drwxr-xr-x 2 root     root      4 Apr 14 09:06 11.0.0-SNAPSHOT.20230217142243
drwxr-xr-x 2 root     root      4 Jul  1 18:37 11.1.3-SNAPSHOT.20230625224050-kagemomiji

/srv/airsonic/airsonic-advanced/11.0.0-SNAPSHOT.20230217142243:
total 97M
drwxr-xr-x 2 root root    4 Apr 14 09:06 .
drwxr-xr-x 4 root root    4 Jul  1 18:39 ..
-rw-r--r-- 1 root root 101M Feb 17 15:30 airsonic.war
-rw-r--r-- 1 root root   65 Apr 14 08:51 airsonic.war.sha256sum

/srv/airsonic/airsonic-advanced/11.1.3-SNAPSHOT.20230625224050-kagemomiji:
total 118M
drwxr-xr-x 2 root root    4 Jul  1 18:37 .
drwxr-xr-x 4 root root    4 Jul  1 18:39 ..
-rw-r--r-- 1 root root 124M Jul  1 18:37 airsonic.war
-rw-r--r-- 1 root root  162 Jul  1 18:37 artifacts-checksums.sha

Can you or anyone else confirm that jukebox is working in 11.1.2 stable or later?

[edit]Cleaning out the work-directory and restoring the earlier included airsonic.properties also didn't help[/edit]

kagemomiji commented 1 year ago

@arnouddekker I have succeeded to play music by jukebox mode.

There are two issues in this problem.

  1. Building problem, thus I fixed src.
  2. Misconfiguration of service file. So I have written an example of service file here.

Could you change your airsonic.service and try latest edge release war file?

arnouddekker commented 1 year ago

@kagemomiji Thanks! The edge release 11.1.3-SNAPSHOT.20230710160254 fixes the issue.

As a side note, I still use PrivateDevices=yes and now also use DevicePolicy=strict as I use Pulseaudio to pipe the sound through pulseaudio-dlna to my receiver.

$ java list_audio_devices.java
Available mixers:
default [default]
$ pactl get-default-sink
vsx923_dlna
$ pactl list short sources
1       vsx923_dlna.monitor     module-null-sink.c      s16le 2ch 96000Hz       RUNNING
kagemomiji commented 1 year ago

Since the problem has been resolved, I close the issue.