0

我正在使用适用于 Android 的流媒体应用程序,但遇到了一个奇怪的错误。我的流媒体 url 保存在一个数据库中,该数据库还包括 m3u 和 pls 文件。这些文件被解析为可以正常工作的流 url。(我只检查流 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

据我所知,这些例子是广播链接......

4

1 回答 1

0

这里的问题归结为请求标头。该服务器正在对浏览器和非浏览器进行一些狡猾的检测,以帮助确定是否将您重定向到真实的流 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/.

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

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

于 2013-02-24T14:40:40.813 回答