kagemomiji / airsonic-advanced

airsonic-advanced
GNU General Public License v3.0
147 stars 13 forks source link

[Bug]: Possible streaming API issue #271

Closed khers closed 5 months ago

khers commented 10 months ago

What happened?

When using Tempo (https://github.com/CappielloAntonio/tempo/) for play back I cannot seek in a track. When playing a podcast, the app cannot get enough info to detect the length of the track and when playing music, seeking resets to the beginning of the song. The Tempo dev does not have this problem when using a number of other Subsonic implementations (including the original). See https://github.com/CappielloAntonio/tempo/issues/55

Steps to reproduce

Use the Tempo app to play a music file or podcast Attempt to seek to a new location in the file. :(

Version

11.1.x (Edge)

Version Detail

11.1.3-SNAPSHOT.20230829160047 – August 29, 2023 at 4:00:47 PM UTC [Commit: 9c59aeafe4344c9258d2c93a6a3b9c82c49888a4]

Operating System

Ubuntu 22.04.3

Java Version

openjdk 17.0.8.1 2023-08-24

Database

Other

DB Detail

The in memory that was the default starting with Subsonic

Configuration paramter


# forwawrd headers
server.forward-headers-strategy=native

#Subsonic preferences.  NOTE: This file is automatically generated.
#Thu Aug 19 21:48:59 UTC 2021
LdapAutoShadowing=false
GettingStartedEnabled=false
LicenseCode=code
LocaleCountry=
LdapUrl=ldap://host.domain.com:389/cn=Users,dc=domain,dc=com
WelcomeSubtitle=
WelcomeTitle=Welcome to music.domain.tld!
PodcastFolder=/mnt/podcasts
IndexCreationInterval=3
PodcastUpdateInterval=1
DownloadBitrateLimit=0
LdapSearchFilter=(sAMAccountName={0})
FastCacheEnabled=false
PodcastEpisodeRetentionCount=-1
LdapEnabled=false
UrlRedirectContextPath=
LocaleVariant=
LdapManagerDn=
IndexCreationHour=2
CoverArtFileTypes2=cover.jpg cover.png cover.gif folder.jpg jpg jpeg gif png
SortAlbumsByYear=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)
LocaleLanguage=en
LoginMessage=
UploadBitrateLimit=0
SettingsChanged=1692737503142
VideoFileTypes=flv avi mpg mpeg mp4 m4v mkv mov wmv ogv divx m2ts
Theme=default
DlnaServerName=Subsonic
IgnoredArticles=The El La Los Las Le Les A
MusicFileTypes=mp3 ogg oga aac m4a flac wav wma aif aiff ape mpc shn
ArtistBioLastUpdated=1626642805135
LastScanned=1629356400000
Port=4040
WelcomeMessage2=Message
LicenseEmail=email@domain.tld
PodcastEpisodeDownloadCount=-1
DlnaEnabled=false
DownsamplingCommand4=ffmpeg -i %s -map 0:0 -b:a %bk -v 0 -f mp3 -
TrialExpires=1418485292675
OrganizeByFolderStructure=true
LicenseDate=1462206767562
VideoConversionDirectory=/home/subsonic/video
MediaLibraryStatistics=645 1164 12520 198255363429 7715193
Shortcuts=New Incoming Podcast
PlaylistFolder=/home/airsonic/playlists
VideoConversionDiskLimit=0
EncryptionKeyPassword=passwd
EncryptionKeySalt=salt
JWTKey=Key
SmtpServer=smtp.domain.tld
SmtpEncryption=STARTTLS
SmtpPort=587
SmtpUser=noreply@domain.tld
SmtpFrom=noreply@domain.tld
SmtpPassword=hash
CaptchaEnabled=false
ReCaptchaSiteKey=key
NonDecodablePasswordEncoder=bcrypt
PreferNonDecodablePasswords=false
DecodablePasswordEncoder=hex
ExcludePattern=
IgnoreSymLinks=false
UploadsFolder=%{['USER_MUSIC_FOLDERS'][0]}/
FullScan=false
ClearFullScanSettingAfterScan=false
spring.liquibase.parameters.mysqlVarcharLimit=384
DbBackupUpdateInterval=24
DbBackupRetentionCount=2
spring.liquibase.parameters.defaultPodcastFolder=/mnt/podcasts
GenreSeparators=;
CoverArtSource=FILETAG
CoverArtConcurrency=4
CoverArtQuality=90
server.servlet.session.timeout=30d
HideIndexedFiles=true
EnableCueIndexing=true

Proxy Server

Apache 2.4.52-1ubuntu4.6

client detail

https://github.com/CappielloAntonio/tempo/

language

English (United States)

Relevant log output

2023-08-31 20:31:14.643  INFO --- o.a.p.c.StreamController                 : 128.197.29.233: user listening to THIS IS REVOLUTION >podcast/122.mp3 in folder 2
2023-08-31 20:31:14.650  INFO --- o.a.p.s.CacheConfiguration$CacheLogger   : Cache Key: 54648 | EventType: REMOVED | Old value: TIR Presents PHILOSOPHY FOR THE PEOPLE ft. Ben Burgis Ep. 24: Tibor Rutar on Marxism | New value: null
2023-08-31 20:31:14.658  INFO --- o.a.p.s.CacheConfiguration$CacheLogger   : Cache Key: THIS IS REVOLUTION >podcast-2--1.0 | EventType: REMOVED | Old value: THIS IS REVOLUTION >podcast | New value: null
2023-08-31 20:31:14.720  INFO --- o.a.p.s.CacheConfiguration$CacheLogger   : Cache Key: 54648 | EventType: CREATED | Old value: null | New value: TIR Presents PHILOSOPHY FOR THE PEOPLE ft. Ben Burgis Ep. 24: Tibor Rutar on Marxism
2023-08-31 20:31:14.721  INFO --- o.a.p.s.CacheConfiguration$CacheLogger   : Cache Key: THIS IS REVOLUTION >podcast-2--1.0 | EventType: CREATED | Old value: null | New value: THIS IS REVOLUTION >podcast
2023-08-31 20:32:31.658  INFO --- o.a.p.s.CacheConfiguration$CacheLogger   : Cache Key: user | EventType: REMOVED | Old value: user ["STREAM","DOWNLOAD","COMMENT","ADMIN","UPLOAD","COVERART","PODCAST","SETTINGS","SHARE","JUKEBOX"] | New value: null
2023-08-31 20:32:31.660  INFO --- o.a.p.s.LoggingExceptionResolver         : 128.197.29.233: Client unexpectedly closed connection while loading https://music.domain.tld/rest/stream?v=1.15.0&c=Tempo&maxBitRate=0&format=raw&id=54648&t=<hidden>&s=<hidden>&u=<hidden> (java.net.SocketTimeoutException)
2023-08-31 20:32:31.664  INFO --- o.a.player.filter.RESTFilter             : 128.197.29.233: Client unexpectedly closed connection while loading https://music.domain.tld/rest/stream?v=1.15.0&c=Tempo&maxBitRate=0&format=raw&id=54648&t=<hidden>&s=<hidden>&u=<hidden> (java.net.SocketTimeoutException)
2023-08-31 20:34:34.107 ERROR --- o.a.p.s.LoggingExceptionResolver         : 128.197.29.233: An exception occurred while loading https://music.domain.tld/rest/getCoverArt?v=1.15.0&c=Tempo&id=http://craphound.com/images/Craphound300.png&t=<hidden>&s=<hidden>&u=<hidden>

java.lang.NumberFormatException: For input string: "http://craphound.com/images/Craphound300.png"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) ~[na:na]
    at java.base/java.lang.Integer.parseInt(Integer.java:668) ~[na:na]
    at java.base/java.lang.Integer.valueOf(Integer.java:999) ~[na:na]
    at org.airsonic.player.controller.CoverArtController.createCoverArtRequest(CoverArtController.java:183) ~[classes!/:11.1.3-SNAPSHOT]
    at org.airsonic.player.controller.CoverArtController.handleRequest(CoverArtController.java:133) ~[classes!/:11.1.3-SNAPSHOT]
    at org.airsonic.player.controller.SubsonicRESTController.getCoverArt(SubsonicRESTController.java:1945) ~[classes!/:11.1.3-SNAPSHOT]
    at jdk.internal.reflect.GeneratedMethodAccessor221.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.29.jar!/:5.3.29]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
    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.29.jar!/:5.3.29]
    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.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.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.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.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.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.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.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.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.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.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.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:106) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:97) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    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.10.jar!/:5.7.10]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:164) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:223) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.10.jar!/:5.7.10]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.7.14.jar!/:2.7.14]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.29.jar!/:5.3.29]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:768) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.78.jar!/:na]
    at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
kagemomiji commented 5 months ago

@khers Requests to the stream API by Tempo were setting the header icy-metadata='1' . As a result, since Airsonic-Advanced was operating in IcyCast mode, Tempo was not functioning correctly. Therefore, adjustments have been made to ignore IcyCast mode for Tempo. Could you please download the zip containing the WAR file from the link below and try it out? https://github.com/kagemomiji/airsonic-advanced/actions/runs/7773995070/artifacts/1218394065

khers commented 5 months ago

Sorry, I am not running Airsonic-Advanced any longer so I don't have a setup to test this.

kagemomiji commented 5 months ago

@khers OK, thanks. I consider this issue resolved and will close it.