2011-05-23 12 views
16

मैं आईपैड के लिए एक वेब एप्लिकेशन डिज़ाइन कर रहा हूं जो मोबाइल सफारी में HTML5 का उपयोग करता है। मैं IIS 7 पर होस्ट की गई ASP.NET .ashx फ़ाइल के माध्यम से फ़ाइल को मैन्युअल रूप से प्रेषित कर रहा हूं .NET Framework v2.0।मोबाइल सफारी कई वीडियो अनुरोध करता है

आवश्यक कोड आंशिक रूप से इस तरह दिखता है:

// If we receive range header only transmit partial file 
if (context.Request.Headers["Range"] != null) 
{ 
    var fi = new FileInfo(filePath); 
    long fileSize = fi.Length; 

    // Read start/end index 
    string headerRange = context.Request.Headers["Range"].Replace("bytes=", ""); 
    string[] range = headerRange.Split('-'); 
    int startIndex = Convert.ToInt32(range[0]); 
    int endIndex = Convert.ToInt32(range[1]); 

    // Add header Content-Range,Last-Modified 
    context.Response.StatusCode = (int)HttpStatusCode.PartialContent; 
    context.Response.AddHeader(HttpWorkerRequest.GetKnownResponseHeaderName(HttpWorkerRequest.HeaderContentRange), String.Format("bytes {0}-{1}/{2}", startIndex, endIndex, fileSize)); 
    context.Response.AddHeader(HttpWorkerRequest.GetKnownResponseHeaderName(HttpWorkerRequest.HeaderLastModified), String.Format("{0:r}", fi.CreationTime)); 

    long length = (endIndex - startIndex) + 1; 
    context.Response.TransmitFile(filePath, startIndex, length); 
} 
else 
    context.Response.TransmitFile(filePath); 

अब क्या मुझे कोई अंत नहीं करने के लिए भ्रमित निवेदन के साथ कि सफारी का उपयोग करने लगता है के लिए प्रोटोकॉल है। फिडलर के माध्यम से अनुरोधों को प्रॉक्सी करने से मुझे aprox 2MB फ़ाइल के लिए निम्न मिलता है।

Fiddler requests

नोट: जब एक mp4 फ़ाइल का अनुरोध, सीधे आईआईएस 7 के माध्यम से सेवा की, प्रोटोकॉल और अनुरोध की राशि एक ही

  1. पहले यह जो इसे पढ़ने के लिए अनुमति देता है 2 बाइट्स का अनुरोध करता हैं 'सामग्री-रेंज' शीर्षलेख।
  2. अब यह संपूर्ण सामग्री का अनुरोध
  3. (?) -
  4. यह फिर से चरण 1 & 2. करने के लिए आगे बढ़ता है (??)
  5. -
  6. अब यह फ़ाइल के केवल भागों का अनुरोध करता है (???)

यदि फ़ाइल बड़ी है तो अंतिम चरण कई और होंगे। मैंने 99 अनुरोध तक परीक्षण किया है जहां प्रत्येक अनुरोध में फ़ाइल का एक हिस्सा समान रूप से विभाजित होता है। यह समझ में आता है और मुझे उम्मीद है कि मुझे क्या लगता है। मैं समझ नहीं पा रहा हूं कि यह पहले 2 बाइट्स के साथ 2 प्रारंभिक अनुरोध के साथ-साथ पूरी फाइल के लिए 2 अनुरोध करता है इससे पहले कि यह अंततः विभिन्न हिस्सों में फ़ाइल का अनुरोध करता है।

जैसा कि मैंने फ़ाइल की लंबाई के आधार पर फ़ाइल को 2 - 3 बार डाउनलोड किया है और क्या उपयोगकर्ता इसे लंबे समय तक देखता है या नहीं।

क्या कोई इस व्यवहार को समझ सकता है और शायद यह बता सकता है कि मैं एकाधिक डाउनलोड को रोकने के लिए क्या कर सकता हूं। धन्यवाद।

+0

मैं एक ही बात में आए:

यहाँ मेरी मूल (अनुत्तरित) इस विषय पर सवाल है। यह भी आईपॉड और यदि आप एमपी 3 फाइलों से निपट रहे हैं। दुर्भाग्यवश कोई समाधान नहीं ... – worenga

+0

मैंने इसे बहुत बड़े (30meg) वीडियो के साथ देखा है। जब कभी आईपैड से अनुरोध आता है तो पूरी फाइल के लिए 3 अनुरोध! –

+0

MPMoviePlayerController के अंदर एमपी 3 फ़ाइलों के साथ मुझे वही अनुभव मिला है। यहां एक प्रश्न है जिसके बारे में मैंने पूछा कि अनुत्तरित नहीं हुआ। मेरे प्रश्न के अनुरोधों के बारे में थोड़ी अधिक जानकारी है। http://stackoverflow.com/questions/4855485/mpmovieplayercontroller-not-playing-full-length-mp3 – TomSwift

उत्तर

1

आपके प्रश्न पर मेरी टिप्पणी के अनुसार, मुझे अतीत में एक समान समस्या है। एक बात जो आप कोशिश कर सकते हैं यदि आपके पास सर्वर का नियंत्रण है (मैंने नहीं किया) तो फ़ाइल के gzip या पहचान एन्कोडिंग को अक्षम करना है। मेरा मानना ​​है कि पूरी सामग्री के लिए पहले अनुरोध में (आपकी सूची में # 2) यह gzip एन्कोडिंग (संपीड़ित) के साथ सामग्री के लिए पूछता है। शायद आप अपने आईआईएस को एक gzip-एन्कोडिंग अनुरोध के लिए फ़ाइल की सेवा न करने के लिए कॉन्फ़िगर कर सकते हैं।

https://stackoverflow.com/questions/4855485/mpmovieplayercontroller-not-playing-full-length-mp3

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