我正在为Android的流媒体应用程序工作,只是面对一个奇怪的错误 . 我的流式网址保存在一个数据库中,该数据库还包含m3u和pls文件 . 这些文件被解析为流式网址,工作正常 . (我只检查流式网址是否包含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链接......
1 回答
这里的问题归结为请求标头 . 此服务器正在使用浏览器和非浏览器的一些狡猾的检测来帮助确定是否将您重定向到真正的流URL .
如果您使用此标头发出http://jam-aacp.rautemusik.fm/请求,您将获得
.pls
文件:现在,如果您请求没有此标头的相同网址,您将获得302重定向到
http://80.237.157.12:12005/
处的实际流网址 .该服务器在80.237.157.12:12005运行SHOUTcast,它有自己的检测 . 而不是
Accept
Headers ,它使用User-Agent
. 如果用户代理字符串包含“Mozilla
”,则服务器将向您发送管理界面 . 否则,它会向您发送流数据 .简而言之,您需要在没有
Accept
标头的情况下发出请求,并且使用不包含Mozilla
的User-Agent
. 顺便说一句,您可以轻松地自己解决这个问题,并通过下载Fiddler的副本来重现问题 .