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