C# Response.OutputStream.Flush()-未响应
我正在使用handler(ashx)文件传输视频 获取视频文件流并在while循环中使用outputstream写入字节, 但只有在while循环完成之前,接收的字节才为零C# Response.OutputStream.Flush()-未响应,c#,video-streaming,C#,Video Streaming,我正在使用handler(ashx)文件传输视频 获取视频文件流并在while循环中使用outputstream写入字节, 但只有在while循环完成之前,接收的字节才为零 public class VideoHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { System.Net.WebRequest wreq; System.Net.HttpWe
public class VideoHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
System.Net.WebRequest wreq;
System.Net.HttpWebResponse wresp;
try
{
HttpRequest Request = context.Request;
string OrginalUrl = GetURL();
wreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(OrginalUrl);
wreq.Timeout = 1000 * 60 * 60;
wresp = (System.Net.HttpWebResponse)wreq.GetResponse();
using (Stream mystream = wresp.GetResponseStream())
{
int length = Convert.ToInt32(wresp.ContentLength);
context.Response.Clear();
context.Response.Buffer = false;
context.Response.BufferOutput = false;
context.Response.AddHeader("Content-Type", "application/octet-stream");
context.Response.AddHeader("Content-Length", length.ToString());
byte[] buffer = new byte[512];
if (context.Response.IsClientConnected)
{
while (mystream.CanRead)
{
int bytesRead = mystream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0) break;
context.Response.OutputStream.Write(buffer, 0, bytesRead);
context.Response.OutputStream.Flush();
context.Response.OutputStream.Close();
}
}
String DateValue = DateTime.Now.ToString();
mystream.Close();
}
}
catch (Exception e)
{
}
finally
{
wresp = null;
wreq = null;
}
}
}
这是我的处理程序文件,我缺少什么
这是我的HTML
<video id="videoPlayer1" class="video-js vjs-default-skin" preload="metadata" controls="controls" width="700" height="500"
data-height="500" autoplay="autoplay" >
<source id="source1" src="Handlers/VideoHandler.ashx" type="video/mp4" />
</video>
谢谢使用
context.Response.Flush();
直接的。并且不要关闭输出流
总之,当缓冲关闭时,您根本不需要冲洗
你也应该设置适当的内容类型——HTML5视频播放器往往对此相当挑剔<代码>应用程序/八位字节流可能无法将其切断
当然,您希望支持部分下载,这在提供长视频文件时非常方便:)为什么在
的同时关闭循环中的输出流?为什么要吞咽所有异常?只是尝试了这个“context.Response.OutputStream.Flush();”但是运气不好。@SumoS为什么不试试答案和注释所建议的内容呢?删除了这一行(context.Response.OutputStream.Close()),但没有更改。我在循环中添加了(context.Response.Flush()),但运气不好。你应该设置正确的内容编码-这是什么意思?@SumoS我指的是内容类型。例如,mp4视频的video/mp4
。Luaan,谢谢你的快速响应,我尝试了,但没有成功。@SumoS哦,你为什么要从另一个HTTP请求发送数据?这有什么意义?为什么不直接重定向呢?这只是另一点,你正在失去“流”(并不是说你实际上正在做任何流)。另外,您是否尝试过使用开发人员工具或Wireshark来监控实际通信?你为什么认为而是罪魁祸首?