Komentarz na oryginalnych punktów pocztowych w dobrym kierunku, ale pomyślałem, że może to być pomocne wyłożyć trochę ...
Co robiłem jest zbudować lekki serwer proxy za pomocą Naga i Biblioteki HTTP Apache. Powinno być mnóstwo przykładów, aby uzyskać podstawy tej części. Podaj MediaPlayer odpowiedni adres URL localhost, aby otwierał gniazdo na serwer proxy. Kiedy MediaPlayer zgłasza żądanie, użyj proxy, aby przesłać równoważne żądanie do rzeczywistego hosta mediów. Otrzymasz dane bajtowe [] w metodzie pakietowej proxy, której użyłem do zbudowania HttpGet i wysłania go po drodze z AndroidHttpClient.
Otrzymasz HttpResponse i możesz użyć HttpEntity w środku, aby uzyskać dostęp do danych o bajtach transmisji strumieniowej. Używam ReadableByteChannel, tak:
HttpEntityWrapper entity = (HttpEntityWrapper)response.getEntity();
ReadableByteChannel src = Channels.newChannel(entity.getContent());
robić, co chcesz z danymi jak można przeczytać ją z powrotem (jak cache go w pliku na karcie SD). Aby przekazać właściwe rzeczy do MediaPlayer, pobierz SocketChannel z gniazda klienta, najpierw zapisz nagłówki odpowiedzi bezpośrednio do tego kanału, a następnie przystąp do zapisu danych bajtowych jednostki. Korzystam z NIO ByteBuffer w pętli while (klient to gniazdo, a bufor to 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
}
}
Być może trzeba zmienić nagłówek hosta w odpowiedzi przed przekazaniem go wraz z odtwarzaczem tak, że wygląda jak serwer proxy jest nadawca, ale mam do czynienia z zastrzeżonych realizacji MediaPlayer więc zachowanie może być trochę inaczej. Nadzieja, która pomaga.
Najlepsza odpowiedź e, jeśli ktoś nadal szuka rozwiązania: http://stackoverflow.com/a/12044709/1548464 – Taras