2010-04-22 20 views
12

Ben video içeriğini indirir Aşağıdaki kodu vardır:Asp.net'de video içeriği nasıl yayınlanır?

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(); 
    } 
} 

Ama sorun bütün dosya indirme önce oynanan olmasıdır. Akışı nasıl indirebilirim ve hala indirirken oynarım? Veya bu istemci/alıcı uygulamasına yönetecek mi?

cevap

17

Daha sonra bir kerede tüm bayt dizisi gönderme tek tampon içine dosyanın tamamını okuyorsanız de

bak.

while döngüsünde daha küçük bir arabellek okumalısınız.

Örneğin

:

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

Ahh, işte bu kadar! Teşekkür ederim. Aslında böyle bir şey denedim, ancak çalışmayan kodumu sizinkilerle karşılaştırarak Response.Flush() 'ı yanlış kullandığımı fark ettim. Tekrar teşekkürler, Slaks. – Kon

3

Smooth Streaming'a baktınız mı? Örnek kod here

+0

Örnek kod bağlantısı kesildi. Bu yüzden cevaplar, atıfta buldukları kodu içermeli/kopyalamalıdır. – mbomb007

2

Eğer sunucuda bir dosyadan bir video akışı için ve hatta bu dosya üzerinde başka bir sunucuya

Dosya de barındırılan ihtiyaç özellikle bu sizin için daha verimlidir senin sunucu:

var wc = new WebClient(); 
    context.Response.BinaryWrite(wc.DownloadData(new Uri("http://mysite/video.mp4"))); 
: harici sunucu üzerinde

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

Dosya

+0

cool - ama yine de yığın tamponları uygulamak zorundasınız, aksi takdirde video konteyneri her şey indirilene kadar bekleyecektir. tarayıcını öldürmek .. – ppumkin

İlgili konular