मेरे पास एक डब्ल्यूसीएफ सेवा है जो वेबगेट के माध्यम से एक स्ट्रीम वापस कर सकती है। यह अब तक ठीक काम कर रहा है। लेकिन मैं जो कार्यान्वित करना चाहता हूं वह रेंज हेडर के लिए समर्थन है, ताकि फ़ाइल के केवल कुछ हिस्सों को वापस कर दिया जा सके। यह मेरा कोड इतनी दूर है:डब्ल्यूसीएफ सेवा - रेंज के साथ फ़ाइलों को स्ट्रीम करने के लिए समर्थन: बाइट्स समर्थन?
public System.IO.Stream GetStream(string mElementID)
{
// build the filePath
FileInfo file = GetFile(mElementID);
try
{
FileStream videoStream = File.OpenRead(file.FullName);
if (request.Headers.AllKeys.Contains("Range"))
{
long startRange = ...; // get the start range from the header
long endRange = ...; // get the end range from the header
videoStream.Position = startRange;
// how can I set the end of the range?
//TODO: Don't forget to add the Content-Range header to the response!
}
WebOperationContext.Current.OutgoingResponse.ContentType = GetMimeType(file);
WebOperationContext.Current.OutgoingResponse.Headers.Add("Accept-Ranges", "bytes");
return videoStream;
}
catch (FileNotFoundException){}
catch (IOException ex)
{
throw ex;
}
// throw a 404
throw new WebFaultException(System.Net.HttpStatusCode.NotFound);
}
मैं सिर्फ एक FileStream बनाते हैं, और लौटाते हैं। अब मुझे आश्चर्य है कि स्ट्रीम की एक श्रृंखला प्राप्त करने का सबसे अच्छा तरीका क्या है।
मुझे लगता है मैं रेंज की शुरुआत मूल्य के लिए videoStream.Position सेट कर सकते हैं, लेकिन क्या सबसे अच्छा तरीका है फ़ाइल फ़ाइल में कहीं में somwehere से एक हिस्सा प्राप्त करने के लिए है?
क्या मुझे मेमोरीस्ट्रीम बनाना है और उसमें प्रासंगिक बाइट्स लिखना है? यहां स्ट्रीम की गई फ़ाइलें वीडियो फ़ाइलें हैं, इसलिए काफी बड़ी हो सकती है।
आपके उत्तर के लिए धन्यवाद, बहुत अच्छी तरह से समझाया गया। जो मुझे चिंता है, वह स्मृति खपत है, क्योंकि वीडियो को पूरी तरह से स्मृति में पढ़ना है। जिस सेवा पर मैं काम कर रहा हूं, उसके पास कई उपयोगकर्ता नहीं होंगे, इसलिए शायद यह कोई समस्या नहीं होगी, लेकिन मैं सोच रहा हूं कि बेहतर तरीका हो सकता है, प्रदर्शन के अनुसार। – Malyngo
आपकी प्रदर्शन चिंताओं के संबंध में एक दूसरा प्रश्न पोस्ट करना सार्थक हो सकता है। स्ट्रीम प्रदर्शन के लिए बहुत अच्छे हैं, और आपके मूल पोस्ट में दिखाए गए कार्यान्वयन के साथ, मुझे विश्वास नहीं है कि आप पूरी स्ट्रीम को स्मृति में लोड कर रहे हैं। मेरे सुझाव के अनुसार केवल बफर। उम्मीद है की वो मदद करदे। – Smudge202