Help with Podcast/Playlist
What I want to do: Create a playlist that can be listened to by "anyone" (ie, I will give some people a link, and they will be able to listen to the list, just like a podcast). Preferably no skipping a track, no "jump to track" or anything like that, just plain listening from the beginning to the end.
What I have done: Created a m3u playlist in Winamp, put it in the playlist directory, used the "http://myaddress/podcast" to get some stream links, and created a simple page with the "stream links" culled from the output. That works ... for me, but not for others, they get this (I was using Subsonic 4.6):
After some testing and fiddling around, we got it to work, somehow -- unfortunately, I have no idea which change made it work. But it seems to me that at the heart of this is the Player/User concept, and the way this is assigned when a podcast request like this comes in. It seems that, when I do a request from any computer within my local net (through an external address and redirected by my router), SS somehow picks up that I have used "admin", and uses that player. When an "anonymous" request is done, a "Player XX [null]" is created. Finally, I created a temporary account for my testing "anonymous" friend and we verified that he could indeed listen to the songs by logging in using the web interface. Sometime after that, he successfully used the "anonymous request", and in the log I could see that the temporary account was "playing" these songs. Unfortunately, at roughly the same time I deleted the "null Players", so that can also be a reason for the sudden success, even though it seems to me the login hypothesis is more likely.
I have also tried version 4.7b2, but it seems something has changed in the usage of playlists there; if I try "http://myaddress/podcast" it asks for user/password, if I try "http://myaddress/podcast.view", it just returns "no streams", and if I try one of the previous stream links, it crashes, expecting an integer, not a string.
I also looked at the "shared media" option, which I couldn't get to work the way I wanted -- much to much freedom for the listener...
All ideas are welcome. Especially, I have not been able to find information on how the podcast concept has been changed in 4.7 -- have I missed something obvious somewhere? EDIT: Of course, I may also have missed something obvoius when it comes to the default Player/user when it comes to "anonymous requests"; can I as admin control this somehow?. Fiddling with "shared media" added a "guest" account; maybe that will be used now (to test this I suppose I will have to find another, "clean", friend...)?
What I have done: Created a m3u playlist in Winamp, put it in the playlist directory, used the "http://myaddress/podcast" to get some stream links, and created a simple page with the "stream links" culled from the output. That works ... for me, but not for others, they get this (I was using Subsonic 4.6):
- Code: Select all
<table class="ruleTable indent">
<tbody><tr><td class="ruleTableHeader">Exception</td>
<td class="ruleTableCell">java.lang.NullPointerException</td></tr>
<tr><td class="ruleTableHeader">Message</td>
<td class="ruleTableCell">null</td></tr>
<tr><td class="ruleTableHeader">Java version</td>
<td class="ruleTableCell">Sun Microsystems Inc. 1.6.0_31</td></tr>
<tr><td class="ruleTableHeader">Operating system</td>
<td class="ruleTableCell">Windows 7 6.1</td></tr>
<tr><td class="ruleTableHeader">Server</td>
<td class="ruleTableCell">jetty-6.1.x</td></tr>
<tr><td class="ruleTableHeader">Memory</td>
<td class="ruleTableCell">Used 66 of 96 MB</td></tr>
<tr><td class="ruleTableHeader" style="vertical-align: top;">Stack trace</td>
<td class="ruleTableCell" style="white-space: pre;">java.lang.NullPointerException
at net.sourceforge.subsonic.controller.StreamController.handleRequest(StreamController.java:92)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:135)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:173)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at net.sourceforge.subsonic.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at net.sourceforge.subsonic.filter.ParameterDecodingFilter.doFilter(ParameterDecodingFilter.java:54)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at net.sourceforge.subsonic.filter.BootstrapVerificationFilter.doFilter(BootstrapVerificationFilter.java:54)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
</td></tr>
</tbody></table>
After some testing and fiddling around, we got it to work, somehow -- unfortunately, I have no idea which change made it work. But it seems to me that at the heart of this is the Player/User concept, and the way this is assigned when a podcast request like this comes in. It seems that, when I do a request from any computer within my local net (through an external address and redirected by my router), SS somehow picks up that I have used "admin", and uses that player. When an "anonymous" request is done, a "Player XX [null]" is created. Finally, I created a temporary account for my testing "anonymous" friend and we verified that he could indeed listen to the songs by logging in using the web interface. Sometime after that, he successfully used the "anonymous request", and in the log I could see that the temporary account was "playing" these songs. Unfortunately, at roughly the same time I deleted the "null Players", so that can also be a reason for the sudden success, even though it seems to me the login hypothesis is more likely.
I have also tried version 4.7b2, but it seems something has changed in the usage of playlists there; if I try "http://myaddress/podcast" it asks for user/password, if I try "http://myaddress/podcast.view", it just returns "no streams", and if I try one of the previous stream links, it crashes, expecting an integer, not a string.
I also looked at the "shared media" option, which I couldn't get to work the way I wanted -- much to much freedom for the listener...
All ideas are welcome. Especially, I have not been able to find information on how the podcast concept has been changed in 4.7 -- have I missed something obvious somewhere? EDIT: Of course, I may also have missed something obvoius when it comes to the default Player/user when it comes to "anonymous requests"; can I as admin control this somehow?. Fiddling with "shared media" added a "guest" account; maybe that will be used now (to test this I suppose I will have to find another, "clean", friend...)?