我在一款Android流媒体应用上工作,却遇到了一个奇怪的错误。我的流媒体urls保存在一个数据库中,其中还包括m3u和pls文件。这些文件被解析为流式url,这工作得很好。(我只检查streaming-url是否包含m3u或pls)
现在我才发现,有些链接在MediaPlayer中不起作用。例如:一个站点有以下流链接http://drumstep-aacp.rautemusik.fm,如果我在我的MediaPlayer中打开该链接,它会抛出一个Error (1,-2147483648) (通常不支持的文件格式)。
如果我在浏览器中打开相同的链接,我会被重定向到文件http://drumstep-aacp.rautemusik.fm/listen.pls。(我猜这就是2147483648错误的原因)
因为我已经编写了一个PLS-Parser,所以这不是一个真正的问题,但是PLS-File看起来像
[playlist]
File1=http://drumstep-aacp.rautemusik.fm //same link I entered at the beginning
Title1=#Musik.DrumStep
Length1=-1
NumberOfEntries=1
Version=2如果我再次尝试打开流链接,这将开始一个无尽的循环。那么我怎么才能打开那个流呢?(另一个例子是http://jam-aacp.rautemusik.fm)
据我所知,这些例子都是shoutcast链接。
发布于 2013-02-24 22:40:41
这里的问题归结为请求头。此服务器使用一些巧妙的浏览器和非浏览器检测来帮助确定是否将您重定向到真正的流URL。
如果您使用此标头请求http://jam-aacp.rautemusik.fm/,您将获得.pls文件:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8现在,如果您请求相同的URL而没有这个头,您将得到一个302重定向到http://80.237.157.12:12005/上的实际流URL。
此服务器在80.237.157.12:12005上运行的是SHOUTcast,它有自己的检测功能。它使用的是User-Agent,而不是Accept头。如果用户代理字符串包含"Mozilla",则服务器将向您发送管理界面。否则,它将向您发送流数据。
简而言之,您需要在没有Accept头的情况下发出请求,并且使用不包含Mozilla的User-Agent。顺便说一句,您可以很容易地自己弄清楚这一点,并通过下载Fiddler副本来重现问题。
https://stackoverflow.com/questions/15044958
复制相似问题