Я хочу воспроизвести аудиопоток с URL-адреса, который действителен только в течение временного периода времени. Это не очень хорошо работает, если использовать встроенную функцию потоковой передачи stagefright из-за механизма буферизации (к моменту заполнения буфера URL будет мертвым), поэтому я реализовал прокси-поток, аналогично что делается в приложении npr
http://code.google.com/p/npr-android-app/source/browse/trunk/Npr/src/org/npr/android/news/StreamProxy.java
На самом деле это работает очень хорошо, за одним исключением, любой запрос поиска эффективно прерывает поток прокси. Мне трудно определить, как именно работает поиск в сцене. Каждый раз, когда я ищу, я получаю сообщение
01-12 13:35:57.201: ERROR/(4870): Connection reset by peer
01-12 13:35:57.201: ERROR/(4870): java.net.SocketException: Connection reset by peer
01-12 13:35:57.201: ERROR/(4870): at org.apache.harmony.luni.platform.OSNetworkSystem.writeSocketImpl(Native Method)
01-12 13:35:57.201: ERROR/(4870): at org.apache.harmony.luni.platform.OSNetworkSystem.write(OSNetworkSystem.java:723)
01-12 13:35:57.201: ERROR/(4870): at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:578)
01-12 13:35:57.201: ERROR/(4870): at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59)
01-12 13:35:57.201: ERROR/(4870): at com.soundcloud.utils.StreamProxy.processRequest(StreamProxy.java:209)
Затем пауза на несколько секунд, после чего stagefright пытается подключиться к тому же URL-адресу и обычно выдает ошибку (я думаю, потому что поток прокси не был сброшен). Другая потенциальная проблема заключается в том, что прокси-поток всегда будет считывать источник данных линейно:
while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1)
И я только догадываюсь, но я бы подумал, что для поддержки поиска прокси должен быть в состоянии обеспечить смещение при чтении из буфера. Есть ли способ выяснить запрошенное смещение от клиента сокета (предполагаемая позиция поиска)?
Мой опыт работы с розетками ограничен. У кого-нибудь есть предложения по реализации здесь?