У меня есть приложение для потоковой передачи звука, в котором работает локальный прокси-сервер. Локальный прокси-сервер делает HTTP-соединение с источником потоковой передачи в Интернете, получает и буферизирует локальные потоковые данные. Затем внутри приложения я использую MediaPlayer для подключения к локальному прокси-серверу, используя метод
mediaPlayer.setDataSource(...); // the url of the local proxy server
Все было в порядке (с большим количеством устройств Android и разных версий ОС - 1,5... 4,0), до выпуска Nexus 7.
В Nexus 7 медиаплеер отказывается воспроизводить исходный код с локального прокси-сервера.
Когда я просмотрел журналы, похоже, что MediaPlayer использует внутренние запросы. Мой локальный прокси-сервер не справляется с этим. Он возвращает HTTP/1.0 200 OK и данные. Однако медиаплеер не любит этого и выдает исключение:
Caused by: libcore.io.ErrnoException
?:??: W/?(?): [ 07-18 00:08:35.333 4962: 5149 E/radiobee ]
?:??: W/?(?): : sendto failed: ECONNRESET (Connection reset by peer)
?:??: W/?(?): at libcore.io.Posix.sendtoBytes(Native Method)
?:??: W/?(?): at libcore.io.Posix.sendto(Posix.java:146)
?:??: W/?(?): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:
?:??: W/?(?): at libcore.io.IoBridge.sendto(IoBridge.java:473)
We requested a content range, but server didn't support that. (responded with 200)
В соответствии с параметрами http, если сервер отвечает HTTP/1.0 вместо 1.1, клиент не должен запускать запрос диапазона (1.0 не поддерживает это в любом случае),
также, если сервер не поддерживает запрос диапазона, это должно быть хорошо, если он отвечает 200 OK (и это то, что я делаю), но реализация MediaPlayer на Nexus 7 не нравится.
Я взглянул на эту тему: HTTP: как мне реагировать на? Range: bytes = " когда Range не поддерживается?
где они утверждают, что ответ с 200 OK должен быть достаточно хорошим, но, к сожалению, это не помогает.
Я не уверен, что это проблема с Jelly Bean, или проблема с реализацией Nexus 7, но это все еще проблема для меня, которую я должен решить.
Опять же, нет никаких запросов диапазона на многих других устройствах Android, используя одно и то же приложение. По какой-то причине эти запросы диапазона теперь выполняются на Nexus 7. (Это может случиться и на других устройствах Android, но до сих пор так и не дошло).
Любой возможный способ отключить запросы диапазона для MediaPlayer?
Если их нет, может ли кто-нибудь предложить быстрое исправление для моей логики прокси-сервера (что именно он должен вернуть, если он получит этот запрос диапазона?), если не поменять мою другую логику?
Похоже, что мне нужно вернуть что-то вроде "HTTP/1.0 206 OK\r\nPartial Content\r\n\r\n", но, вероятно, должно быть какое-то значение в конце частичного содержимого - не уверен что должно быть этим.
Ваша помощь будет оценена.
Спасибо..