हम एक सिल्वरलाइट MediaElement आधारित वीडियो प्लेयर के लिए वीडियो डेटा प्रदान करने के लिए एक FileStreamResult उपयोग कर रहे हैं:ASP.NET MVC FileStreamResult साथ आंशिक सामग्री स्ट्रीम कैसे
public ActionResult Preview(Guid id) {
return new FileStreamResult(
Services.AssetStore.GetStream(id, ContentType.Preview),
"application/octet-stream");
}
दुर्भाग्य से, सिल्वरलाइट वीडियो प्लेयर पूरे वीडियो फ़ाइल डाउनलोड करता है खेलना शुरू करने से पहले। यह व्यवहार अपेक्षित है क्योंकि हमारे Preview
क्रिया आंशिक सामग्री डाउनलोड करने का समर्थन नहीं करती है।
(साइड नोट: यदि फ़ाइल आईआईएस आभासी निर्देशिका में होस्ट की जाती है तो हम वीडियो में किसी भी स्थान पर प्लेबैक शुरू कर सकते हैं, जबकि यह अभी भी डाउनलोड हो रहा है। हालांकि सुरक्षा और ऑडिटिंग कारणों से हम प्रत्यक्ष डाउनलोड लिंक प्रदान नहीं कर सकते हैं। तो यह एक विकल्प नहीं है।)
हम कैसे नियंत्रक कार्रवाई आंशिक HTTP सामग्री का समर्थन करने के सुधार कर सकते हैं?
मुझे लगता है कि हमें पहले क्लाइंट को सूचित करना होगा कि हम इसका समर्थन करते हैं (एक "स्वीकृति-रेंज: बाइट्स" हेडर को हेड अनुरोध में जोड़ना), फिर हमें HTTP "रेंज" हेडर का मूल्यांकन करना होगा और अनुरोधित स्ट्रीम करना होगा 206 के प्रतिक्रिया कोड के साथ फ़ाइल रेंज। क्या यह आईआईएस 6 पर होस्ट किए गए एएसपी.नेट एमवीसी के साथ काम करेगा? क्या पहले से ही कुछ कोड उपलब्ध है?
यह भी देखें:
- http://en.wikipedia.org/wiki/List_of_HTTP_headers
- http://blogs.msdn.com/anilkumargupta/archive/2009/04/29/downloadprogress-downloadprogressoffset-and-bufferprogress-of-the-mediaelement.aspx
- http://benramsey.com/archives/206-partial-content-and-range-requests/