我遇到了一些事情,我找不到任何解决方案,我有这个代码:
private void GetFileFromURL(string url,NetworkCredential cred)
{
try
{
using (var client = new WebClient())
{
if (cred != null)
{
//client.Credentials = cred;
}
using (var stream = client.OpenRead(url))
{
int count = 0;
do
{
if (Response.IsClientConnected)
{
//byte[] buf = new byte[500024];
byte[] buf = new byte[500024];
count = stream.Read(buf, 0, 500024);
StreamToClient(buf, count);
}
else
break;
} while (stream.CanRead && count > 0);
Response.End();
}
}
}
catch { }
}
bool isHeaderSent = false;
private void StreamToClient(byte[] bytes,int length)
{
if (!isHeaderSent)
{
Response.Clear();
Response.Buffer = false;
Response.ContentType = "video/mp4";
isHeaderSent = true;
}
Response.OutputStream.Write(bytes, 0, length);
}
此代码位于getVideo.aspx.cs和我用于流式传输mp4文件的代码,它在http上工作得很好,但当我将其更改为https(在iis上)时,我的客户端,客户端都没有得到任何结果我使用这个:
axWindowsMediaPlayer1.URL = videoSource;
其中videoSource类似于:https:// localhost /getVideo.aspx
从我在谷歌上阅读的内容可能是标题的内容,有关使用https时添加特殊标题的内容,但不确定其是否相关。
TY。
答案 0 :(得分:1)
Okis,我为其他遇到同样问题的人写了这个:
Https有一个较短的响应时间窗口,因此,您必须告诉客户端您的数据有多长,以便客户端不会认为流已经结束,您实际需要添加的是那些标头:
Response.AddHeader("content-disposition", "filename=video.mp4");
Response.AddHeader("Content-Length", totalBytes.ToString());
其中totalBytes是一个包含文件中字节数的long,您需要在将文件发送到客户端之前从服务器获取它。