Android: Open PLS-File для MediaPlayer включает ту же ссылку на потоковую передачу, которая открывает файл PLS?! Ошибка (1,-2147483648)

Я работаю над потоковым приложением для 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-парсер, это на самом деле не проблема, но PLS-файл выглядит так:

[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)

Насколько мне известно, примеры являются ссылками на крики...


person longi    schedule 23.02.2013    source источник


Ответы (1)


Проблема здесь сводится к заголовкам запроса. Этот сервер использует хитрое обнаружение браузеров и не-браузеров, чтобы помочь определить, следует ли перенаправлять вас на реальный URL-адрес потока или нет.

Если вы сделаете запрос на http://jam-aacp.rautemusik.fm/ с этим заголовком, вы получите файл .pls:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Теперь, если вы запросите тот же URL-адрес без этого заголовка, вы получите перенаправление 302 на фактический URL-адрес потока в http://80.237.157.12:12005/.

На этом сервере по адресу 80.237.157.12:12005 запущен SHOUTcast, который имеет собственное обнаружение. Однако вместо заголовка Accept используется User-Agent. Если строка user-agent содержит «Mozilla», то сервер отправит вам интерфейс администратора. В противном случае он отправит вам потоковые данные.

Короче говоря, вам нужно делать запросы без заголовка Accept и с User-Agent, не содержащим Mozilla. Кстати, вы можете легко разобраться в этом самостоятельно и воспроизвести проблему, загрузив копию Fiddler.

person Brad    schedule 24.02.2013
comment
спасибо, Брэд, ты подтолкнул меня в правильном направлении! теперь давайте посмотрим, как установить другой пользовательский агент в setDataSource() из MediaPlayer.. - person longi; 26.02.2013