2010-04-22 17 views
12

मैं निम्नलिखित कोड है जो वीडियो सामग्री डाउनलोड करता है:asp.net में वीडियो सामग्री स्ट्रीम कैसे करें?

WebRequest wreq = (HttpWebRequest)WebRequest.Create(url); 
using (HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse()) 
using (Stream mystream = wresp.GetResponseStream()) 
{ 
    using (BinaryReader reader = new BinaryReader(mystream)) 
    { 
    int length = Convert.ToInt32(wresp.ContentLength); 
    byte[] buffer = new byte[length]; 
    buffer = reader.ReadBytes(length); 

    Response.Clear(); 
    Response.Buffer = false; 
    Response.ContentType = "video/mp4"; 
    //Response.BinaryWrite(buffer); 
    Response.OutputStream.Write(buffer, 0, buffer.Length); 
    Response.End(); 
    } 
} 

लेकिन समस्या यह है कि पूरे फ़ाइल डाउनलोड करने से पहले खेला जा रहा है। मैं इसे स्ट्रीम और प्ले कैसे कर सकता हूं क्योंकि यह अभी भी डाउनलोड हो रहा है? या यह क्लाइंट/रिसीवर एप्लिकेशन को प्रबंधित करने के लिए है?

उत्तर

17

आप एक भी बफर में पूरी फ़ाइल पढ़ रहे हैं तो एक बार में पूरे बाइट सरणी भेजने देखें।

आपको while लूप में एक छोटे बफर में पढ़ना चाहिए।

उदाहरण के लिए:

byte[] buffer = new byte[4096]; 

while(true) { 
    int bytesRead = myStream.Read(buffer, 0, buffer.Length); 
    if (bytesRead == 0) break; 
    Response.OutputStream.Write(buffer, 0, bytesRead); 
} 
+2

आह, यह है! धन्यवाद। मैंने वास्तव में ऐसा कुछ करने की कोशिश की, लेकिन मेरे गैर-कामकाजी कोड की तुलना आपके साथ की, मैंने देखा कि मैं Response.Flush() का दुरुपयोग कर रहा था। धन्यवाद, स्लाक्स। – Kon

3

क्या आपने Smooth Streaming पर देखा है?

नमूना कोड here

+0

नमूना कोड से लिंक मर चुका है। यही कारण है कि उत्तरों में जो भी कोड संदर्भित किया गया है उसे प्रतिलिपि/प्रतिलिपि बनाना चाहिए। – mbomb007

2

यह आप के लिए और अधिक कुशल, खासकर अगर आप अपने सर्वर पर किसी फ़ाइल से कोई वीडियो स्ट्रीम करने या यहाँ तक कि इस फाइल को किसी अन्य सर्वर

फ़ाइल पर पर होस्ट किया गया है की जरूरत है अपने सर्वर:

var wc = new WebClient(); 
    context.Response.BinaryWrite(wc.DownloadData(new Uri("http://mysite/video.mp4"))); 
: बाहरी सर्वर पर

context.Response.BinaryWrite(File.ReadAllBytes(HTTPContext.Current.Server.MapPath(_video.Location))); 

फ़ाइल

+0

कूल- लेकिन आपको अभी भी चंकित बफर लागू करना है अन्यथा वीडियो कंटेनर पूरी चीज डाउनलोड होने तक प्रतीक्षा करेगा। अपने ब्राउज़र को मारना .. – ppumkin

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