Android:Open PLS File for MediaPlayer包含打开PLS文件的相同流媒体链接?!错误(1,-2147483648)

Android:Open PLS File for MediaPlayer包含打开PLS文件的相同流媒体链接?!错误(1,-2147483648),android,android-mediaplayer,shoutcast,Android,Android Mediaplayer,Shoutcast,我正在为Android开发一款流媒体应用程序,但遇到了一个奇怪的错误。我的流式URL保存在一个数据库中,该数据库还包括m3u和pls文件。这些文件被解析为流式url,工作正常。(我只检查流式url是否包含m3u或pls) 现在我才发现,有些链接在MediaPlayer中不起作用。例如:一个站点有以下流媒体链接http://drumstep-aacp.rautemusik.fm如果我在MediaPlayer中打开链接,它会抛出一个错误(1,-2147483648)(通常不支持文件格式) 如果我在浏

我正在为Android开发一款流媒体应用程序,但遇到了一个奇怪的错误。我的流式URL保存在一个数据库中,该数据库还包括m3u和pls文件。这些文件被解析为流式url,工作正常。(我只检查流式url是否包含m3u或pls)

现在我才发现,有些链接在MediaPlayer中不起作用。例如:一个站点有以下流媒体链接
http://drumstep-aacp.rautemusik.fm
如果我在MediaPlayer中打开链接,它会抛出一个
错误(1,-2147483648)
(通常不支持文件格式)

如果我在浏览器中打开同一链接,我将被重定向到文件
http://drumstep-aacp.rautemusik.fm/listen.pls
。(我想这就是2147483648错误的原因)

因为我已经写了一个PLS解析器,这不是一个真正的问题,但是PLS文件看起来像

[playlist]
File1=http://drumstep-aacp.rautemusik.fm  //same link I entered at the beginning
Title1=#Musik.DrumStep
Length1=-1
NumberOfEntries=1
Version=2
如果我尝试再次打开流链接,这将启动一个无休止的循环。那我怎么才能打开那条小溪呢?(另一个例子是)


例如shoutcast链接,据我所知…

这里的问题归结为请求头。该服务器正在使用一些巧妙的浏览器和非浏览器检测来帮助确定是否将您重定向到真正的流URL

如果您使用此标题请求,您将获得
.pls
文件:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
现在,如果您请求相同的URL而不使用此标头,则会在
http://80.237.157.12:12005/

此服务器在80.237.157.12:12005运行SHOUTcast,它有自己的检测。但是,它不使用
Accept
标题,而是使用
User-Agent
。如果用户代理字符串包含“
Mozilla
”,则服务器将向您发送管理界面。否则,它将向您发送流数据


简言之,您需要在不使用
Accept
标题的情况下发出请求,并且使用不包含
Mozilla
User Agent
。顺便说一句,您可以自己轻松地解决这个问题,并通过下载的副本重现问题。

谢谢brad,您将我推向了正确的方向!现在,让我们看看如何在MediaPlayer的setDataSource()中设置不同的用户代理。。