Il commento sui punti voi post originale nella direzione giusta, ma ho pensato che potrebbe essere utile per esporre un po '...
Quello che ho fatto è costruire un server proxy leggero utilizzando Naga e il Librerie HTTP Apache. Ci dovrebbero essere un sacco di esempi là fuori per ottenere le basi di questa parte. Fornire a MediaPlayer un URL localhost appropriato in modo che apra un socket al proprio proxy. Quando MediaPlayer effettua una richiesta, utilizzare il proxy per inviare una richiesta equivalente all'host multimediale effettivo. Riceverai i dati di byte [] nel metodo packetReceived del proxy, che utilizzo per creare un HttpGet e inviarlo tramite AndroidHttpClient.
Si otterrà una risposta Http ed è possibile utilizzare HttpEntity per accedere ai dati del byte di streaming. Io sto usando un ReadableByteChannel, in questo modo:
HttpEntityWrapper entity = (HttpEntityWrapper)response.getEntity();
ReadableByteChannel src = Channels.newChannel(entity.getContent());
Do qualunque gradireste con i dati, come si legge indietro (come la cache in un file sulla scheda SD). Per trasferire gli elementi corretti a MediaPlayer, scaricare SocketChannel dal client Socket, innanzitutto scrivere gli header di risposta direttamente su quel canale e quindi procedere con la scrittura dei dati di byte dell'entità. Sto usando un ByteBuffer NIO in un ciclo while (il client è un socket e il buffer è un ByteBuffer).
int read, written;
SocketChannel dst = client.getChannel();
while (dst.isConnected() &&
dst.isOpen() &&
src.isOpen() &&
(read = src.read(buffer)) >= 0) {
try {
buffer.flip();
// This is one point where you can access the stream data.
// Just remember to reset the buffer position before trying
// to write to the destination.
if (buffer.hasRemaining()) {
written = dst.write(buffer);
// If the player isn't reading, wait a bit.
if (written == 0) Thread.sleep(15);
buffer.compact();
}
}
catch (IOException ex) {
// handle error
}
}
Potrebbe essere necessario modificare l'intestazione host nella risposta prima di passarlo insieme al giocatore in modo che sembra che il proxy è il mittente, ma ho a che fare con un'implementazione proprietaria del MediaPlayer così comportamento potrebbe essere un po 'diverso Spero possa aiutare.
La migliore risposta lei e, se qualcuno cerca ancora una soluzione: http://stackoverflow.com/a/12044709/1548464 – Taras