2009-10-28 12 views
5

मैं का उपयोग कर एक ASP.NET वेब अनुप्रयोग से एक iPhone करने के लिए QuickTime वीडियो स्ट्रीम करने के एक HttpHandler कोशिश कर रहा हूँ IIS का उपयोग कर। आईआईएस 5.1 (विंडोज एक्सपी) से वेब एप्लिकेशन की मेजबानी करते समय, वीडियो प्लेयर खुलता है और फिर त्रुटि को प्रदर्शित करता है 'सर्वर सही तरीके से कॉन्फ़िगर नहीं किया गया है'। हालांकि, आईआईएस 7.5 (विंडोज 7) का उपयोग करते समय, वीडियो ठीक खेलता है।बजाना क्विकटाइम वीडियो HttpHandler और 5.1

उत्पादन वातावरण में चल रहा है 6.0 IIS और एक ही समस्या है, जहां मोबाइल सफारी के माध्यम से iPhone पर वीडियो खेलने के प्रयास उपरोक्त त्रुटि प्रदर्शित करता है है।

मैं HTTP हेडर देख लिया है और वे दो सर्वर के बीच व्यावहारिक रूप से एक ही (जैसे सर्वर हैडर, जो स्पष्ट रूप से अलग होगा के रूप में, कुछ से अलग) दिखाई देते हैं, सिवाय इसके कि वे अलग क्रम में दिखाई हालांकि, मुझे संदेह है कि इससे समस्या पैदा हो रही है।

Google समूह पर this thread के अनुसार, 'स्वीकृति-रेंज: बाइट्स' हेडर जोड़ने से मदद मिल सकती है, हालांकि इससे हमारे लिए कोई फर्क नहीं पड़ता। मैंने बिना किसी किस्मत के ईटाग हेडर भी जोड़ा है।

कोड वास्तव में फ़ाइल को भेजने के लिए जिम्मेदार इस तरह दिखता है:

Context.Response.Buffer = true; 
Context.Response.ContentType = "video/x-m4v"; 

Context.Response.AppendHeader("Content-Disposition", "filename=\"Video.m4v\""); 
Context.Response.AppendHeader("Content-Length", "23456789"); 

Context.Response.AppendHeader("Accept-Ranges", "bytes"); 
Context.Response.AppendHeader("ETag", GetETag(path)); 

Context.Response.TransmitFile(path); 

कोड जो ऊपर फ़ाइलों पहुंचाता सही ढंग से कार्य किया जाना है और वीडियो फ़ाइलों को सभी डेस्कटॉप ब्राउज़र में सही ढंग से वापस खेलते हैं और जब आईआईएस से होस्टिंग प्रकट होता है 7.5 विंडोज 7 पर। आईआईएस 5.1 या आईआईएस 6.0 पर होस्ट किए जा रहे एएसपी.NET वेब एप्लिकेशन के साथ उपरोक्त कोड का उपयोग करके मोबाइल सफारी का उपयोग करके आईफोन पर वीडियो फ़ाइलों को चलाने का प्रयास करते समय समस्या केवल स्पष्ट होती है।

क्या किसी और ने ऐसा कुछ अनुभव किया है और इस काम को पाने के लिए मैं क्या कर सकता हूं इस बारे में कोई विचार नहीं मिला?

+0

स्वीकृति-रेंज टिप ने मुझे एएसपी.नेट एमवीसी के साथ एक ही मुद्दे के साथ मदद की। – kim3er

उत्तर

2

आप Response.Buffer को सत्य क्यों सेट करते हैं?

आप बस "स्वीकार-सीमाओं" शीर्षक नहीं जोड़ जब तक आप यह भी सुनिश्चित करना है कि सर्वर HTTP रेंज अनुरोध का समर्थन करता है सकते हैं। यदि क्लाइंट प्लेयर रेंज अनुरोधों के लिए समर्थन मांगता है और सर्वर उन्हें संभालने से इंकार कर देता है, तो यह तार्किक लगता है कि अनुरोध अस्वीकार कर दिया जाएगा।

आप एक रिवर्स-प्रॉक्सी के रूप में फ़िडलर उपयोग करने का प्रयास करें और देखें कि IPhone एक रेंज अनुरोध करता है हो सकता है। http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp

0

सर्वर से आने वाली सटीक HTTP प्रतिक्रिया का पर्दाफाश करने के लिए फिडलर जैसे कुछ का उपयोग करें। आईफ़ोन ब्राउज़र से मिलान करने के लिए क्लाइंट की उपयोगकर्ता-एजेंट स्ट्रिंग को फ़ज करें (या केवल सफारी का उपयोग करें?) और आईआईएस 5.1 और 7.5 से आउटपुट की तुलना करें। स्पष्ट रूप से प्रतिक्रिया धाराएं समान नहीं हैं या यह दोनों पर काम करेगी।

तुम भी NetMon है, जो एक महान उपकरण है इस्तेमाल कर सकते हैं ... और आप iPhone के साथ ही परीक्षण करने की अनुमति होगी।

खेद है कि मैं आप के लिए एक विशिष्ट जवाब नहीं है, लेकिन मुझे लगता है आप अपने हाथों इस एक के साथ गंदे पाने के लिए करने जा रहे हैं।

+0

सुझावों के लिए धन्यवाद। वीडियो वास्तव में विंडोज़ पर सफारी में ठीक है, और फ़ायरफ़ॉक्स में भी आईफोन उपयोगकर्ता एजेंट स्ट्रिंग का उपयोग करते समय, इसलिए मुझे नहीं लगता कि यह इसके साथ कुछ है। मुद्दा यह दिखता है कि आईआईएस 5/6 आईआईएस 7 के विपरीत फाइलों को ट्रांसमिट कर रहा है, जो आईफोन को खेलने की इजाजत नहीं देता है। पहले नेटवर्क निगरानी उपकरण का उपयोग नहीं किया है, लेकिन नेटमोन/वायर्सहार्क देखेंगे और देखें कि क्या वे मदद कर सकते हैं। – Mun

3

कुछ खोज के बाद, मैं आलेख Range-Specific Requests in ASP.NET पर आया जो कि मेरे पास होने वाली सटीक समस्या का वर्णन करता है। इस साइट से RangeRequestHandlerBase कक्षा को कार्यान्वित करना (हमारी मौजूदा प्रोजेक्ट संरचना में फिट करने के लिए कुछ मामूली संशोधन के साथ) समस्या हल हो गई है, और वीडियो प्लेबैक अब आईआईएस 5/6 से सही ढंग से संचालित होता है।

@Eric - मैंने आपका जवाब ऊपर उठाया है क्योंकि आपकी टिप्पणी सही दिशा में एक झुकाव थी।बस 'स्वीकार्य-रेंज' शीर्षलेख जोड़ना पर्याप्त नहीं था (आईआईएस 7 में काम करने के बावजूद), और http हैंडलर को रेंज अनुरोधों को संभालने के लिए संशोधित करने की आवश्यकता है और यह सुनिश्चित करना है कि सही डेटा भेजा जा रहा है।

संबंधित मुद्दे