मूल पोस्ट सही दिशा में अंक पर टिप्पणी है, लेकिन मैंने सोचा कि यह एक सा व्याख्या करने के लिए सहायक हो सकता है ...
मैंने क्या किया गया है नागा और का उपयोग कर एक हल्के प्रॉक्सी सर्वर का निर्माण होता है अपाचे HTTP पुस्तकालय। इस भाग की मूल बातें पाने के लिए वहां बहुत से उदाहरण हो सकते हैं। MediaPlayer को एक उपयुक्त लोकलहोस्ट यूआरएल प्रदान करें ताकि यह आपके प्रॉक्सी में सॉकेट खोल सके। जब मीडियाप्लेयर अनुरोध करता है, तो वास्तविक मीडिया होस्ट को समकक्ष अनुरोध भेजने के लिए प्रॉक्सी का उपयोग करें। आपको प्रॉक्सी के पैकेट रीसेट विधि में बाइट [] डेटा प्राप्त होगा, जिसे मैं एक HttpGet बनाने के लिए उपयोग करता हूं और इसे AndroidHttpClient के साथ अपने रास्ते पर भेजता हूं।
आप एक HttpResponse वापस प्राप्त करेंगे और आप स्ट्रीमिंग बाइट डेटा तक पहुंचने के लिए अंदर HttpEntity का उपयोग कर सकते हैं। मैं एक ReadableByteChannel उपयोग कर रहा हूँ, इसलिए जैसे:
HttpEntityWrapper entity = (HttpEntityWrapper)response.getEntity();
ReadableByteChannel src = Channels.newChannel(entity.getContent());
क्या जो कुछ भी आप डेटा के साथ करना चाहते हैं के रूप में आप (एसडी कार्ड पर किसी फ़ाइल में यह कैश की तरह) वापस इसे पढ़ा। MediaPlayer पर सही सामग्री को पास करने के लिए, क्लाइंट सॉकेट से सॉकेट चैनल प्राप्त करें, पहले उस चैनल पर सीधे प्रतिक्रिया शीर्षलेख लिखें, और फिर इकाई के बाइट डेटा को लिखने के लिए आगे बढ़ें। मैं थोड़ी देर में एक एनआईओ बाइटबफर का उपयोग कर रहा हूं (क्लाइंट एक सॉकेट है और बफर एक बाइटबफर है)।
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