右方向へのオリジナルポストポイントにコメントしますが、私は少しを言えば、役立つかもしれないと思いました... Apache HTTPライブラリー。この部分の基本を理解するための例がたくさんあるはずです。適切なローカルホストURLをMediaPlayerに提供し、プロキシへのソケットを開きます。 MediaPlayerが要求すると、プロキシを使用して、同等の要求を実際のメディアホストに送信します。私は、HttpGetを構築し、AndroidHttpClientで途中で送信するために使用する、プロキシのpacketReceivedメソッドでbyte []データを受け取ります。
HttpResponseが返され、内部でHttpEntityを使用してストリーミングバイトデータにアクセスできます。私はそうのように、ReadableByteChannelを使用しています:あなたは(SDカード上のファイルにキャッシュそれのように)戻ってそれを読んで
HttpEntityWrapper entity = (HttpEntityWrapper)response.getEntity();
ReadableByteChannel src = Channels.newChannel(entity.getContent());
はあなたがデータでみたいドゥ何でも。正しいものをMediaPlayerに渡すには、クライアントソケットからSocketChannelを取得し、まずレスポンスヘッダーをそのチャネルに直接書き込んだ後、エンティティのバイトデータを書き出します。 whileループでNIO ByteBufferを使用しています(クライアントはソケットで、バッファは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
}
}
ので行動プロキシが送信者であるように見えるようにするには、プレイヤーに沿って、それを渡す前に応答して、ホストヘッダーを変更する必要があるかもしれませんが、私はMediaPlayerのの独自の実装を扱っていますちょっと違うかもしれません。希望が役立ちます。
誰かがまだ解決策を探している場合は、 http://stackoverflow.com/a/12044709/1548464 – Taras