मेरे पास एक ऑडियो स्ट्रीमिंग ऐप है, जो स्थानीय प्रॉक्सी सर्वर चलाता है। स्थानीय प्रॉक्सी सर्वर एक इंटरनेट स्ट्रीमिंग स्रोत के लिए एक HTTP कनेक्शन बनाता है, स्थानीय स्तर पर स्ट्रीमिंग डेटा प्राप्त करता है और बफर करता है। फिर, अनुप्रयोग में अंदर, मैं MediaPlayer का उपयोग स्थानीय प्रॉक्सी सर्वर से कनेक्ट करने के लिए, (Android उपकरणों और विभिन्न OS संस्करण के साथ बहुत - 1.5 ... 4.0) विधिएंड्रॉइड मीडिया प्लेयर - रेंज अनुरोध को अक्षम कैसे करें? (नेक्सस 7 पर टूटी हुई ऑडियो स्ट्रीमिंग)
mediaPlayer.setDataSource(...); // the url of the local proxy server
सब कुछ ठीक था का उपयोग कर, नेक्सस 7 रिलीज तक।
नेक्सस 7 में, मीडिया प्लेयर स्थानीय प्रॉक्सी सर्वर से स्रोत चलाने से इंकार कर देता है।
जब मैंने लॉग पर एक नज़र डाली, ऐसा लगता है कि मीडियाप्लेयर आंतरिक रूप से रेंज अनुरोधों का उपयोग करता है। मेरा स्थानीय प्रॉक्सी सर्वर इसे संभाल नहीं करता है। यह HTTP/1.0 200 ठीक है और डेटा देता है। हालांकि, मीडिया प्लेयर की तरह नहीं है और एक अपवाद फेंकता है:
Caused by: libcore.io.ErrnoException
?:??: W/?(?): [ 07-18 00:08:35.333 4962: 5149 E/radiobee ]
?:??: W/?(?): : sendto failed: ECONNRESET (Connection reset by peer)
?:??: W/?(?): at libcore.io.Posix.sendtoBytes(Native Method)
?:??: W/?(?): at libcore.io.Posix.sendto(Posix.java:146)
?:??: W/?(?): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:
?:??: W/?(?): at libcore.io.IoBridge.sendto(IoBridge.java:473)
We requested a content range, but server didn't support that. (responded with 200)
http चश्मा के मुताबिक, अगर सर्वर HTTP के साथ प्रतिक्रिया/1.0 के बजाय 1.1, ग्राहक एक सीमा अनुरोध आग नहीं होना चाहिए (1.0 वैसे भी इसका समर्थन नहीं करता है),
यदि सर्वर रेंज अनुरोध का समर्थन नहीं करता है, तो यह ठीक होना चाहिए, अगर यह 200 ओके (और यही वह है जो मैं कर रहा हूं) का जवाब देता हूं, लेकिन मीडियाप्लेयर कार्यान्वयन नेक्सस 7 पर यह पसंद नहीं है।
मैं इस सूत्र पर एक दृष्टि डाली: HTTP: How should I respond to "Range: bytes=" when Range is unsupported?
, जहां वे दावा करते हैं कि 200 ठीक से प्रतिक्रिया काफी अच्छा होना चाहिए, लेकिन दुर्भाग्य से यह मदद नहीं करता है।
मुझे यकीन नहीं है कि यह जेली बीन, या नेक्सस 7 कार्यान्वयन के साथ एक समस्या है, लेकिन यह अभी भी मेरे लिए एक समस्या है जिसे मुझे हल करना है।
फिर, एक ही ऐप का उपयोग करके, अन्य एंड्रॉइड डिवाइस पर कोई रेंज अनुरोध नहीं है। किसी कारण से ये सीमा अनुरोध अब Nexus 7 पर हो रहे हैं। (यह अन्य एंड्रॉइड डिवाइसों पर भी हो सकता है, लेकिन फिर से, अब तक मेरे साथ कभी नहीं हुआ)।
मीडियाप्लेयर के लिए रेंज अनुरोधों को अक्षम करने का कोई भी संभावित तरीका?
यदि कोई नहीं है, तो क्या कोई मेरे प्रॉक्सी सर्वर तर्क के लिए त्वरित समाधान सुझा सकता है (यदि यह रेंज अनुरोध प्राप्त होता है तो उसे वापस लौटना होगा?), यदि संभव हो तो मेरा अन्य तर्क बदलने के बिना?
ऐसा लगता है कि मुझे "HTTP/1.0 206 ठीक \ r \ n पार्टिकल सामग्री \ r \ n \ r \ n" जैसे कुछ वापस करना होगा, लेकिन शायद आंशिक सामग्री के अंत में कुछ मूल्य होना चाहिए - नहीं सुनिश्चित करें कि यह क्या होना चाहिए।
आपकी सहायता की सराहना की जाएगी।
धन्यवाद ..
मैं इसकी पुष्टि कर सकता हूं कि यह जेली बीन मुद्दा (न केवल Nexus 7) है। यह विभिन्न नेक्सस उपकरणों पर भी हुआ, हाल ही में आइसक्रीम सैंडविच से जेली बीन तक अपडेट किया गया। क्या कोई भी जेली बीन में स्थानीय प्रॉक्सी सर्वर के खिलाफ मीडियाप्लेयर का उपयोग करने में सक्षम था? – user1512464
इस मुद्दे की पुष्टि भी कर सकते हैं (जेली बीन पर)। हम प्रॉक्सी का उपयोग नहीं कर रहे हैं, हालांकि, हम सीधे मीडिया प्लेयर के माध्यम से ऑडियो स्ट्रीम तक पहुंचते हैं। – pulse00
यह जेली बीन में एक रिग्रेशन की तरह दिखता है। मैंने बगट्रैकर पर कोई समस्या बनाई है: https://code.google.com/p/android/issues/detail?id=35790 – pulse00