当前位置: 首页 > 编程语言 > C#

流式传输大型video文件.net分享

时间:2023-04-10 15:50:40 C#

C#学习教程:流式传输大型视频文件.net它似乎不起作用,因为它不流式传输文件。相反,它将文件读入内存并将其发送回客户端。我满脑子都在寻找解决方案,解决方案告诉我他们在做同样的事情的同时流式传输文件。我的解决方案是这样的:context.Response.Cache.SetCacheability(HttpCacheability.Public);context.Response.AppendHeader("Content-Type","video/mp4");context.Response.AppendHeader("content-length",file.Length);byte[]buffer=newbyte[1024];while(true){if(context.Response.IsClientConnected){intbytesRead=fileStream.Read(buffer,0,buffer.Length);如果(bytesRead==0)中断;context.Response.OutputStream.Write(buffer,0,bytesRead);context.Response.Flush();}else{休息;}}context.Response.End();发生的是小文件,如果我调试代码,它将播放视频,但直到到达context.Respond.End()行。但是对于大文件,这将不起作用,因为将整个文件存储在内存中会有问题。我有一个类似的问题,视频必须完全下载才能播放。我看得出来你想要流式传输视频,说得更具体些。你必须小心编码(确保它是可流动的)并且不要仅仅依赖扩展,因为创建文件的人可能以奇怪的方式构建视频,但99%的时间你应该没问题。我使用媒体信息。在您的情况下,它应该是H.264。它还取决于浏览器和您用于流式传输的内容(后端代码除外)。就我而言,我使用了Chrome/Html5和.webm(VP8/OggVorbis)。它适用于超过1G的文件。没测大于4G…我用来下载视频的代码:publicvoidVideo(stringfolder,stringname){stringfilepath=Server.MapPath(String.Format("{0}{1}",HttpUtility.UrlDecode(folder),姓名));字符串文件名=名称;System.IO.StreamiStream=null;字节[]缓冲区=新字节[4096];整数长度;长数据读取;尝试{//打开文件。iStream=newSystem.IO.FileStream(文件路径,System.IO.FileMode.Open,System.IO.FileAccess.Read,System.IO.FileShare.Read);//要读取的总字节数:dataToRead=iStream.Length;Response.AddHeader("Accept-Ranges","bytes");Response.ContentType=MimeType.GetMIMEType(名称);int起始字节=0;如果(!String.IsNullOrEmpty(Request.Headers["Range"])){string[]range=Request.Headers["Range"].Split(newchar[]{'=','-'});startbyte=Int32.Parse(范围[1]);iStream.Seek(startbyte,SeekOrigin.Begin);Response.StatusCode=206;Response.AddHeader("Content-Range",String.Format("bytes{0}-{1}/{2}",startbyte,dataToRead-1,dataToRead));}while(dataToRead>0){//验证客户端是否已连接。if(Response.IsClientConnected){//读取缓冲区中的数据。长度=iStream。读取(缓冲区,0,缓冲区。长度);//将数据写入当前输出流。回复。输出流。写入(缓冲区,0,缓冲区。长度);//将数据刷新到HTML输出。回复。同花顺();缓冲区=新字节[缓冲区。长度];dataToRead=dataToRead-buffer.Length;}else{//如果用户断开连接则防止无限循环dataToRead=-1;}}}catch(Exceptionex){//捕获错误,如果有的话。Response.Write("Error:"+ex.Message);}finally{if(iStream!=null){//关闭文件.iStream.Close();}Response.Close();确保您的响应标头包含您需要的所有内容这是C#学习教程:流式传输大型视频文件。.net分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: