Уровень 8 SDK (Froyo) представил встроенную возможность MediaPlayer для подключения к потоковому источнику, например Shoutcast. Предыдущие версии SDK способствовали обходным решениям, таким как запуск локального прокси-сервера на устройстве (см. NPR).
Я использовал тот же подход, что и NPR, и использую StreamProxy. Тем не менее, NPR сначала проверяет, находится ли в настоящее время SDK менее 8. Если это так, он использует прокси. В противном случае он подключается напрямую.
My StreamProxy запрашивает метаданные с сервера Shoutcast, поэтому он не просто перенаправляет данные из Shoutcast на мой клиент. Вместо этого он анализирует метаданные и использует их соответствующим образом и только маршрутизирует музыкальные данные.
При попытке использовать StreamProxy на уровне 8 SDK или выше MediaPlayer не подготовлен. Мой StreamProxy получает соединение и принимает его, но после успешного написания строки состояния и заголовков клиенту следующая запись создает java.net.SocketException: Connection reset by peer
. Это приводит к тому, что клиентский медиаплеер выбрасывает Error(1,-1007)
.
Я пытаюсь понять, почему MediaPlayer не может подключиться к моему локальному прокси. Он должен быть таким же, как подключение к исходному источнику без метаданных, которые работает. Я пересылаю все заголовки из внешнего источника через свой прокси-сервер, который включает в себя контент-тип.
Я буду продолжать изучать его, но я чувствую, что я в тупике. Позвольте мне знать, нужны ли дополнительные данные.